ユーザー定義の ESQL 関数を使用したメッセージ・フローの作成

始める前に
これは、単純メッセージのエンリッチメントを実行する シナリオの 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. MQInput > Mapping > MQOutput というマッピングを含む addev5 というメッセージ・フローを作成します。
  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 ヘッダーを持つ、以下のインスタンス・メッセージを作成します。
    <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>
    <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>
    <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>
    <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>
    <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>
以下のリソースが作成されました。
メッセージ・セットおよびメッセージ・フローをデプロイします。

メッセージ・セットおよびメッセージ・フローのデプロイ

これは、単純メッセージのエンリッチメントを実行する シナリオの 10 番目のステージです。このトピックでは、メッセージ・セットおよびメッセージ・フローをデプロイし、 ブローカーを介してインスタンス・メッセージを実行する方法について説明します。
  1. addev5 と呼ばれる bar ファイルを作成します。
  2. メッセージ・セット MAPPING3_COMPLEX_messages およびメッセージ・フロー addev5 を bar ファイルに追加します。
  3. bar ファイルをブローカーにデプロイします。
  4. インスタンス文書を入力キューに入れます。
出力メッセージは、以下のようになります。
<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 ステートメントの通常の動作です。これはユーザーにより生成された例外であるため、 メッセージ・フローおよびスローされる例外のタイプによってユーザー処置が決定されます。
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ar25251_9_