메시지의 요소 액세스

읽거나 쓸 목적으로 메시지의 컨텐츠에 액세스할 경우, 구문 분석기가 입력 비트스트림에서 작성한 트리 요소의 구조 및 배열을 사용하십시오. 필요한 요소에 도달할 때까지 트리의 맨 위에서 아래쪽으로 관련 상위 및 하위 관계를 따라가십시오.

필드 참조를 구성할 때 사용하는 이름은 ESQL 규칙에 일치하는 올바른 ESQL ID여야 합니다. 큰 따옴표로 묶으면 ESQL이 이를 ID로 해석합니다. 작은 따옴표로 묶어 표시하면 ESQL은 이를 문자 리터럴로 해석합니다. 모든 문자열(문자열, 바이트 문자열 또는 2진(비트) 문자열)은 아래의 예에 표시된 것처럼 따옴표로 묶어야 합니다. 문자열 내에 작은 따옴표 또는 큰 따옴표를 포함시키려면 두 개의 작은 따옴표 또는 큰 따옴표를 연속하여 포함시키십시오.
중요사항: 필드 참조 구문에 대한 자세한 설명은 ESQL 필드 참조를 참조하십시오.
ESQL 데이터 유형에 대한 자세한 정보는 메시지 플로우 내의 ESQL 데이터 유형을 참조하십시오.

ESQL 작성의 그림에 표시된 메시지 송장(invoice)을 핸들링하는 메시지 플로우를 작성했다고 가정하십시오. 예를 들면, Compute 노드 내에서 CardType이라는 요소를 검토할 경우 다음 명령문을 사용하십시오.

IF InputBody.Invoice.Payment.CardType='Visa' THEN
      DO;
        -- more ESQL --
        END IF;   

Database 또는 Filter 노드에서도 동일한 테스트를 수행하려면(여기서 참조는 단일 입력 메시지에 있음) 다음과 같이 코딩하십시오.

IF Body.Invoice.Payment.CardType='Visa' THEN
      DO; 
        -- more ESQL --  
        END IF;   

요소를 변경하지 않고 입력 XML 메시지에서 Compute 노드의 출력 메시지로 요소를 복사하려면 다음과 같은 ESQL을 사용하십시오.

SET OutputRoot.XML.Invoice.Customer.FirstName = 
               InputBody.Invoice.Customer.FirstName;

요소를 입력 XML 메시지에서 출력 메시지로 복사한 후 갱신하려면(예를 들면, 대문자로 변환하거나 새 값을 계산함) 다음과 같이 코드화하십시오.

SET OutputRoot.XML.Invoice.Customer.FirstName = 
                              UPPER(InputBody.Invoice.Customer.FirstName);  
SET OutputRoot.XML.Invoice.InvoiceNo = InputBody.Invoice.InvoiceNo + 1000;  

STRING 요소를 상수 값으로 설정하려면 다음과 같이 코딩하십시오.

SET OutputRoot.XML.Invoice.Customer.Title = 'Mr';  

다음과 같은 동등한 명령문을 사용할 수도 있습니다.

SET OutputRoot.XML.Invoice.Customer.Title VALUE = 'Mr';  

INTEGER 또는 DECIMAL(예: 요소 TillNumber)을 값 26으로 갱신하려는 경우 다음 지정문(Compute 노드에서만 올바름)을 사용하십시오.

SET OutputRoot.MRM.Invoice.TillNumber=26;  

정수 데이터 유형은 64비트 2의 보수 형식을 사용하여 숫자를 저장하며, -9223372036854775808에서 9223372036854775807까지 범위의 숫자를 허용합니다. 정수에 대해 정상 정수 리터럴 형식과 마찬가지로 16진 표기법을 지정할 수 있습니다. 16진 문자 A - F는 맨 앞의 0 다음에 X가 있으므로 필요에 따라 대문자 또는 소문자로 기록할 수 있습니다. 아래의 예는 위에 있는 예와 동일한 결과를 생성합니다.

SET OutputRoot.MRM.Invoice.TillNumber= 0x1A;  

다음 예는 송장(invoice) 메시지 예에 나타나지 않은 요소 유형에 대한 SET문을 보여줍니다.

FLOAT 요소를 정수가 아닌 값으로 설정하려면 다음과 같이 코딩하십시오.

SET OutputRoot.MRM.FloatElement1 = 1.2345e2;  

BINARY 요소를 상수 값으로 설정하려면 다음과 같이 코딩하십시오.

SET OutputRoot.MRM.BinaryElement1 = X'F1F1';  

BINARY 값의 경우, 표시된 대로 첫문자 X(대문자 또는 소문자)를 사용하고 16진 문자(또한 대문자 또는 소문자)를 작은따옴표 안에 표시해야 합니다.

BOOLEAN 요소를 상수 값(값 1은 참, 0은 거짓에 해당함)으로 설정하려면 다음과 같이 코딩하십시오.

SET OutputRoot.MRM.BooleanElement1 = true;

또는

SET OutputRoot.MRM.BooleanElement1 = 1;

SELECT문을 사용하여 레코드를 재형식화하지 않고 각 레코드의 전체 형식의 정보 없이도 입력 메시지에서 레코드를 필터할 수 있습니다. 다음의 예를 고려해 보십시오.

-- Declare local variable 
DECLARE CurrentCustomer CHAR 'Smith';

-- Loop through the input message
SET OutputRoot.XML.Invoice[] = 
    (SELECT I FROM InputRoot.XML.Invoice[] AS I
                            WHERE I.Customer.LastName = CurrentCustomer
    );

이 예는 WHERE 조건(LastName = Smith)이 만족되면 입력 송장(Invoice) 메시지의 모든 레코드를 출력 메시지에 기록합니다. 조건을 충족하지 않는 모든 레코드는 입력 메시지에서 출력 메시지로 복사되지 않습니다. I는 상관 이름인 InputRoot.XML.Invoice[]의 별명으로 사용됩니다.

선언된 변수 CurrentCustomer는 DECLARE문에서 초기화됩니다. 이것은 초기값을 알 수 있는 변수를 선언하는 데 가장 효율적인 방법입니다.

다른 SELECT 구조체에서도 이 별명 기술을 사용할 수 있습니다. 예를 들면, 입력 송장(invoice) 메시지의 모든 레코드를 선택하고 추가 레코드를 작성하려는 경우,

-- Loop through the input message
SET OutputRoot.XML.Invoice[] = 
        (SELECT I, 'Customer' || I.Customer.LastName AS ExtraField 
                  FROM InputRoot.XML.Invoice[] AS I
    );

다음과 같이 메시지 트리의 서브폴더에 레코드를 넣기 위해 AS절을 포함시킬 수도 있습니다.

-- Loop through the input message
SET OutputRoot.XML.Invoice[] = 
        (SELECT I AS Order
                FROM InputRoot.XML.Invoice[] AS I
    );

널(null) 값을 포함하거나 포함할 수 있는 요소를 쿼리 중이거나 설정하는 경우, 다음 고려사항을 알아 두어야 합니다.

널(null) 값 조회
요소를 ESQL 키워드 NULL과 비교할 때 이는 이 요소가 구문 분석기가 입력 메시지로부터 작성한 논리적 트리에 존재하는지 여부를 테스트합니다.

예를 들면, 다음 명령문을 사용하여 현재 송장 메시지에 송장 번호가 들어 있는지 여부를 점검할 수 있습니다.

IF InputRoot.XML.Invoice.InvoiceNo IS NULL THEN
      DO;
        -- more ESQL --
        END IF;   

ESQL 참조를 사용할 수도 있습니다. 다음 예에서는 이를 설명합니다.

DECLARE cursor REFERENCE TO InputRoot.MRM.InvoiceNo;

IF LASTMOVE(cursor) = FALSE THEN 
      SET OutputRoot.MRM.Analysis = 'InvoiceNo does not exist in logical tree';
ELSEIF FIELDVALUE(cursor) IS NULL THEN
      SET OutputRoot.MRM.Analysis = 
              'InvoiceNo does exist in logical tree but is defined as an MRM NULL value';
ELSE
      SET OutputRoot.MRM.Analysis = 'InvoiceNo does exist and has a value';
        END IF;

참조 선언 및 사용에 대한 자세한 정보는 동적 필드 참조 작성을 참조하십시오. LASTMOVE 및 FIELDVALUE 함수에 대한 설명은 LASTMOVE 함수FIELDTYPE 함수를 참조하십시오.

메시지가 MRM 도메인에 있는 경우, 물리적 형식에 따라 널(null) 요소의 쿼리에 대한 추가 고려사항이 있습니다. 자세한 정보는 MRM 도메인에 있는 메시지에서 널(null) 값 조회를 참조하십시오.

널(null) 값 설정
널 값을 설정하기 위해 사용할 수 있는 두 가지 명령문이 있습니다.
  1. 다음 명령문을 사용하여 요소를 널(null)로 설정하면 메시지 트리에서 요소가 삭제됩니다.
    SET OutputRoot.XML.Invoice.Customer.Title = NULL;  

    메시지가 MRM 도메인에 있는 경우, 물리적 형식에 따라 널(null) 값에 대한 추가 고려사항이 있습니다. 자세한 정보는 MRM 도메인에 있는 메시지에서 널(null) 값 설정을 참조하십시오.

    이를 내재적인 널(null) 처리라고 합니다.

  2. 이 요소의 값을 다음과 같이 널(null)로 설정하면
    SET OutputRoot.XML.Invoice.Customer.Title VALUE = NULL;  
    메시지 트리에서 요소가 삭제되지 않습니다. 대신, 요소에 특수 값인 널(null)이 지정됩니다.
    SET OutputRoot.XML.Invoice.Customer.Title = NULL;  

    메시지가 MRM 도메인에 있으면, 출력 비트스트림의 컨텐츠는 물리적 형식 널(null) 핸들링 등록 정보가 어떻게 설정되어 있는지에 따라 다릅니다. 자세한 정보는 MRM 도메인에 있는 메시지에서 널(null) 값 설정을 참조하십시오.

    이를 명시적 널(null) 처리라고 합니다.

MRM 복합 요소나 XML, XMLNS 또는 JMS 상위 요소를 VALUE 키워드를 사용하여 널(null)로 설정하면, 이 요소와 모든 하위 요소가 논리적 트리에서 삭제됩니다.

관련 개념
메시지 플로우 개요
상관 이름
메시지 모델링
관련 태스크
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
MRM 도메인에 있는 메시지에서 요소에 액세스
관련 참조
Compute 노드
Database 노드
Filter 노드
ESQL 참조
DECLARE문
IF문
FIELDVALUE 함수
LASTMOVE 함수
SELECT 함수
SET문
ESQL 필드 참조
ESQL 예약 키워드
메시지 예
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac06010_