Вопрос

Мне нужно разработать CRM-систему, которая позволит пользователям иметь локальную копию базы данных, которая затем может быть синхронизирована с основной серверной системой.Идея заключается в том, что отдел продаж может путешествовать в районы, не подключенные к Интернету, и при этом оперировать относительно актуальной информацией, а затем синхронизировать ее, когда они вернутся в офис.

Я никогда раньше не делал ничего подобного, кто-нибудь может порекомендовать решение для синхронизации?

Это было полезно?

Решение

Поскольку я сам написал именно такую систему, я бы рекомендовал избегать ее, если это возможно.Способов, которыми пользователи могут испортить такую систему, множество, особенно когда пользователями являются сотрудники отдела продаж.CRM-система под названием Act!(вы, вероятно, знакомы с) предлагали такой вариант синхронизации в прошлом, и, возможно, они все еще это делают.Всякий раз, когда моя компания продает товары компании, которая использует систему синхронизации Act!, компания всегда жалуется на поврежденные и неправильно синхронизированные базы данных.

Если вам действительно нужно сделать такую вещь, то я бы рекомендовал репликацию на уровне базы данных (которая не была доступна на момент написания нашего приложения синхронизации).Многие базы данных предлагают репликацию, включая MS-SQL Server.Вы можете устранить многие проблемы, с которыми мы столкнулись, отслеживая изменения на уровне базы данных и возлагая на базу данных ответственность за передачу этих изменений в удаленную базу данных.

Другие советы

Зачем изобретать велосипед? Есть много хороших приложений CRM, которые предлагают эту функциональность. Некоторые из них даже с открытым исходным кодом, поэтому вы можете расширить их. Но если вам просто нужна клиентская база данных с автономными возможностями и синхронизацией, то многие приложения CRM предлагают это. Для клиентской базы данных идеально подойдет Highrise , но я думаю, что нет никаких функций автономной работы / синхронизации. Может быть, посмотрите на SugarCRM , 24SevenOffice или Salesforce ?

А создание приложения синхронизации сложно, так как существует множество проблем, которые необходимо решить с помощью слияния данных. Если вам все еще нужно это сделать, посмотрите SyncML , который является открытым стандартом для синхронизации. , Некоторые готовые к установке инструменты доступны по адресу Funambol .

Возможно, вы захотите взглянуть на Microsoft Synch Framework . Я еще не использовал его, поэтому не могу высказать личного мнения по этому поводу.

MS CRM 4.0 имеет автономные возможности в сочетании с Outlook:

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

Выход в автономный режим имеет свои особенности (убедитесь, что вы выходите из сети до того, как вы оставите хорошее сетевое соединение), но в целом он работает хорошо. Тем не менее, мобильный клиент еще не вышел.

Прежде всего - если CRM будет продуктом, который вы продаете, то, по всей видимости, создайте его - если он предназначен для внутреннего использования, я бы сказал, пусть кто-то другой выдержит боль при решении этих вопросов и просто купит CRM.

Кроме репликации на уровне базы данных, которая, на мой взгляд, недостаточна для решения всех проблем, вам действительно нужно «свернуть свою собственную».

Я пришел в команду, которая планировала некоторые CRM-подобные компоненты системы, и первоначально они планировали использовать репликацию базы данных, потому что это выглядело легко - до тех пор, пока вы не дойдете до разрешения конфликта.

В итоге мы перешли на использование идентификаторов GUID в качестве уникальных идентификаторов, потому что это значительно упростило обработку новых записей, созданных пользователями - в противном случае вы получите неуклюжие схемы разделения числовых идентификаторов для каждой клиентской системы. Дорога в ад.

Ничто не помогает в разрешении конфликтов, когда между синхронизациями происходят изменения, это касается уровня приложения. База данных может получить список транзакций для воспроизведения от Боба, но если он отредактировал то же самое, что и Алиса - какую версию он должен использовать? временных отметок недостаточно, потому что, если Алиса заполняет ее, когда уходит и у нее есть ранняя временная метка, но Боб ждет, пока он обедает, и получает более позднюю временную метку.

Я бы действительно посоветовал прочитать все статьи / записи блога, которые вы можете о синхронизации и разрешении конфликтов - синхронизация проста с высоты 10 000 футов, где вы можете быть волнистыми, но это другая история, когда вы не работаете в грязи.

Вот моя стратегия, когда я запускаю свое собственное решение для синхронизации в прошлом.

<Ол>
  • Ограничение количества операций изменения, которые могут произойти, когда система находится в автономном режиме.
  • Избегайте использования целочисленного автоматического увеличения в качестве первичного ключа, так как это приведет к неприятной проблеме. В прошлом я назначал каждому отключенному клиенту какой-то уникальный идентификатор и использовал этот идентификатор вместе с автоматически генерируемым номером для формирования удобного и читаемого первичного ключа (например, XXX-YYYYYYYY). Это легко сделать, потому что создание последовательного числа тривиально в непараллельной среде.
  • Сохраняйте журнал транзакций, например, каждую операцию DML, которую вы выполняете в автономном режиме, можно «воспроизвести». на сервер. Вы можете оптимизировать этот журнал позже, когда ваши основные потребности в синхронизации будут выполнены.
  • Вы должны принять решение о том, как подготовить клиентское приложение, прежде чем оно перейдет в автономный режим. Типичное решение - заставить пользователя нажать кнопку, чтобы приложение перешло в «автономный режим». Я нашел это решение довольно проблематичным, особенно когда ваш пользователь небрежен и забывчив. На ранних этапах обычно достаточно быстрого пощечины от их руководителей, но позже вы можете реализовать более интеллектуальное интеллектуальное решение.
  • Сначала создайте мое решение из самой простой операции, а затем перейдите к более сложному сценарию. (Операция с одной таблицей, одна запись, несколько таблиц, несколько записей, серия операций, которая должна действовать как транзакция)
  • Составьте сценарий разрешения конфликтов. Убедитесь, что сценарий одобрен вашими пользователями.
  • Излишне говорить, что это болезненное путешествие. Если вы можете передать боль другому участнику (например, приобрести доступные решения CRM), это будет лучшим решением.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top