在c#中有效地将EDI解析为数据库

本文关键字:数据库 EDI 有效地 | 更新日期: 2023-09-27 18:03:01

三年多前,我们被要求为客户开发一个紧急的EDI解决方案。

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

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

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

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

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

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

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

我很抱歉我的问题是一般性的,但是我很难找到答案。

非常感谢你的时间。

注意:我们的开发团队只使用微软的产品,所以在给出反馈时请考虑到这一点。

在c#中有效地将EDI解析为数据库

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

在我发布这篇文章后不久,我添加了数据库支持,所以你可以跳过XML,让它直接进入SqL Server数据库。您可以决定将多少段类型解析到单个表中,这样您就不会因为300个表而使数据库膨胀,其中可能只使用10或20个表。这里有一个关于使用xml或SQL Server作为最终系统中介的利弊的讨论。

我怀疑大多数选择编写自己的解决方案的开发人员为EDI到XML的转换编写了自己的类,因为他们的端点集成支持XML(或者他们不能直接写入db,或者希望使用XSLT向最终用户漂亮地显示数据)。我已经编写了"翻译"为CSV和平面文件格式的解析器,因为这就是我们需要导入的内容。我还编写了直接转储到数据库中的解析器。解析为XML通常是作为"中间件"类方法的必要步骤。如果您不需要执行中间步骤,那么为什么要这样做呢?如果您可以将其写入数据库,请务必这样做。你也没有提到你正在做什么文档,我假设你已经在你的应用程序中构建了FA过程。RegEx应该会继续为您工作,有很多方法可以解决问题。

话虽如此,我通常的免责声明仍然适用。你这是在重新发明轮子。由英里。我理解你的委托人的愿望,很高兴你能满足他的需要。坦率地说,我可能会解雇客户:)既然你只使用微软的产品,你就有点束缚了自己。在SO中,BizTalk比其他软件包被讨论得更多。这可能是有原因的,正如你所发现的,它也非常昂贵。我是Liaison Delta的忠实粉丝——它运行在Windows上,核心使用Microsoft Foundation Classes,允许你以BizTalk的一小部分成本进行任意内容的翻译。在我看来,维护拖放"地图"比维护数千行代码更容易,但是,嘿,政策就是政策:)希望这对你有帮助。