是否有一种非常简单的方法来处理EDIFACT,例如D96A?

时间:2012-07-02 14:20:43

标签: edifact

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

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

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

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

4 个答案:

答案 0 :(得分:10)

解析EDIFACT实际上并不复杂。只需在sytax字符处进行拆分:首先在'获取细分,而不是在+获取细分的数据元素,而在:获取各个组件。当然,你需要照顾逃脱的分离者字符。这里使用的字符只是默认值,可以通过可选的UNA段在消息开头更改。实际上,EDIFACT上的wikipedia article给出了相当不错(但简短)的介绍。并且UN's UNECE site详细记录了格式(是的,这很多,很难阅读)。

棘手的部分是从中获取信息并将其传入您的应用程序(并验证它是否有效,留下创建良好的错误消息)。如果你真的打算用任何语言为所有语言编写一个comlete解析器,那么:不,没有简单的方法可以做到这一点。也没有任何其他灵活的数据表示。 是一项艰巨的任务,而且永远都是。

但是这里有一个想法:如果你对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进行验证更容易。您可以根据需要随意使用此对话,但是您迟早会到达某一点,您需要将当前已解析消息的结构信息放入转换器中(因为它不是一件容易的事情。知道哪些段嵌套到分组它们的其他段中。不仅有UNGUNH等等,还有一些您没有直接看到的段组。

但是,根据您应该获得的EDIFACT手册,您必须为收到的信息创建特定的评估程序/模式/模板。

答案 1 :(得分:2)

我建议通过GitHub或SourceForge repos进行搜索和阅读。快速搜索 关键字:+ EDIFACT + D96A提供了多个库供您选择。 事实上,这看起来很有希望:

您始终可以评估并查看Oracle SOA 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组件通过你的解析UN / EDIFACT消息XML接口。

还有另一个类似的问题和几个答案也适合你: Is there any good open source EDIFACT parser in Java?

干杯!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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