WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Convertir la página de códigos y la codificación de mensajes

Puede utilizar ESQL dentro de un nodo Compute para convertir datos de la página de códigos y la codificación de mensajes.

Si el flujo de mensaje procesa mensajes WebSphere MQ, puede utilizar recursos WebSphere MQ (incluidas las opciones de obtener y transmitir y las rutinas de salida de conversión de datos de WebSphere MQ) para efectuar estas conversiones. Si no está procesando mensajes WebSphere MQ o decide no usar recursos de WebSphere MQ, puede utilizar recursos de WebSphere Message Broker codificando el ESQL apropiado en un nodo Compute del flujo de mensajes.

El contenido del MQMD, el MQRFH2 y el cuerpo del mensaje de un mensaje del dominio MRM que se haya modelado con un formato físico CWF puede estar sujeto a la conversión de la página de códigos y la codificación. El contenido del cuerpo de un mensaje en los dominios XML, XMLNS y JMS, y los mensajes del dominio MRM que se hayan modelado con un formato físico XML o TDS, se tratarán como series de caracteres. Únicamente se aplica la conversión de la página de códigos; no es necesaria la conversión de la codificación.

Para los mensajes del dominio MRM modelados con un formato físico CWF, se pueden establecer, con del valor de destino requerido, los campos MQMD CCSID y Encoding del mensaje de salida más el CCSID y la codificación (Encoding) de las cabeceras adicionales que pueda haber.

Para los mensajes del dominio MRM modelados con un formato físico XML o TDS, se puede establecer el campo CCSID de MQMD del mensaje de salida más el CCSID de las cabeceras adicionales que pueda haber. Los datos XML y TDS se manejan como series de caracteres y, por lo tanto, están sujetos únicamente a la conversión del CCSID.

Un ejemplo de mensaje WebSphere MQ tiene una cabecera de MQMD, una cabecera de MQRFH2 y un cuerpo de mensaje. Para convertir este mensaje a un CodedCharSetId y Encoding del sistema principal, codifique el siguiente ESQL en el nodo Compute:

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

El ejemplo siguiente muestra qué debe hacer para modificar un mensaje CWF para que éste se pueda pasar de WebSphere Message Broker a IMS en z/OS.

  1. Ha definido el mensaje de entrada en XML y está utilizando una cabecera MQRFH2. Elimine la cabecera antes de pasar el mensaje a IMS.
  2. El mensaje pasado a IMS debe tener una cabecera MQIIH y debe estar en la página de códigos de z/OS. Este mensaje se ha modelado en el MRM y tiene el nombre IMS1. Defina los campos PIC X de este mensaje como una serie de caracteres de tipo lógico para que las conversiones entre EBCDIC y ASCII tengan lugar. Si los campos son de tipo lógico binario, no se produce la conversión de datos; los datos binarios se pasan por alto cuando el analizador MRM analiza un mensaje CWF.
  3. El mensaje recibido de IMS se ha definido también en el MRM y tiene el nombre IMS2. Defina los campos PIC X de este mensaje como una serie de caracteres de tipo lógico para que las conversiones entre EBCDIC y ASCII tengan lugar. Si los campos son de tipo lógico binario, no se produce la conversión de datos; los datos binarios se pasan por alto cuando el analizador MRM analiza un mensaje CWF.
  4. Convierta el mensaje de respuesta a la página de códigos de Windows. La cabecera MQIIH se retiene en este mensaje.
  5. Ha creado un flujo de mensajes que contiene los siguientes nodos: :
    1. El flujo de mensajes de salida, MQInput1 --> Compute1 --> MQOutput1.
    2. El flujo de mensajes de entrada, MQInput2 --> Compute2 --> MQOutput2.
  6. Codifique el ESQL del nodo Compute1 (de salida) como se indica a continuación, especificando el ID de MessageSet adecuado. Este código muestra el uso del nombre de capa física CWF predeterminado. Ha de utilizar un nombre que coincida con las definiciones de modelo. Si especifica un valor incorrecto, el intermediario fallará y se recibirá el mensaje BIP5431.
    -- Bucle para copiar cabeceras de mensajes
    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.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.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS1';
    SET OutputRoot.Properties.MessageFormat = 'Binary1';

    La utilización de una variable, J, que se inicializa en el valor de la cardinalidad de las cabeceras existentes en el mensaje, es más eficaz que calcular la cardinalidad en cada iteración del bucle, lo que sucede si codifica la siguiente sentencia WHILE:

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. Cree ESQL en el nodo Compute2 (entrada) como sigue, especificando el ID de MessageSet adecuado. Este código muestra el uso del nombre de capa física CWF predeterminado. Ha de utilizar el nombre que coincida con la definición de modelo. Si especifica un valor incorrecto, el intermediario fallará y se recibirá el mensaje BIP5431.
    -- Bucle para copiar cabeceras de mensajes
    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.MessageSet = 'DHCJOEG072001';
    SET OutputRoot.Properties.MessageType = 'IMS2';
    SET OutputRoot.Properties.MessageFormat = 'Binary1';

No es necesario establecer ningún valor específico para las propiedades del nodo MQInput1 puesto que el mensaje y el conjunto de mensajes están identificados en la cabecera MQRFH2 y que no se requiere ninguna conversión.

En el nodo MQInput, es necesario establecer valores para el dominio, conjunto, tipo y formato del mensaje para el flujo de mensajes de entrada (MQInput2). No es necesario establecer parámetros de conversión.

Una situación específica en la que tal vez tenga que convertir los datos de una página de códigos a otra es cuando los mensajes contienen caracteres de línea nueva y se pasan entre sistemas EBCDIC y ASCII. La conversión necesaria en esta situación está descrita en el apartado Convertir EBCDIC NL en ASCII CR LF.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:58:23


Tema de tareaTema de tarea | Versión 8.0.0.5 | ac11620_