1

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

到目前为止我的计划:

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

问题/疑虑:

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

我可能会以错误的方式解决这个问题吗?将我的 Web 应用程序直接与 xBase DB 连接会更好吗?这种方法立即浮现在脑海中的一些问题是办公室和基于云的虚拟机之间的网络问题,以及将 ERP 直接开放到互联网上的潜在安全漏洞。

您可能能够提供的任何建议或建议将不胜感激!提前致谢。

更新 - 2012 年 9 月 3 日

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

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

这种方法的优点

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

缺点

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

2 回答 2

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 数据。

于 2012-04-17T17:32:01.527 回答
1

我目前正在做类似的事情——我必须通过一个 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。

于 2012-05-16T12:00:38.390 回答