2

3 多年前,我们被要求为客户开发 EDI 解决方案作为紧急事项。

他们想要解决方案的完整 IP/控制等,并且不想使用免费的开源解决方案、为 BizTalk 等支付大笔资金或向 VAN 支付经常性费用。

我们当时做了一些研究,实际上并没有找到很多关于 EDI 格式、解析等的信息,所以我们的 2 人开发团队直接介入并在 C#/ASP.Net 中开发了一个解决方案。由于将发生的 EDI 消息事务数量很少(每天大约 100 个),我们采用了 RegEx 流程来解析、验证和插入数据库。这是通过一个单独的 C# 应用程序完成的,该应用程序计划每隔几分钟运行一次,并连接到客户端各种提供商 FTP、AS2、EBMX 通信和下载数据以及上传任何出站 EDI 消息。

然后,我们开发了一个网络前端,允许客户员工通过各种收入报告完全访问数据,控制数据以及允许一些客户代理登录并与数据交互并启动发票交易也。

客户现在希望为他们的业务的另一条途径完成更多的 EDI 工作,然而,这一次 edi 消息事务将跃升至 1000 多个。我们的开发团队关注的是 RegEx 的使用。我最近读到,使用 RegEx 进行 EDI 解析会产生巨大的开销,应该避免。

我们最初采用它的唯一原因是缺乏经验,不知道什么是最好用的。也就是说,RegEx 使管理 edi 消息模板变得轻而易举,包括模板内的验证。客户在他们的书籍中添加了更多提供者,我们能够在几分钟内添加新的消息模板(带有自定义更改)。

经过最近的更多研究,我们发现大多数解决方案都将 EDI 文件解析为 XML。是否有一个原因?这只是为了采用更常见的格式和/或避免数据库访问吗?仅通过平面文件 EDI 消息解析 XML 是否更快?

我们希望 EDI 文件中的数据元素在数据库中吗?我们是否只解析 XML 文件?这不只是另一个可以避免的处理步骤吗?

我为我的问题的一般性质道歉,但我很难找到答案。

非常感谢您的时间。

注意:我们的开发团队仅使用 Microsoft 产品,因此请在提供反馈时考虑到这一点。

4

2 回答 2

11

大约 3 年前,我还创建了一个 x12 解析器,它将 x12 edi 解析为 xml。它目前在http://x12parser.codeplex.com上以开源形式提供. 我这样做的原因是我希望解析部分不关心目标,无论是数据库还是平面文件。事实证明这很有价值,因为一些用户使用 Oracle 而不是 Sql Server,并且许多用户将其扁平化为平面文件以加载到他们的数据库或发送到某些下游进程。我认为这使得解析器本身对于许多环境都非常灵活。我喜欢 XML 的另一个原因是,我能够添加其他注释,这些注释对于没有记住所有 EDI 代码的任何人(基本上每个人)都很有价值,并且我能够将其转换为 HTML(请参阅站点以获取示例)与这些注释。我还内置了将您的对象拆分为单个消息的能力,以便您的后期处理一次可以使用一个对象。很多用户帮我优化了它,让它可以处理大文件,所以它变得相当稳定。我现在正在对其进行一些维护,以便它支持所有 4010 事务。关于解析到数据库的部分我留给用户,因为每个人似乎都对他们如何设计数据表非常挑剔(例如,对于是否使用整数或 GUID 作为表标识,我无法与同事达成一致,倾向于 DBA 心态的人更喜欢 int,使用大量 ORM 的人更喜欢 GUID)。

在我发布这篇文章后不久,我确实添加了数据库支持,因此您可以跳过 XML 并将其直接转到 Sql Server 数据库。您可以决定将多少段类型解析到单个表中,这样您就不会因为 300 个表而使您的数据库膨胀,而您可能只会使用 10 个或 20 个表。这里有一个讨论SQL Server as Staging Environment关于优点和使用 xml 或 sql server 作为最终系统的中介的缺点。

于 2013-03-19T02:19:02.147 回答
4

我怀疑大多数选择编写自己的解决方案的开发人员都编写了自己的用于 EDI 到 XML 转换的类,因为他们的端点集成支持 XML(或者他们不能直接写入数据库,或者想使用 XSLT 向最终用户展示数据很好)。我已经编写了“翻译”成 CSV 和平面文件格式的解析器,因为这是我们需要导入的。我还编写了解析器以直接转储到数据库中。对于某些“中间件”方法来说,解析成 XML 通常是一个必要的步骤。如果你不需要做中间步骤,那你为什么要做呢?如果您可以将其写入数据库,请务必这样做。你也没有提到你在做什么文件,我假设你已经在你的应用程序中建立了 FA 流程。

话虽如此,我通常的免责声明适用。你在这里重新发明轮子。以英里为单位。我理解您客户的愿望,很高兴您能够满足需求。坦率地说,我可能会解雇客户 :) 因为您只使用 Microsoft 产品,所以您有点自闭了。环顾四周,BizTalk 比其他软件包讨论得更多。这可能是有原因的,正如您发现的那样,它也非常昂贵。我是 Liaison Delta 的忠实粉丝 - 在 Windows 上运行,在其核心使用 Microsoft 基础类,并允许您以 BizTalk 成本的一小部分进行任意翻译。在我看来,维护拖放“地图”比维护数千行代码更容易,但是,政策就是政策 :) 希望这会有所帮助。

于 2013-03-08T15:19:21.460 回答