複雑なメッセージのエンリッチメント

概説

メッセージ・フロー、メッセージ・セット、エレメントおよび属性に対して使用されている名前と値、および式とコード・サンプルは、例として使用されているに過ぎません。
このシナリオでは複雑なメッセージ操作を使用します。このシナリオには以下のマッピング機能が必要です。
  • MRM イン、MRM アウト (ネーム・スペース)
  • メッセージを完成させるために必要な他のノード
  • 条件付きマッピング
  • CASE マッピング (両方の構文フォーマット)
  • If/条件
  • 複数のソース・フィールドを結合して単一のターゲット・フィールドにする (ネーム・スペース間)
  • ネストと反復のある複雑なエレメントおよび単純エレメント
  • データベースから派生したターゲット・データ
  • ストリング、数値、日時関数
  • ユーザー定義 ESQL プロシージャーおよび関数
  • ユーザー定義 Java ルーチン

Message Broker ツールを使用して、メッセージ・フローとメッセージ・セットを作成するとともに、bar (ブローカー・アーカイブ) ファイルを作成およびデプロイします。さらに、構成マネージャーとブローカーを作成する必要もあります。Message Broker ツール内で、構成マネージャーへのドメイン接続を作成し、ドメイン内にブローカーを作成します。MQRFH2 ヘッダーを (オプションで) 入れることのできるインスタンス・メッセージを入力するためのメソッド (argoput、rfhutil など) も必要です。

ステップ 1. 他のノード (filter など) を含むフローを作成し、条件付きのマッピングを使用する。対応するメッセージ・モデル (すべての主なデータ・タイプを使用) およびインスタンス・メッセージを開発する。

  1. アプリケーション開発パースペクティブから、メッセージ・セット・プロジェクト、メッセージ・セット MAPPING3_COMPLEX_messages (ネーム・スペースは有効、XML ワイヤー形式に設定)、およびメッセージ定義ファイル COMPLEX (ターゲット・ネーム・スペースは www.complex.net、接頭部は comp) を作成します。
  2. 以下の構造を使用してメッセージ addev1、addev1s、および addev1n を作成します。
    addev1
       bool      (xsd:boolean) local element
       bin        (xsd:hexBinary) local element
       dat        (xsd:dateTime) local element
       dec       (xsd:decimal) local element
       dur        (xsd:duration) local element
       flt          (xsd:float) local element
       int         (xsd:int) local element
       str         (xsd:string) local element   
    addev1s
       bin        (xsd:hexBinary) local element
       dat        (xsd:dateTime) local element
       dur        (xsd:duration) local element
       str         (xsd:string) local element   
    addev1n
       dec       (xsd:decimal) local element
       flt          (xsd:float) local element
       int         (xsd:int) local element
  3. メッセージ・フロー・プロジェクト MAPPING3_COMPLEX_flows を作成します。
  4. 以下を含むメッセージ・フロー addev1 を作成します。
    MQInput -> Filter -> Mapping -> Compute
                         ¥                       ¥ --> RCD -> MQOutput
                          ¥-> Mapping1-----------/ 
  5. Filter ノードで以下の ESQL を設定します。
    IF Body.bool THEN
                RETURN TRUE;
            ELSE
                RETURN FALSE;
            END IF;
  6. Filter の true ターミナルに接続されるマッピング・ノード (Mapping1) でマップを開き、addev1 をソース、addev1s をターゲットとして選択します。
  7. 次のようにしてソースとターゲットを接続します。
    bin --- bin
    dat --- dat
    dur --- dur
    str --- str
  8. スプレッドシート・ペインで「プロパティー」を展開し、次のように設定します。
    MessageType   |     'addev1s'
  9. ターゲット dat を選択し、右クリックして、メニューから「If」を選択します。
  10. 条件 fn:true() を $source/comp:addev1/str = 'dat' に置換します。
  11. dat の値を $source/comp:addev1/dat + xs:duration("P3M") に設定します。
  12. 条件を選択し、右クリックして、メニューから「Else」を選択します。
  13. ターゲット dur を選択し、右クリックして、メニューから「If」を選択します。
  14. 条件 fn:true() を $source/comp:addev1/str = 'dur' に置換します。
  15. dur の値を $source/comp:addev1/dur + xs:duration("P1Y") に設定します。
  16. 条件を選択し、右クリックして、メニューから「Else」を選択します。
  17. Filter ノードの false ターミナルに接続されたノード (Mapping) のマップを開き、addev1 をソース、addev1n をターゲットとして選択します。
  18. 次のようにしてソースとターゲットを接続します。
    dec --- dec
    flt --- flt
    int --- int
  19. スプレッドシート・ペインで「プロパティー」を展開し、次のように設定します。
    MessageType     |     'addev1n'
  20. Compute ノードの ESQL を次のように設定します。
    CALL CopyMessageHeaders();
            SET OutputRoot.MRM.dec = InputBody.dec * 10;
            SET OutputRoot.MRM.flt = InputBody.flt * 10;
            SET OutputRoot.MRM.int = InputBody.int * 10;
  21. ResetContentDescriptor ノードで、「メッセージ・ドメイン」を XMLNS に設定し、「メッセージ・ドメインのリセット」ボックスにチェック・マークを付けます。
  22. 適切な RFH2 ヘッダーを持つ、以下の 3 つのインスタンス・メッセージを作成します。
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>1</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dat</str>
    </comp:addev1>
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>1</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dur</str>
    </comp:addev1>
    <comp:addev1 xmlns:comp="http://www.complex.net">
    <bool>0</bool>
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00+00:00</dat>
    <dec>19.34</dec>
    <dur>P2Y4M</dur>
    <flt>3.245E+2</flt>
    <int>2104</int>
    <str>dat</str>
    </comp:addev1>
ステップ 1 の結果: メッセージ・セット MAPPING3_COMPLEX_messages が作成され、メッセージ addev1、addev1s、および addev1n が取り込まれる。メッセージ・フロー addev1 がプロジェクト MAPPING3_COMPLEX_flows に作成される。これにはマッピング・ファイル addev1_Mapping.msgmap および addev1._Mapping1.msgmap が含まれる。テスト用インスタンス・メッセージの入ったファイル。

ステップ 2. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev1 を作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev1 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 2 の結果: 出力メッセージは以下の形式になるはずである。
<comp:addev1s xmlns:comp="http://www.complex.net">
<bin><![CDATA[010203]]></bin>
<dat>2005-08-06T00:00:00-01:00</dat>
<dur>P2Y4M</dur>
<str>dat</str>
</comp:addev1s>

ステップ 3. 他の複数のフィールドからターゲット・フィールドをマップするフローを開発する。対応するメッセージ・モデルおよびインスタンス文書を開発する。

  1. ネーム・スペース www.complex.net 内の COMPLEX メッセージ定義において、以下の構造を持つメッセージ addev2 を作成します。
    addev2
       firstname             (xsd:string) local element
       lastname              (xsd:string) local element
       branch                 (xsd:string) local element
       accountno            (xsd:string) local element
       balance                (xsd:decimal) local element
       transvalue             local complex element, base type xsd:decimal
          transdir             (xsd:string) local attribute
  2. 'MAPPING3_COMPLEX_messages' メッセージ・セットに新しいメッセージ定義ファイル COMP2 (ターゲット・ネーム・スペース www.comp2.net、接頭部 c2) を作成します。
  3. COMP2 メッセージ定義において、以下の構造を持つメッセージ addev2out を作成します。
    addev2out
        accountdetails      (xsd:string) local element
        transvalue            (xsd:decimal) local element
        balance                (xsd:decimal) local element
  4. メッセージ・フロー addev2 を作成し、これに MQInput -> Mapping -> MQOutput を含めます。
  5. マップを開き、addev2 をソース、addev2out をターゲットとして選択します。
  6. 次のようにしてソースとターゲットを接続します。
    accountno --- accountdetails
    balance --- balance
    transvalue --- transvalue
  7. スプレッドシート・ペインで「プロパティー」を展開し、次のように設定します。
    MessageType   |     'addev2out'
  8. accountdetails ターゲットを fn:concat($source/comp:addev2/accountno、$source/comp:addev2/branch、$source/comp:addev2/lastname、$source/comp:addev2/firstname) に設定します。
  9. ターゲット transvalue を選択し、右クリックして、メニューから「If」を選択します。
  10. 条件を fn:true() から $source/comp:addev2/transvalue/@transdir = 'DEBIT' に変更します。
  11. transvalue を選択し、その「値」を $source/comp:addev2/transvalue * (-1) に設定します。
  12. 条件を選択し、右クリックして、メニューから「Else」を選択します。
  13. ターゲット balance を選択し、右クリックして、メニューから「If」を選択します。
  14. 条件を fn:true() から $source/comp:addev2/transvalue/@transdir = 'DEBIT' に変更します。
  15. balance を選択し、その「値」を $source/comp:addev2/balance - $source/comp:addev2/transvalue に設定します。
  16. 条件を選択し、右クリックして、メニューから「条件」を選択します。
  17. 条件を fn:true() から $source/comp:addev2/transvalue/@transdir = 'CREDIT' に変更します。
  18. 2 番目の条件に続く balance を選択し、その「値」を $source/comp:addev2/balance + $source/comp:addev2/transvalue に設定します。
  19. 適切な RFH2 ヘッダーを持つ、以下の 2 つのインスタンス・メッセージを作成します。
    <comp:addev2 xmlns:comp="http://www.complex.net">
    <firstname>Brian</firstname>
    <lastname>Benn</lastname>
    <branch>52-84-02</branch>
    <accountno>567432876543</accountno>
    <balance>1543.56</balance>
    <transvalue transdir="DEBIT">25.28</transvalue>
    </comp:addev2>
    <comp:addev2 xmlns:comp="http://www.complex.net">
    <firstname>Brian</firstname>
    <lastname>Benn</lastname>
    <branch>52-84-02</branch>
    <accountno>567432876543</accountno>
    <balance>1543.56</balance>
    <transvalue transdir="CREDIT">25.28</transvalue>
    </comp:addev2>
ステップ 3 の結果: メッセージ addev2 がメッセージ定義 COMPLEX に作成され、メッセージ addev2out がメッセージ定義 COMP2 に作成される。メッセージ・フロー addev2 が作成され、これにマッピング・ファイル addev2_Mapping.msgmap が含まれる。テスト用インスタンス・メッセージの入ったファイル。

ステップ 4. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev2 を作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev2 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 4 の結果: 出力メッセージは以下の形式になるはずである。
<c2:addev2out xmlns:c2="http://www.comp2.net"  xmlns:comp="http://www.complex.net">
<accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
<transvalue>-25.28</transvalue>
<balance>1518.28</balance>
</c2:addev2out>

ステップ 5. ネストと反復のある複雑なメッセージをマッピングするためのフローとメッセージ・モデルを開発する。対応するインスタンス文書を作成する。

  1. ネーム・スペース 'www.complex.net' 内の COMPLEX メッセージ定義において、以下の構造を持つメッセージ 'addev3' を作成します。
      addev3
       choice
          sstr                     (xsd:string) local element
          intrep                  (xsd:int) local element, minOcc=2, maxOcc=6
          dur                      (xsd:duration) local element
       choice
          comp1                local complex element
             dat1                 (xsd:date) local element
             sval                  (xsd:string) local element
          comp2                local complex element
             bool1               (xsd:boolean) local element
             dat2                 (xsd:date) local element
          comprep             local complex element, minOcc=1, maxOcc=4
             int1                  (xsd:int) local element
             dec1                (xsd:decimal) local element
       binel                       (xsd:hexBinary) local element
       lelem                      local complex element, base type xsd:string
          latt                      (xsd:int) local attribute
       lcomp                     local complex element
          head                    (xsd:string) local element
          incomp                local complex element
             count                (xsd:int) local element
             comp:gcompel   global complex element, minOcc=0, maxOcc=-1
                fstr                 (xsd:string) local element
                multel             local complex element
                   in1              (xsd:boolean) local element
                   in2              (xsd:string) local element
                   in3              (xsd:float) local element
          footer                  (xsd:string) local element
       repstr                      (xsd:string) local element, minOcc=1, maxOcc=-1
  2. メッセージ・フロー addev3 を作成し、これに MQInput > Mapping > MQOutput を含めます。
  3. マップを開き、addev3 をソースおよびターゲットとして選択します。
  4. 以下のようにして、それぞれのソース・エレメントをそれに対応するターゲット・エレメントにマップします。
    sstr --- sstr
    intrep --- intrep
    dur --- dur
    dat1 --- dat1
    sval --- sval
    bool1 --- bool1
    dat2 --- dat2
    int1 --- int1
    dec1 --- dec1
    binel --- binel
    lelem --- lelem
    latt --- latt
    head --- head
    count --- count
    fstr --- fstr
    multel --- multel
    footer --- footer
    repstr --- repstr
  5. スプレッドシート・ペインで、最初の条件を fn:true() から fn:exists($source/comp:addev3/sstr) に変更します。
  6. 2 番目の条件を fn:true() から fn:exists($source/comp:addev3/intrep) に変更します。
  7. 3 番目の条件を fn:true() から fn:exists($source/comp:addev3/dur) に変更します。
  8. 最初の複合選択条件を fn:true() から fn:exists($source/comp:addev3/comp1) に変更します。
  9. 2 番目の複合選択条件を fn:true() から fn:exists($source/comp:addev3/comp2) に変更します。
  10. 3 番目の複合選択条件を fn:true() から fn:exists($source/comp:addev3/comprep) に変更します。
  11. (適切な RFH2 ヘッダーを持つ) 以下のインスタンス・メッセージを作成します。
    1. <comp:addev3 xmlns:comp="http://www.complex.net">
      <sstr>first</sstr>
      <comp1>
      <dat1>2005-06-24</dat1>
      <sval>date value</sval>
      </comp1>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>3</count>
      <comp:gcompel>
      <fstr>first</fstr>
      <multel>
      <in1>1</in1>
      <in2>C</in2>
      <in3>2.45E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>second</fstr>
      <multel>
      <in1>1</in1>
      <in2>D</in2>
      <in3>7.625E+3</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>third</fstr>
      <multel>
      <in1>0</in1>
      <in2>C</in2>
      <in3>4.9E+0</in3>
      </multel>
      </comp:gcompel>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      <repstr>def</repstr>
      <repstr>ghi</repstr>
      <repstr>jkl</repstr>
      <repstr>mno</repstr>
      </comp:addev3>
    2. <comp:addev3 xmlns:comp="http://www.complex.net">
      <intrep>45</intrep>
      <intrep>12</intrep>
      <intrep>920</intrep>
      <comp2>
      <bool1>1</bool1>
      <dat2>2005-06-24</dat2>
      </comp2>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>5</count>
      <comp:gcompel>
      <fstr>first</fstr>
      <multel>
      <in1>1</in1>
      <in2>C</in2>
      <in3>2.45E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>second</fstr>
      <multel>
      <in1>1</in1>
      <in2>D</in2>
      <in3>7.625E+3</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>third</fstr>
      <multel>
      <in1>0</in1>
      <in2>C</in2>
      <in3>4.9E+0</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>fourth</fstr>
      <multel>
      <in1>1</in1>
      <in2>F</in2>
      <in3>2.98E+1</in3>
      </multel>
      </comp:gcompel>
      <comp:gcompel>
      <fstr>fifth</fstr>
      <multel>
      <in1>0</in1>
      <in2>D</in2>
      <in3>8.57E-2</in3>
      </multel>
      </comp:gcompel>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      </comp:addev3>
    3. <comp:addev3 xmlns:comp="http://www.complex.net">
      <dur>P2Y2M</dur>
      <comp3>
      <int1>6</int1>
      <dec1>2821.54</dec1>
      </comp3>
      <comp3>
      <int1>41</int1>
      <dec1>0.02</dec1>
      </comp3>
      <binel><![CDATA[3132333435]]></binel>
      <lelem latt="24">twenty four</lelem>
      <lcomp>
      <head>nesting start</head>
      <incomp>
      <count>0</count>
      </incomp>
      <footer>nesting end</footer>
      </lcomp>
      <repstr>abc</repstr>
      <repstr>def</repstr>
      <repstr>ghi</repstr>
      <repstr>jkl</repstr>
      <repstr>mno</repstr>
      <repstr>pqr</repstr>
      <repstr>stu</repstr>
      <repstr>vwx</repstr>
      </comp:addev3>
ステップ 5 の結果: メッセージ addev3 がメッセージ定義 COMPLEX に作成され、マッピング・ファイル addev3_Mapping.msgmap が含まれるメッセージ・フロー addev3 が作成される。テスト用インスタンス・メッセージの入ったファイル。

ステップ 6. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev3 を作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev3 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 6 の結果: 出力メッセージは以下の形式になるはずである。
<comp:addev3 xmlns:comp="http://www.complex.net">
<sstr>first</sstr>
<comp1>
<dat1>2005-06-24</dat1>
<sval>date value</sval>
</comp1>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>3</count>
<comp:gcompel>
<fstr>first</fstr>
<multel>
<in1>1</in1>
<in2>C</in2>
<in3>2.45E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>second</fstr>
<multel>
<in1>1</in1>
<in2>D</in2>
<in3>7.625E+3</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>third</fstr>
<multel>
<in1>0</in1>
<in2>C</in2>
<in3>4.9E+0</in3>
</multel>
</comp:gcompel>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
<repstr>def</repstr>
<repstr>ghi</repstr>
<repstr>jkl</repstr>
<repstr>mno</repstr>
</comp:addev3>
<comp:addev3 xmlns:comp="http://www.complex.net">
<intrep>45</intrep>
<intrep>12</intrep>
<intrep>920</intrep>
<comp2>
<bool1>1</bool1>
<dat2>2005-06-24</dat2>
</comp2>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>5</count>
<comp:gcompel>
<fstr>first</fstr>
<multel>
<in1>1</in1>
<in2>C</in2>
<in3>2.45E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>second</fstr>
<multel>
<in1>1</in1>
<in2>D</in2>
<in3>7.625E+3</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>third</fstr>
<multel>
<in1>0</in1>
<in2>C</in2>
<in3>4.9E+0</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>fourth</fstr>
<multel>
<in1>1</in1>
<in2>F</in2>
<in3>2.98E+1</in3>
</multel>
</comp:gcompel>
<comp:gcompel>
<fstr>fifth</fstr>
<multel>
<in1>0</in1>
<in2>D</in2>
<in3>8.57E-2</in3>
</multel>
</comp:gcompel>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
</comp:addev3>
<comp:addev3 xmlns:comp="http://www.complex.net">
<dur>P2Y2M</dur>
<comp3>
<int1>6</int1>
<dec1>2821.54</dec1>
</comp3>
<comp3>
<int1>41</int1>
<dec1>0.02</dec1>
</comp3>
<binel><![CDATA[3132333435]]></binel>
<lelem latt="24">twenty four</lelem>
<lcomp>
<head>nesting start</head>
<incomp>
<count>0</count>
</incomp>
<footer>nesting end</footer>
</lcomp>
<repstr>abc</repstr>
<repstr>def</repstr>
<repstr>ghi</repstr>
<repstr>jkl</repstr>
<repstr>mno</repstr>
<repstr>pqr</repstr>
<repstr>stu</repstr>
<repstr>vwx</repstr>
</comp:addev3>

ステップ 7。ターゲットにデータベースからデータを取り込むためのフローを開発し、対応するメッセージ・モデルおよびインスタンス文書を作成する

  1. データベース (たとえば、MAPDB) を作成し、以下の列を持つ表 TRANSACTION を作成します。
    ACCOUNT        VARCHAR(12)
    TDATE                DATE
    VALUE               DECIMAL(8,2)
  2. データベースに次の値を取り込みます。
    '12345678901', '2005-04-25', -14.25
    '12345678901', '2005-04-25', 100.00
    '12345678901','2005-05-15', 2891.30
    '12345678901','2005-06-11', -215.28
  3. データベース用の Windows ODBC データ・ソース名を作成した後、データベースを構成マネージャーに登録します (「ファイル」>「新規」>「RDB 定義ファイル」の順にクリックします)。
  4. ネーム・スペース www.complex.net 内の COMPLEX メッセージ定義において、以下の構造を持つメッセージ addev4in を作成します。
    addev4in
       account             (xsd:string) local element
       tdate                 (xsd:date) local element
  5. ネーム・スペース www.comp2.net 内の COMP2 メッセージ定義において、以下の構造を持つメッセージ addev4out を作成します。
    addev4out
       account             (xsd:string) local element
       tdate                 (xsd:date) local element
       value                 (xsd:decimal) local element, minOcc=0, maxOcc=-1
  6. メッセージ・フロー addev4 を作成し、これに MQInput > Mapping > MQOutput を含めます。
  7. マップを開き、addev4in をソース、addev4out をターゲットとして選択します。
  8. 以下のように、入力を出力にマップします。
    account --- account
    tdate --- tdate
  9. スプレッドシートでターゲット値を選択し、右クリックして、メニューから「データ・ソースの選択」を選択し、ダイアログから MAPDB を選択して、「完了」をクリックします。
  10. 上部ペインで MAPDB ツリーを展開し、次のように接続します。VALUE --- value
  11. スプレッドシート・ペインで、ターゲット $db:select を選択し、fn:true() を $db:select.MAPDB.SCHEMA.TRANSACTION.ACCOUNT=$source/comp:addev4in/account および $db:select.MAPDB.SCHEMA.TRANSACTION.TDATE=$source/comp:addev4in/tdate に変更します。
  12. 「プロパティー」ツリーを展開し、次のように設定します。 MessageType | 'addev4out'
  13. マッピング・ノードの「データ・ソース」プロパティーを MAPDB に設定します。
  14. (適切な RFH2 ヘッダーを持つ) 以下のインスタンス・メッセージを作成します。
    <comp:addev4in xmlns:comp="http://www.complex.net">
    <account>12345678901</account>
    <tdate>2005-05-15</tdate>
    </comp:addev4in>
    <comp:addev4in xmlns:comp="http://www.complex.net">
    <account>12345678901</account>
    <tdate>2005-04-25</tdate>
    </comp:addev4in>
ステップ 7 の結果: メッセージ addev4in がメッセージ定義 COMPLEX に作成され、メッセージ addev4out がメッセージ定義 COMP に作成される。メッセージ・フロー addev4 が作成され、これにマッピング・ファイル addev4_Mapping.msgmap が含まれる。インスタンス・メッセージの入ったファイル。

ステップ 8. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev4 を作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev4 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 8 の結果: 出力メッセージは以下の形式になるはずである。
<c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
<account>12345678901</account>
<tdate>2005-05-15</tdate>
<value>2891.3</value>
</c2:addev4out>

ステップ 9. ユーザー定義 ESQL 関数を使用してフローを開発し、対応するメッセージ・モデルおよびインスタンス文書を開発する。

  1. ネーム・スペース www.complex.net 内の COMPLEX メッセージ定義において、以下の構造を持つメッセージ addev5in および addev5out を作成します。
    addev5in
       value1                    (xsd:decimal) local element
       operator                 (xsd:string) local element
       value2                    (xsd:decimal) local element
       rate                        (xsd:decimal) local element
    addev5out
       grossvalue               (xsd:decimal) local element
       netvalue                   (xsd:decimal) local element
  2. メッセージ・フロー addev5 を作成し、これに MQInput > Mapping > MQOutput を含めます。
  3. マップを開き、addev5in をソース、addev5out をターゲットとして選択します。
  4. MAPPING3_COMPLEX_flows プロジェクトで addev5 という名前の ESQL ファイルを作成し、以下の関数をそこに入れます。
    CREATE FUNCTION calcGrossvalue(IN value1 DECIMAL, IN operator CHAR,
                                                                                          IN value2 DECIMAL) RETURNS DECIMAL
              BEGIN   
                  DECLARE outval DECIMAL;
                  CASE operator
                  WHEN 'PLUS' THEN
                      SET outval = value1 + value2;
                  WHEN 'MINUS' THEN
                      SET outval = value1 - value2;
                  WHEN 'MULTIPLY' THEN
                      SET outval = value1 * value2;
                  WHEN 'DIVIDE' THEN
                      SET outval = value1 / value2;
                  ELSE
                      THROW USER EXCEPTION MESSAGE 2949 VALUES('Invalid Operator', operator);
                      SET outval = -999999;
                  END CASE;
                RETURN outval;
              END;
    CREATE FUNCTION calcNetvalue(IN value1 DECIMAL, IN operator CHAR, IN value2 DECIMAL,
                                                                                     IN rate DECIMAL) RETURNS DECIMAL
        BEGIN   
            DECLARE grossvalue DECIMAL;
            SET grossvalue=calcGrossvalue(value1, operator, value2);
            RETURN (grossvalue * rate );
        END;
  5. メッセージ・マッピング・エディターのスプレッドシート・ペインでメッセージを展開し、grossvalue を選択します。
  6. 式ペインで、esql:calcGrossvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2) と入力します。
  7. ターゲット netvalue を選択し、式ペインで、esql:calcNetvalue($source/comp:addev5in/value1, $source/comp:addev5in/operator, $source/comp:addev5in/value2, $source/comp:addev5in/rate) と入力します。
  8. プロパティー・ツリーを展開し、次のように設定します。MessageType | 'addev5out'
  9. (適切な RFH2 ヘッダーを持つ) 以下のインスタンス・メッセージを作成します。
    1. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>125.32</value1>
      <operator>PLUS</operator>
      <value2>25.86</value2>
      <rate>0.60</rate>
      </comp:addev5in>
    2. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>118.00</value1>
      <operator>MINUS</operator>
      <value2>245.01</value2>
      <rate>0.30</rate>
      </comp:addev5in>
    3. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>254.02</value1>
      <operator>MULTIPLY</operator>
      <value2>3.21</value2>
      <rate>0.75</rate>
      </comp:addev5in>
    4. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>1456.33</value1>
      <operator>DIVIDE</operator>
      <value2>18.58</value2>
      <rate>0.92</rate>
      </comp:addev5in>
    5. <comp:addev5in xmlns:comp="http://www.complex.net">
      <value1>254.02</value1>
      <operator>MOD</operator>
      <value2>3.21</value2>
      <rate>0.75</rate>
      </comp:addev5in>
ステップ 9 の結果: メッセージ addev5in および addev5out がメッセージ定義 COMPLEX に作成される。マッピング・ファイル addev5_Mapping.msgmap および ESQL ファイル addev5.esql の入ったメッセージ・フロー addev5 が作成される。インスタンス・メッセージの入ったファイル。

ステップ 10. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev5 を作成します。
  2. メッセージ・セット 'MAPPING3_COMPLEX_messages' およびメッセージ・フロー 'addev5' を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 10 の結果: 出力メッセージは以下の形式になるはずである。
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>151.18</grossvalue>
<netvalue>90.708</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>-127.01</grossvalue>
<netvalue>-38.103</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>815.4042</grossvalue>
<netvalue>611.55315</netvalue>
</comp:addev5out>
<comp:addev5out xmlns:comp="http://www.complex.net">
<grossvalue>78.38159311087190527448869752421959</grossvalue>
<netvalue>72.11106566200215285252960172228202</netvalue>
</comp:addev5out>
メッセージ出力はありませんが、イベント・ログには次の項目が含まれているはずです。
BIP2949 ( BRK.デフォルト ) ユーザー生成 ESQL 例外が発生しました。この例外と一緒に提供される追加情報: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
この例外は、THROW EXCEPTION ステートメントにより発生しました。これは THROW ステートメントの通常の振る舞いです。これはユーザーにより生成された例外であるため、メッセージ・フローおよび発生した例外のタイプによってユーザー処置が決定されます。

ステップ 11. ユーザー定義 Java プロシージャーを使用してフローを開発し、対応するメッセージ・モデルおよびインスタンス文書を開発する。

  1. ネーム・スペース www.complex.net 内の COMPLEX メッセージ定義において、以下の構造を持つメッセージ addev6in および addev6out を作成します。
    addev6in
        hexdata                (xsd:hexBinary) local element
    addev6out
        decval                  (xsd:decimal) local element
        fltval                     (xsd:float) local element
        intval                    (xsd:int) local element
  2. メッセージ・フロー addev6 を作成し、これに MQInput > Mapping > MQOutput を含めます。
  3. マップを開き、addev6in をソース、addev6out をターゲットとして選択します。
  4. MAPPING3_COMPLEX_flows プロジェクトで addev6 という名前の ESQL ファイルを作成し、以下の関数をそこに入れます。
    CREATE PROCEDURE decFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.decFromBinary";
    CREATE PROCEDURE fltFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA
     EXTERNAL NAME "addev6.fltFromBinary";
    CREATE PROCEDURE intFromBinary( IN hexval BLOB )
     RETURNS DECIMAL
     LANGUAGE JAVA 
     EXTERNAL NAME "addev6.intFromBinary";
  5. 以下の内容の Java ソース・ファイル addev6.java を作成します。
    import java.lang.*;
    import java.math.*;
    
    public class addev6 {
        //
        // Return decimal element from binary string
        //
        public static BigDecimal decFromBinary( byte[] hexval) {
        // Look for element named decval
        String search = "decval";
        String snval = findElement(hexval ,search );
        // Convert the value to decimal type
        BigDecimal numval = new BigDecimal(snval);
        return numval;
        }
        //
        // Return float element from binary string
        //
        public static Double fltFromBinary( byte[] hexval) {
        // Look for element named fltval
        String search = "fltval";
        String snval = findElement(hexval ,search );
        // Convert the value to float type
        Double numval = new Double(snval);
        return numval;
        }
        //
        // Return integer element from binary string
        //
        public static Long intFromBinary( byte[] hexval) {
        // Look for element named intval
        String search = "intval";
        String snval = findElement(hexval ,search );
        // Convert the value to integer type
        Long numval = new Long(snval);
        return numval;
        }
        //
        // Locate the named element and its value in the binary data
        //
        private static String findElement( byte[] hexval, String search ) {
        // Convert bytes to string
        String hexstr = new String(hexval);
        // Fixed length label/value pairs (length=14)
        int nvals = hexstr.length() / 14;
        String numval = "";
        String[] label = new String[nvals];
        String[] value = new String[nvals];
        // Loop over number of label/value pairs
        for ( int i=0; i < nvals; i ++ ) {
            // get start position
            int st = i * 14;
            // label is length 6
            int endl = st + 6;
            // value is length 8
            int endv = endl + 8;
            // extract label and value from string
            label[i] = hexstr.substring( st, endl);
            value[i] = hexstr.substring( (endl+1), endv);
            // Check whether the current pair has the label requested
            if ( label[i].compareTo( search) == 0 ) {
            // trim padding from the value
            numval = value[i].trim();
            }
        }
        return numval;
        }
    }
  6. Java をコンパイルし、クラス・ファイルのロケーションをシステムのクラスパスに追加します (CLASSPATH を編集した場合には Windows をリブートする必要があるかもしれません)。
  7. メッセージ・マッピング・エディターのスプレッドシート・ペインで、ターゲット・メッセージを展開し、ターゲット decval の「値」を esql:decFromBinary($source/comp:addev6in/bval) に設定します。
  8. ターゲット fltval を esql:fltFromBinary($source/comp:addev6in/bval) に設定します。
  9. ターゲット intval を esql:intFromBinary($source/comp:addev6in/bval) に設定します。
  10. 「プロパティー」ターゲットを展開し、次のように設定します。MessageType | 'addev6out
  11. (適切な RFH2 ヘッダーを持つ) 以下のインスタンス・メッセージを作成します。
    <comp:addev6in xmlns:comp="http://www.complex.net">
    <bval>
    <![CDATA[64656376616c20202031342e3238666c7476616c2020312e34452b32696e7476616c2020202020313230]]>
    </bval>
    </comp:addev6in>
ステップ 11 の結果: メッセージ addev6in および addev6out がメッセージ定義 COMPLEX に作成される。マッピング・ファイル addev6_Mapping.msgmap および ESQL ファイル addev6.esql の入ったマッピング・フロー addev6 が作成される。システム CLASSPATH が見つけることのできる場所に、 Java ソース addev6.java およびコンパイルされたクラス・ファイル addev6.class が置かれる。インスタンス・メッセージの入ったファイル。

ステップ 12. メッセージ・セットおよびフローをデプロイし、インスタンス・メッセージをブローカーで処理する。

  1. bar ファイル addev6 を作成します。
  2. メッセージ・セット 'MAPPING3_COMPLEX_messages' およびメッセージ・フロー addev6 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
ステップ 12 の結果: 出力メッセージは以下の形式になるはずである。
<comp:addev6out xmlns:comp="http://www.complex.net">
<decval>14.28</decval>
<fltval>1.4E+2</fltval>
<intval>120</intval>
</comp:addev6out>

ステップ 1 から 12 の要約

  1. メッセージ・セット MAPPING3_COMPLEX_messages が作成され、メッセージ addev1、addev1s、および addev1n が取り込まれる。メッセージ・フロー addev1 がプロジェクト MAPPING3_COMPLEX_flows に作成される。これにはマッピング・ファイル addev1_Mapping.msgmap および addev1._Mapping1.msgmap が含まれる。テスト用インスタンス・メッセージの入ったファイル。
  2. 出力メッセージは以下の形式になるはずである。
    <comp:addev1s xmlns:comp="http://www.complex.net">
    <bin><![CDATA[010203]]></bin>
    <dat>2005-08-06T00:00:00-01:00</dat>
    <dur>P2Y4M</dur>
    <str>dat</str>
    </comp:addev1s>
    <comp:addev1s xmlns:comp="http://www.complex.net">
    <bin><![CDATA[010203]]></bin>
    <dat>2005-05-06T00:00:00-01:00</dat>
    <dur>P3Y4M</dur>
    <str>dur</str>
    </comp:addev1s>
    &<comp:addev1n xmlns:comp="http://www.complex.net">
    <dec>193.4</dec>
    <flt>3.245E+3</flt>
    <int>21040</int>
    </comp:addev1n>
  3. メッセージ addev2 がメッセージ定義 COMPLEX に作成され、メッセージ addev2out がメッセージ定義 COMP2 に作成される。メッセージ・フロー addev2 が作成され、これにマッピング・ファイル addev2_Mapping.msgmap が含まれる。テスト用インスタンス・メッセージの入ったファイル。
  4. 出力メッセージは以下の形式になるはずである。
    <c2:addev2out xmlns:c2="http://www.comp2.net"  xmlns:comp="http://www.complex.net">
    <accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
    <transvalue>-25.28</transvalue>
    <balance>1518.28</balance>
    </c2:addev2out>
    <c2:addev2out xmlns:c2="http://www.comp2.net"  xmlns:comp="http://www.complex.net">
    <accountdetails>567432876543 52-84-02 Benn Brian</accountdetails>
    <transvalue>25.28</transvalue>
    <balance>1568.84</balance>
    </c2:addev2out>
  5. メッセージ addev3 がメッセージ定義 COMPLEX に作成され、マッピング・ファイル addev3_Mapping.msgmap が含まれるメッセージ・フロー addev3 が作成される。テスト用インスタンス・メッセージの入ったファイル。
  6. 出力メッセージは以下の形式になるはずである。
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <sstr>first</sstr>
    <comp1>
    <dat1>2005-06-24</dat1>
    <sval>date value</sval>
    </comp1>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>3</count>
    <comp:gcompel>
    <fstr>first</fstr>
    <multel>
    <in1>1</in1>
    <in2>C</in2>
    <in3>2.45E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>second</fstr>
    <multel>
    <in1>1</in1>
    <in2>D</in2>
    <in3>7.625E+3</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>third</fstr>
    <multel>
    <in1>0</in1>
    <in2>C</in2>
    <in3>4.9E+0</in3>
    </multel>
    </comp:gcompel>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    <repstr>def</repstr>
    <repstr>ghi</repstr>
    <repstr>jkl</repstr>
    <repstr>mno</repstr>
    </comp:addev3>
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <intrep>45</intrep>
    <intrep>12</intrep>
    <intrep>920</intrep>
    <comp2>
    <bool1>1</bool1>
    <dat2>2005-06-24</dat2>
    </comp2>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>5</count>
    <comp:gcompel>
    <fstr>first</fstr>
    <multel>
    <in1>1</in1>
    <in2>C</in2>
    <in3>2.45E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>second</fstr>
    <multel>
    <in1>1</in1>
    <in2>D</in2>
    <in3>7.625E+3</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>third</fstr>
    <multel>
    <in1>0</in1>
    <in2>C</in2>
    <in3>4.9E+0</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>fourth</fstr>
    <multel>
    <in1>1</in1>
    <in2>F</in2>
    <in3>2.98E+1</in3>
    </multel>
    </comp:gcompel>
    <comp:gcompel>
    <fstr>fifth</fstr>
    <multel>
    <in1>0</in1>
    <in2>D</in2>
    <in3>8.57E-2</in3>
    </multel>
    </comp:gcompel>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    </comp:addev3>
    <comp:addev3 xmlns:comp="http://www.complex.net">
    <dur>P2Y2M</dur>
    <comp3>
    <int1>6</int1>
    <dec1>2821.54</dec1>
    </comp3>
    <comp3>
    <int1>41</int1>
    <dec1>0.02</dec1>
    </comp3>
    <binel><![CDATA[3132333435]]></binel>
    <lelem latt="24">twenty four</lelem>
    <lcomp>
    <head>nesting start</head>
    <incomp>
    <count>0</count>
    </incomp>
    <footer>nesting end</footer>
    </lcomp>
    <repstr>abc</repstr>
    <repstr>def</repstr>
    <repstr>ghi</repstr>
    <repstr>jkl</repstr>
    <repstr>mno</repstr>
    <repstr>pqr</repstr>
    <repstr>stu</repstr>
    <repstr>vwx</repstr>
    </comp:addev3>
  7. メッセージ addev4in がメッセージ定義 COMPLEX に作成され、メッセージ addev4out がメッセージ定義 COMP に作成される。メッセージ・フロー addev4 が作成され、これにマッピング・ファイル addev4_Mapping.msgmap が含まれる。インスタンス・メッセージの入ったファイル。
  8. 出力メッセージは以下の形式になるはずである。
    <c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
    <account>12345678901</account>
    <tdate>2005-05-15</tdate>
    <value>2891.3</value>
    </c2:addev4out>
    <c2:addev4out xmlns:c2="http://www.comp2.net" xmlns:comp="http://www.complex.net" >
    <account>12345678901</account>
    <tdate>2005-04-25</tdate>
    <value>-14.25</value>
    <value>100</value>
    </c2:addev4out>
  9. メッセージ addev5in および addev5out がメッセージ定義 COMPLEX に作成される。マッピング・ファイル addev5_Mapping.msgmap および ESQL ファイル addev5.esql の入ったメッセージ・フロー addev5 が作成される。インスタンス・メッセージの入ったファイル。
  10. 出力メッセージは以下の形式になるはずである。
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>151.18</grossvalue>
    <netvalue>90.708</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>-127.01</grossvalue>
    <netvalue>-38.103</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>815.4042</grossvalue>
    <netvalue>611.55315</netvalue>
    </comp:addev5out>
    <comp:addev5out xmlns:comp="http://www.complex.net">
    <grossvalue>78.38159311087190527448869752421959</grossvalue>
    <netvalue>72.11106566200215285252960172228202</netvalue>
    </comp:addev5out>
    メッセージ出力はありませんが、イベント・ログには次の項目が含まれているはずです。
    BIP2949 ( BRK.デフォルト ) ユーザー生成 ESQL 例外が発生しました。この例外と一緒に提供される追加情報: ''Invalid Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
    この例外は、THROW EXCEPTION ステートメントにより発生しました。これは THROW ステートメントの通常の振る舞いです。これはユーザーにより生成された例外であるため、メッセージ・フローおよび発生した例外のタイプによってユーザー処置が決定されます。
  11. メッセージ addev6in および addev6out がメッセージ定義 COMPLEX に作成される。マッピング・ファイル addev6_Mapping.msgmap および ESQL ファイル addev6.esql の入ったマッピング・フロー addev6 が作成される。システム CLASSPATH が見つけることのできる場所に、 Java ソース addev6.java およびコンパイルされたクラス・ファイル addev6.class が置かれる。インスタンス・メッセージの入ったファイル。
  12. 出力メッセージは以下の形式になるはずである。
    <comp:addev6out xmlns:comp="http://www.complex.net">
    <decval>14.28</decval>
    <fltval>1.4E+2</fltval>
    <intval>120</intval>
    </comp:addev6out>
関連タスク
例: メッセージ・マッピングの作成、構成、およびデプロイ
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2005 Last updated: 11/07/2005
ar25251_