EBCDIC の NL から ASCII の CR LF への変換

このトピックでは、テキスト・メッセージ中の改行 (NL) 文字を、 復帰 (CR) および改行 (LF) 文字の対に変更するタスクの例について説明します。

この変換は、EBCDIC プラットフォーム (例えば CCSID 1047 を使用するもの) からのメッセージを、 ASCII プラットフォーム (例えば CCSID 437 を使用するもの) に送信する場合に役立ちます。 問題が生じることがあるのは、 EBCDIC NL 文字 16 進 '15' が、未定義 ASCII 文字 16 進 '7F' に変換されるためです。 ASCII コード・ページの NL 文字に対応するコード・ポイントはありません。

この例では、入力メッセージを BLOB ドメインのメッセージとして解釈するメッセージ・フローが作成されます。 これは ResetContentDescriptor ノードに渡され、データを MRM ドメイン内のメッセージにリセットします。 メッセージは msg_nl (EBCDIC の NL 文字で区切られた反復ストリング・エレメントのセット) と呼ばれます。 Compute ノードが使用されて、"msg_crlf" という MRM ドメインの別のメッセージに基づいて出力を作成します (CR LF 対によって区切られた反復ストリング・エレメントのセット)。 その後メッセージ・ドメインは、別の ResetContentDescriptor ノードで変更され、BLOB に戻されます。 このメッセージ・フローは、以下で例示されています。


次のノードで構成される、 リニア・メッセージ・フローを表示する図 : Out ターミナルが ResetContentDescriptor1 に接続され、 Out ターミナルが Compute1 に接続され、Out ターミナルが ResetContentDescriptor2 に接続され、 Out ターミナルが MQOutput1 に接続された MQInput1。他のターミナルは接続されていない。

以下に、メッセージが作成され、メッセージ・フローが構成される方法を説明します。

  1. MRM ドメインのメッセージにメッセージ・モデルを作成する
    1. myProj というメッセージ・セット・プロジェクトを作成する。
    2. TDS 物理形式 (デフォルト名は TDS1) を使用して、myMessageSet というメッセージ・セットを作成する。
    3. xsd:string タイプのエレメント string1 を作成する。
    4. t_msg_nl という複合タイプを作成し、複合タイプ・プロパティーを以下のとおりに指定する。
      • 構成 = 順序セット
      • 内容の妥当性検査 = クローズ
      • データとエレメントの分離 = 全エレメントを区切る
      • 区切り文字 = <U+0085> (16 進 '0085' は NL 文字の UTF-16 表記)
      • 反復 = はい
      • 最小オカレンス = 1
      • 最大オカレンス = 50 (メッセージのテキストは 50 行以下が前提)
    5. エレメント string1 を追加し、以下のプロパティーを設定する。
      • 反復エレメント区切り文字 = <U+0085>
    6. メッセージ msg_nl を作成し、関連した複合タイプを t_msg_nl に設定する。
    7. t_msg_crlf という複合タイプを作成し、複合タイプ・プロパティーを以下のとおりに指定する。
      • 構成 = 順序セット
      • 内容の妥当性検査 = クローズ
      • データとエレメントの分離 = 全エレメントを区切る
      • 区切り文字 <CR><LF> (<CR> および <LF> は CR および LF 文字の簡略記号)
      • 反復 = はい
      • 最小オカレンス = 1
      • 最大オカレンス = 50
    8. エレメント string1 を追加し、以下のプロパティーを設定する。
      • 反復エレメント区切り文字 = <CR><LF>
    9. メッセージ msg_crlf を作成し、複合タイプを t_msg_crlf に設定する。
  2. 上の図に示されたメッセージ・フローを構成します。
    1. MQInput1 ノードから開始する。
      • メッセージ・ドメイン = BLOB に設定する。
      • キュー名 = <ご使用の入力メッセージ・キュー名> に設定する。
    2. ResetContentDescriptor1 ノードを追加して、MQInput1 の OUT ターミナルに接続する。
      • メッセージ・ドメイン = MRM に設定する。
      • 「メッセージ・ドメインのリセット」を選択する。
      • メッセージ・セット = <ご使用のメッセージ・セット ID> に設定する。(最大 13 文字です)
      • 「メッセージ・セットのリセット」を選択する。
      • メッセージ・タイプ = msg_nl に設定する。
      • 「メッセージ・タイプのリセット」を選択する。
      • メッセージ・フォーマット = TDS1 に設定する。
      • 「メッセージ形式のリセット」を選択する。
    3. Compute1 ノードを追加して、ResetContentDescriptor1 の OUT ターミナルに接続する。
      • このノードに対して ESQLモジュールの名前を入力する、またはデフォルトを受け入れる (<メッセージ・フロー名>_Compute1)。
      • Compute1 ノードを右クリックして、「ESQL のオープン」を選択します。次のモジュールの ESQL ステートメントをコーディングします。
        -- Declare local working variables
        DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
        
        -- Loop to copy all message headers from input to output message
        WHILE I < J DO
         SET OutputRoot.*[I] = InputRoot.*[I];
         SET I=I+1;
        END WHILE;
        
        -- Set new output message type which uses CRLF delimiter
        SET OutputRoot.Properties.MessageType = 't_msg_crlf';
        
        -- Loop to copy each instance of string1 child within message body
        SET I = 1;
        SET J = CARDINALITY("InputBody"."string1"[]);
        WHILE I <= J DO
          SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I];
          SET I=I+1;
        END WHILE;

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

        WHILE I < CARDINALITY(InputRoot.*[]) DO
    4. ResetContentDescriptor2 ノードを追加して、Compute1 ノードの OUT ターミナルに接続する。
      • メッセージ・ドメイン = BLOB に設定する。
      • 「メッセージ・ドメインのリセット」を選択する。
    5. 最後に、MQOutput1 ノードを追加して、ResetContentDescriptor2 ノードの OUT ターミナルに接続する。出力メッセージを必要なキューに送信するプロパティーを構成します。
関連概念
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
各国語サポート
Compute ノード
MQInput ノード
MQOutput ノード
ResetContentDescriptor ノード
ESQL 参照
DECLARE ステートメント
SET ステートメント
WHILE ステートメント
TDS ニーモニック
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac11630_