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 folgenden Knoten besteht: MQInput1 (MQEmpfang1) mit Ausgangsterminal (Out), das mit dem Knoten 'ResetContentDescriptor1' verbunden ist, mit Ausgangsterminal (Out), das mit Compute1 (Rechen1) verbunden ist, mit Ausgangsterminal (Out), das mit ResetContentDescriptor2 verbunden ist, mit Ausgangsterminal (Out), das mit MQOutput1 (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:
      • Zuordnungen zu Wiederholelementen
    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:
      • Zuordnungen zu Wiederholelementen
    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 Knoten 'MQInput1' (MQEmpfang1):
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Geben Sie für Warteschlangennamen = <Name der Warteschlange für Eingabenachrichten> an.
    2. Fügen Sie den Knoten 'ResetContentDescriptor1' hinzu, der mit dem Ausgangsterminal des Knotens 'MQInput1' verbunden ist:
      • Legen Sie Nachrichtendomäne = MRM fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
      • Geben Sie für Nachrichtengruppe = <Name der Nachrichtengruppe> an (sie 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 = TDS1 aus.
      • Wählen Sie Nachrichtenformat zurücksetzen aus.
    3. Fügen Sie den Knoten 'Compute1' hinzu, der mit dem Ausgangsterminal des Knotens 'ResetContentDescriptor1' 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 Knoten 'Compute1', 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 'ResetContentDescriptor2' hinzu, der mit dem Ausgangsterminal des Knotens 'Compute1' verbunden ist:
      • Legen Sie Nachrichtendomäne = BLOB fest
      • Wählen Sie Nachrichtendomäne zurücksetzen aus.
    5. Fügen Sie schließlich den Knoten 'MQOutput1' hinzu, der mit dem Ausgangsterminal des Knotens 'ResetContentDescriptor2' 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
Einen Nachrichtenfluss entwerfen
Nachrichtenflussinhalte definieren
ESQL-Dateien verwalten
Zugehörige Verweise
Unterstützung für Landessprachen
Rechenknoten (Compute)
MQEmpfangsknoten
MQSendeknoten (MQOutput)
Knoten 'Deskriptor_für_Neuanalyse' (ResetContentDescriptor)
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, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac11630_