IMS/VS 환경에서의 제어 전송

참고: IMSADF II 프로그램이 관련되어 있는 경우에는 전송에 다른 고려사항이 적용됩니다. 자세한 정보는 "IMSADF II 프로그램으로의 전송 및 IMSADF II 프로그램에서의 전송"을 참조하십시오.

IMS/VS 대상 환경을 위해 생성된 EGL 기본 텍스트 UI 프로그램은 IMS™ 메시지 처리 프로그램(MPP)으로서 실행됩니다.

IMS/VS 기본 프로그램에는 transfer to transaction 문을 사용한 프로그램 제어 전송이 지원되지 않습니다. 비EGL 프로그램은 IMS 프로그램 대 프로그램 메시지 전환을 사용하여 EGL MPP 프로그램을 호출할 수 있습니다. 다음 유형의 메시지 전환이 지원됩니다.
즉각적 메시지 전환
프로그램 A가 소스 터미널에 먼저 응답하지 않고 프로그램 B와 연관된 트랜잭션에 제어를 직접 전달합니다. 대화식 MPP의 경우 프로그램은 새 트랜잭션 이름이 대상으로 설정된 대체 PCB를 사용하여 스크래치패드 영역(SPA)을 삽입함으로써 이를 수행합니다. 비대화식 MPP의 경우 프로그램은 새 트랜잭션 이름이 대상으로 설정된 대체 PCB를 사용하여 메시지를 삽입합니다.
지연된 메시지 전환
프로그램 A가 터미널에 응답하며, 터미널로부터의 다음 입력 시에 프로그램 B와 연관된 트랜잭션을 시작하도록 IMS에 알립니다. 대화식 MPP의 경우 메시지 전환은 SPA를 I/O PCB를 사용하여 IMS로 다시 전송하기 전에 새 트랜잭션 이름을 지정하도록 이를 수정하여 이뤄집니다. 비대화식 MPP의 경우 메시지 전환은 다음 트랜잭션 이름이 입력 메시지의 처음 8바이트가 되도록 맵에 이 이름을 포함시켜 이뤄집니다.
대상 비EGL 프로그램 또는 EGL 프로그램의 정의 및 생성 옵션은 가능한 전환의 유형 및 데이터가 전달되는 방식을 제어합니다. EGL 프로그램에는 대화식에서 비대화식으로, 또는 비대화식에서 대화식으로의 전송이 지원되지 않습니다.
대상 트랜잭션이 EGL 프로그램인 경우에는 inputForm 특성을 사용하면 유효한 메시지 전환 유형을 판별할 수 있습니다.
  • inputForm이 지정되지 않은 경우에는 즉각적 메시지 전환이 필요합니다.
  • inputForm이 지정된 경우에는 지연된 프로그램 대 프로그램 메시지 전환(EGL show 문) 또는 즉각적 프로그램 대 프로그램 메시지 전환(EGL transfer to transaction 문)을 사용할 수 있습니다. 즉각적 전환이 사용되는 경우에는 입력 양식(inputForm 특성으로 식별됨)이 대상 프로그램에 의해 자동으로 표시됩니다. 그러나 이는 대상 프로그램을 두 번(입력 양식을 표시하는 데 한 번, 프로그램 사용자가 입력한 데이터를 읽는 데 한 번) 처리해야 하므로 지연된 전환보다 효율적이지 않습니다.
비EGL 프로그램에서 EGL 프로그램으로의 지연된 프로그램 대 프로그램 메시지 전환을 수행하는 경우 비EGL 프로그램은 양식에 있는 모든 필드의 수정된 데이터 태그(MDT) 속성을 켜야 하며 다른 모든 필드 특성을 양식 정의 중에 정의된 값으로 설정해야 합니다. 프로그램 사용자가 도움을 요청하거나 편집 오류가 발생하는 경우 프로그램은 MDT 속성이 설정되어 있지 않고 프로그램 사용자가 수정하지 않은 모든 필드에 기본 데이터를 표시합니다. EGL 프로그램은 다른 모든 필드 특성에 정의된 특성을 사용합니다.

대상 트랜잭션이 처리 시작 시에 메시지 큐의 양식 입력을 필요로 하는 비EGL 프로그램인 경우 EGL 프로그램은 지연된 프로그램 대 프로그램 메시지 전환(EGL show 문)을 사용해야 합니다. 그렇지 않은 경우 EGL 프로그램은 즉각적 프로그램 대 프로그램 메시지 전환(EGL transfer to transaction 문)을 사용해야 합니다.

데이터가 전달되는 방식은 다음 요소에 의해 제어됩니다.
  • 프로그램의 대화식 또는 비대화식 여부
  • 전환의 즉각적 전환 또는 지연된 전환 여부

대화식 프로그램 간 전송

다음 표는 대화식 프로그램(spaSize > 0 빌드 디스크립터 옵션을 사용하여 생성됨) 간에 데이터를 전달하는 데 사용되는 방법을 보여줍니다.

표 1. 대화식 EGL 프로그램 간의 프로그램 전환(비IMSADF 인터페이스)
조치 즉각적 전환(선택적 입력 양식) 지연된 전환(입력 양식 사용)
코딩 및 생성 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 대화식(spaSize > 0)으로 생성하십시오. 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 대화식(spaSize > 0)으로 생성하십시오.
전송 수행 전송 프로그램이 양식을 전송할 수 없습니다. 전송 프로그램이 EGL 프로그램인 경우 이 프로그램은 transfer to transaction 문을 사용하여 레코드를 전송합니다. 전송 프로그램은 첫 번째 SPA 쓰기 후에 터미널에 연관된 메시지 큐에 양식을 작성해야 합니다. 전송 프로그램이 EGL 프로그램인 경우 이 프로그램은 양식 및 선택적 레코드와 함께 show를 사용하여 이를 수행합니다.
입력 양식 사용 대상 프로그램에 선택적으로 입력 양식이 있을 수 있습니다. 대상 프로그램에 입력 양식이 있어야 합니다.
레코드 전달 레코드가 SPA를 통해 전송됩니다. 레코드가 있는 경우 이는 SPA를 통해 전송됩니다.
세그먼테이션 상태 바이트 지정 spaStatusBytePosition이 지정된 경우 세그먼테이션 상태 바이트는 SPA의 마지막 바이트에 배치됩니다. 대상 프로그램은 항상 세그먼테이션 상태 바이트의 값을 무시합니다. spaStatusBytePosition=n이 지정된 경우 세그먼테이션 상태 바이트는 n의 값에 따라 위치 15 또는 SPA의 마지막 바이트에 배치됩니다. 대상 프로그램은 프로그램 사용자가 PA1 또는 PA2를 눌러 발생한 입력 양식 무결성 문제점이 있는 경우 세그먼테이션 상태 바이트의 값을 사용합니다.
참고: spaStatusBytePosition에 의해 지정된 세그먼테이션 상태 바이트는 대화식 프로그램의 프로그램 대 프로그램 전송에만 사용됩니다. 이 바이트는 대화식 프로그램과 기타 프로그램 간의 전송을 위한 바이트입니다. 그러나 비EGL 프로그램을 전송할 때는 이 바이트를 항상 공백으로 설정해야 합니다. 대상 비EGL 프로그램은 항상 세그먼테이션 상태 바이트의 값을 무시해야 합니다.
전송을 수행하는 데 transfer to transaction 문을 사용하는지, 또는 show 문을 사용하는지에 따라 두 프로그램 간에 전달할 수 있는 항목은 다음과 같습니다.
  • 스크래치패드 영역(SPA)은 transfer to transaction 또는 show 문에서 전달할 수 있습니다.
  • MFS 맵(EGL 양식)은 show 문에서만 전달할 수 있습니다.
자세한 정보 및 레이아웃은 "메시지 전환을 위한 IMS SPA 형식" 및 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오.
대화식 프로그램은 항상 SPA를 사용합니다. SPA는 즉각적 메시지 전환 및 지연된 메시지 전환에 둘 다에서 전달됩니다. spaSize > 0을 사용하여 EGL 기본 텍스트 UI 프로그램을 생성하면 EGL은 SPA를 다음과 같이 사용합니다.
  • 트랜잭션이 처음으로 사용자에 대해 시작되면 EGL은 SPA의 데이터 부분에서 해당 프로그램의 입력 데이터를 초기화합니다.
  • 레코드를 다른 트랜잭션에 전달하기 위해 transfer to transaction 또는 show 문을 사용하면 EGL은 SPA의 데이터 부분을 지정된 레코드의 데이터로 설정합니다.
또한 지연된 전환에서는 MFS 맵을 터미널에 전달할 수 있습니다. EGL은 이를 다음과 같이 수행합니다.
  • 트랜잭션이 처음으로 사용자에 대해 시작되면 EGL은 전달된 양식을 확인합니다. 이러한 양식이 존재하는 경우 EGL은 해당 데이터를 사용하여 프로그램의 입력 양식을 초기화합니다.
  • show 문에서 EGL은 양식을 터미널에 전송합니다.

대화식 즉각적 프로그램 대 프로그램 메시지 전환

대화식 즉각적 프로그램 대 프로그램 메시지 전환은 다음 상황에서 지원됩니다.
  • 두 EGL 프로그램 사이에서.
  • 비EGL 프로그램에서 EGL 프로그램으로.
  • EGL 프로그램에서 비EGL 프로그램으로.

두 EGL 프로그램 사이의 즉각적 전환

이 방법을 사용하면 두 세그먼트된 대화식 EGL 프로그램은 프로그램 사용자에게 양식을 제시하지 않고 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 두 프로그램은 서로 다른 FormGroup을 사용할 수 있습니다. 아래 예제는 두 프로그램의 스켈레톤 정의를 보여줍니다.

program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord1", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1A;

  // FormGroup
  use FORMGX;

  function main()
    ...
    sysVar.transferName = 'trx1b';
    transfer to transaction sysVar.transferName passing basicRecord1;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is optional
  {segmented=yes, inputRecord="basicRecord1", inputForm="form2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1B;

  // FormGroup
  use FORMGY;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord1
    //   if inputForm is specified:
    //     converses form2
    //     performs edits for form2 
    //     converses form2 until form2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

EGL로 생성된 프로그램 제어 로직은 SPA 및 프로그램 A에서 프로그램 B로 전달되는 레코드(basicRecord1)를 자동으로 처리합니다. 프로그램 A 및 B에 대한 SPA의 데이터 영역은 관련된 레코드의 대부분을 저장할 수 있을 정도로 커야 합니다.

비EGL 프로그램에서 EGL 프로그램으로의 즉각적 전환

비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 위의 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 B와 유사하게 정의되어야 합니다. spaSize 빌드 디스크립터 옵션은 비EGL 프로그램에서 사용하고 있는 SPA 크기를 지정해야 합니다.

비EGL 프로그램은 다음 작업을 수행해야 합니다.
  1. "메시지 전환을 위한 IMS SPA 형식"에 정의된 형식으로 SPA를 작성합니다. SPA의 데이터 영역은 EGL 프로그램에서 예상하는 입력 레코드의 정의와 일치해야 합니다. EGL로 생성된 프로그램 제어 로직은 헤더 정보(길이, SPA ID, 트랜잭션 이름)를 제거하므로 EGL 프로그램은 데이터만 수신합니다.

    spaSize=nspaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우 세그먼테이션 상태 바이트는 spaStatusBytePosition의 값에 관계없이 SPA의 끝에 있습니다. 비EGL 프로그램은 SPA를 삽입하기 전에 세그먼테이션 상태 바이트를 공백으로 초기화해야 합니다.

  2. SPA를 대체 PCB에 삽입합니다. 대체 PCB의 대상은 EGL 프로그램의 트랜잭션 이름으로 설정되어야 합니다.

EGL 프로그램에서 비EGL 프로그램으로의 즉각적 전환

비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 위의 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 A와 유사하게 정의되어야 합니다. spaSize 빌드 디스크립터 옵션은 비EGL 프로그램에서 사용하고 있는 SPA 크기를 지정해야 합니다.

비EGL 프로그램은 I/O PCB에 get unique를 발행하여 SPA를 읽어야 합니다. SPA의 필수 레이아웃은 "메시지 전환을 위한 IMS SPA 형식"을 참조하십시오. SPA는 EGL 프로그램 제어 로직에 의해 작성됩니다. SPA의 데이터 영역은 EGL 프로그램이 transfer to transaction 문에서 전달한 레코드를 포함합니다.

spaSize=nspaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우 세그먼테이션 상태 바이트는 spaStatusBytePosition의 값에 관계없이 SPA의 끝에 있습니다. 비EGL 프로그램은 SPA의 마지막 바이트를 무시해야 합니다.

대화식 지연된 프로그램 대 프로그램 메시지 전환

대화식 지연된 프로그램 대 프로그램 메시지 전환은 다음 상황에서 지원됩니다.
  • 두 EGL 프로그램 사이에서.
  • 비EGL 프로그램에서 EGL 프로그램으로.
  • EGL 프로그램에서 비EGL 프로그램으로.

두 EGL 프로그램 사이의 지연된 전환

이 방법을 사용하면 프로그램 사용자에게 양식이 제시되었을 때 두 세그먼트된 대화식 EGL 프로그램이 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 두 프로그램에 동일한 FormGroup을 사용해야 합니다. 레코드를 전송할 필요는 없지만 양식은 필수입니다. 아래 예제는 두 프로그램의 스켈레톤 정의를 보여줍니다.

program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord2", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2A;

  // FormGroup
  use FORMG2;

  function main()
    ...
    sysVar.transferName = 'trx2b';
    show form2 returning to sysVar.transferName passing basicRecord2;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is required
  {segmented=yes, inputRecord="basicRecord2", inputForm="map2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2B;

  // FormGroup
  use FORMG2;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord2
    //   performs edits for map2 
    //   converses map2 until map2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

비EGL 프로그램에서 EGL 프로그램으로의 지연된 전환

비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 위의 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 B와 유사하게 정의되어야 합니다. spaSize 빌드 디스크립터 옵션은 비EGL 프로그램에서 사용하고 있는 SPA 크기를 지정해야 합니다.

비EGL 프로그램은 다음 작업을 수행해야 합니다.
  1. "메시지 전환을 위한 IMS SPA 형식"에 정의된 형식으로 SPA를 작성합니다. SPA의 데이터 영역은 EGL 프로그램에서 예상하는 입력 레코드의 정의와 일치해야 합니다. EGL 프로그램 제어 로직은 헤더 정보(길이, SPA ID, 트랜잭션 이름)를 제거하므로 EGL 프로그램은 데이터만 수신합니다.

    spaSize=nspaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우에는 spaStatusBytePosition=p로 지정된 SPA 내의 오프셋에 있는 세그먼테이션 상태 바이트를 초기화해야 합니다. 이 세그먼테이션 상태 바이트를 공백으로 초기화하십시오.

  2. SPA를 I/O PCB에 삽입합니다.
  3. EGL 프로그램의 메시지 입력 디스크립터에 대응하는 메시지 출력 디스크립터를 사용하여 I/O PCB에 MFS 맵(EGL 양식)을 삽입합니다. 비EGL 프로그램은 MFS 맵(EGL 양식)에 있는 모든 변수 데이터 필드의 수정된 데이터 태그(MDT) 속성이 지연된 전환에서 EGL 프로그램에 전달되도록 설정해야 합니다. 다른 모든 속성은 기본값을 유지해야 합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.

EGL 프로그램에서 비EGL 프로그램으로의 지연된 전환

비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 위의 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 A와 유사하게 정의되어야 합니다. EGL 프로그램은 비EGL 프로그램의 입력으로 필요한 양식에 있는 모든 변수 데이터 필드의 modified 특성을 YES로 설정해야 합니다. spaSize 빌드 디스크립터 옵션은 비EGL 프로그램에서 사용하고 있는 SPA 크기를 지정해야 합니다.

비EGL 프로그램은 다음 작업을 수행해야 합니다.
  1. I/O PCB에 get unique를 발행하여 SPA를 읽습니다. SPA의 필수 레이아웃은 "메시지 전환을 위한 IMS SPA 형식"을 참조하십시오. SPA는 EGL 프로그램 제어 로직에 의해 작성됩니다. SPA의 데이터 영역은 EGL 프로그램이 show 문에서 전달한 레코드를 포함합니다.

    spaSize=nspaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우 세그먼테이션 상태 바이트는 위치 15 또는 SPA의 마지막 바이트입니다. 비EGL 프로그램은 세그먼테이션 상태 바이트의 값을 무시해야 합니다.

  2. I/O PCB에 get next를 발행하여 EGL 프로그램에서 사용하는 메시지 출력 디스크립터에 대응하는 메시지 입력 디스크립터를 검색합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.
  3. 맵 MID 필드 EZEMAP-SSM-STATUS의 값을 사용하여 MFS 맵(EGL 양식) 무결성 문제점이 있었는지 판별하십시오. EZEMAP-SSM-FILLCHAR이 true이며 이것이 첫 SPA가 아닌 경우(즉, 대화에서 첫 번째 트랜잭션이 아님)에는 입력 맵 무결성 문제가 발생한 것이며 이는 프로그램 사용자가 PA1 또는 PA2를 눌렀기 때문일 가능성이 높습니다. 프로그램이 입력 맵에서 손실된 데이터를 복구하는 데 필요한 적절한 조치를 취하십시오. 프로그램 사용자에게 오류 메시지를 발행하고 트랜잭션을 다시 시작하거나, 프로그램 디자인에 따라 다른 복구 조치를 취해야 할 수 있습니다.

비대화식 프로그램 간 전송

다음 표는 비대화식 프로그램 간에 데이터를 전달하는 데 사용되는 방법을 보여줍니다. 비대화식 프로그램은 빌드 디스크립터 옵션 spaSize를 0(기본값)으로 설정하여 생성된 기본 textUI 프로그램입니다.

표 2. 비대화식 EGL 프로그램 간의 프로그램 전환(비IMSADF 인터페이스)
조치 즉각적 전환(선택적 입력 양식) 지연된 전환(입력 양식 사용)
코딩 및 생성 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 비대화식(spaSize = 0)으로 생성하십시오. 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 비대화식(spaSize = 0)으로 생성하십시오.
전송 수행 전송 프로그램이 양식을 전송할 수 없습니다. 전송 프로그램이 EGL 프로그램인 경우 이 프로그램은 레코드가 있는 transfer to transaction을 사용합니다. 전송 프로그램은 터미널과 연관된 메시지 큐에 양식을 작성해야 합니다. 소스 프로그램이 EGL 프로그램인 경우 이 프로그램은 양식 및 선택적 레코드가 있는 show 문을 사용합니다.
입력 양식 사용 대상 프로그램에 선택적으로 입력 양식이 있을 수 있습니다. 대상 프로그램에 입력 양식이 있어야 합니다.
레코드 전달 레코드가 메시지를 통해 전송됩니다. 레코드가 있는 경우 이는 작업 데이터베이스를 통해 전송됩니다.
transfer to transaction 문을 사용하는지 또는 show 문을 사용하는지에 따라, 두 비대화식 프로그램 간에 전송을 통해 전달할 수 있는 항목은 다음과 같습니다.
  • IMS 메시지 세그먼트. "IMS 비대화식 메시지 전환을 위한 EGL 입력 메시지 형식"을 참조하십시오.
  • MFS 맵(EGL 양식). 대화식 및 비대화식 전송에는 동일한 MID 및 MOD 정의가 사용됩니다. 지연된 프로그램 대 프로그램 메시지 전환의 맵 메시지 입력 디스크립터(MID)에 대한 COBOL 정의의 레코드 레이아웃 및 예제는 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오.

비대화식 즉각적 프로그램 대 프로그램 메시지 전환

비대화식 즉각적 프로그램 대 프로그램 메시지 전환은 다음 상황에서 지원됩니다.
  • 두 EGL 프로그램 사이에서.
  • 비EGL 프로그램에서 EGL 프로그램으로.
  • EGL 프로그램에서 비EGL 프로그램으로.

두 EGL 프로그램 사이의 즉각적 전환

EGL 프로그램을 개발할 때, 이 방법은 spaSize 빌드 디스크립터 옵션이 0(비대화식)으로 설정된다는 점을 제외하면 세그먼트된 대화식 EGL 프로그램을 사용한 전송과 같습니다. 이 방법을 사용하면 두 비대화식 EGL 프로그램은 프로그램 사용자에게 양식을 제시하지 않고 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 두 프로그램은 서로 다른 양식 그룹을 사용할 수 있습니다.

두 프로그램의 개요는 두 EGL 프로그램 간의 대화식 즉각적 전환의 개요와 같습니다. 차이점은 생성 시의 spaSize 빌드 디스크립터 옵션 값입니다. 더 좋은 성능을 얻기 위해 프로그램 B의 inputForm을 생략할 수도 있습니다.
program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord1", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1A;

  // FormGroup
  use FORMGX;

  function main()
    ...
    sysVar.transferName = 'trx1b';
    transfer to transaction sysVar.transferName passing basicRecord1;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram
  // omit inputForm for better performance
  {segmented=yes, inputRecord="basicRecord1", inputForm="form2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord1 TRANSFER_RECORD;  
  psb PSB1B;

  // FormGroup
  use FORMGY;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord1
    //   if inputForm is specified:
    //     converses form2
    //     performs edits for form2 
    //     converses form2 until form2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

EGL로 생성된 프로그램 제어 로직은 제어 전송에 사용되는 IMS 메시지 및 프로그램 A에서 B로 전달되는 레코드를 자동으로 처리합니다.

비EGL 프로그램에서 EGL 프로그램으로의 즉각적 전환

비EGL 프로그램은 IMS 비대화식 프로그램이어야 합니다. EGL 프로그램은 비대화식 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 B와 유사하게 정의되어야 합니다.

비EGL 프로그램은 대체 PCB에 메시지를 삽입해야 합니다. 대상은 EGL 프로그램의 트랜잭션 이름으로 설정되어야 합니다. 비EGL 프로그램은 메시지의 헤더 정보(길이, ZZ, 트랜잭션 이름)를 제공해야 합니다. 메시지의 필수 레이아웃은 "IMS 비대화식 메시지 전환을 위한 EGL 입력 메시지 형식"을 참조하십시오. EGL로 생성된 프로그램 제어 로직은 헤더 정보를 자동으로 제거하므로 EGL 프로그램은 데이터만 수신합니다.

EGL 프로그램에서 비EGL 프로그램으로의 즉각적 전환

비EGL 프로그램은 IMS 비대화식 프로그램이어야 합니다. EGL 프로그램은 비대화식 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 A와 유사하게 정의되어야 합니다.

비EGL 프로그램은 I/O PCB에 get unique를 발행하여 EGL 프로그램이 transfer to transaction 문에서 전달한 레코드를 검색해야 합니다. 메시지의 필수 레이아웃은 "IMS 비대화식 메시지 전환을 위한 EGL 입력 메시지 형식"을 참조하십시오. EGL로 생성된 프로그램 제어 로직은 헤더 정보(길이, ZZ, 트랜잭션 이름)를 자동으로 제공하므로 EGL 프로그램은 데이터만 수신합니다. 그러나 비EGL 프로그램은 헤더 정보를 수락하도록 준비되어야 합니다.

비대화식 지연된 프로그램 대 프로그램 메시지 전환

비대화식 지연된 프로그램 대 프로그램 메시지 전환은 다음 상황에서 지원됩니다.
  • 두 EGL 프로그램 사이에서.
  • 비EGL 프로그램에서 EGL 프로그램으로.
  • EGL 프로그램에서 비EGL 프로그램으로.

두 EGL 프로그램 사이의 지연된 전환

EGL 개발자의 관점에서, 이 방법은 spaSize 빌드 디스크립터 옵션이 비대화식임을 나타내는 0으로 설정된다는 점을 제외하면 세그먼트된 대화식 EGL 프로그램을 사용한 전송과 동일합니다. 이 방법을 사용하면 프로그램 사용자에게 양식이 제시되었을 때 두 비대화식 EGL 프로그램이 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 두 프로그램에 동일한 FormGroup을 사용해야 합니다. 레코드를 전송할 필요는 없지만 양식은 필수입니다.

두 프로그램의 개요는 두 EGL 프로그램 간의 대화식 지연된 전환의 개요와 같습니다. 차이점은 생성 시의 spaSize 빌드 디스크립터 옵션 값입니다.
program ProgramA type textUIProgram 
  {segmented=yes, inputRecord="basicRecord2", 
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2A;

  // FormGroup
  use FORMG2;

  function main()
    ...
    sysVar.transferName = 'trx2b';
    show form2 returning to sysVar.transferName passing basicRecord2;
    ...
  end // end main
end // end ProgramA 
    
program ProgramB type textUIProgram    // inputForm is required
  {segmented=yes, inputRecord="basicRecord2", inputForm="map2",
   @DLI { psb="psb" } }

  // Declarations
  basicRecord2 TRANSFER_RECORD;  
  psb PSB2B;

  // FormGroup
  use FORMG2;

  function main()
    // generated EGL logic does the following:
    //   initializes basicRecord2
    //   performs edits for map2 
    //   converses map2 until map2 passes all edits
    //   gives control to the first statement in the main function
    ...
  end // end main
end // end ProgramB 

비EGL 프로그램에서 EGL 프로그램으로의 지연된 전환

비EGL 프로그램은 IMS 비대화식 프로그램이어야 합니다. EGL 프로그램은 비대화식 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 B와 유사하게 정의되어야 합니다.

비EGL 프로그램은 다음 작업을 수행해야 합니다.
  1. 레코드가 전송되는 경우에는 ELATSPUT을 호출하여 작업 데이터베이스에 있는 EGL 프로그램에 대한 레코드를 저장합니다. ELATSPUT 사용에 대한 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.
  2. EGL 프로그램에서 사용하는 메시지 입력 디스크립터에 대응하는 메시지 출력 디스크립터를 사용하여 I/O PCB에 MFS 맵(EGL 양식)을 삽입합니다. 비EGL 프로그램은 맵에 있는 모든 변수 데이터 필드의 수정된 데이터 태그(MDT) 속성이 지연된 전환에서 EGL 프로그램에 전달되도록 설정해야 합니다. 다른 모든 속성은 기본값을 유지해야 합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.

EGL 프로그램에서 비EGL 프로그램으로의 지연된 전환

비EGL 프로그램은 IMS 비대화식 프로그램이어야 합니다. EGL 프로그램은 비대화식 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 A와 유사하게 정의되어야 합니다. EGL 프로그램은 비EGL 프로그램의 입력으로 필요한 양식에 있는 모든 변수 데이터 필드의 modified 특성을 YES로 설정해야 합니다.

비EGL 프로그램은 다음 작업을 수행해야 합니다.
  1. I/O PCB에 get unique를 발행하여 EGL 프로그램에서 사용하는 메시지 출력 디스크립터에 대응하는 메시지 입력 디스크립터를 검색합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.
  2. 레코드를 전송하고 있는 경우에는 ELATSGET을 호출하여 EGL 프로그램이 작업 데이터베이스로부터 show 문에서 전달한 레코드를 검색합니다. 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.

IMS의 순차 파일을 통한 인터페이싱

EGL 프로그램은 IMS 메시지 큐와 연관된 순차 파일에 있는 레코드에 대해 add 또는 get next 문을 수행하여 비EGL 프로그램과 통신할 수 있습니다.

다음 유형의 프로그램은 순차 파일에 레코드를 추가할 수 있습니다.
  • 기본 textUI 프로그램
  • 기본 프로그램
  • 호출 대상 프로그램
기본 프로그램만 get next를 사용하여 순차 파일에서 레코드를 검색할 수 있습니다.

EGL 프로그램 간

EGL 프로그램은 생성 시에 다음 정보를 ResourceAssociations에 지정하여 IMS 메시지 큐에 일련의 순차 레코드를 추가할 수 있습니다.
  • 파일이 메시지 큐임을 나타내는 표시(fileTypesmsgq 또는 mmsgq로 설정됨).
  • 사용되는 PCB 이름. 이 이름은 대체 PCB의 이름이어야 합니다.
EGL 프로그램은 IMS 헤더 정보(세그먼트 길이, ZZ, 트랜잭션 이름)를 자동으로 처리합니다. 이 트랜잭션 이름은 생성 시 ResourceAssociations 파트에 지정된 기본 systemName으로부터 작성되거나, 레코드에 대한 resourceAssociation 변수의 값(이 값이 기본값으로 대체하기 위해 사용되는 경우)으로부터 작성됩니다. EGL 순차 레코드 정의에 IMS 헤더 정보를 포함시키지 마십시오.

그 후 MPP 또는 트랜잭션 구동 일괄처리 메시지 처리 프로그램(BMP)으로 실행되는 EGL 기본 프로그램은 이 파일을 사용하여 get next 문으로 메시지를 읽을 수 있습니다. EGL 프로그램은 자동으로 메시지에서 헤더 정보를 제거하고 순차 레코드에 데이터를 삽입합니다.

비EGL 프로그램에서 EGL 프로그램으로

비EGL 프로그램은 MPP 또는 트랜잭션 구동 BMP로 실행되는 EGL 기본 프로그램이 나중에 처리할 수 있도록 IMS 메시지 큐에 일련의 레코드를 기록할 수 있습니다. 비EGL 프로그램은 레코드를 처리하는 트랜잭션과 연관된 대체 I/O PCB에 다음 표에 표시되어 있는 형식의 레코드를 삽입해야 합니다.

표 3. 메시지 큐에 삽입되는 레코드의 형식
필드 길이(바이트) 데이터 유형 설명
세그먼트 길이 2 2진 세그먼트의 길이입니다.
예약됨(ZZ) 2 2진 예약되어 있습니다.
IMS 트랜잭션 이름 8 문자 EGL 프로그램의 IMS 트랜잭션 이름입니다.
프로그램 정의 필드 다양함 다양함 이 영역은 EGL 순차 레코드에 정의된 데이터 항목을 포함합니다.

EGL 기본 프로그램은 get next를 사용하여 I/O PCB와 연관된 순차 파일을 읽은 후 메시지를 처리합니다. EGL 프로그램은 IMS 메시지 헤더(세그먼트 길이, ZZ, 트랜잭션 이름)를 자동으로 제거하므로 프로그램은 순차 레코드의 메시지 데이터만 수신합니다.

EGL 프로그램에서 비EGL 프로그램으로

EGL 프로그램이 메시지 큐와 연관된 순차 파일에 추가를 수행하면 EGL 프로그램은 자동으로 레코드 데이터 앞에 IMS 메시지 헤더를 추가한 후 대체 PCB에 메시지를 삽입합니다. EGL 프로그램은 메시지의 실제 데이터에만 관계됩니다.

MPP 또는 트랜잭션 구동 BMP로서 실행되는 비EGL 프로그램은 메시지 큐를 처리할 수 있습니다. 메시지 큐에 실제로 삽입되고 비EGL 프로그램에서 수신하는 메시지의 형식은 이전 절 "비EGL 프로그램에서 EGL 프로그램으로"에 있는 표에 표시되어 있습니다.