2012-07-02 66 views
6

我们是一家使用XML接口等现代技术的现代化公司,但我们的许多客户需要例如DFPA等EDIFACT格式的电子发票。是否有一个非常简单的方法来处理EDIFACT例如D96A?

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

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

那么有人能给我一个概述如何解释说D96A和如何解析它?

回答

0

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

2

我建议您通过GitHub或SourceForge回购搜索并仔细阅读。快速搜索 与关键字:+ EDIFACT + D96A提供了几个库供选择。 事实上,这看起来很有希望为您的情况:

你可以不断的评估和检查的Oracle B2B11克这是Oracle SOA套件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?

干杯!

9

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

其中一个棘手的部分是将信息从该应用程序中提取出来(并验证它是否有效,只留下创建好的错误消息)。如果你真的打算用无论什么语言编写一个完整的解析器,那么:不,没有简单的方法来做到这一点。也没有任何其他灵活的数据表示。那一个艰巨的任务,并将永远。

但是,这里有一个想法:如果你使用的XML太多(或者任何其他“现代技术”,你喜欢称之为......)。编写一些将EDIFACT消息转换为统一的XML-EDIFACT格式的程序是一件相对容易的事情(这是一件非常可怕的事情,并且很可能让我感到困扰)。你可以每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手册,您将不得不为您收到的信息创建具体的评估程序/模式/发送者。

相关问题