バックエンド・アプリケーションが認識できるXML形式に一致するようにEDIメッセージを解析および変換できます。 この章の前の項では、B2Bアクションを使用して基本インバウンド統合を作成する方法について説明しました。 この項では、その統合を変更して変換ステップを含める方法について説明します。
以前の統合では、「RESTアダプタ」レスポンスでEDIとXMLのコンテンツが直接返されました。 このユースケースでは、オーダーのモック・バックエンド・アプリケーション・スキーマであるFusionPurchaseOrderを返すように「RESTアダプタ」レスポンス・スキーマを変更します。 接続する実際のバックエンド・アプリケーションがないため、XMLメッセージがコール元に返されます。 この統合をより有用にするために、さらに変更して、変換されたメッセージをバックエンド・アプリケーションに送信するアダプタ起動接続を追加できます。 これを行うと、エンド・ツー・エンドの購買オーダー・フローが作成されます。
統合にはエラー処理も導入されています。 EDI変換が失敗すると、バックエンド・メッセージに変換するかわりにエラーが返されます。
このユースケースについては、次の大まかなステップで説明します。 単一のEDI文書を含む入力を処理します。 EDIバッチ・ファイルを処理するには、「ステージ・ファイル処理を使用したインバウンドEDIバッチ・ファイルの処理」を参照してください。
前の項で作成した統合に対して次の変更を実行します:
- RESTアダプタ・トリガー接続の構成で作成されたReceive-EDIアクション(「RESTアダプタ」トリガー)のレスポンス・スキーマを変更します。
- Receive-EDI要素をクリックし、「編集」を選択します。
- 「レスポンス」タブに移動します。
- レスポンス・ペイロード形式として「XMLスキーマ」を選択し、メディア・タイプとしてXMLを選択します。
- スキーマのロケーションの場合、次の内容の
.xsdファイルをアップロードします:<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/PurchaseOrder" xmlns:tns="http://www.example.org/PurchaseOrder" elementFormDefault="qualified">
<element name="FusionPurchaseOrder"
type="tns:FusionPurchaseOrderType">
</element>
<complexType name="FusionPurchaseOrderType">
<sequence>
<element name="SenderId" type="string"></element>
<element name="orderNumber" type="string"></element>
<element name="orderDate" type="dateTime"></element>
<element name="quoteID" type="string"></element>
<element name="totalAmount" type="float"></element>
<element name="currencyCode" type="string"></element>
<element name="currencyConversionRate" type="float"></element>
<element name="lineItems" type="tns:OrderLineItem" maxOccurs="unbounded" minOccurs="1"></element>
<element name="billingAddress" type="tns:Address"></element>
<element name="shippingAddress" type="tns:Address"></element>
<element name="contact" type="tns:Contact"></element>
</sequence>
</complexType>
<complexType name="OrderLineItem">
<sequence>
<element name="SKU" type="string"></element>
<element name="Quantity" type="float"></element>
<element name="unitOfMeasure" type="string"></element>
<element name="comments" type="string"></element>
<element name="price" type="float"></element>
<element name="amount" type="float"></element>
</sequence>
</complexType>
<complexType name="Address">
<sequence>
<element name="Name" type="string"></element>
<element name="AddressLine1" type="string"></element>
<element name="AddressLine2" type="string"></element>
<element name="AddressLine3" type="string"></element>
<element name="City" type="string"></element>
<element name="State" type="string"></element>
<element name="Country" type="string"></element>
<element name="ZipCode" type="string"></element>
</sequence>
</complexType>
<complexType name="Contact">
<sequence>
<element name="name" type="string"></element>
<element name="phone" type="string"></element>
<element name="email" type="string"></element>
</sequence>
</complexType>
</schema>
- EDI転送アクションの後に切替えアクションを追加します。
- Ifブランチに、次の式を入力します:
$EDI-Translate/nssrcmpr:executeResponse/nsmpr6:TranslateOutput/nsmpr6:translation-status = "Success" or $EDI-Translate/nssrcmpr:executeResponse/nsmpr6:TranslateOutput/nsmpr6:translation-status = "Warning"
ノート:
ネームスペース・プレフィクスには、nssrcmprおよびnsmpr6とは異なる値を含めることができます。
この式は、TranslateOutput > translation-statusの値がSuccessまたはWarningの場合に、このルートを取得することを示します。 これは、successルートと呼ばれます。
- エラー処理のために「エラー・ルート」のOtherwiseブランチをコールします。
- エラー・ルートで、フォルト戻りアクションを追加します。
これにより、フォルト戻りアクションの前にマップが作成されます。
- マップで、
TranslateOutput > validation-errors内の有用なエラー情報をフォルト・エラーの詳細に接続します。 TranslateOutput内の要素の説明は、「B2Bアクション入力および出力スキーマ・リファレンス」を参照してください。
エラー・ルートはメッセージを変換しません(またはバックエンド・アプリケーションに配信するために準備します)。 かわりに、5xxエラーが返されます。
- 成功ルートで、メッセージ変換ステップを追加します。
メッセージ変換は、マップ・アクションを使用して実行されます。
- マップおよびリターン・アクションをこのルートに追加します。
このマップには、EDI-XMLオーダーからFusionPurchaseOrderへのかなり複雑なマッピングがあります。 このマッピングを実行するには、ターゲット・アプリケーション・スキーマおよびEDI X12スキーマに関する専門知識が必要です。
要素は、X12 BEGセグメントとREFセグメント、PO1ループのオーダー明細アイテム、および最後近くのCTTセグメントとAMTセグメントのオーダー要約からマップされます。
FusionPurchaseOrderスキーマはEDI X12スキーマで定義されているリッチ構造よりも小さく、比較的単純であるため、EDI-XMLスキーマのすべての要素がマップされるわけではありません。 このマップは、EDI-XMLメッセージを、バックエンド・アプリケーションで直接使用する準備ができたFusionPurchaseOrderメッセージに変換します。
- 統合をアクティブ化し、
postmanなどのRESTクライアントを使用して、次のEDI X12 850オーダーを送信します:
ISA|00| |00| |01|111111T |01|22222 |190312|0845|U|00401|000001894|0|T|~
GS|PO|0124578|ACME|20190312|084515|0123456|X|004010
ST|850|1234
BEG|00|NE|PO-4503000||20190312|QO-1032
CUR|2L|USD|1.0000
REF|IT|999|Global Chips
REF|WO|P8923.5
REF|KY||Standard Terms and conditions will apply
PER|BD|JAMES SMITH|TE|1112223333|EM|jamess@globalchips.com
FOB|PC|OR|ORIGIN FREIGHT COLLECT|02|FOB
ITD||3|||||10|||||P03R
DTM|002|20190329
TD5|B||05||Ground
N1|BT|Global Chips
N2|ACCOUNTS PAYABLE
N3|P.O. BOX 1111
N4|NEW YORK|NY|10001|US
PO1|00001|1|EA|74.99|PE|BP|5566|VN|AB-1264
PID|F||||AB-1264 BRACKET ASSY WITH SPRING
PO1|00002|1|EA|25.00|PE|BP|7264|VN|DE-1834
PID|F||||DE-1834 GEAR BOX PACKAGE
CTT|2|2
AMT|TT|99.99
SE|22|1234
GE|1|0123456
IEA|1|000001894
次のXMLメッセージを含むレスポンスを受信します:
<tns:FusionPurchaseOrder xmlns:tns="http://www.example.org/PurchaseOrder">
<tns:SenderId>111111T</tns:SenderId>
<tns:orderNumber>PO-4503000</tns:orderNumber>
<tns:orderDate>20190312</tns:orderDate>
<tns:quoteID>QO-1032</tns:quoteID>
<tns:totalAmount>99.99</tns:totalAmount>
<tns:currencyCode>USD</tns:currencyCode>
<tns:currencyConversionRate>1.0000</tns:currencyConversionRate>
<tns:lineItems>
<tns:SKU>AB-1264</tns:SKU>
<tns:Quantity>1</tns:Quantity>
<tns:unitOfMeasure>EA</tns:unitOfMeasure>
<tns:comments>AB-1264 BRACKET ASSY WITH SPRING</tns:comments>
<tns:price>74.99</tns:price>
</tns:lineItems>
<tns:lineItems>
<tns:SKU>DE-1834</tns:SKU>
<tns:Quantity>1</tns:Quantity>
<tns:unitOfMeasure>EA</tns:unitOfMeasure>
<tns:comments>DE-1834 GEAR BOX PACKAGE</tns:comments>
<tns:price>25.00</tns:price>
</tns:lineItems>
<tns:billingAddress>
<tns:Name>Global Chips</tns:Name>
<tns:AddressLine1>ACCOUNTS PAYABLE</tns:AddressLine1>
<tns:AddressLine2>P.O. BOX 1111</tns:AddressLine2>
<tns:AddressLine3/>
<tns:City>NEW YORK</tns:City>
<tns:State>NY</tns:State>
<tns:Country>US</tns:Country>
<tns:ZipCode>10001</tns:ZipCode>
</tns:billingAddress>
<tns:contact>
<tns:name>JAMES SMITH</tns:name>
<tns:phone>1112223333</tns:phone>
</tns:contact>
</tns:FusionPurchaseOrder>
- ネガティブ・ケースをテストするには、行1を変更し、
ISAを他の文字に置き換えて送信します。 これにより、統合でエラー・ルートが取得されます。 次の内部エラーを含むエラー・メッセージとともにHTTP Error 500が返されます: B2B-01858: Not an EDI X12 native document since the first 3 characters are not 'ISA' (found: 'SDS')
結論として、Oracle Integrationを使用して、インバウンドEDIメッセージを受け入れ、解析し、EDIで構文エラーをチェックして変換し、バックエンド・アプリケーションに送信できます。