Codepage konvertieren und Nachrichtenverschlüsselung

Mit Hilfe von ESQL in einem Rechenknoten können Sie Daten für die Codepage und Nachrichtenverschlüsselung konvertieren. Falls in Ihrem Nachrichtenfluss WebSphere MQ-Nachrichten verarbeitet werden, können Sie für die Bereitstellung dieser Konvertierungen die Funktionen von WebSphere MQ verwenden (dazu gehören auch die GET- und PUT-Optionen sowie die Datenkonvertierungsexits von WebSphere MQ). Falls Sie keine WebSphere MQ-Nachrichten verarbeiten oder die Funktionen von WebSphere MQ nicht nutzen möchten, können Sie die Funktionen von WebSphere Message Broker verwenden, indem Sie den entsprechenden ESQL-Code in einem Rechenknoten in Ihrem Nachrichtenfluss codieren.

Der Inhalt des MQMD, MQRFH2 und des Hauptteils einer Nachricht in der MRM-Domäne, die mit einem physischen CWF-Format modelliert wurde, kann einer Codepage- und Verschlüsselungskonvertierung unterliegen. Der Inhalt des Hauptteils einer Nachricht in den XML-, XMLNS- und JMS-Domänen sowie Nachrichten in der MRM-Domäne, die mit einem physischen XML- oder TDS-Format modelliert wurden, werden als Zeichenfolgen (strings) behandelt. Es kommt nur die Codepage-Konvertierung zur Anwendung; eine Verschlüsselungskonvertierung ist nicht erforderlich.

Bei Nachrichten in der MRM-Domäne, die mit einem physischen CWF-Format modelliert wurden, können Sie die Felder 'MQMD CCSID' und 'Encoding' (Verschlüsselung) der Ausgabenachricht, sowie die CCSID (die ID des codierten Zeichensatzes) und Verschlüsselung weiterer Header auf den erforderlichen Zielwert setzen.

Bei Nachrichten in der MRM-Domäne, die mit einem physischen XML- oder TDS-Format modelliert wurden, können Sie das Feld 'MQMD CCSID' der Ausgabenachricht, sowie die CCSID weiterer Header festlegen. XML- und TDS-Daten werden als Zeichenfolgen behandelt und unterliegen daher lediglich der CCSID-Konvertierung.

Angenommen, eine Nachricht von WebSphere MQ verfügt über einen MQMD-Header, einen MQRFH2-Header sowie einen Nachrichtenhauptteil. Wenn Sie diese Nachricht in Mainframe-CodedCharSetId und -Encoding konvertieren möchten, codieren Sie im Rechenknoten folgenden ESQL-Code:

SET OutputRoot.MQMD.CodedCharSetId = 500;
SET OutputRoot.MQMD.Encoding = 785;
SET OutputRoot.MQRFH2.CodedCharSetId = 500; 
SET OutputRoot.MQRFH2.Encoding = 785;

Das folgende Beispiel veranschaulicht die erforderlichen Schritte zur Änderung einer CWF-Nachricht (CWF = Custom Wire Format), damit diese von WebSphere Message Broker an IMS unter z/OS übergeben werden kann.

  1. Sie haben die Eingabenachricht in XML definiert und verwenden einen MQRFH2-Header. Entfernen Sie den Header, bevor Sie die Nachricht an IMS übergeben.
  2. Die an IMS übergebene Nachricht muss über einen MQIIH-Header verfügen und muss in der z/OS-Codepage geschrieben sein. Diese Nachricht wird im MRM modelliert und hat den Namen 'IMS1'. Definieren Sie die PIC X-Felder in dieser Nachricht als den logischen Typ 'Zeichenfolge' (string), damit Konvertierungen zwischen EBCDIC und ASCII stattfinden können. Falls diese den logischen Typ 'Binär' (binary) haben, findet keine Datenkonvertierung statt; die binären Daten werden ignoriert, wenn eine CWF-Nachricht vom MRM-Parser syntaktisch analysiert wird.
  3. Die vom IMS empfangene Nachricht wird im MRM ebenfalls definiert und trägt den Namen 'IMS2'. Definieren Sie die PIC X-Felder in dieser Nachricht als den logischen Typ 'Zeichenfolge' (string), damit Konvertierungen zwischen EBCDIC und ASCII stattfinden können. Falls diese den logischen Typ 'Binär' (binary) haben, findet keine Datenkonvertierung statt; die binären Daten werden ignoriert, wenn eine CWF-Nachricht vom MRM-Parser syntaktisch analysiert wird.
  4. Konvertieren Sie die Antwortnachricht in die Windows-Codepage. Der MQIIH-Header verbleibt in dieser Nachricht.
  5. Sie haben einen Nachrichtenfluss erstellt, der folgende Knoten enthält: :
    1. Der abgehende Nachrichtenfluss MQEmpfangsknoten1 --> Rechenknoten1 --> MQSendeknoten1.
    2. Der ankommende Nachrichtenfluss MQEmpfangsknoten2 --> Rechenknoten2 --> MQSendeknoten2.
  6. Codieren Sie den ESQL-Code im (abgehenden) Rechen1-Knoten (Compute1-Knoten) wie folgt, wobei Sie die relevante Nachrichtengruppen-ID (MessageSet id) angeben. Dieser Code demonstriert die Verwendung des Standardnamens der physischen CWF-Schicht. Sie müssen den Namen verwenden, der Ihren Modelldefinitionen entspricht. Falls Sie einen falschen Wert angeben, schlägt der Broker mit der Nachricht BIP5431 fehl.
    -- Schleife für das Kopieren von Nachrichtenheadern
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J - 1 DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
      END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 500;
    SET OutputRoot.MQMD.Encoding = 785;
    SET OutputRoot.MQMD.Format = 'MQIMS   ';
    SET OutputRoot.MQIIH.StrucId = 'IIH ';
    SET OutputRoot.MQIIH.Version = 1;
    SET OutputRoot.MQIIH.StrucLength = 84;
    SET OutputRoot.MQIIH.Encoding = 785;
    SET OutputRoot.MQIIH.CodedCharSetId = 500;
    SET OutputRoot.MQIIH.Format = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Flags = 0;
    SET OutputRoot.MQIIH.LTermOverride = '        ';
    SET OutputRoot.MQIIH.MFSMapName = '        ';
    SET OutputRoot.MQIIH.ReplyToFormat = 'MQIMSVS ';
    SET OutputRoot.MQIIH.Authenticator = '        ';
    SET OutputRoot.MQIIH.TranInstanceId = X'00000000000000000000000000000000';
    SET OutputRoot.MQIIH.TranState = ' ';
    SET OutputRoot.MQIIH.CommitMode = '0';
    SET OutputRoot.MQIIH.SecurityScope = 'C';
    SET OutputRoot.MQIIH.Reserved = ' ';
    SET OutputRoot.MRM.e_elen08 = 30;
    SET OutputRoot.MRM.e_elen09 = 0;
    SET OutputRoot.MRM.e_string08 = InputBody.e_string01;
    SET OutputRoot.MRM.e_binary02 = X'31323334353637383940';
    SET OutputRoot.Properties.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS1';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

    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
  7. Erstellen Sie den ESQL-Code im (eingehenden) Rechen2-Knoten (Compute2-Knoten) wie folgt, wobei Sie die relevante Nachrichtengruppen-ID (MessageSet id) angeben. Dieser Code demonstriert die Verwendung des Standardnamens der physischen CWF-Schicht. Sie müssen den Namen verwenden, der Ihrer Modelldefinition entspricht. Falls Sie einen falschen Wert angeben, schlägt der Broker mit der Nachricht BIP5431 fehl.
    -- Schleife für das Kopieren von Nachrichtenheadern
    DECLARE I INTEGER 1;
    DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
    
    WHILE I < J DO
      SET OutputRoot.*[I] = InputRoot.*[I];
      SET I=I+1;
      END WHILE;
    
    SET OutputRoot.MQMD.CodedCharSetId = 437;
    SET OutputRoot.MQMD.Encoding = 546;
    SET OutputRoot.MQMD.Format = 'MQIMS   ';
    SET OutputRoot.MQIIH.CodedCharSetId = 437;
    SET OutputRoot.MQIIH.Encoding = 546;
    SET OutputRoot.MQIIH.Format = '        ';
    SET OutputRoot.MRM = InputBody;
    SET OutputRoot.Properties.MessageDomain = 'MRM';
    SET OutputRoot.Properties.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS2';
    SET OutputRoot.Properties.MessageFormat = 'CWF1';

Sie müssen für die Eigenschaften des Knotens 'MQEmpfang1' keine bestimmten Werte eingeben, da die Nachricht und die Nachrichtengruppe im MQRFH2-Header identifiziert werden und keine Konvertierung erforderlich ist.

Sie müssen im MQEmpfangsknoten für den eingehenden Nachrichtenfluss (MQEmpfang2) Werte für Nachrichtendomäne, -gruppe, -typ und -format festlegen. Sie müssen keine Konvertierungsparameter festlegen.

Es gibt eine spezifische Situation, in der Sie möglicherweise Daten einer Codepage in eine andere Codepage konvertieren müssen: Wenn Nachrichten Anzeiger für eine neue Zeile (NL) enthalten und zwischen EBCDIC- und ASCII-Systemen übergeben werden. Die erforderliche Konvertierung in dieser Situation wird im Abschnitt EBCDIC NL in ASCII CR LF konvertieren beschrieben.

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)
Datenbankknoten (Database)
Filterknoten
ESQL-Referenz
CARDINALITY-Funktion
DECLARE-Anweisung
SET-Anweisung
WHILE-Anweisung
Unterstütze Codepages
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac11620_