유형이 REFERENCE인 변수는 메시지 트리를 탐색하기 위한 동적 참조로 사용할 수 있습니다. 메시지 커서나 변수 포인터에 대해 유사한 방식으로 작동합니다. 반복 구조에 액세스할 때 배열 색인보다 참조 변수를 사용하는 것이 일반적으로 보다 간단하고 효율적입니다. 참조 변수는 어디에서나 승인됩니다. 필드 참조가 승인되고 메시지 트리의 세부 조작을 위해 명령문 및 함수 세트가 따릅니다.
동적 참조를 사용하기 전에 선언해야 합니다. 동적 참조는 단일 명령문에서 선언되고 초기화됩니다. 다음 예에서는 참조를 작성하고 사용하는 방법을 보여줍니다.
-- Declare the dynamic reference DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1]; -- Continue processing for each item in the array WHILE LASTMOVE(myref)=TRUE DO -- Add 1 to each item in the array SET myref = myref + 1; -- Move the dynamic reference to the next item in the array MOVE myref NEXTSIBLING; END WHILE;
이 예는 구매에서 배열의 첫 번째 항목을 가리키는 동적 참조 myref를 선언합니다. 첫 번째 항목의 값은 1씩 증분되고 포인터(동적 참조)가 다음 항목으로 이동됩니다. 역시 항목 값이 1씩 증분됩니다. 이 프로세스는 포인터가 메시지 배열의 범위 밖으로 이동되고(이 배열의 모든 항목이 처리되었을 때) LASTMOVE 함수가 FALSE를 리턴할 때까지 계속됩니다.
아래 예는 더 많은 예를 보여줍니다.
DECLARE ref1 REFERENCE TO InputBody.Invoice.Purchases.Item[1]; DECLARE ref2 REFERENCE TO InputBody.Invoice.Purchases.NonExistentField; DECLARE scalar1 CHARACTER; DECLARE ref3 REFERENCE TO scalar1;
두 번째 예에서 ref2는 지정된 필드가 없기 때문에 InputBody를 가리키도록 설정됩니다.
동적 참조의 위치를 변경하는 MOVE문을 제외하고 정적 참조가 있는 어느 곳에서나 동적 참조를 사용할 수 있습니다. 표현식 또는 명령문에 있는 동적 참조의 값은 현재 가리키는 필드나 변수의 값입니다. 예를 들면, 메시지 예의 메시지를 사용하면 Invoice.Customer.FirstName의 값은 Andrew입니다. 동적 참조 myref가 다음과 같이 FirstName 필드를 가리키도록 설정된 경우,
DECLARE myref REFERENCE TO Invoice.Customer;
myref의 값은 Andrew입니다. 다음과 같이 이 동적 참조를 확장할 수 있습니다.
SET myref.Billing.Address[1] = 'Oaklands';
예에 있는 주소가 Oaklands Hursley Village Hampshire SO213JR로 변경됩니다.
동적 참조의 위치는 트리가 수정되어도 계속 고정되어 있습니다. 이 점을 설명하기 위해 다음의 단계에서는 메시지 예의 메시지를 입력 메시지로 사용하며 이 메시지의 수정된 버전을 출력 메시지로 작성합니다.