EBCDIC NL in ASCII CR LF konvertieren

In diesem Abschnitt wird eine Beispieltask beschrieben, in der NL-Zeichen (Zeichen für neue Zeile) in einer Textnachricht in Zeichenpaare für Rücklauf (Carriage Return, CR) und Zeilenvorschub (Line Feed, LF) geändert werden.

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. Dieser wird an den Knoten 'Deskriptor_für_Neuanalyse' übergeben, damit die Daten in der MRM-Domäne in eine Nachricht zurückgesetzt werden. Die Nachricht heißt 'msg_nl' (eine Gruppe sich wiederholender Zeichenfolgeelemente, die durch EBCDIC NL-Zeichen begrenzt werden). Anschließend wird mit Hilfe eines Rechenknotens 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 in einem anderen Knoten des Typs 'Deskriptor_für_Neuanalyse' wieder in BLOB zurückgeändert. Dieser Nachrichtenfluss wird unten dargestellt.


Diagramm eines linearen Nachrichtenflusses, der aus Knoten besteht: Knoten 'MQEmpfang1' mit Ausgangsterminal (Out), das mit dem Knoten 'Deskriptor_für_Neuanalyse1' verbunden ist, mit Ausgangsterminal (Out), das mit dem Knoten 'Rechen1' verbunden ist, mit Ausgangsterminal (Out), das mit 'Deskriptor_für_Neuanalyse2' verbunden ist, mit Ausgangsterminal (Out), das mit dem Knoten 'MQSende1' 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 TDS1).
    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
      • Inhaltsauswertung = 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
      • Inhaltsauswertung = 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 oben abgebildeten Nachrichtenfluss:
    1. Beginnen Sie mit dem MQEmpfangsknoten1:
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Legen Sie Warteschlangenname = <Name Ihrer Warteschlange für Eingangsnachrichten> fest.
    2. Fügen Sie den Knoten 'Deskriptor_für_Neuanalyse1' hinzu, der mit dem Ausgangsterminal des MQEmpfangsknoten1 verbunden ist:
      • Legen Sie Nachrichtendomäne = MRM fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
      • Legen Sie Nachrichtengruppe = <ID Ihrer Nachrichtengruppe> fest (diese darf höchstens 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 = TDS1 aus.
      • Wählen Sie Nachrichtenformat zurücksetzen aus.
    3. Fügen Sie den Rechenknoten1 hinzu, der mit dem Ausgangsterminal des Knotens 'Deskriptor_für_Neuanalyse1' verbunden ist:
      • Geben Sie einen Namen für das ESQL-Modul dieses Knotens ein, oder übernehmen Sie den Standardwert (<Nachrichtenflussname>_Compute1).
      • Klicken Sie mit der rechten Maustaste auf den Rechenknoten1, und wählen Sie ESQL öffnen aus. Codieren Sie folgenden ESQL-Code im Modul:
        -- 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;

        Beachten Sie die Verwendung der Variable 'J', die mit dem Wert der Kardinalität initialisiert wird, der für die bereits vorhandenen Header in der Nachricht gilt. Dies 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 'Deskriptor_für_Neuanalyse2' hinzu, der mit dem Ausgangsterminal des Rechenknoten1 verbunden ist:
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
    5. Fügen Sie schließlich den MQSendeknoten1 hinzu, der mit dem Ausgangsterminal des Knotens 'Deskriptor_für_Neuanalyse2' verbunden ist. Konfigurieren Sie dessen Eigenschaften, um die Ausgabenachricht an die erforderliche Warteschlange(n) zu leiten.
Zugehörige Konzepte
Nachrichtenflüsse - Übersicht
Übersicht zu ESQL
Nachrichten modellieren
Zugehörige Tasks
Nachrichtenfluss entwerfen
Nachrichtenflussinhalt definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Unterstützung landessprachlicher Versionen
Rechenknoten
MQEmpfangsknoten
MQSendeknoten
Knoten 'Deskriptor_für_Neuanalyse'
ESQL-Referenz
DECLARE-Anweisung
SET-Anweisung
WHILE-Anweisung
Mnemonische Zeichen im TDS-Format
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
ac11630_