Database 如何将基于xBase的ERP连接到web应用程序?

Database 如何将基于xBase的ERP连接到web应用程序?,database,synchronization,erp,edi,xbase,Database,Synchronization,Erp,Edi,Xbase,我需要设置一个与现有ERP系统(WinMagi)交互的web应用程序。ERP基本上是xBase(FoxPro)数据库的前端。数据库位于内部服务器上。据我所知,ERP没有API,但可以通过EDI模块接受采购订单等。web应用程序应该能够接受在线订单并查询用于报告的数据 我目前的计划: 将xBase DB同步到云托管VM上的SQL server实例。 (从ERP->SQL Server单向) 将此同步过程用作ERP和web应用程序之间的接口 使用EDI将采购订单推回到ERP。 我在这里的想法是

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

我目前的计划:

  • 将xBase DB同步到云托管VM上的SQL server实例。
    • (从ERP->SQL Server单向)
  • 将此同步过程用作ERP和web应用程序之间的接口
  • 使用EDI将采购订单推回到ERP。
    • 我在这里的想法是,从数据并发的角度来看,通过受控和可接受(由ERP)接口在ERP中创建或更新数据会更安全
  • 问题/顾虑:

  • 从xBase数据库更新SQL数据库的最佳方法是什么?有没有现成的库可以做到这一点,这样我就不必重新发明轮子了
  • xBase DB在同步过程中会被锁定吗?或以其他方式导致实时ERP出现问题
  • 如何在同步过程中避免数据并发性/完整性问题
  • 该系统不会向web应用程序提供实时数据。因此,我预计会出现什么样的问题
  • 对于这类项目,我应该更喜欢一种语言而不是另一种语言吗?我的计划是使用Java/Hibernate MVC
  • 我是不是走错了路?直接将我的web应用程序与xBase DB连接会更好吗?使用这种方法会立即想到的一些问题是办公室和基于云的虚拟机之间的网络问题,以及直接向互联网开放ERP的潜在安全漏洞

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

    更新-2012年9月3日

    我当前执行数据复制的方式(不是同步)-每晚运行:

  • 办公室中的linux机箱将所需DBF从ERP服务器上的只读共享复制到本地存储
  • DBF使用Dave Burton的“奇妙”转换为CSV
  • 生成的CSV与远程VM进行rsync'd。数据中只有很小的变化,所以这是相当快的
  • rsync完成后,远程VM将mysqlimport导入到生产数据库
  • 此方法的优点

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

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

  • 我将设想一个例程,它在Foxpro表中循环,读取行,然后对sqlserverdb进行更新。因此,Foxpro表不应该被锁定。为了确保这一点,可以首先将DBF查询到游标中,然后循环遍历游标

  • 我建议添加过程来执行并发性检查


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

    我目前正在做类似的事情-我必须通过运行SQL Server的远程托管虚拟机上的web应用程序从基于Foxpro的系统中进行发票交易

    我将根据我所做的回答你的第一点-你可以自己决定它是否对你有用

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

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

  • 在ERP端交易表中添加了一个字段,该字段根据我想要检测的其他字段(例如,交易余额)保存CRC32值

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

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

  • 我使用一个利用标准Windows WinHTTP库的类将JSON发送到远程的web服务