IMS/VS 환경에서의 제어 전송
IMS/VS 대상 환경을 위해 생성된 EGL 기본 텍스트 UI 프로그램은 IMS™ 메시지 처리 프로그램(MPP)으로서 실행됩니다.
- 즉각적 메시지 전환
- 프로그램 A가 소스 터미널에 먼저 응답하지 않고 프로그램 B와 연관된 트랜잭션에 제어를 직접 전달합니다. 대화식 MPP의 경우 프로그램은 새 트랜잭션 이름이 대상으로 설정된 대체 PCB를 사용하여 스크래치패드 영역(SPA)을 삽입함으로써 이를 수행합니다. 비대화식 MPP의 경우 프로그램은 새 트랜잭션 이름이 대상으로 설정된 대체 PCB를 사용하여 메시지를 삽입합니다.
- 지연된 메시지 전환
- 프로그램 A가 터미널에 응답하며, 터미널로부터의 다음 입력 시에 프로그램 B와 연관된 트랜잭션을 시작하도록 IMS에 알립니다. 대화식 MPP의 경우 메시지 전환은 SPA를 I/O PCB를 사용하여 IMS로 다시 전송하기 전에 새 트랜잭션 이름을 지정하도록 이를 수정하여 이뤄집니다. 비대화식 MPP의 경우 메시지 전환은 다음 트랜잭션 이름이 입력 메시지의 처음 8바이트가 되도록 맵에 이 이름을 포함시켜 이뤄집니다.
- inputForm이 지정되지 않은 경우에는 즉각적 메시지 전환이 필요합니다.
- inputForm이 지정된 경우에는 지연된 프로그램 대 프로그램 메시지 전환(EGL show 문) 또는 즉각적 프로그램 대 프로그램 메시지 전환(EGL transfer to transaction 문)을 사용할 수 있습니다. 즉각적 전환이 사용되는 경우에는 입력 양식(inputForm 특성으로 식별됨)이 대상 프로그램에 의해 자동으로 표시됩니다. 그러나 이는 대상 프로그램을 두 번(입력 양식을 표시하는 데 한 번, 프로그램 사용자가 입력한 데이터를 읽는 데 한 번) 처리해야 하므로 지연된 전환보다 효율적이지 않습니다.
대상 트랜잭션이 처리 시작 시에 메시지 큐의 양식 입력을 필요로 하는 비EGL 프로그램인 경우 EGL 프로그램은 지연된 프로그램 대 프로그램 메시지 전환(EGL show 문)을 사용해야 합니다. 그렇지 않은 경우 EGL 프로그램은 즉각적 프로그램 대 프로그램 메시지 전환(EGL transfer to transaction 문)을 사용해야 합니다.
- 프로그램의 대화식 또는 비대화식 여부
- 전환의 즉각적 전환 또는 지연된 전환 여부
대화식 프로그램 간 전송
다음 표는 대화식 프로그램(spaSize > 0 빌드 디스크립터 옵션을 사용하여 생성됨) 간에 데이터를 전달하는 데 사용되는 방법을 보여줍니다.
| 조치 | 즉각적 전환(선택적 입력 양식) | 지연된 전환(입력 양식 사용) |
|---|---|---|
| 코딩 및 생성 | 두 프로그램을 모두 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 프로그램은 항상 세그먼테이션 상태 바이트의 값을 무시해야 합니다. | ||
- 스크래치패드 영역(SPA)은 transfer to transaction 또는 show 문에서 전달할 수 있습니다.
- MFS 맵(EGL 양식)은 show 문에서만 전달할 수 있습니다.
- 트랜잭션이 처음으로 사용자에 대해 시작되면 EGL은 SPA의 데이터 부분에서 해당 프로그램의 입력 데이터를 초기화합니다.
- 레코드를 다른 트랜잭션에 전달하기 위해 transfer to transaction 또는 show 문을 사용하면 EGL은 SPA의 데이터 부분을 지정된 레코드의 데이터로 설정합니다.
- 트랜잭션이 처음으로 사용자에 대해 시작되면 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 크기를 지정해야 합니다.
- "메시지 전환을 위한 IMS SPA 형식"에 정의된 형식으로 SPA를 작성합니다. SPA의 데이터 영역은 EGL 프로그램에서 예상하는 입력 레코드의 정의와 일치해야 합니다.
EGL로 생성된 프로그램 제어 로직은 헤더 정보(길이, SPA ID, 트랜잭션 이름)를 제거하므로 EGL 프로그램은 데이터만 수신합니다.
spaSize=n 및 spaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우 세그먼테이션 상태 바이트는 spaStatusBytePosition의 값에 관계없이 SPA의 끝에 있습니다. 비EGL 프로그램은 SPA를 삽입하기 전에 세그먼테이션 상태 바이트를 공백으로 초기화해야 합니다.
- 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=n 및 spaStatusBytePosition=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 크기를 지정해야 합니다.
- "메시지 전환을 위한 IMS SPA 형식"에 정의된 형식으로 SPA를 작성합니다. SPA의 데이터 영역은 EGL 프로그램에서 예상하는 입력 레코드의 정의와 일치해야 합니다.
EGL 프로그램 제어 로직은 헤더 정보(길이, SPA ID, 트랜잭션 이름)를 제거하므로 EGL 프로그램은 데이터만 수신합니다.
spaSize=n 및 spaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우에는 spaStatusBytePosition=p로 지정된 SPA 내의 오프셋에 있는 세그먼테이션 상태 바이트를 초기화해야 합니다. 이 세그먼테이션 상태 바이트를 공백으로 초기화하십시오.
- SPA를 I/O PCB에 삽입합니다.
- 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 크기를 지정해야 합니다.
- I/O PCB에 get unique를 발행하여 SPA를 읽습니다. SPA의 필수 레이아웃은 "메시지 전환을 위한 IMS SPA 형식"을 참조하십시오.
SPA는 EGL 프로그램 제어 로직에 의해 작성됩니다. SPA의 데이터 영역은 EGL 프로그램이 show 문에서 전달한 레코드를 포함합니다.
spaSize=n 및 spaStatusBytePosition=p를 빌드 디스크립터 옵션으로 지정한 경우 세그먼테이션 상태 바이트는 위치 15 또는 SPA의 마지막 바이트입니다. 비EGL 프로그램은 세그먼테이션 상태 바이트의 값을 무시해야 합니다.
- I/O PCB에 get next를 발행하여 EGL 프로그램에서 사용하는 메시지 출력 디스크립터에 대응하는 메시지 입력 디스크립터를 검색합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.
- 맵 MID 필드 EZEMAP-SSM-STATUS의 값을 사용하여 MFS 맵(EGL 양식) 무결성 문제점이 있었는지 판별하십시오. EZEMAP-SSM-FILLCHAR이 true이며 이것이 첫 SPA가 아닌 경우(즉, 대화에서 첫 번째 트랜잭션이 아님)에는 입력 맵 무결성 문제가 발생한 것이며 이는 프로그램 사용자가 PA1 또는 PA2를 눌렀기 때문일 가능성이 높습니다. 프로그램이 입력 맵에서 손실된 데이터를 복구하는 데 필요한 적절한 조치를 취하십시오. 프로그램 사용자에게 오류 메시지를 발행하고 트랜잭션을 다시 시작하거나, 프로그램 디자인에 따라 다른 복구 조치를 취해야 할 수 있습니다.
비대화식 프로그램 간 전송
다음 표는 비대화식 프로그램 간에 데이터를 전달하는 데 사용되는 방법을 보여줍니다. 비대화식 프로그램은 빌드 디스크립터 옵션 spaSize를 0(기본값)으로 설정하여 생성된 기본 textUI 프로그램입니다.
| 조치 | 즉각적 전환(선택적 입력 양식) | 지연된 전환(입력 양식 사용) |
|---|---|---|
| 코딩 및 생성 | 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 비대화식(spaSize = 0)으로 생성하십시오. | 두 프로그램을 모두 segmented = YES로 정의하십시오. 두 프로그램을 모두 비대화식(spaSize = 0)으로 생성하십시오. |
| 전송 수행 | 전송 프로그램이 양식을 전송할 수 없습니다. 전송 프로그램이 EGL 프로그램인 경우 이 프로그램은 레코드가 있는 transfer to transaction을 사용합니다. | 전송 프로그램은 터미널과 연관된 메시지 큐에 양식을 작성해야 합니다. 소스 프로그램이 EGL 프로그램인 경우 이 프로그램은 양식 및 선택적 레코드가 있는 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 이름을 둘 다 변경할 수 있습니다. 두 프로그램은 서로 다른 양식 그룹을 사용할 수 있습니다.
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을 사용해야 합니다. 레코드를 전송할 필요는 없지만 양식은 필수입니다.
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와 유사하게 정의되어야 합니다.
- 레코드가 전송되는 경우에는 ELATSPUT을 호출하여 작업 데이터베이스에 있는 EGL 프로그램에 대한 레코드를 저장합니다. ELATSPUT 사용에 대한 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.
- 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로 설정해야 합니다.
- I/O PCB에 get unique를 발행하여 EGL 프로그램에서 사용하는 메시지 출력 디스크립터에 대응하는 메시지 입력 디스크립터를 검색합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 생성합니다.
- 레코드를 전송하고 있는 경우에는 ELATSGET을 호출하여 EGL 프로그램이 작업 데이터베이스로부터 show 문에서 전달한 레코드를 검색합니다. 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.
IMS의 순차 파일을 통한 인터페이싱
EGL 프로그램은 IMS 메시지 큐와 연관된 순차 파일에 있는 레코드에 대해 add 또는 get next 문을 수행하여 비EGL 프로그램과 통신할 수 있습니다.
- 기본 textUI 프로그램
- 기본 프로그램
- 호출 대상 프로그램
EGL 프로그램 간
- 파일이 메시지 큐임을 나타내는 표시(fileType이 smsgq 또는 mmsgq로 설정됨).
- 사용되는 PCB 이름. 이 이름은 대체 PCB의 이름이어야 합니다.
그 후 MPP 또는 트랜잭션 구동 일괄처리 메시지 처리 프로그램(BMP)으로 실행되는 EGL 기본 프로그램은 이 파일을 사용하여 get next 문으로 메시지를 읽을 수 있습니다. EGL 프로그램은 자동으로 메시지에서 헤더 정보를 제거하고 순차 레코드에 데이터를 삽입합니다.
비EGL 프로그램에서 EGL 프로그램으로
비EGL 프로그램은 MPP 또는 트랜잭션 구동 BMP로 실행되는 EGL 기본 프로그램이 나중에 처리할 수 있도록 IMS 메시지 큐에 일련의 레코드를 기록할 수 있습니다. 비EGL 프로그램은 레코드를 처리하는 트랜잭션과 연관된 대체 I/O PCB에 다음 표에 표시되어 있는 형식의 레코드를 삽입해야 합니다.
| 필드 | 길이(바이트) | 데이터 유형 | 설명 |
|---|---|---|---|
| 세그먼트 길이 | 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 프로그램으로"에 있는 표에 표시되어 있습니다.