我们是一家使用现代技术(如 XML 接口)的现代公司,但我们的许多客户都希望我们提供 EDIFACT 格式(如 D96A)的电子发票。
不,我们不能使用现有的库,因为它们不是用我们的 Navision 软件使用的 C/AL 编程语言编写的。
因此,为了在 C/AL 中解析它,我需要了解它的规范。但它看起来非常困难和复杂。
那么有人可以给我一个概述如何解释说 D96A 以及如何解析它吗?
我们是一家使用现代技术(如 XML 接口)的现代公司,但我们的许多客户都希望我们提供 EDIFACT 格式(如 D96A)的电子发票。
不,我们不能使用现有的库,因为它们不是用我们的 Navision 软件使用的 C/AL 编程语言编写的。
因此,为了在 C/AL 中解析它,我需要了解它的规范。但它看起来非常困难和复杂。
那么有人可以给我一个概述如何解释说 D96A 以及如何解析它吗?
解析EDIFACT其实没那么复杂。只需在语法字符处拆分:首先在'
获取段,然后在获取该段的+
数据元素,然后在:
获取各个组件。当然,您需要处理转义的分隔符。这里使用的字符只是默认值,它们可以在消息的开头通过可选的 UNA 段进行更改。实际上,关于 EDIFACT 的维基百科文章对此进行了很好的(但简短的)介绍。并且该格式在联合国的 UNECE 网站上有详细记录(是的,这很多而且难以阅读)。
棘手的部分是从中获取信息并进入您的应用程序(并验证它是否有效,更不用说创建好的错误消息了)。如果你真的打算用任何语言从无到有地编写一个完整的解析器,那么:不,没有简单的方法可以做到这一点。也没有任何其他灵活的数据表示。这是一项艰巨的任务,而且永远都是。
但这里有一个想法:如果您对 XML 感兴趣(或任何其他“现代技术”,您喜欢称之为......)。编写一些将 EDIFACT 消息转换为某种统一的 XML-EDIFACT-Format 的程序将是一项相对容易的任务(这是一件非常可怕的事情,很可能会吓到我)。您可以将每个 EDIFACT 段转换为一个 XML 标记,可能像这样:
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
在 XML 中:
<segment qualifier="ERC">
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment>
<segment qualifier="IFT">
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment>
然后,您可以释放您的 XML 工具和库的力量来验证/评估它。
您还可以更具体地执行此操作,如下所示:
<segment_ERC>
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment_ERC>
<segment_IFT>
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment_IFT>
这可以使通过 XSD 的验证更容易。当然,您可以通过此对话获得尽可能具体的信息,但是您迟早会遇到一个问题,即您需要将有关当前已解析消息结构的信息放入转换器中(因为这并非易事知道哪些段嵌套到对它们进行分组的其他段中。不仅有UNG
,UNH
等,还有一些您不直接看到的段组)。
尽管如此,根据您应该作为文档获得的 EDIFACT 手册,您仍必须为收到的消息创建特定的评估程序/模式/任何内容。
我建议通过 GitHub 或 SourceForge repos 搜索和阅读。使用关键字快速搜索:+EDIFACT +D96A 提供了几个库可供选择。实际上,这对您的情况很有希望:
您可以随时评估和查看 Oracle B2B 11g,它是 Oracle SOA Suite 11gR1 的一部分:- http://www.oracle.com/technetwork/middleware/soasuite/downloads/downloads-085394.html#11g。它有 UN/EDIFACT OTD 库,我猜您至少可以将其用于解析。
通常,您最好的选择是选择现有的库并将其移植到 NAV 或通过外部接口使用,数据流入您的 NAV 数据库。如果您能够调用 .NET 代码,那么应该存在大量现有库,并且只需引用程序集即可。因为我不熟悉 NAV 开发,但无论您的数据传输对象调用机制是什么,都应该使用某种 REST/JSON - 您的组件 B 完成繁重的工作,而您的 NAV 组件通过您的XML 接口。
还有另一个类似的问题和几个答案也可能适合您: Java 中有没有好的开源 EDIFACT 解析器?.
edifact navision x12 xml edi d96a
干杯!
我知道这个问题比较老,但我不得不为客户的项目做一些研究。Dynamics NAV 有几个不错的附加组件。例如,看看Anveo EDI Connect,他们直接在 NAV 中实现了 EDIFACT(以及更多格式)的导入和导出。BMI、Yaveon、Lanham 和其他几家公司提供其他解决方案。还有几个服务提供商处理数据,您同意他们对简单的 XML 或基于文件的结构的看法。
我偶尔会使用 Talend Open Studio(TOS),它是一个功能丰富的 ETL 工具,可让您直观地构建数据转换作业。然后,当一切正常时,您可以将作业导出为 .bat 或 .sh 文件。很酷的是这个工具支持开箱即用的 EDIFACT。因此,您可以构建一个批处理文件,将 EDI 文件名作为参数并生成您定义的任何输出。
https://help.talend.com/reader/hCrOzogIwKfuR3mPf~LydA/1qBCcoArBu0cDLAgdrMyMA