Conversione della code page e della codifica del messaggio

E' possibile utilizzare ESQL all'interno di un nodo Compute per convertire i dati per la code page e per la codifica messaggi. Se il flusso di messaggi sta elaborando messaggi WebSphere MQ, è possibile utilizzare le funzioni WebSphere MQ (comprese le opzioni get e put e i risultati della conversione dati WebSphere MQ) per fornire queste conversioni. Se non si stanno elaborando messaggi WebSphere MQ o si decide di non utilizzare le funzioni WebSphere MQ, è possibile utilizzare le funzioni WebSphere Message Broker codificando l'ESQL appropriato in un nodo Compute nel flusso di messaggi.

Il contenuto dell'MQMD, l'MQRFH2 e il contenuto di un messaggio nel dominio MRM di cui è stato creato un modello con un formato fisico CWF può essere soggetto alla conversione della code page e della codifica. Il contenuto di un messaggio nei domini XML, XMLNS e JMS e di quei messaggi nel dominio MRM di cui è stato creato un modello con un formato fisico XML o TDS, viene considerato come stringhe. Si applica solo la conversione della code page; non è richiesta la conversione della codifica.

Per i messaggi nel dominio MRM di cui è stato creato un modello con il formato fisico CWF, è possibile impostare i campi MQMD CCSID e Codifica del messaggio di output, più CCSID e Codifica di qualsiasi intestazione aggiuntiva, sul valore di destinazione richiesto.

Per i messaggi nel dominio MRM di cui è stato creato un modello con il formato fisico XML o TDS, è possibile impostare il campo MQMD CCSID del messaggio di output, più il CCSID di qualsiasi intestazione aggiuntiva. I dati XML e TDS sono gestiti come stringhe e sono quindi soggetti solo alla conversione CCSID.

Un messaggio WebSphere MQ di esempio ha un'intestazione MQMD, un'intestazione MQRFH2 e un contenuto del messaggio. Per convertire questo messaggio in un CodedCharSetId e in una Codifica mainframe, codificare il seguente ESQL nel nodo Compute:

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

Il seguente esempio mostra cosa fare per modificare un messaggio CWF in modo che possa essere trasmesso da WebSphere Message Broker a IMS su z/OS.

  1. E' stato definito il messaggio di input in XML e si sta utilizzando un'intestazione MQRFH2. Rimuovere l'intestazione prima di trasmettere il messaggio a IMS.
  2. Il messaggio trasmesso a IMS deve avere un'intestazione MQIIH e deve essere nella code page di z/OS. Il modello di questo messaggio è creato nell'MRM ed è denominato IMS1. Definire i campi PIC X in questo messaggio come stringa di tipo logico per effettuare le conversioni tra EBCDIC e ASCII. Se si tratta di dati binari di tipo logico, non avviene alcuna conversione dati; i dati binari vengono ignorati quando un messaggio CWF è analizzato dal programma di analisi MRM.
  3. Il messaggio ricevuto da IMS è definito anche in MRM ed è denominato IMS2. Definire i campi PIC X in questo messaggio come stringa di tipo logico per effettuare le conversioni tra EBCDIC e ASCII. Se si tratta di dati binari di tipo logico, non avviene alcuna conversione dati; i dati binari vengono ignorati quando un messaggio CWF è analizzato dal programma di analisi MRM.
  4. Convertire il messaggio di replica nella code page Windows. L'intestazione MQIIH è conservata su questo messaggio.
  5. E' stato creato un flusso di messaggi che contiene i seguenti nodi: :
    1. Il flusso in uscita, MQInput1 --> Compute1 --> MQOutput1.
    2. Il flusso in entrata, MQInput2 --> Compute2 --> MQOutput2.
  6. Codificare l'ESQL nel nodo Compute1 (in uscita) come segue, specificando il relativo id MessageSet. Tale codice mostra l'utilizzo del nome di livello fisico CWF predefinito. E' necessario utilizzare il nome che corrisponde alle definizioni del modello. Se si specifica un valore non corretto, il broker ha esito negativo con il messaggio BIP5431.
    -- Eseguire il loop per copiare le intestazioni del messaggio
    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';

    Si noti l'utilizzo di una variabile, J, inizializzata sul valore della cardinalità delle intestazioni esistenti nel messaggio. Questo metodo è più efficace rispetto al calcolare la cardinalità su ogni ripetizione del loop, il che si verifica quando si codifica la seguente istruzione WHILE:

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Creare ESQL nel nodo Compute2 (in entrata) come segue, specificando il relativo id MessageSet. Tale codice mostra l'utilizzo del nome di livello fisico CWF predefinito. E' necessario utilizzare il nome che corrisponde alla definizione del modello. Se si specifica un valore non corretto, il broker ha esito negativo con il messaggio BIP5431.
    -- Eseguire il loop per copiare le intestazioni del messaggio
    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';

Non è necessario impostare valori specifici per le proprietà del nodo MQInput1, poiché il messaggio e la serie di messaggi sono identificati nell'intestazione MQRFH2 è non è richiesta alcuna conversione.

E' necessario impostare i valori per il dominio, la serie, il tipo e il formato del messaggio nel nodo MQInput per il flusso di messaggi in entrata (MQInput2). Non è necessario impostare i parametri di conversione.

Una situazione specifica in cui si potrebbe avere bisogno di convertire i dati da una code page ad un'altra è quando i messaggi contengono indicatori di nuova riga e vengono trasmessi tra i sistemi EBCDIC e ASCII. La conversione richiesta per questa situazione è descritta in Conversione da NL EBCDIC a CR e LF ASCII.

Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Creazione di modelli di messaggio
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione dei file ESQL
Riferimenti correlati
NLS (National Language Support)
Nodo Compute
Nodo Database
Nodo Filter
Riferimento ESQL
Funzione CARDINALITY
Istruzione DECLARE
Istruzione SET
Istruzione WHILE
Code page supportate
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac11620_