Conversione da NL EBCDIC a CR e LF ASCII

Questo argomento descrive un'attività di esempio che modifica i caratteri NL (new line/nuova riga) in un messaggio di testo in coppie di caratteri CR (carriage return/ritorno a capo) e LF (line feed/avanzamento riga).

Questa conversione potrebbe essere utile se i messaggi da una piattaforma EBCDIC (che utilizza, ad esempio, CCSID 1047) sono inviati a una piattaforma ASCII (che utilizza, ad esempio, CCSID 437). Si possono verificare dei problemi poiché il carattere NL EBCDIC esadecimale '15' è convertito nel carattere ASCII non definito esadecimale '7F'. Non esiste un punto codice corrispondente per il carattere NL nella code page ASCII.

In questo esempio, viene creato un flusso di messaggi che interpreta il messaggio di input come messaggio nel dominio BLOB. Tale flusso viene trasmesso in un nodo ResetContentDescriptor per reimpostare i dati in un messaggio nel dominio MRM. Il messaggio è denominato msg_nl (una serie di elementi di stringa che si ripetono delimitati dai caratteri NL EBCDIC). Si utilizza quindi un nodo Compute per creare un output in base ad un altro messaggio nel dominio MRM, denominato msg_crlf (una serie di elementi di stringa che si ripetono delimitati da coppie CR e LF). Il dominio di messaggi viene poi modificato di nuovo in BLOB in un altro nodo ResetContentDescriptor. Questo flusso di messaggi è mostrato di seguito.


Diagramma che mostra un flusso di messaggi lineare, comprensivo dei nodi: MQInput1 con il terminale Out connesso a ResetContentDescriptor1, con il terminale Out connesso a Compute1, con il terminale Out connesso a ResetContentDescriptor2, con il terminale Out connesso a MQOutput1. Nessun altro terminale connesso.

Le seguenti istruzioni mostrano come creare i messaggi e configurare il flusso di messaggi.

  1. Creare i modelli di messaggio per i messaggi nel dominio MRM:
    1. Creare un progetto della serie di messaggi denominato myProj.
    2. Creare una serie di messaggi denominata myMessageSet con un formato fisico TDS (il nome predefinito è TDS1).
    3. Creare un elemento string1 di tipo xsd:string.
    4. Creare un tipo complesso denominato t_msg_nl e specificare le seguenti proprietà del tipo complesso:
      • Composizione = Serie ordinata
      • Convalida contenuto = Chiuso
      • Separazione elementi dati = Tutti gli elementi delimitati
      • Delimitatore = <U+0085> (hex '0085' è la rappresentazione UTF-16 di un carattere NL)
      • Ripetizione =
      • Numero minimo ricorrenze = 1
      • Numero massimo ricorrenze = 50 (si presuppone che il testo del messaggio consista in non più di 50 righe)
    5. Aggiungere l'elemento string1 e impostare la seguente proprietà:
      • Delimitatore elemento ripetuto = <U+0085>
    6. Creare un messaggio msg_nl e impostare il tipo complesso associato su t_msg_nl
    7. Creare un tipo complesso denominato t_msg_crlf e specificare le seguenti proprietà del tipo complesso:
      • Composizione = Serie ordinata
      • Convalida contenuto = Chiuso
      • Separazione elementi dati = Tutti gli elementi delimitati
      • Delimitatore <CR><LF> (<CR> e <LF> sono mnemonici per i caratteri CR e LF)
      • Ripetizione =
      • Numero minimo ricorrenze = 1
      • Numero massimo ricorrenze = 50
    8. Aggiungere l'elemento string1 e impostare la seguente proprietà:
      • Delimitatore elemento ripetuto = <CR><LF>
    9. Creare un messaggio msg_crlf e impostare il tipo complesso su t_msg_crlf.
  2. Configurare il flusso di messaggi mostrato nella figura precedente:
    1. Iniziare con il nodo MQInput1:
      • Impostare Dominio messaggi = BLOB
      • Impostare Nome Coda = <Nome coda messaggi di input>
    2. Aggiungere il nodo ResetContentDescriptor1, connesso al terminale out di MQInput1:
      • Impostare Dominio messaggi = MRM
      • Selezionare Reimposta dominio messaggi
      • Impostare Serie di messaggi = <ID serie di messaggi> (ha un massimo di 13 caratteri)
      • Selezionare Reimposta serie di messaggi
      • Impostare Tipo messaggio = msg_nl
      • Selezionare Reimposta tipo messaggio
      • Impostare Formato del messaggio = TDS1
      • Selezionare Reimposta formato del messaggio
    3. Aggiungere il nodo Compute1, connesso al terminale out di ResetContentDescriptor1:
      • Immettere un nome per il Modulo ESQL per questo nodo o accettare il valore predefinito (<message flow name>_Compute1).
      • Fare clic con il tasto destro del mouse sul nodo Compute1 e selezionare Apri ESQL. Codificare il seguente ESQL nel modulo:
        -- Dichiarare le variabili di lavoro locali
        DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
        
        -- Eseguire il loop per copiare tutte le intestazioni del messaggio dal messaggio di input a quello di output
        WHILE I < J DO
         SET OutputRoot.*[I] = InputRoot.*[I];
         SET I=I+1;
        END WHILE; 
        
        -- Impostare un nuovo tipo di messaggio che utilizzi il delimitatore CRLF
        SET OutputRoot.Properties.MessageType = 't_msg_crlf';
        
        -- Eseguire il loop per copiare ogni istanza del child string1 nel contenuto del messaggio
        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;

        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
    4. Aggiungere il nodo ResetContentDescriptor2, connesso al terminale out del nodo Compute1:
      • Impostare Dominio messaggi = BLOB
      • Selezionare Reimposta dominio messaggi.
    5. Infine, aggiungere il nodo MQOutput1, connesso al terminale out del nodo ResetContentDescriptor2. Configurarne le proprietà per indirizzare il messaggio di output sulla coda o le code richieste.
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 MQInput
Nodo MQOutput
Nodo ResetContentDescriptor
Riferimento ESQL
Istruzione DECLARE
Istruzione SET
Istruzione WHILE
Mnemonici TDS
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac11630_