8

我们是一家使用现代技术(如 XML 接口)的现代公司,但我们的许多客户都希望我们提供 EDIFACT 格式(如 D96A)的电子发票。

不,我们不能使用现有的库,因为它们不是用我们的 Navision 软件使用的 C/AL 编程语言编写的。

因此,为了在 C/AL 中解析它,我需要了解它的规范。但它看起来非常困难和复杂。

那么有人可以给我一个概述如何解释说 D96A 以及如何解析它吗?

4

4 回答 4

15

解析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 手册,您仍必须为收到的消息创建特定的评估程序/模式/任何内容。

于 2012-10-24T13:22:55.590 回答
2

我建议通过 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 解析器?.

干杯!

于 2012-07-31T04:32:10.450 回答
0

我知道这个问题比较老,但我不得不为客户的项目做一些研究。Dynamics NAV 有几个不错的附加组件。例如,看看Anveo EDI Connect,他们直接在 NAV 中实现了 EDIFACT(以及更多格式)的导入和导出。BMI、Yaveon、Lanham 和其他几家公司提供其他解决方案。还有几个服务提供商处理数据,您同意他们对简单的 XML 或基于文件的结构的看法。

于 2014-06-08T12:45:08.490 回答
0

我偶尔会使用 Talend Open Studio(TOS),它是一个功能丰富的 ETL 工具,可让您直观地构建数据转换作业。然后,当一切正常时,您可以将作业导出为 .bat 或 .sh 文件。很酷的是这个工具支持开箱即用的 EDIFACT。因此,您可以构建一个批处理文件,将 EDI 文件名作为参数并生成您定义的任何输出。

https://help.talend.com/reader/hCrOzogIwKfuR3mPf~LydA/1qBCcoArBu0cDLAgdrMyMA

于 2019-06-26T11:50:47.390 回答