首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种非常简单的方法来处理EDIFACT,例如D96A?

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

Stack Overflow用户
提问于 2012-07-02 22:20:43
回答 4查看 18.2K关注 0票数 8

我们是一家使用诸如XML接口等现代技术的现代公司,但我们的许多客户希望从我们那里获得电子发票,例如D96A格式的电子发票。

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

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

那么,谁能给我一个概述,比如如何解释D96A,以及如何解析它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-08 20:45:08

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

票数 0
EN

Stack Overflow用户

发布于 2012-10-24 21:22:56

解析EDIFACT实际上并没有那么复杂。只需在sytax字符处进行拆分:首先在'处获取段,然后在+处获取该段的数据元素,然后在:处获取单个组件。当然,您需要处理转义的分隔符。此处使用的字符仅为默认值,可以在消息开头通过可选的UNA段进行更改。实际上,EDIFACT上的wikipedia article对此进行了很好(但简短)的介绍。这种格式在UN's UNECE site上有详细的文档记录(是的,这很多,很难读懂)。

棘手的部分是从其中获取信息并将其放入应用程序(并验证其有效性,更不用说创建正确的错误消息了)。如果你真的打算在任何语言中无中生有地编写一个完整的解析器,那么:不,没有简单的方法可以做到这一点。也不存在任何其他灵活的数据表示。这是一项艰巨的任务,而且永远都会如此。

但是这里有一个想法:如果您对XML (或您喜欢称为它的任何其他“现代技术”)那么着迷的话。编写一些程序将EDIFACT消息转换为某种统一XML-EDIFACT格式将是一项相对容易的任务(这是一件非常可怕的事情,很可能会让我抓狂)。您可以将每个EDIFACT段转换为一个XML标记,可能如下所示:

代码语言:javascript
复制
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'

在XML中:

代码语言:javascript
复制
<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工具和库的力量来验证/评估它。

您还可以执行更具体的操作,如下所示:

代码语言:javascript
复制
<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手册,您必须为您收到的消息创建特定的评估程序/模式/任何东西。

票数 14
EN

Stack Overflow用户

发布于 2012-07-31 12:32:10

我建议搜索并仔细阅读GitHub或SourceForge repos。使用关键字进行快速搜索:+EDIFACT +D96A提供了几个库可供选择。事实上,这看起来对你的情况很有希望:

  • 机器人开源电子数据交换翻译器,http://sourceforge.net/projects/bots/。该项目的描述说它是一个完整的电子数据交换( EDI )的翻译器。

您可以随时评估和查看Oracle Suite11gR1中的OracleSOA11g:- http://www.oracle.com/technetwork/middleware/soasuite/downloads/downloads-085394.html#11g。它有UN/EDIFACT OTD库,我猜你至少可以用它来解析。

一般来说,你最好的选择是选择现有的库,并将其移植到NAV或通过外部接口使用,在外部接口中,数据将流入您的NAV数据库。如果您能够调用.NET代码,那么应该存在过多的现有库,并且只需引用程序集即可实现。因为我不熟悉NAV开发,但是使用某种REST/JSON,不管你的数据传输对象调用机制是什么,都应该是可能的--你的组件B做繁重的工作,你的NAV组件通过你的XML接口拉取解析的UN/EDIFACT消息。

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

edifact navision x12 xml edi d96a

干杯!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11295551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档