Función remota replica y actualización.


([N2] carlosajaime) #1

Hola a todos! necesito de su ayuda, tengo un vserver donde esta la aplicación principal que consolida los datos y las sucursales, que trabajan con un vserver local, lo que quiero hacer es que las sucursales envíen información de ventas, gastos etc y también pueda actualizar las altas y modificaciones que se hacen en el central, esta claro? no he encontrado un ejemplo mas detallado de las funciones remotas. Gracias!!!


([N1] vlinares) #2

Buenos días…
Yo también estoy interesado en un ejemplo al respecto.
Un saludo
Vicente


([N1] wikan) #3

Un ejemplo de una llamada una función es fácil
http://velneo.es/como-hacer-y-usar-funciones-remotas-v7/

http://velneo.es/info_v7_716_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/funcion/

Ahora lo que quieres, necesites enviar o sincronizar es otro tema. Yo he tenido que lidiar mucho con esto y cada caso es distinto por requerimiento.
Para empezar ya los id de las tablas pasan a ser secundarios, por ejemplo, crear un cliente en una sucursal coge un código, creas en otra y tiene el mismo código por ejemplo.
Cuando le envies a la central tendrás que crearlo de nuevo y te devolverá otro código distinto.

Osea, tendrás que buscar el campo único independiente del código, NIF, matrículas, número de documento, etc.

Otra forma de hacerlo, es con una pre-alta en la central. Cuando vayan a crear un cliente nuevo, tienes que lanzar una función remota contra la central para crear el registro-código de ese cliente. Y ese código es el que tienes que asignar al registro que crean en la sucursal.

A todo esto, añade luego la sincronización de datos con el resto de las sucursales. Una vez que llegue ese cliente a la central, debes enviarlo al resto.

Es decir, es un mundo incierto. Debes sentarte y pensar bien:

  • qué, cúando, sincronizas datos
  • El método de transporte de esos datos, función remota, envio de fichero al servidor, etc
  • Tiempo real o diferido
  • Tener en cuenta todo lo que necesitas en las sucursales.

([N2] carlosajaime) #4

Gracias Manuel, Tienes razón, lo que quiero es actualizar las altas que se hagan en el central, de forma automática enviar movimientos entre sucursales y enviar las ventas al central para consolidarlas, creo que donde estoy un poco enredado es en como utilizar las funciones para pasar esos registros, por eso mi afán de encontrar algún ejemplo para poder guiarme.


([N4] Infortic) #5

Una función remota ejecuta una función en un servidor distinto del actual.

Por ejemplo, imagina que quieres dar de alta un cliente desde la central en una delegación.

Crearías una función CREA_CLIENTE_REMOTO, con estilo ejecutable en remoto con parámetros ID_CLIENTE y NOMBRE_CLIENTE (por ejemplo)

Esa función da de alta en la bbdd el cliente con esos parámetros y devuelve en texto si lo ha conseguido o no.

Desde la central, para hacer que se ejecute en la delegación harías algo como:

Set(RESPUESTA_DELEGACION,rfc:CREA_CLIENTE_REMOTO(URL_SERVIDOR_REMOTO,INSTANCIA_SERVIDOR_REMOTO,USUARIO_REMOTO,CONTRASEÑA_REMOTA,CODIGO_CLIENTE,NOMBRE_CLIENTE)

Esto funciona, pero tiene problemas:

1 - El nº de parámetros que le puedes pasar a una función es limitado, si tiene que pasar 100 campos para el alta, no cabrán.
2 - Tendrías que repetirlo por cada cliente (o lo que sea), probablemente sea ineficiente.

Por eso wikan te dice que antes de enredarte, tienes que tener muy claro CUANDO vas a actualizar o mandar los datos, ya que tienes que plantearte cosas como “¿y si no puedo conectar con la delegación que pasa?”

El tema que planteas es bastante complicado, el tema de las colisiones de ID tienes que controlarlo muy bien.

Yo tengo un sistema como el que planteas en una central con 7 tiendas. La central envía los clientes, formas de pago, precios, artículos, …

Las tiendas mandan sus tickets, movimientos de caja, etc…

El sistema que he seguido es el de funciones remotas, pero no envío campo a campo como parámetros de la función, sino que envío un JSON con todos los datos en la misma variable alfabética, el JSON además lleva muchos registros a la vez, a lo mejor 1000 clientes o artículos o tickets a la vez que se procesan en una sóla transacción.

Hay una tabla de bandeja de entrada y otra de salida de paquetes JSON

  • Un proceso genera paquetes JSON para las delegaciones.

  • Otro proceso recorre la bandeja de salida, usando una función remota que introduce el paquete de salida en la bandeja de entrada de la delegación.

  • Otro proceso va procesando los paquetes de la bandeja de entrada.

En las delegaciones igual pero al contrario.

Esa es la forma que he utilizado yo, es la mejor… probablemente no, la más fácil… tampoco.

La verdad, si no te quieres liar yo usaría ficheros de texto, que puedes mandar a las delegaciones por SDV y viceversa, porque para el método que te describo hace falta pelearse mucho con javascript.