Es gibt bestimmte Szenarios, in denen die Migration von .mfmap-Dateien nicht unterstützt wird. In diesem Abschnitt wird erläutert, weshalb die Migration in diesen Situationen nicht automatisch durchgeführt wird. Außerdem enthält dieser Abschnitt Anweisungen zur Durchführung einer erfolgreichen Migration.
Das Programmiermodell für Nachrichtenzuordnungen in Version 5.0 (mit dem Dateiformat 'mfmap') unterscheidet sich in wesentlichen Punkten von dem Programmiermodell in Version 6.0 (mit dem Dateiformat 'msgmap'). Das Programmiermodell für Nachrichtenzuordnungen in Version 5.0 ist ein prozedurales Programmiermodell, das im Grunde genommen eine Alternative zu ESQL darstellt. In diesem Modell werden alle erforderlichen Schritte für die Durchführung einer Umsetzung beschrieben. In Version 6.0 wird ein deklaratives Programmiermodell verwendet. In diesem Modell wird das Ergebnis der Umsetzung beschrieben; über die Tools wird festgelegt, wie das Ergebnis erzielt wird.
Die meisten Migrationsfehler sind darauf zurückzuführen, dass die Nachrichtenzuordnungen zu viele Informationen zu den Schritten für die Umsetzung und zu wenig Informationen zu dem gewünschten Ergebnis enthalten. Für diese Nachrichtenzuordnungen wird die Migration aktiviert, indem die MFMAP-Datei geändert wird, so dass bestimmte Abschnitte zur Vorgehensweise gesondert in eine ESQL-Funktion oder -Prozedur geschrieben werden, die von der Nachrichtenzuordnung aufgerufen werden kann. ESQL wird von der .mfmap-Datei aufgerufen und ist nicht in der Datei als Ausdruck enthalten. Mit dem Befehl mqsimigratemfmaps wird dann die MFMAP-Datei migriert. Es wird jedoch kein Migrationsfehler protokolliert, sondern ESQL wird aufgerufen.
Eine Einschränkung besteht darin, dass ESQL (die Laufzeit für MFMAP- und MSGMAP-Dateien) keine Funktionen definieren kann, die komplexe Elementwerte (Werte des Typs REFERENCE) zurückgeben. In der folgenden Prozedur wird erläutert, wie diese Einschränkung für komplexe Elemente umgangen werden kann; in vielen Fällen muss die Zuordnung als ESQL neu geschrieben werden. Weitere Beispiele und Informationen zum Aufrufen von ESQL aus Zuordnungen finden Sie im WebSphere Message Brokers-Beispiel unter .
src_msg.e[1] + src_msg.e[2]Berechnen Sie das Ergebnis in einer ESQL-Funktion:
CREATE FUNCTION addOneAndTwo(IN src_msg) BEGIN RETURN src_msg.e[1] + src_msg.e[2]; END;Rufen Sie in der MSGMAP-Datei die ESQL-Funktion 'addOneAndTwo' unter Verwendung des übergeordneten Elements 'src_msg' als Parameter auf.
src_msg.*oder
src_msg.*[]kann unter Verwendung einer Funktion verarbeitet werden, die das übergeordnete Element des Wiederholungsfeld verarbeitet:
CREATE FUNCTION processAny(IN src_msg) BEGIN DECLARE nodeRef REFERENCE TO src_msg.e.*; DECLARE result <dataType> <initialValue>; WHILE LASTMOVE nodeRef DO --expression goes here SET result = result; END WHILE; RETURN RESULT; END;Rufen Sie in der MSGMAP-Datei die ESQL-Funktion unter Verwendung des übergeordneten Elements 'src_msg' als Parameter auf.
src_msg.{'a' || 'b'}, können von Funktionen verarbeitet werden, die das übergeordnete Element des Wiederholungsfeld verarbeiten:
CREATE FUNCTION processDynamicName(IN src_msg) BEGIN RETURN src_msg.{'a' || 'b'}; END;Rufen Sie in der MSGMAP-Datei die ESQL-Funktion unter Verwendung des übergeordneten Elements 'src_msg' als Parameter auf.
SELECT MAX("#T".FIRSTNAME) FROM Database.CUSTOMER AS "#T" WHERE "#T".CUSTOMERID = custId, können von Funktionen verarbeitet werden, die das übergeordnete Element des Wiederholungsfeld verarbeiten:
CREATE FUNCTION processMAX(IN custId) BEGIN RETURN SELECT MAX("#T".FIRSTNAME) FROM Database.CUSTOMER AS "#T" WHERE "#T".CUSTOMERID = custId END;Rufen Sie in der MSGMAP-Datei die ESQL-Funktion unter Verwendung des Elements 'custId' als Parameter auf.
e || "#I"müssen in ESQL vollständig neu geschrieben werden. Laut Definition muss ein komplexes übergeordnetes Wiederholelement vorhanden sein. Dies wird von ESQL-Funktionen nicht unterstützt.
src_msg.e[src_msg.a]müssen unter Verwendung von 'if'-Zeilen, 'msgmap:occurrence()'-Funktionen und ESQL-Funktionen neu geschrieben werden:
for src_msg.e if condition msgmap:occurrence(src_msg/e) = src_msg/a
src_msg.e["#I" +5] src_msg.e[< 3]muss die gesamte MFMAP-Datei in ESQL neu geschrieben werden, da der indexierte Zugriff auf Wiederholfelder von MGSMAP-Dateien noch nicht unterstützt wird.
src_msg.e IN (1, 2, 3)müssen in ESQL neu geschrieben werden, da ESQL-ROW-Ausdrücke von MSGMAP-Dateien nicht unterstützt werden.