开发使用用户定义的 ESQL 函数的消息流

开始之前
这是执行简单消息扩充方案的第九阶段。本主题说明如何使用用户定义的 ESQL 函数开发消息流。它还包含建立相应的消息模型和实例文档。
  1. 在 COMPLEX 消息定义中(在名称空间 www.complex.net 中),创建名为 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 的消息流,该消息流包含以下映射:> 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 头创建以下实例消息:
    <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>
已创建下列资源:
现在部署消息集和消息流。

部署消息集和消息流

这是执行简单消息扩充方案的第十阶段。本主题说明如何部署消息集和消息流,并通过代理运行实例消息。
  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.default ) A user generated ESQL exception has been thrown. The additional
information provided with this exception is: ''Invalid Operator'' ''MOD''
'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11'
该异常由 THROW EXCEPTION 语句抛出。这是 THROW 语句的常规行为;因为是用户生成的异常,所以用户操作由消息流和抛出的异常类型来确定。
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ar25251_9_