このトピックの指示を使用して、COBOL サンプルを作成できます。 代わりに、完成している DFDL スキーマ、アプリケーション、およびライブラリーをそのサンプルにインポートすることもできます。
このサンプルは、アプリケーションとライブラリーを使用して、サンプルの成果物を格納します。最初に、以下のようにライブラリーを作成します。
COBOLLibrary という名前のライブラリーが作成され、「ブローカー開発」ビューに表示されます。
これでライブラリーが作成されたため、次にアプリケーションを作成します。
COBOLApplication という名前のアプリケーションが作成され、「ブローカー開発」ビューに表示されます。
このセクションでは、COBOL コピーブックをインポートして、このサンプルで使用される DFDL スキーマ・ファイルを作成する方法について説明します。 以下の COBOL コピーブックをワークスペース内に保存します。
これらの COBOL コピーブックごとに DFDL スキーマ・ファイルを作成するには、以下のようにします。
DFDL スキーマ・ファイルが作成され (ファイル拡張子 .xsd)、ライブラリー COBOLLibrary の「スキーマ定義」フォルダーに表示されます。3 つの COBOL コピーブックごとに、これらのステップを繰り返します。
DFDL スキーマ・ファイル OrderList.xsd および PurchaseData.xsd をこのサンプルで使用するには、まず各選択エレメントに判別プログラムを追加する必要があります。
必要な判別プログラムを OrderList.xsd に追加するには、次のようにします。
必要な判別プログラムを PurchaseData.xsd に追加するには、次のようにします。
この時点で、次のような 3 つの DFDL スキーマ・ファイルがあります。
この時点で、サンプル・データのテスト解析を実行することにより、DFDL スキーマ・ファイルをテストできます。 テスト入力データの構文解析による DFDL スキーマのテストを参照してください。
このサンプルで使用されている OrderList2PurchaseData メッセージ・フローを作成するには、次のようにします。
ノード | ページ | プロパティー | 値 |
---|---|---|---|
MQInput | 基本 | キュー名 | ORDERLIST.IN1 |
入力メッセージ構文解析 | メッセージ・ドメイン | DFDL | |
入力メッセージ構文解析 | メッセージ・モデル | OrderList.xsd | |
入力メッセージ構文解析 | メッセージ | {}OrderList.xsd | |
MQInput | 基本 | キュー名 | XMLORDERLIST.IN1 |
入力メッセージ構文解析 | メッセージ・ドメイン | XMLNSC | |
入力メッセージ構文解析 | メッセージ・モデル | OrderList.xsd | |
MQOutput | 基本 | キュー名 |
PURCHASEDATA.OUT1 |
CREATE COMPUTE MODULE OrderList2PurchaseData_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); SET OutputRoot.DFDL.PurchaseData.InvoiceCount = InputRoot.DFDL.OrderList.InvoiceCount; SET OutputRoot.DFDL.PurchaseData.ItemCount = InputRoot.DFDL.OrderList.ItemCount; DECLARE TotalQuantity INTEGER 0; DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputRoot.DFDL.OrderList.SaleList.Invoice[]); WHILE I <= J DO SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].CustomerInitial[1] = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.CustomerInitial[1]; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].CustomerInitial[2] = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.CustomerInitial[2]; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Surname = InputRoot.DFDL.OrderList.SaleList.Invoice[I].InvoiceHeader.Surname; DECLARE K INTEGER 1; DECLARE L INTEGER; SET L = CARDINALITY(InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[]); WHILE K <= L DO DECLARE OutputItem ROW; SET OutputItem = THE ( SELECT Inv.ItemType , Inv.ItemCode , Inv.Description , Inv.Price , Inv.Category , It.Quantity FROM InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[K] AS It , InputRoot.DFDL.OrderList.Inventory.Item[] AS Inv WHERE Inv.ItemCode = It.ItemCode AND Inv.ItemCode = InputRoot.DFDL.OrderList.SaleList.Invoice[I].Items.Item[K].ItemCode ); IF OutputItem.ItemType = '1' THEN SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].ItemType = OutputItem.ItemType; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.ItemCode = 'AA';--OutputItem.ItemCode; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Price = OutputItem.Price; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Description = OutputItem.Description; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Category = OutputItem.Category; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item1.Quantity = OutputItem.Quantity; ELSE SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].ItemType = OutputItem.ItemType; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.ItemCode = OutputItem.ItemCode; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Price = OutputItem.Price; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Colour = OutputItem.Description; SET OutputRoot.DFDL.PurchaseData.SaleList.Invoice[I].Items[K].Item2.Quantity = OutputItem.Quantity; END IF; SET TotalQuantity = TotalQuantity + OutputItem.Quantity; SET K = K + 1; END WHILE; SET I = I + 1; END WHILE; --Trailer SET OutputRoot.DFDL.PurchaseData.Trailer.TotalQuantity = TotalQuantity; IF EXISTS(InputRoot.DFDL.OrderList.PointOfSale1[]) THEN SET OutputRoot.DFDL.PurchaseData.Trailer.PointOfSaleType = '1'; ELSE SET OutputRoot.DFDL.PurchaseData.Trailer.PointOfSaleType = '2'; END IF; RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; END MODULE;
このサンプルで使用されている Redefine メッセージ・フローを作成するには、次のようにします。
ノード | ページ | プロパティー | 値 |
---|---|---|---|
MQInput | 基本 | キュー名 | BINARYADDR.IN1 |
入力メッセージ構文解析 | メッセージ・ドメイン | DFDL | |
入力メッセージ構文解析 | メッセージ・モデル | CustomerAddress.xsd | |
入力メッセージ構文解析 | メッセージ | {}CustomerAddress.xsd | |
MQOutput | 基本 | キュー名 |
XMLADDR.OUT1 |
CREATE COMPUTE MODULE RedefineAddr_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); SET OutputRoot.XMLNSC = InputRoot.DFDL; RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER; SET J = CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; END MODULE;
アプリケーションをデプロイするには、アプリケーション COBOLApplication をデプロイする先の実行グループまでドラッグします。BAR ファイルが自動的に作成され、ブローカーにデプロイされます。
このサンプルには、3 つのシナリオすべてのテスト・データ例がいくつか含まれています。ライブラリー COBOLLibrary 内の OrderList.bin、OrderListLogicalInstance.xml、および TestInputAddress1.bin がこれらに該当します。
テスト・クライアントの使用方法については、『テスト・クライアントの概要』を参照してください。