我们是一家使用现代技术(如XML接口)的现代化公司,但我们的许多客户都想要我们的电子发票,例如D96A等EDIFACT格式.
不,我们不能使用现有的库,因为它们不是用我们的Navision软件使用的C/AL编程语言编写的.
因此,为了在C/AL中解析它,我需要了解它的规范.但它看起来非常困难和复杂.
那么有人可以给我一个概述如何解释说D96A以及如何解析它?
kra*_*nko 10
解析EDIFACT实际上并不复杂.只需在sytax字符处分开:首先'获取段,然后获取段的+数据元素,然后:获取各个组件.当然,你需要照顾逃脱的分离者字符.这里使用的字符只是默认值,可以通过可选的UNA段在消息开头更改.实际上,关于EDIFACT 的维基百科文章给出了相当不错(但简短)的介绍.在联合国UNECE网站上详细记录了这种格式(是的,这很多,很难阅读).
棘手的部分是从中获取信息并将其输出到您的应用程序中(并验证它是否有效,留下创建良好的错误消息).如果你真的打算用任何语言为所有语言编写一个comlete解析器,那么:不,没有简单的方法可以做到这一点.也没有任何其他灵活的数据表示.这是一项艰巨的任务,而且永远都是.
但是这里有一个想法:如果你对XML这么多(或者你喜欢称之为任何其他"现代技术"......).编写一些程序将EDIFACT消息转换为统一的XML-EDIFACT-Format(这是一件非常可怕的事情并且很可能让我感到惊讶)是一个相对容易的任务.您可以将每个EDIFACT段转换为一个XML标记,可能是这样的:
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
然后,您可以释放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>
Run Code Online (Sandbox Code Playgroud)
这可以通过XSD进行验证更容易.您可以根据需要随意使用此对话,但是您迟早会到达某一点,您需要将当前已解析消息的结构信息放入转换器中(因为它不是一件容易的事情.知道哪段嵌套到其他段对它们进行分组.这里不仅是UNG,UNH等,但也有一些段组,你不能直接看到).
但是,根据您应该获得的EDIFACT手册,您必须为收到的消息创建特定的评估程序/模式/模板.
小智 0
我知道这个问题比较老,但我必须为客户的项目做一些研究。Dynamics NAV 有几个不错的附加组件。例如,看看Anveo EDI Connect,他们直接在 NAV 中实现了 EDIFACT(以及更多格式)的导入和导出。BMI、Yaveon、Lanham 和其他几家公司还提供其他解决方案。还有一些处理数据的服务提供商,并且您同意他们使用简单的 XML 或基于文件的结构。
| 归档时间: |
|
| 查看次数: |
15782 次 |
| 最近记录: |