【问题标题】:How do I interface an xBase based ERP to a web application?如何将基于 xBase 的 ERP 连接到 Web 应用程序?
【发布时间】:2012-03-11 17:28:09
【问题描述】:

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

我目前的计划:

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

问题/疑虑:

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

我是不是走错了路?将我的 Web 应用程序直接与 xBase DB 连接会更好吗?使用这种方法会立即想到的一些问题是办公室和基于云的 VM 之间的网络问题,以及将 ERP 直接开放到 Internet 的潜在安全漏洞。

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

更新 - 2012 年 9 月 3 日

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

  1. 办公室中的 linux 机器将所需的 DBF 从 ERP 服务器上的只读共享复制到本地存储。
  2. 使用 Dave Burton 出色的 dbf2csv perl script 将 DBF 转换为 CSV
  3. 生成的 CSV 将同步到远程 VM。数据只有很小的变化,所以速度很快。
  4. rsync 完成后,远程 VM 会向生产数据库执行 mysqlimport。

这种方法的优点

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

缺点

  • 每次都必须完整复制 DBF。
  • 每次都必须完全转换 DBF。
  • 正在复制的表在 mysqlimport 期间被锁定。这并不是什么大问题,因为导入在夜间运行,而 mysqlimport 只需要大约 20 秒。

【问题讨论】:

  • 我认为像 Talend、CloverETL 或 Pentaho 这样的 ETL 工具非常适合您。这样您就不会重新发明轮子并且能够控制同步。
  • 感谢@Andrew 的建议。我会调查的。您对其他问题/疑虑有任何其他想法吗?您知道 xBase 数据库是否会被锁定并导致内部 ERP 出现问题?
  • 如果您从 xBase DB 中选择,您应该能够使用 NOLOCK 语句。当然,这是一种“脏读”,有一些缺点,但它是一种选择。
  • 我需要构建类似的东西。您找到更好的解决方案了吗?

标签: database synchronization erp edi xbase


【解决方案1】:
  1. 如果您使用 Visual Foxpro 3.0 或更高版本,您可以使用内置的数据库容器来创建到 SQL Server DB 的连接。然后 .DBC 中的视图将完成读取和更新 SQL Server 表的繁重工作。

  2. 我会设想一个循环遍历 Foxpro 表并读取行然后对 SQL Server DB 进行更新的例程。所以,Foxpro 表不应该被锁定。为确保这一点,您可以先将 DBF 查询到游标中,然后遍历游标。

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

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

【讨论】:

  • 谢谢@Jerry。我真的不想继续使用 Visual Foxpro。不过,我确实喜欢链接 SQL Server 的想法。
【解决方案2】:

我目前正在做类似的事情 - 我必须通过一个 Web 应用程序从基于 FoxPro 的系统进行发票交易,该 Web 应用程序将位于运行 SQL Server 的远程托管 VM 上。

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

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

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

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

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

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

  4. 我使用利用标准 Windows WinHTTP 库 (WinHttp.WinHttpRequest.5.1) 的类将 JSON 发送到远程端的 Web 服务。远程 Web 服务本质上是运行 Java。它将全部解码并更新 SQL Server。

【讨论】:

  • 感谢@Alan 的建议。我可能可以实现类似的东西,但想避免对 ERP 表进行更改。请参阅我的问题中的更新以了解我的实施。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多