코드 페이지 및 메시지 인코딩 변환

Compute 노드에서 ESQL을 사용하여 코드 페이지의 데이터 및 메시지 인코딩을 변환할 수 있습니다. 메시지 플로우가 WebSphere MQ 메시지를 처리 중이면, WebSphere MQ 기능(가져오기와 넣기 옵션 및 WebSphere MQ 데이터 변환 엑시트 포함)을 사용하여 이러한 변환을 제공할 수 있습니다. WebSphere MQ 메시지를 처리하지 않거나 WebSphere MQ 기능을 사용하지 않도록 선택하는 경우, 메시지 플로우의 Compute 노드에서 적절한 ESQL을 코드화하여 WebSphere Message Broker 기능을 사용할 수 있습니다.

CWF 물리적 형식으로 모델화된 MRM 도메인에 있는 메시지의 메시지 본문과 MQMD 및 MQRFH2의 컨텐츠는 코드 페이지 및 인코딩 변환에 적용될 수 있습니다. XML, XMLNS 및 JMS 도메인에 있는 메시지 및 XML 또는 TDS 물리적 형식으로 모델화된 MRM 도메인에 있는 메시지의 메시지 본문 컨텐츠는 문자열로 처리됩니다. 코드 페이지 변환만 적용할 수 있으며, 인코딩 변환은 필요하지 않습니다.

CWF 물리적 형식으로 모델화된 MRM 도메인에 있는 메시지의 경우, 출력 메시지의 MQMD CCSID 및 인코딩 필드와 추가 헤더의 CCSID 및 인코딩을 필수 대상 값으로 설정할 수 있습니다.

XML 또는 TDS 물리적 형식으로 모델화된 MRM 도메인에 있는 메시지의 경우, 출력 메시지의 MQMD CCSID 필드와 추가 헤더의 CCSID를 설정할 수 있습니다. XML 및 TDS 데이터는 문자열로 처리되므로 CCSID만 변환됩니다.

WebSphere MQ 메시지 예에는 MQMD 헤더, MQRFH2 헤더 및 메시지 본문이 있습니다. 이 메시지를 메인프레임 CodedCharSetId 및 인코딩으로 변환하려면, Compute 노드에서 다음 ESQL을 코딩하십시오.

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

다음 예에서는 WebSphere Message Broker에서 z/OS의 IMS™로 전달할 수 있도록 CWF 메시지를 수정하기 위해 수행해야 하는 사항을 보여줍니다.

  1. XML로 입력 메시지를 정의했으며 MQRFH2 헤더를 사용 중입니다. 메시지를 IMS로 전달하기 전에 헤더를 제거하십시오.
  2. IMS로 전달된 메시지에는 MQIIH 헤더가 있어야 하며, 이 메시지는 z/OS 코드 페이지에 있어야 합니다. 이 메시지는 MRM에 모델화되고 IMS1로 이름 지정되었습니다. EBCDIC과 ASCII 간에 변환이 수행될 수 있도록 이 메시지의 PIC X 필드를 논리 유형 문자열로 정의하십시오. 논리적 유형 2진이면, 데이터가 변환되지 않으며, CWF 메시지가 MRM 구문 분석기에 의해 전달될 때 2진 데이터가 무시됩니다.
  3. IMS에서 수신된 메시지는 MRM에도 정의되어 있으며 IMS2로 이름 지정되었습니다. EBCDIC과 ASCII 간에 변환이 수행될 수 있도록 이 메시지의 PIC X 필드를 논리 유형 문자열로 정의하십시오. 논리적 유형 2진이면, 데이터가 변환되지 않으며, CWF 메시지가 MRM 구문 분석기에 의해 전달될 때 2진 데이터가 무시됩니다.
  4. 응답 메시지를 Windows 코드 페이지로 변환하십시오. MQIIH 헤더는 이 메시지에 보유됩니다.
  5. 다음 노드를 포함하는 메시지 플로우를 작성했습니다. :
    1. 아웃바운드 플로우 MQInput1 --> Compute1 --> MQOutput1.
    2. 아웃바운드 플로우 MQInput2 --> Compute2 --> MQOutput2.
  6. 관련 MessageSet ID를 지정하여 다음과 같이 Compute1(아웃바운드) 노드에서 ESQL을 코딩하십시오. 이 코드는 디폴트 CWF 물리적 계층 이름의 사용을 표시합니다. 모델 정의와 일치하는 이름을 사용해야 합니다. 올바르지 않은 값을 지정할 경우 브로커가 메시지 BIP5431로 실패합니다.
    -- Loop to copy message headers
    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';

    메시지에 있는 기존 헤더의 카디낼리티 값으로 초기화된 변수 J의 사용에 유의하십시오. 이는 다음 WHILE문을 코딩할 때 발생하는 루프의 각 반복에서 카디낼리티를 계산하는 것보다 더욱 효율적입니다.

    WHILE I < CARDINALITY(InputRoot.*[]) DO
  7. 관련 MessageSet ID를 지정하여 다음과 같이 Compute2(인바운드) 노드에서 ESQL을 작성하십시오. 이 코드는 디폴트 CWF 물리적 계층 이름의 사용을 표시합니다. 모델 정의와 일치하는 이름을 사용해야 합니다. 올바르지 않은 값을 지정할 경우 브로커가 메시지 BIP5431로 실패합니다.
    -- Loop to copy message headers
    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';

메시지와 메시지 세트가 MQRFH2 헤더에 식별되어 있고 변환이 필요하지 않으므로, MQInput1 노드 등록 정보에 특정 값을 설정하지 않아도 됩니다.

인바운드 메시지 플로우의 MQInput 노드(MQInput2)에서 메시지 도메인, 세트, 유형 및 형식에 값을 설정해야 합니다. 변환 매개변수는 설정하지 않아도 됩니다.

한 코드 페이지에 있는 데이터를 다른 코드 페이지로 변환할 필요가 있을 수 있는 한 가지 특정한 상황은 메시지가 줄 바꾸기 표시기를 포함하고 EBCDIC과 ASCII 시스템 간에 전달되고 있을 때입니다. 이 상황에 필요한 변환은 ASCII CR LF로 EBCDIC NL 변환에서 설명합니다.

관련 개념
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
관련 참조
자국어 지원(NLS)
Compute 노드
Database 노드
Filter 노드
ESQL 참조
CARDINALITY 함수
DECLARE문
SET문
WHILE문
지원되는 코드 페이지
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac11620_