Nachrichtenfluss mit einer benutzerdefinierten ESQL-Funktion entwickeln

Vorbereitungen:
Dies ist der neunte Abschnitt des Szenarios zum Ausführen einer Erweiterung einfacher Nachrichteninhalte. In diesem Abschnitt wird veranschaulicht, wie Sie einen Nachrichtenfluss mit einer benutzerdefinierten ESQL-Funktion entwickeln können. Des Weiteren erfahren Sie, wie Sie entsprechende Nachrichtenmodelle und Instanzdokumente entwickeln.
  1. Erstellen Sie in der Nachrichtendefinition 'COMPLEX' im Namensbereich 'www.complex.net' die Nachrichten 'addev5in' und 'addev5out' mit folgenden Strukturen:
    addev5in
    value1                    (xsd:decimal) lokales Element
    operator                 (xsd:string) lokales Element
    value2                    (xsd:decimal) lokales Element
    rate                        (xsd:decimal) lokales Element
    addev5out
    grossvalue               (xsd:decimal) lokales Element
    netvalue                   (xsd:decimal) lokales Element
  2. Erstellen Sie den Nachrichtenfluss 'addev5' mit folgendem Zuordnungsinhalt: MQEmpfangsknoten > Zuordnungsknoten > MQSendeknoten.
  3. Öffnen Sie die Zuordnung, und wählen Sie 'addev5' als Quelle und 'addev5out' als Ziel aus.
  4. Erstellen Sie im Projekt 'MAPPING3_COMPLEX_flows' eine ESQL-Datei namens 'addev5', und fügen Sie folgende Funktionen ein:
    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('Ungültiger 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. Erweitern Sie im Spreadsheetfenster des Nachrichtenzuordnungseditor die Nachricht, und wählen Sie 'grossvalue' aus.
  6. Geben Sie im Spreadsheetfenster folgenden Ausdruck ein:
    esql:calcGrossvalue($source/comp:addev5in/value1, 
    $source/comp:addev5in/operator, 
    $source/comp:addev5in/value2)
  7. Wählen Sie das Ziel 'netvalue', und geben Sie im Ausdrucksfenster folgenden Ausdruck ein:
    esql:calcNetvalue($source/comp:addev5in/value1, 
    $source/comp:addev5in/operator, 
    $source/comp:addev5in/value2, 
    $source/comp:addev5in/rate)
  8. Erweitern Sie die Eigenschaftenbaumstruktur, und richten Sie die folgenden Werte ein:
    Nachrichtentyp      |       'addev5out'
  9. Erstellen Sie folgende Instanznachrichten mit den entsprechenden RFH2-Headern:
    <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>
Sie haben folgende Ressourcen erstellt:
Setzen Sie nun die Nachrichtengruppe und den Nachrichtenfluss ein.

Nachrichtengruppe und Nachrichtenfluss einsetzen

Dies ist der 10. Abschnitt des Szenarios zum Ausführen einer Erweiterung einfacher Nachrichteninhalte. Dieser Abschnitt veranschaulicht, wie Sie die Nachrichtengruppe und den Nachrichtenfluss einsetzen und die Instanznachrichten über den Broker ausführen können.
  1. Erstellen Sie eine BAR-Datei namens 'addev5'.
  2. Fügen Sie die Nachrichtengruppe 'MAPPING3_COMPLEX_messages' und den Nachrichtenfluss 'addev5' der BAR-Datei hinzu.
  3. Setzen Sie die BAR-Datei für den Broker ein.
  4. Stellen Sie die Instanzdokumente in die Eingabewarteschlange.
Die Ausgabenachrichten sehen wie folgt aus:
<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>
Falls keine Nachricht ausgegeben wird, suchen Sie im Ereignisprotokoll nach einem Eintrag, der ähnlich dem folgenden aussieht:
BIP2949 ( BRK.default ) A user generated ESQL exception has been thrown. (Es wurde eine benutzergenerierte ESQL-Ausnahme ausgelöst.) Weitere Informationen, die mit dieser Ausnahmebedingung bereitgestellt werden: ''Ungültiger Operator'' ''MOD'' 'addev5.Mapping.ComIbmCompute' '%5' '%6' '%7' '%8' '%9' '%10' '%11' 
Diese Ausnahmebedingung wurde von der Anweisung THROW EXCEPTION generiert. Dies ist das normale Verhalten einer THROW-Anweisung; da dies eine benutzergenerierte Ausnahme ist, wird die Benutzeraktion vom Nachrichtenfluss und vom ausgelösten Ausnahmetyp bestimmt.
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
ar25251_9_