Pregunta

Necesito desarrollar un sistema CRM que permita a los usuarios tener una copia local de la base de datos que luego se pueda sincronizar con el sistema del servidor principal. La idea es que un equipo de ventas pueda viajar a áreas no habilitadas para Internet y seguir operando con información relativamente actualizada y luego sincronizarse cuando regresen a la oficina.

Nunca he hecho algo como esto antes, ¿alguien puede recomendar una solución de sincronización?

¿Fue útil?

Solución

Habiendo escrito un sistema así, yo recomendaría evitarlo si es posible. Las formas en que los usuarios pueden estropear un sistema de este tipo son infinitas, especialmente cuando los usuarios son el equipo de ventas. Un sistema CRM llamado Act! (probablemente esté familiarizado) ha ofrecido una opción de sincronización en el pasado, y tal vez aún lo hagan. Cada vez que mi empresa está vendiendo a una empresa que ha estado utilizando el sistema de sincronización de Act!, La empresa siempre se queja de bases de datos corruptas y mal sincronizadas.

Si realmente necesita hacer algo así, le recomendaría la replicación a nivel de base de datos (que no estaba disponible en el momento en que escribimos nuestra aplicación de sincronización). Muchas bases de datos ofrecen replicación, incluido MS-SQL Server. Puede eliminar muchos de los problemas que experimentamos al rastrear los cambios a nivel de la base de datos y hacer que la base de datos sea responsable de transportar esos cambios a una base de datos remota.

Otros consejos

¿Por qué reinventar la rueda? Hay muchas buenas aplicaciones CRM disponibles que ofrecen esta funcionalidad. Algunos incluso son de código abierto para que pueda ampliarlos. Pero si solo necesita una base de datos de clientes con capacidades y sincronización fuera de línea, muchas aplicaciones CRM lo ofrecen. Solo para la base de datos del cliente Highrise sería perfecto, pero creo que no hay funciones sin conexión / sincronización. Tal vez mire SugarCRM , 24SevenOffice o Salesforce ?

Y crear una aplicación de sincronización es difícil ya que hay muchos problemas que resolver con la fusión de datos. Si aún necesita hacerlo, eche un vistazo a SyncML , que es un estándar abierto para la sincronización . Algunas herramientas listas para instalar están disponibles en Funambol .

Es posible que desee echar un vistazo al Microsoft Synch Framework . Todavía no lo he usado, así que no puedo dar una opinión personal al respecto.

MS CRM 4.0 tiene capacidades sin conexión cuando se combina con Outlook:

http://www.microsoft.com/dynamics/crm/product /overview.mspx

Desconectarse tiene su propio conjunto de rarezas (asegúrese de desconectarse antes de dejar su buena conexión de red), pero en general funciona bien aquí. Sin embargo, las cosas del cliente móvil aún no están disponibles.

En primer lugar, si el CRM va a ser un producto que vendes, en general, compóngalo; si es para uso interno, diría que alguien más soportará el dolor de resolver estas preguntas y simplemente comprar un CRM.

Aparte de la replicación a nivel de la base de datos, que no creo que sea suficiente para resolver todo, realmente necesitará 'rodar la suya'.

Entré en un equipo que planeaba algunos componentes de un sistema tipo CRM, e inicialmente planearon usar la replicación de la base de datos porque parecía fácil, hasta que llegaste a la resolución del conflicto.

Al final, cambiamos al uso de GUID como identificadores únicos porque hizo que el manejo de nuevos registros creados por los usuarios fuera mucho más simple; de ??lo contrario, terminará con estos esquemas de partición de ID numéricos incómodos para cada sistema cliente. Camino al infierno.

Nada ayuda con la resolución de conflictos cuando se realizan cambios entre sincronizaciones, es una preocupación a nivel de aplicación. La base de datos podría obtener una lista de transacciones para que Bob las repita, pero si editara las mismas cosas que Alice, ¿qué versión debería usar? las marcas de tiempo no son suficientes porque qué pasa si Alice llena la suya a medida que avanza y tiene una marca de tiempo temprana, pero Bob espera hasta que esté almorzando y obtiene una marca de tiempo posterior.

Realmente sugeriría leer todos los artículos / entradas de blog que pueda sobre sincronización y resolución de conflictos: la sincronización es simple desde una altura de 10,000 pies donde puede estar completamente ondulado, pero es una historia diferente cuando está caído en el lodo.

Aquí está mi estrategia cuando lanzo mi propia solución de sincronización en el pasado.

  1. Limitar el número de operaciones de cambio que pueden ocurrir cuando el sistema está fuera de línea.
  2. Evite usar el entero de incremento automático como clave principal ya que esto conducirá a un problema desagradable. En el pasado, he asignado a cada cliente desconectado una identificación única, y la uso junto con el número generado automáticamente para formar una clave primaria agradable y legible (como XXX-AAAAAAA). Esto es fácil de hacer porque crear un número secuencial es trivial en un entorno no concurrente.
  3. Mantenga un registro de transacciones, como cada operación DML que realiza durante la desconexión puede "reproducirse" al servidor Puede optimizar este registro más adelante cuando se hayan satisfecho sus necesidades básicas de sincronización.
  4. Debe tomar una decisión sobre cómo preparar su aplicación cliente antes de que se desconecte. Una solución típica es obligar a su usuario a presionar un botón para activar la aplicación para ingresar al "modo fuera de línea". Encontré que esta solución es bastante problemática, especialmente cuando su usuario es descuidado y olvidadizo. Una rápida palmada en la cabeza de sus gerentes generalmente es suficiente en las primeras etapas, pero puede optar por implementar una solución inteligente más inteligente más adelante.
  5. Desarrolle mi solución desde la operación más simple primero, y luego avance hasta un escenario más complejo. (Operación de registro único de tabla única, operaciones de registros múltiples de tablas múltiples, serie de operaciones que deben actuar como una transacción)
  6. Cree un escenario de resolución de conflictos. Asegúrese de que el escenario sea aprobado por sus usuarios.

No hace falta decir que es un viaje doloroso. Si puede externalizar el dolor a otra parte (como comprar soluciones CRM disponibles), eso será lo mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top