COBOL サンプルの作成

このトピックの指示を使用して、COBOL サンプルを作成できます。 代わりに、完成している DFDL スキーマ、アプリケーション、およびライブラリーをそのサンプルにインポートすることもできます。

アプリケーションとライブラリーの作成

このサンプルは、アプリケーションとライブラリーを使用して、サンプルの成果物を格納します。最初に、以下のようにライブラリーを作成します。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。「クイック・スタート」をクリックします。
  2. 「ライブラリーの作成から開始」をクリックします。「新規ライブラリー」ウィザードが開きます。
  3. プロジェクト名フィールドに COBOLLibrary と入力します。「終了」をクリックします。

COBOLLibrary という名前のライブラリーが作成され、「ブローカー開発」ビューに表示されます。

これでライブラリーが作成されたため、次にアプリケーションを作成します。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。「クイック・スタート」をクリックします。
  2. 「アプリケーションの作成から開始」をクリックします。「新規アプリケーション」ウィザードが開きます。
  3. 「プロジェクト名フィールド」COBOLApplication と入力します。「次へ」をクリックします。
  4. 以前に作成したライブラリー COBOLLibrary を選択します。「終了」をクリックします。

COBOLApplication という名前のアプリケーションが作成され、「ブローカー開発」ビューに表示されます。

DFDL スキーマ・ファイルの作成

このセクションでは、COBOL コピーブックをインポートして、このサンプルで使用される DFDL スキーマ・ファイルを作成する方法について説明します。 以下の COBOL コピーブックをワークスペース内に保存します。

  1. OrderList
  2. PurchaseData
  3. CustomerAddress

これらの COBOL コピーブックごとに DFDL スキーマ・ファイルを作成するには、以下のようにします。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。ライブラリーを右クリックして、「COBOLLibrary」をクリックします。 「新規」>「メッセージ・モデル」をクリックします。「新規メッセージ・モデル」ウィザードが開きます。
  2. 「新規メッセージ・モデル」ウィザードで、COBOLを選択します。「次へ」をクリックします。
  3. COBOL コピーブックまたはプログラムをインポートすることにより DFDL スキーマ・ファイルを作成する」を選択します。「次へ」をクリックします。
  4. インポートするコピーブックをワークスペースから選択します。「次へ」をクリックします。
  5. 提供される各 COBOL コピーブックには、レベル 01 エレメントが 1 つのみ含まれています。「ソースの構造」リストでこのエレメントを選択してから、「>」ボタンをクリックして、エレメントを「インポートされた構造」リストに移動します。「次へ」をクリックします。
  6. これらのオプションをデフォルトのままにしておきます。「次へ」をクリックします。
  7. 「エンコード」オプションから「固定」を選択します。
  8. エンコード (コード・ページ)」ドロップダウン・リストで「UTF-8」を選択します。「バイト順序」「ビッグ・エンディアン」に設定します。
  9. 「終了」をクリックします。

DFDL スキーマ・ファイルが作成され (ファイル拡張子 .xsd)、ライブラリー COBOLLibrary の「スキーマ定義」フォルダーに表示されます。3 つの COBOL コピーブックごとに、これらのステップを繰り返します。

DFDL スキーマ・ファイルへの判別プログラムの追加

DFDL スキーマ・ファイル OrderList.xsd および PurchaseData.xsd をこのサンプルで使用するには、まず各選択エレメントに判別プログラムを追加する必要があります。

必要な判別プログラムを OrderList.xsd に追加するには、次のようにします。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。「COBOLLibrary」>「スキーマ定義」を展開します。DFDL スキーマ・ファイル OrderList.xsd を右クリックし、「オープン」を選択します。DFDL スキーマ・ファイルが DFDL スキーマ・エディターで開きます。
  2. 「エディター」ビューで、複合タイプ OrderList の子として選択項目が表示されます。この選択項目を展開し、「PointOfSale1」を選択します。
  3. 「DFDL プロパティー」ビューで「テスト条件」タブをクリックします。
  4. 判別プログラム」を選択し、「判別プログラムの追加」をクリックします。
  5. テストの種類」ドロップダウン・リストから「」を選択します。
  6. テスト条件」フィールドに {/OrderList/PointOfSaleType eq '1'} と入力します。
  7. 「エディター」ビューで「PointOfSale2」を選択します。
  8. 「DFDL プロパティー」ビューで「テスト条件」タブをクリックします。
  9. 判別プログラム」を選択し、「判別プログラムの追加」をクリックします。
  10. テストの種類」ドロップダウン・リストから「」を選択します。
  11. テスト条件」フィールドに {/OrderList/PointOfSaleType eq '2'} と入力します。

必要な判別プログラムを PurchaseData.xsd に追加するには、次のようにします。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。「COBOLLibrary」>「スキーマ定義」を展開します。DFDL スキーマ・ファイル PurchaseData.xsd を右クリックし、「オープン」を選択します。DFDL スキーマ・ファイルが DFDL スキーマ・エディターで開きます。
  2. 「エディター」ビューで「SaleList」>「Invoice」>「Items」>「choice」を展開し、「Item1」を選択します。
  3. 「DFDL プロパティー」ビューで「テスト条件」タブをクリックします。
  4. 判別プログラム」を選択し、「判別プログラムの追加」をクリックします。
  5. テストの種類」ドロップダウン・リストから「」を選択します。
  6. テスト条件」フィールドに {/PurchaseData/SaleList/Invoice/Items/ItemType eq '1'} と入力します。
  7. 「エディター」ビューで「Item2」を選択します。
  8. 「DFDL プロパティー」ビューで「テスト条件」タブをクリックします。
  9. 判別プログラム」を選択し、「判別プログラムの追加」をクリックします。
  10. テストの種類」ドロップダウン・リストから「」を選択します。
  11. テスト条件」フィールドに {/PurchaseData/SaleList/Invoice/Items/ItemType eq '2'} と入力します。

この時点で、次のような 3 つの DFDL スキーマ・ファイルがあります。

この時点で、サンプル・データのテスト解析を実行することにより、DFDL スキーマ・ファイルをテストできます。 テスト入力データの構文解析による DFDL スキーマのテストを参照してください。

OrderList2PurchaseData メッセージ・フローの作成

このサンプルで使用されている OrderList2PurchaseData メッセージ・フローを作成するには、次のようにします。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。アプリケーションを右クリックして、「COBOLApplication」をクリックします。 「新規」>「メッセージ・フロー」をクリックします。「新規メッセージ・フロー」ウィザードが開きます。
  2. 「メッセージ・フロー名」フィールドに OrderList2PurchaseData と入力します。
  3. 「終了」をクリックします。OrderList2PurchaseData という名前のメッセージ・フローが作成され、「メッセージ・フロー」エディターで開きます。
  4. 「メッセージ・フロー」エディターで、2 つの MQInput ノード、選択した変換ノード (ESQL Compute ノードや Mapping ノードなど)、および MQOutput ノードを追加します。
    手順については、WebSphere Message Broker 資料の メッセージ・フローの作成を参照してください。
  5. 次のようにノードのターミナルを接続します。 手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの接続を参照してください。
  6. 次の表に示されているように、ノードのプロパティーを構成します。この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの構成を参照してください。
    ノード ページ プロパティー
    MQInput 基本 キュー名 ORDERLIST.IN1
    入力メッセージ構文解析 メッセージ・ドメイン DFDL
    入力メッセージ構文解析 メッセージ・モデル OrderList.xsd
    入力メッセージ構文解析 メッセージ {}OrderList.xsd
    MQInput 基本 キュー名 XMLORDERLIST.IN1
    入力メッセージ構文解析 メッセージ・ドメイン XMLNSC
    入力メッセージ構文解析 メッセージ・モデル OrderList.xsd
    MQOutput 基本 キュー名

    PURCHASEDATA.OUT1


  7. ESQL Compute ノードを使用する場合は、その Compute ノードをダブルクリックして ESQL エディターを開きます。
  8. エディター・ビューで、既存の ESQL を次のコードで置き換えます。
    
    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;
    
    
  9. Mapping ノードを使用する場合、Mapping ノードをダブルクリックしてグラフィカル・データ・マップ・エディターを開きます。 入力として「OrderList」を選択し、出力として「PurchaseData」を選択して、必要な変換を作成します。
  10. メッセージ・フローを保存します。

Redefine メッセージ・フローの作成

このサンプルで使用されている Redefine メッセージ・フローを作成するには、次のようにします。

  1. 「ブローカー開発」ビューで、「アプリケーションおよびライブラリー」としてリソースを表示していることを確認します。アプリケーションを右クリックして、「COBOLApplication」をクリックします。 「新規」>「メッセージ・フロー」をクリックします。「新規メッセージ・フロー」ウィザードが開きます。
  2. 「メッセージ・フロー名」フィールドに Redefine と入力します。
  3. 「終了」をクリックします。Redefine という名前のメッセージ・フローが作成され、「メッセージ・フロー」エディターで開きます。
  4. 「メッセージ・フロー」エディターで、MQInput ノード、Compute ノード、および MQOutput ノードを追加します。
    手順については、WebSphere Message Broker 資料の メッセージ・フローの作成を参照してください。
  5. 次のようにノードのターミナルを接続します。 手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの接続を参照してください。
  6. 次の表に示されているように、ノードのプロパティーを構成します。この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの構成を参照してください。
    ノード ページ プロパティー
    MQInput 基本 キュー名 BINARYADDR.IN1
    入力メッセージ構文解析 メッセージ・ドメイン DFDL
    入力メッセージ構文解析 メッセージ・モデル CustomerAddress.xsd
    入力メッセージ構文解析 メッセージ {}CustomerAddress.xsd
    MQOutput 基本 キュー名

    XMLADDR.OUT1


  7. Compute ノードをダブルクリックして、ESQL エディターで開きます。
  8. エディター・ビューで、既存の ESQL を次のコードで置き換えます。
    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;
    
    
  9. メッセージ・フローを保存します。

デプロイ

アプリケーションをデプロイするには、アプリケーション COBOLApplication をデプロイする先の実行グループまでドラッグします。BAR ファイルが自動的に作成され、ブローカーにデプロイされます。

テスト

このサンプルには、3 つのシナリオすべてのテスト・データ例がいくつか含まれています。ライブラリー COBOLLibrary 内の OrderList.binOrderListLogicalInstance.xml、および TestInputAddress1.bin がこれらに該当します。

テスト・クライアントの使用方法については、『テスト・クライアントの概要』を参照してください。

「サンプルについて調べる」に戻る

サンプルのホームに戻る