8

当社は XML インターフェースなどの最新のテクノロジーを使用する現代的な企業ですが、多くのお客様は、たとえば D96A のような EDIFACT 形式の電子請求書を希望しています。

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

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

それで、誰かがD96Aと言う解釈方法とそれを解析する方法の概要を教えてもらえますか?

4

4 に答える 4

15

EDIFACT の解析は、実際にはそれほど複雑ではありません。構文文字で分割するだけです。最初に at で'セグメントを取得し、+at でそのセグメントのデータ要素を:取得し、 at で個々のコンポーネントを取得します。もちろん、エスケープされた区切り文字に注意する必要があります。ここで使用される文字はデフォルトに過ぎず、オプションの UNA セグメントによってメッセージの先頭で変更できます。実際、 EDIFACT に関するウィキペディアの記事では、かなり良い (ただし簡潔な) 紹介が提供されています。そして、この形式は、国連の UNECE サイトで詳細に文書化されています(そうです、それは多くて読みにくいものです)。

トリッキーな部分は、そこから情報を取得してアプリケーションに取り込むことです (そして、それが有効であることを確認し、適切なエラー メッセージを作成することはそのままにしておきます)。どの言語でも、何もないところから完全なパーサーを作成することを本当に計画している場合は、次のようになります。いいえ、これを行う簡単な方法はありません。他の柔軟なデータ表現もありません。それ困難な作業であり、常にそうなるでしょう。

しかし、ここにアイデアがあります: XML (または他の「最新のテクノロジー」と呼びたい場合...) に興味がある場合。EDIFACT メッセージを統一された XML-EDIFACT-Format に変換するプログラムを作成するのは比較的簡単な作業です (これは非常に恐ろしいことであり、おそらく私をびっくりさせるでしょう)。おそらく次のように、すべての EDIFACT セグメントを 1 つの 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 ハンドブックに従って、受信したメッセージに対して特定の評価プログラム/スキーマ/その他を作成する必要があります。

于 2012-10-24T13:22:55.590 に答える
2

GitHub または SourceForge リポジトリを検索して熟読することをお勧めします。キーワードによるクイック検索: +EDIFACT +D96A には、選択できるいくつかのライブラリが用意されています。実際、これはあなたの場合に有望に見えます:

  • ボット オープン ソース edi トランスレーター、http: //sourceforge.net/projects/bots/ 。プロジェクトの説明によると、これは EDI (Electronic Data Interchange) の完全なトランスレータです。

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 open source EDIFACT parser in Java? .

乾杯!

于 2012-07-31T04:32:10.450 に答える