如何将基于xBase的ERP与web应用程序接口



我需要设置一个将与现有ERP系统(WinMagi)交互的web应用程序。ERP基本上是xBase(FoxPro)数据库的前端。数据库位于内部服务器上。据我所知,ERP没有API,但可以通过EDI模块接受采购订单等。web应用程序应该能够接受在线订单并查询用于报告的数据。

到目前为止我的计划:

  1. 将xBase数据库同步到云托管虚拟机上的SQL服务器实例。
    • (从ERP单向->SQL Server)
  2. 将此同步过程用作ERP和web应用程序之间的接口
  3. 使用EDI将采购订单推回ERP。
    • 我的想法是,从数据并发的角度来看,通过(由ERP)控制和接受的接口在ERP中创建或更新数据会更安全

问题/关注点:

  1. 从xBase数据库更新SQL数据库的最佳方式是什么?有没有预先存在的库可以做到这一点,这样我就不必重新发明轮子了
  2. xBase数据库在同步期间会被锁定吗?或者以其他方式导致实时ERP出现问题
  3. 如何避免同步过程中的数据并发/完整性问题
  4. 该系统不会向网络应用程序提供实时数据。因此,我会遇到什么样的问题
  5. 对于这种项目,我应该更喜欢一种语言而不是另一种语言吗?我的计划是使用Java/HHibernate MVC

我是不是走错了路?直接将我的web应用程序与xBase DB接口会更好吗?这种方法立即想到的一些问题是办公室和基于云的虚拟机之间的网络问题,以及直接向互联网开放ERP带来的潜在安全漏洞。

如果您能提供任何建议或建议,我们将不胜感激!!提前谢谢。

更新-2012年9月3日

我目前如何进行数据复制(不是同步)-每晚运行:

  1. 办公室里的一个linux盒子将所需的DBF从ERP服务器上的只读共享复制到本地存储
  2. 使用Dave Burton出色的dbf2csv-perl脚本将DBF转换为CSV
  3. 生成的CSV被rsync到远程VM。数据中只有很小的变化,所以这是非常快的
  4. rsync完成后,远程VM将对生产数据库执行mysqlimport操作

这种方法的优点

  • ERP不能以任何方式损坏,因为网络访问是只读的
  • 不需要实现任何自定义逻辑来同步数据,因此不必担心远程VM上的数据可能出错
  • 由于数据拷贝在夜间运行,因此运行时间并不太重要。
    • 对于超过100万条记录,当前运行时间约为7分钟,每条记录约有20-30个字段
    • 最长的阶段是DBF复制和转换为CSV

缺点

  • DBF每次都必须完整复制
  • DBF每次都必须完全转换
  • 正在复制的表在mysqlimport期间被锁定。不过,这并不是什么大问题,因为导入是在晚上运行的,mysqlimport只需要大约20秒
  1. 如果您使用的是Visual Foxpro 3.0或更高版本,则可以使用内置的数据库容器创建与SQL Server数据库的连接。然后.DBC中的视图将承担读取和更新SQL Server表的重任。

  2. 我会设想一个例程,它在Foxpro表中循环,读取行,然后更新SQL Server数据库。因此,Foxpro表不应该被锁定。为了确保这一点,您可以首先将DBF查询到一个游标中,然后在游标中循环。

  3. 我建议添加过程来进行并发检查。

在web应用程序中服务器实时Foxpro数据的另一个选项是在SQL server中创建一个链接到Foxpro数据库的服务器。这样您的Foxpro数据就可以实时访问。

我目前正在做类似的事情——我必须通过web应用程序从基于FoxPro的系统中获得发票交易,该应用程序将位于运行SQL Server的远程托管虚拟机上。

我会根据我正在做的事情回答你的第一点——你可以自己决定它是否适合你!

从xBase数据库更新SQL数据库的最佳方式是什么?有没有预先存在的库可以做到这一点,这样我就不必重新发明轮子了

我并没有真正寻找任何共享库。我所做的是(有些简化):

  1. 在ERP侧事务表中添加了一个字段,该字段根据我想要检测更改的其他字段(例如,事务余额)保存CRC32值。

  2. 编写一个独立的EXE,该EXE扫描计时器上的ERP侧事务表,根据一些字段计算CRC32值,将其与从点1开始存储在新字段中的最后一个CRC32数值进行比较,如果不同,则说明发生了变化,需要重新发送事务。这个EXE是用VFP编写的,以便于访问DBF文件,它作为Windows服务运行。当我有时间的时候,它将在C#中重新完成。

  3. 仍然在这个EXE中,一旦我有了新的或更改的事务的列表,我就会将它们转换为JSON。我推出了自己的JSON函数,但您可以使用[Sweet Potato Software][1]中的Craig Boyd函数或其他一些函数。可能有一个PDF文档与事务相关,如果是的话,它会被编码并嵌入JSON中。

  4. 我使用一个利用标准WindowsWinHTTP库(WinHTTP.WinHttpRequest.5.1)的类将JSON发送到远程的web服务。远程web服务本质上运行Java。它对所有内容进行解码并更新SQL Server。

最新更新