2012-07-02 10 views
6

私たちはXMLインターフェースのような最新技術を使用している現代の会社ですが、多くのお客様は、例えばD96AのようなEDIFACT形式の電子請求書を欲しがります。例えばD96AのようなEDIFACTを処理する本当に簡単な方法はありますか?

Navisionソフトウェアが使用するC/ALプログラミング言語で書かれていないため、既存のライブラリを使用することはできません。

C/ALで解析するには、その仕様を理解する必要があります。しかし、それは非常に困難で複雑に見えます。

誰かが私にD96Aの解釈の仕方と解析方法の概要を教えてもらえますか?

答えて

0

私はこの質問が古くなっていることを知っていますが、私は顧客のプロジェクトについて少し研究しなければなりませんでした。 Dynamics NAVにはいくつかのアドオンがあります。 Anveo EDI Connectを見てみると、彼らはNAVで直接EDIFACTのインポートとエクスポートを実装しました。他のソリューションは、BMI、Yaveon、Lanhamおよび他のいくつかの企業から入手可能である。また、データを処理するいくつかのサービスプロバイダがあり、単純なXMLまたはファイルベースの構造上でそれらに同意します。

2

私は、GitHubまたはSourceForge reposを通して検索し、熟読することをお勧めします。クイック検索 キーワード:+ EDIFACT + D96Aは、いくつかのライブラリを提供しました。これはあなたのケースのための有望に見える実際に :

  • ボットオープンソースEDIトランスレータ、http://sourceforge.net/projects/bots/。プロジェクトの説明によれば、それはEDI(電子データ交換)の完全な翻訳者だという。

あなたは、常に評価し、Oracle SOA Suiteの11gR1のの一部であるOracleのB2B 11gのチェックアウトすることができます: - 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で詳細に文書化されています(はい、読みにくいです)。

トリッキーな部分は、その外に、アプリケーションに情報を取得することです(との良好なエラーメッセージを作成残すだけで、それが有効だ検証します)。あなたが実際にどの言語のものであれ、何もしないで、comleteパーサーを書くつもりなら、いいえ、これを行う簡単な方法はありません。その他の柔軟なデータ表現はありません。そのであり、常に困難な作業です。

しかし、ここにはアイデアがあります。あなたがそれほど多くのXML(または他の「現代技術」と呼んでいるのですが...)。 EDIFACTメッセージを統一されたXML-EDIFACT-Format(かなり恐ろしいことであり、おそらく私を驚かせるでしょう)に変換するプログラムを書くのは、比較的簡単な作業です。そして、あなたが評価/検証することであなたの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で

ERC+A7V:1:AMD' 
IFT+3+NO MORE FLIGHTS' 

:あなたは多分このように、1つのXMLタグにすべてのEDIFACTセグメントを変換することができますそれ。

また、このように、それはより具体的な行うことができます:

<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ハンドブックに従って、受け取ったメッセージのための特定の評価プログラム/スキーマ/ whaversを作成する必要があります。

関連する問題