IBM Integration Bus, Version 9.0.0.7 Operating Systems: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

See information about the latest product version

EBCDIC NL in ASCII CR LF konvertieren

Eventuell müssen Sie in einer Textnachricht NL-Zeichen (Zeichen für neue Zeile) in Zeichenpaare für Rücklauf (Carriage Return, CR) und Zeilenvorschub (Line Feed, LF) ändern. Dieses Beispiel zeigt eine Methode, mit der Sie diese Zeichen konvertieren können.

Diese Konvertierung kann hilfreich sein, wenn Nachrichten von einer EBCDIC-Plattform (beispielsweise mit der CCSID 1047) an eine ASCII-Plattform (beispielsweise mit der CCSID 437) gesendet werden. Es können Probleme auftreten, da das hexadezimale EBCDIC NL-Zeichen '15' in das nicht definierte hexadezimale ASCII-Zeichen '7F' konvertiert wird. In der ASCII-Codepage gibt es keinen entsprechenden Codepunkt für das NL-Zeichen.

In diesem Beispiel wird ein Nachrichtenfluss erstellt, der die Eingabenachricht als Nachricht in der BLOB-Domäne interpretiert. Die Nachricht wird an einen ResetContentDescriptor-Knoten übergeben, damit die Daten in eine Nachricht der MRM-Domäne zurückgesetzt werden. Die Nachricht heißt 'msg_nl' (eine Gruppe sich wiederholender Zeichenfolgeelemente, die durch EBCDIC NL-Zeichen begrenzt werden). Anschließend wird mithilfe eines Compute-Knotens eine Ausgabe auf Basis einer anderen Nachricht in der MRM-Domäne erstellt. Diese heißt 'msg_crlf' (eine Gruppe sich wiederholender Zeichenfolgeelemente, die durch CR-LF-Paare begrenzt werden). Die Nachricht wird dann in einem anderen ResetContentDescriptor-Knoten auf BLOB zurückgesetzt. Dieser Nachrichtenfluss wird in der nachfolgenden Abbildung veranschaulicht.

Die Abbildung zeigt einen linearen Nachrichtenfluss, der aus folgenden Knoten besteht: MQInput-Knoten mit Out-Terminal, das mit dem ResetContentDescriptor-Knoten verbunden ist, mit Out-Terminal, das mit dem Compute-Knoten verbunden ist, mit Out-Terminal, das mit dem ResetContentDescriptor1-Knoten verbunden ist, mit Out-Terminal, das mit dem MQOutput-Knoten verbunden ist. Keine weiteren Terminals verbunden.

Die folgenden Anweisungen gelten für die Erstellung der Nachrichten und die Konfiguration des Nachrichtenflusses.

  1. Erstellen Sie die Nachrichtenmodelle für die Nachrichten in der MRM-Domäne:
    1. Erstellen Sie das Nachrichtengruppenprojekt 'myProj'.
    2. Erstellen Sie die Nachrichtengruppe 'myMessageSet' mit einem physischen TDS-Format (der Standardname lautet Text1).
    3. Erstellen Sie das Element 'string1' mit dem Typ xsd:string.
    4. Erstellen Sie einen komplexen Typ namens 't_msg_nl' und geben Sie die folgenden Eigenschaften des komplexen Typs an:
      • Zusammensetzung = Elemente in angegebener Reihenfolge
      • Inhaltsvalidierung = Geschlossen
      • Trennzeichen für Datenelemente = Alle Elemente mit Begrenzer
      • Begrenzer = <U+0085> (hex '0085' ist die UTF-16-Darstellung eines NL-Zeichens)
      • Wiederholen = Ja
      • Mindestanzahl = 1
      • Maximale Anzahl = 50 (es wird davon ausgegangen, dass der Nachrichtentext nicht aus mehr als 50 Zeilen besteht)
    5. Fügen Sie das Element string1 hinzu und legen Sie die folgende Eigenschaft fest:
      • Begrenzer für Wiederholelemente = <U+0085>
    6. Erstellen Sie die Nachricht 'msg_nl' und setzen Sie den zugehörigen komplexen Typ auf t_msg_nl
    7. Erstellen Sie einen komplexen Typ namens 't_msg_crlf' und geben Sie die folgenden Eigenschaften des komplexen Typs an:
      • Zusammensetzung = Elemente in angegebener Reihenfolge
      • Inhaltsvalidierung = Geschlossen
      • Trennzeichen für Datenelemente = Alle Elemente mit Begrenzer
      • Begrenzer = <CR><LF> (<CR> und <LF> sind die mnemonischen Zeichen für die Zeichen CR und LF)
      • Wiederholen = Ja
      • Mindestanzahl = 1
      • Maximale Anzahl = 50
    8. Fügen Sie das Element string1 hinzu und legen Sie die folgende Eigenschaft fest:
      • Begrenzer für Wiederholelemente = <CR><LF>
    9. Erstellen Sie die Nachricht 'msg_crlf' und setzen Sie den komplexen Typ auf t_msg_crlf.
  2. Konfigurieren Sie den in der vorangegangenen Abbildung gezeigten Nachrichtenfluss:
    1. Beginnen Sie mit dem MQInput-Knoten:
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Geben Sie für Warteschlangennamen = <Name der Warteschlange für Eingabenachrichten> an.
    2. Fügen Sie den Knoten 'ResetContentDescriptor' hinzu und verbinden Sie ihn mit dem Out-Terminal des MQInput-Knotens:
      • Legen Sie Nachrichtendomäne = MRM fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
      • Geben Sie für Nachrichtengruppe = <Name der Nachrichtengruppe> an (das Feld darf maximal 13 Zeichen enthalten)
      • Wählen Sie Nachrichtengruppe zurücksetzen aus.
      • Legen Sie Nachrichtentyp = msg_nl fest.
      • Wählen Sie Nachrichtentyp zurücksetzen aus.
      • Legen Sie Nachrichtenformat = Text1 fest.
      • Wählen Sie Nachrichtenformat zurücksetzen aus.
    3. Fügen Sie den Compute-Knoten hinzu und verbinden Sie ihn mit dem Out-Terminal des ResetContentDescriptor-Knotens:
      • Geben Sie einen Namen für das ESQL-Modul dieses Knotens ein, oder übernehmen Sie den Standardwert (<Nachrichtenflussname>_Compute).
      • Klicken Sie mit der rechten Maustaste auf den Compute-Knoten und wählen Sie ESQL öffnen aus. Fügen Sie folgenden ESQL-Code im Modul hinzu:
        -- Deklaration lokaler Arbeitsvariablen
        DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
        
        -- Schleife für das Kopieren von Nachrichtenheadern aus der Eingabe- in die Ausgabenachricht
        WHILE I < J DO
         		SET OutputRoot.*[I] = InputRoot.*[I];
         		SET I=I+1;
        END WHILE; 
        
        -- Festlegen des neuen Ausgabenachrichtentyps, der den CRLF-Begrenzer verwendet
        SET OutputRoot.Properties.MessageType = 't_msg_crlf';
        
        -- Schleife für das Kopieren jeder Instanz des untergeordneten Eintrags 'string1' im Nachrichtenhauptteil
        SET I = 1;
        SET J = CARDINALITY("InputBody"."string1"[]);
        WHILE I <= J DO
          SET "OutputRoot"."MRM"."string1"[I] = "InputBody"."string1"[I];
          	SET I=I+1;
        END WHILE;

        Die Verwendung der Variablen J, initialisiert mit dem Wert der Kardinalität der vorhandenen Nachrichtenheader, ist effizienter als die Berechnung der Kardinalität in jeder einzelnen Iteration der Schleife; dies ist der Fall, wenn Sie die folgende WHILE-Anweisung codieren:

        WHILE I < CARDINALITY(InputRoot.*[]) DO
    4. Fügen Sie den Knoten 'ResetContentDescriptor1' hinzu und verbinden Sie ihn mit dem Out-Terminal des Compute-Knotens:
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
    5. Fügen Sie schließlich den MQOutput-Knoten hinzu und verbinden Sie ihn mit dem Out-Terminal des ResetContentDescriptor1-Knotens. Konfigurieren Sie dessen Eigenschaften, um die Ausgabenachricht an die erforderliche Warteschlange(n) zu leiten.

ac11630_.htm | Letzte Aktualisierung Monday, 27 March 2017