コード・ページおよびメッセージ・エンコードの変換

Compute ノード内で ESQL を使用して、コード・ページと メッセージのエンコードのためのデータ変換を行うことができます。 メッセージ・フローが WebSphere MQ メッセージを処理している場合、これらの変換を提供するために WebSphere MQ 機能 (読み取り/書き込みオプション、および WebSphere MQ データ変換終了を含む) を使用することができます。 WebSphere MQ メッセージを処理していない、または WebSphere MQ 機能を使用しないように選択する場合、メッセージ・フロー内の Compute ノードの適切な ESQL をコーディングすることによって、WebSphere Message Broker 機能を使用することができます。

MQMD、MQRFH2、および CWF 物理形式をモデルにした MRM ドメイン内のメッセージのメッセージ本体の内容は、コード・ページとエンコード変換を必要とします。 XML、XMLNS、および JMS ドメイン内のメッセージのメッセージ本体の内容と、XML または TDS 物理形式をモデルにした MRM ドメイン内のそれらのメッセージは、ストリングとして扱われます。 コード・ページ変換のみが適用できます。エンコード変換は必要ではありません。

CWF 物理フォーマットをモデルにした MRM ドメインのメッセージには、出力メッセージの MQMD CCSID と Encoding フィールド、さらに追加のヘッダーの CCSID と Encoding を、必要なターゲット値に設定する必要があります。

XML または TDS 物理形式をモデルにした MRM ドメインのメッセージには、出力メッセージの MQMD CCSID フィールドおよび 追加のヘッダーの CCSID を設定できます。XML および TDS データはストリングとして 扱われ、このため、CCSID 変換に限り対象になります。

例として、ある WebSphere MQ メッセージは、MQMD ヘッダー、MQRFH2 ヘッダー、およびメッセージ本体を持っています。 このメッセージをメインフレームの CodedCharSetId および Encoding に変換するには、以下の ESQL を Compute ノードでコーディングします。

SET OutputRoot.MQMD.CodedCharSetId = 500;
SET OutputRoot.MQMD.Encoding = 785;
SET OutputRoot.MQRFH2.CodedCharSetId = 500;
SET OutputRoot.MQRFH2.Encoding = 785;

以下の例で、CWF メッセージを変更して、WebSphere Message Broker から、z/OS 上の IMS™ に渡すために必要なことを説明します。

  1. 入力メッセージを XML で定義していて、MQRFH2 ヘッダーを使うものとします。 メッセージを IMS に渡す前にヘッダーを除去します。
  2. IMS に渡されるメッセージは MQIIH ヘッダーを持っていて、z/OS コード・ページ でなければなりません。 このメッセージは MRM でモデル化されていて、その 名前は IMS1 です。 このメッセージの PIC X フィールドは、EBCDIC および ASCII 間の変換が行われるように、論理タイプをストリングとして定義してください。 論理タイプがバイナリーの場合は、データ変換は行われません。CWF メッセージが MRM パーサーによって構文解析される場合には、バイナリー・データは無視されます。
  3. IMS から受け取るメッセージも MRM で定義されていて、その 名前は IMS2 です。 このメッセージの PIC X フィールドは、EBCDIC および ASCII 間の変換が行われるように、論理タイプをストリングとして定義してください。 論理タイプがバイナリーの場合は、データ変換は行われません。CWF メッセージが MRM パーサーによって構文解析される場合には、バイナリー・データは無視されます。
  4. 応答メッセージを Windows コード・ページに変換します。 MQIIH ヘッダーはこのメッセージに保存されます。
  5. 次のノードを含むメッセージ・フローを作成済みであるとします。 :
    1. アウトバウンド・フロー: MQInput1 --> Compute1 --> MQOutput1
    2. インバウンド・フロー: MQInput2 --> Compute2 --> MQOutput2
  6. Compute1 (アウトバウンド) ノードの ESQL は、関連する MessageSet の ID を指定して、次のようにコーディングされます。 このコードは、デフォルトの CWF 物理層名の使用を示します。モデル定義と一致する名前を使用する必要があります。 誤った値を指定すると、ブローカーはメッセージ BIP5431 で失敗します。
    -- Loop to copy message headers
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J - 1 DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
    END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 500;
    SET OutputRoot.MQMD.Encoding = 785;
    SET OutputRoot.MQMD.Format = 'MQIMS ';
    SET OutputRoot.MQIIH.StrucId = 'IIH ';
    SET OutputRoot.MQIIH.Version = 1;
    SET OutputRoot.MQIIH.StrucLength = 84;
    SET OutputRoot.MQIIH.Encoding = 785;
    SET OutputRoot.MQIIH.CodedCharSetId = 500;
    SET OutputRoot.MQIIH.Format = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Flags = 0;
    SET OutputRoot.MQIIH.LTermOverride = ' ';
    SET OutputRoot.MQIIH.MFSMapName = ' ';
    SET OutputRoot.MQIIH.ReplyToFormat = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Authenticator = ' ';
    SET OutputRoot.MQIIH.TranInstanceId = X'00000000000000000000000000000000';
    SET OutputRoot.MQIIH.TranState = ' ';
    SET OutputRoot.MQIIH.CommitMode = '0';
    SET OutputRoot.MQIIH.SecurityScope = 'C';
    SET OutputRoot.MQIIH.Reserved = ' ';
    SET OutputRoot.MRM.e_elen08 = 30;
    SET OutputRoot.MRM.e_elen09 = 0;
    SET OutputRoot.MRM.e_string08 = InputBody.e_string01;
    SET OutputRoot.MRM.e_binary02 = X'31323334353637383940';
    SET OutputRoot.Properties.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS1';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

    メッセージの既存ヘッダーの基数値に初期設定されている、変数 J の使用に注意してください。 これは、以下の WHILE 文をコーディングする場合に起こる、ループのそれぞれの反復上での基数の計算より効率的です。

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Compute2 (インバウンド) ノードの ESQL は、関連する MessageSet の ID を指定して、次のように作成します。 このコードは、デフォルトの CWF 物理層名の使用を示します。モデル定義と一致する名前を使用する必要があります。 誤った値を指定すると、ブローカーはメッセージ BIP5431 で失敗します。
    -- Loop to copy message headers
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
    END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 437;
    SET OutputRoot.MQMD.Encoding = 546;
    SET OutputRoot.MQMD.Format = 'MQIMS ';
    SET OutputRoot.MQIIH.CodedCharSetId = 437;
    SET OutputRoot.MQIIH.Encoding = 546;
    SET OutputRoot.MQIIH.Format = '        ';
    SET OutputRoot.MRM = InputBody;
    SET OutputRoot.Properties.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS2';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

メッセージとメッセージ・セットは MQRFH2 ヘッダーで識別されるため、MQInput1 ノードのプロパティーには特定の値を設定する必要はありません。 また、変換も不要です。

インバウンド・メッセージ・フロー (MQInput2) のための MQInput ノードのメッセージ・ドメイン、Set、Type、および Format の値を設定する必要があります。 変換パラメーターを設定する必要はありません。

コード・ページから別のコード・ページへデータ変換をする必要のある特定の状態とは、メッセージが新規ライン指標を含み、EBCDIC と ASCII システム間をパッシングしている場合です。 この状態の場合に必要な変換については、EBCDIC の NL から ASCII の CR LF への変換 で説明されています。

関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
各国語サポート
Compute ノード
Database ノード
Filter ノード
ESQL 参照
CARDINALITY 関数
DECLARE ステートメント
SET ステートメント
WHILE ステートメント
サポートされるコード・ページ
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac11620_