Как связать ERP на основе xBase с веб-приложением? - PullRequest
1 голос
/ 11 марта 2012

Мне необходимо настроить веб-приложение, которое будет взаимодействовать с существующей системой ERP (WinMagi). ERP - это в основном интерфейс для базы данных xBase (FoxPro). База данных находится на внутреннем сервере. Насколько мне известно, ERP не имеет API, но может принимать заказы на покупку и т. Д. Через модуль EDI. Веб-приложение должно иметь возможность принимать онлайн-заказы и запрашивать данные для отчетов.

Мой план на данный момент:

  1. Синхронизируйте базу данных xBase с экземпляром сервера SQL на виртуальной машине, размещенной в облаке.
    • (в одну сторону от ERP -> SQL Server)
  2. Используйте этот процесс синхронизации как интерфейс между ERP и веб-приложением.
  3. Отправка заказов на поставку обратно в ERP с использованием EDI.
    • Здесь я думаю, что с точки зрения параллелизма данных было бы безопаснее создавать или обновлять данные в ERP через контролируемый и принятый (через ERP) интерфейс.

Вопросы / проблемы:

  1. Каков наилучший способ обновления базы данных SQL из базы данных xBase? Существуют ли уже существующие библиотеки, которые могут это сделать, чтобы мне не пришлось изобретать велосипед?
  2. Не блокируется ли база данных xBase во время синхронизации? Или иначе вызвать проблемы для живого ERP?
  3. Как избежать проблем с параллелизмом / целостностью данных во время синхронизации?
  4. Эта система не будет передавать живые данные в веб-приложение. Какие проблемы можно ожидать из-за этого?
  5. Должен ли я предпочесть один язык другому для такого проекта? Я планировал использовать Java / Hibernate MVC.

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

Буду очень признателен за любые советы или предложения, которые вы можете дать! Заранее спасибо.

ОБНОВЛЕНИЕ - 3 сентября 2012

Как я сейчас делаю копию данных (это не синхронизация) - запускается ночью:

  1. Линукс-офис в офисе копирует необходимые DBF из общей папки «только для чтения» на сервере ERP в локальное хранилище.
  2. DBF конвертируются в CSV с помощью фантастического сценария Дэйва Бертона dbf2csv perl
  3. Полученные CSV-файлы rsync'd для удаленной виртуальной машины. В данных есть только небольшие изменения, так что это довольно быстро.
  4. После завершения rsync удаленная виртуальная машина выполняет mysqlimport для производственной БД.

Преимущества этого подхода

  • ERP никак не может быть повреждена, так как доступ к сети только для чтения.
  • Для синхронизации данных не нужно реализовывать пользовательскую логику, и поэтому нет опасений, что данные могут быть неверными на удаленной виртуальной машине.
  • Поскольку копирование данных выполняется ночью, время выполнения не слишком важно.
    • Текущее время выполнения составляет около 7 минут для более 1 миллиона записей с примерно 20-30 полями на запись.
    • Самые длинные фазы - копирование DBF и преобразование в CSV.

Недостатки

  • DBF должны копироваться каждый раз полностью.
  • DBF должны быть преобразованы полностью каждый раз.
  • Копируемые таблицы блокируются во время mysqlimport. Это на самом деле не слишком большая проблема, поскольку импорт выполняется ночью, а mysqlimport занимает всего около 20 секунд.

Ответы [ 2 ]

1 голос
/ 16 мая 2012

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

Я отвечу на вашПервый пункт, основанный на том, что я делаю - вы сами можете решить, будет ли это работать для вас!

Каков наилучший способ обновления базы данных SQL из базы данных xBase?Существуют ли какие-либо уже существующие библиотеки, которые могут это сделать, чтобы мне не пришлось изобретать велосипед?

Я действительно не искал общие библиотеки.То, что я сделал, было (несколько упрощенно):

  1. Добавлено поле в таблицу транзакций на стороне ERP, которое содержит значение CRC32, основанное на других полях, в которые я хочу обнаружить изменения (например,, баланс транзакций).

  2. Написал автономный EXE-файл, который сканирует таблицу транзакций на стороне ERP по таймеру, вычисляет значение CRC32 на основе некоторых полей, сравнивает его с последним значением CRC32сохраняются в новом поле из пункта 1, и если оно отличается, то что-то изменилось, и транзакцию необходимо отправить повторно.Этот EXE был написан на VFP для простоты доступа к файлам DBF и работает как служба Windows.Когда я получу время, это будет сделано в C #.

  3. Все еще в этом EXE-файле, когда у меня есть список новых или измененных транзакций, я конвертирую их в JSON.Я прокрутил свои собственные функции JSON, но вы могли использовать Крейга Бойда из [Sweet Potato Software] [1] или ряд других.С транзакцией может быть связан документ PDF, если он закодирован и встроен в JSON.

  4. Я отправляю JSON в веб-службу на удаленной стороне с помощью класса, которыйиспользует стандартную библиотеку Windows WinHTTP (WinHttp.WinHttpRequest.5.1).Удаленный веб-сервис по сути работает на Java.Он все это декодирует и обновляет SQL Server.

1 голос
/ 17 апреля 2012
  1. Если вы используете Visual Foxpro 3.0 или более позднюю версию, вы можете использовать встроенный контейнер DataBase для создания соединения с БД SQL Server. Затем представления в .DBC будут выполнять тяжелую работу по чтению и обновлению таблиц SQL Server.

  2. Я представляю себе подпрограмму, которая проходит по вашей таблице Foxpro, читает строки и затем обновляет базу данных SQL Server. Таким образом, таблицы Foxpro не должны быть заблокированы. Чтобы убедиться в этом, вы можете сначала запросить DBF в курсор, а затем перебрать курсор.

  3. Я бы предложил добавить процедуру для проверки параллелизма.

Другим вариантом сервера живых данных Foxpro в ваших веб-приложениях было бы создание связанного сервера в SQL Server с вашей базой данных Foxpro. Таким образом, ваши данные Foxpro могут быть доступны в режиме реального времени.

...