IMSADF II 프로그램으로의 전송 및 IMSADF II 프로그램에서의 전송
생성된 EGL 프로그램은 IMSADF 프로그램과의 양방향 전송을 수행할 수 있습니다. IMSADF II 대화식 프로그램과 빌드 디스크립터 옵션 spaADF를 YES로 설정하여 생성된 EGL 세그먼트된 대화식 프로그램 간에는 즉각적 프로그램 대 프로그램 메시지 전환을 수행할 수 있습니다. 또한 EGL 일괄처리 프로그램을 통해 IMSADF II 2차 트랜잭션을 처리할 수 있습니다.
- EGL 프로그램과 IMSADF II 프로그램이 PCB 정보를 전달하는 방법은 서로 다르므로 IMSADF II 특수 처리 루틴을 작성하는 데 EGL을 사용할 수 없습니다. 맵 레이아웃 규칙의 차이로 인해 IMSADF II 프로그램과 EGL 프로그램 간의 지연된 프로그램 대 프로그램 메시지 전환은 지원되지 않습니다.
- IMSADF II 프로그램이 관련되어 있는 경우에는 EGL 프로그램 간의 전송에 다른 고려사항이 적용됩니다. 전송이 IMSADF II 프로그램을 대상으로 이뤄질 가능성이 있는 전송과 관련된 모든 EGL 프로그램에서는 spaADF 빌드 디스크립터 옵션을 YES로 설정해야 합니다. 예를 들어, EGL 프로그램 A가 EGL 프로그램 B 또는 IMSADF II 프로그램 C로 전송할 수 있는 경우에는 프로그램 B가 IMSADF II 프로그램으로 전송하지 않는 경우에도 두 EGL 프로그램에서는 모두 spaADF를 YES로 설정해야 합니다.
IMSADF II 대화식 처리
EGL은 IMSDAF II를 시작하는 데 사용할 수 없지만, IMSADF II 트랜잭션 드라이버에서 제어를 수신하고 이 트랜잭션 드라이버로 제어를 리턴하는 데는 사용할 수 있습니다. 이러한 동작은 IMSADF II 프로그램 시스템에서 작업 데이터베이스에 IMSADF II 28바이트 SPA를 사용하는 경우에만 지원됩니다.
//*** RECORD=ADFWKDB ****
// The sample segment layout of the ADFWORK database default
// segment size is 6000 bytes. Use this DLISegment definition
// to retrieve data from and store data into the ADF work database.
// Refer to the IMSADF Application Development Guide
// Appendix E for details on which fields to update.
// ***********************
Record ADFWKDB type DLISegment {
keyItem = "LTERMNME"
}
3 LTERMNME char(8) ;
3 SPALEGTH smallint ;
3 * char(4) ;
3 SPATRANS char(8) ;
3 * char(397) ;
3 SPABITS hex(2) ;
3 * char(6) ;
3 SPAFIRST smallint ;
3 SPARTNCD int ;
3 SPASECTX smallint ;
3 * char(4) ;
3 SPAPGOPT smallint ;
3 SPASWITH char(2) ;
4 RDFSWITH smallint ;
3 SPATRX char(3) ;
3 SPACGTRX char(3) ;
3 * char(66) ;
3 SPASHOTR char(8) ;
3 * char(31) ;
3 SPAKEYID char(255) ;
3 SPAFLDSG char(5192) ;
end // end ADFWKDB
Rational® COBOL Runtime for zSeries는 작업 데이터베이스를 IMSADF II와 공유하지 않습니다. 두 데이터베이스의 형식은 다릅니다. MSADF II 작업 데이터베이스에 대한 변경은 Rational COBOL Runtime 작업 데이터베이스에 영향을 주지 않습니다. 마찬가지로 EGL 프로그램이 Rational COBOL Runtime 작업 데이터베이스에 수행한 변경은 IMSADF II 작업 데이터베이스에 영향을 주지 않습니다.
ssssTcc
- ssss
- IMSADF II 프로그램 시스템 ID입니다.
- T
- 상수입니다.
- cc
- EGL 프로그램으로의 전환을 발생시키는 트랜잭션을 생성하는 데 사용되는 클러스터 코드(SOMTX) 피연산자입니다.
IMSADF II 트랜잭션 드라이버에서 EGL 프로그램으로
프로그램 사용자가 EGL 프로그램에 해당하는 IMSADF II 트랜잭션 ID를 입력하면 IMSADF II는 요청된 트랜잭션으로 즉각적 프로그램 대 프로그램 메시지 전환을 수행합니다. IMSADF II는 IMS™ 메시지 큐에 고유의 28바이트 SPA를 작성하여 이 전환을 수행합니다.
EGL 프로그램은 빌드 디스크립터 옵션 spaADF를 YES로 설정하고 spaSize를 IMSADF II SPA 크기와 일치하도록 28로 설정하여 생성해야 합니다. IMS가 새 트랜잭션을 스케줄하면 EGL 프로그램 제어 로직은 I/O PCB로부터 IMSADF II SPA를 읽습니다. 이러한 빌드 디스크립터 옵션으로 인해 EGL 프로그램 제어 로직은 SPA를 어떤 방식으로든 수정하지 않습니다. 따라서 최종적으로 EGL 프로그램은 IMSADF II 대화식 트랜잭션 드라이버로의 즉각적 프로그램 대 프로그램 메시지 전환을 수행할 수 있습니다. IMSADF II 사인온 트랜잭션으로의 직접 전환은 지원되지 않습니다.
IMSADF II 대화식 트랜잭션 드라이버로 다시 전송하기 전에 여러 EGL 프로그램이 실행되는 경우 이러한 모든 EGL 프로그램은 동일한 빌드 디스크립터 옵션을 사용하여 생성되어야 합니다. 프로그램 제어 로직은 Rational COBOL Runtime 작업 데이터베이스 또는 SPA 뒤에 있는 두 번째 메시지 세그먼트를 사용하여 EGL 프로그램 간에 레코드를 전달함으로써 IMSADF II 형식화된 SPA를 유지합니다. EGL 프로그램 간에는 지연된 프로그램 대 프로그램 메시지 전환 및 즉각적 프로그램 대 프로그램 메시지 전환을 둘 다 사용할 수 있습니다.
spaStatusBytePosition=p 빌드 디스크립터 옵션을 지정할 수도 있습니다(여기서 p는 EGL의 세그먼테이션 상태 바이트로 사용할 수 있는 IMSADF II SPA의 사용 가능한 바이트를 지정함). IMSADF II 트랜잭션 드라이버에서 시작된 일련의 메시지 전환과 관련된 모든 EGL 프로그램에는 동일한 빌드 디스크립터 옵션 spaSize, spaADF 및 spaStatusBytePosition이 있어야 합니다. SPA 내에서 사용 가능한 위치에 대한 정보는 IMSADF II 문서를 참조하십시오.
COBOL 프로그램과 마찬가지로 EGL 프로그램은 정보를 사용하거나 IMSADF II 통신 영역의 정보를 수정하기 위해 IMSADF II 작업 데이터베이스에 액세스할 수 있습니다. IMSADF II 작업 데이터베이스에 액세스하는 경우 EGL 프로그램은 다른 프로그램 데이터베이스를 처리하는 방식과 동일한 방식으로 IMSADF II 작업 데이터베이스를 처리합니다. 위 레코드 정의를 사용하여 IMSADF II 작업 데이터베이스에 액세스하십시오. DL/I IMSADF II 작업 데이터베이스를 사용하는 경우에는 EGL 프로그램의 PSB 정의에 데이터베이스 PCB를 포함시켜야 합니다.
EGL 프로그램에서 IMSADF II 트랜잭션 드라이버로
다시 IMSADF II 트랜잭션 드라이버로 전환하려는 경우, EGL 프로그램은 제어를 수신하면 수행할 작업을 트랜잭션 드라이버에 지시하는 플래그를 IMSADF II 작업 데이터베이스에 설정해야 합니다. 추가 정보는 사용자의 시스템에 해당하는 IMSADF II 문서를 참조하십시오. EGL 프로그램은 레코드를 지정하지 않는 transfer to transaction 문을 사용하여 제어를 전송합니다. sysVar.transferName을 시작될 새 트랜잭션 이름으로 설정하십시오. 이 변수는 IMSADF II 변수 SPATRANS에 지정된 것과 같은 값을 포함해야 합니다. EGL 프로그램 제어 로직은 SPA를 삽입하여 IMSADF II로의 즉각적 프로그램 대 프로그램 메시지 전환을 수행합니다.
ADF 모드의 대화식 프로그램을 사용한 전송
이 절에 설명되어 있는 방법은 다시 IMSADF II로 전송하기 전에 IMSADF II에서 일련의 EGL 프로그램 및 비EGL 프로그램으로 전송이 있는 경우에만 사용됩니다. 하나의 EGL 프로그램만 실행된 후 다시 IMSADF II로 전송되는 경우에는 프로그램 제어 로직이 IMSADF II SPA를 자동으로 유지합니다. IMSADF II와 관련이 없는 전송의 경우에는 "IMS/VS 환경에서의 제어 전송"을 참조하십시오.
다음 표에는 빌드 디스크립터 옵션 spaADF가 YES로 설정된 경우 EGL 프로그램 간 전송에 사용되는 규칙이 표시되어 있습니다. 이러한 규칙은 SPA가 유지될 수 있도록 레코드를 전달하는 데 사용되는 특수 방법에 IMSADF II가 관련되지 않은 경우에 사용되는 방법과는 다릅니다. ADF 모드는 세그먼트된 비대화식 프로그램 간 전송을 지원하지 않습니다.
| 조치 | 즉각적 전환(선택적 입력 양식) | 지연된 전환(입력 양식 사용) |
|---|---|---|
| 코딩 및 생성 | 두 프로그램을 모두 segmented = YES로 정의하십시오. spaSize 빌드 디스크립터 옵션을 28로 설정하고 spaADF 빌드 디스크립터 옵션을 YES로 설정하여 두 프로그램을 모두 대화식으로 생성하십시오. | 두 프로그램을 모두 segmented = YES로 정의하십시오. spaSize 빌드 디스크립터 옵션을 28로 설정하고 spaADF 빌드 디스크립터 옵션을 YES로 설정하여 두 프로그램을 모두 대화식으로 생성하십시오. |
| 전송 수행 | 소스 프로그램은 양식을 전송할 수 없습니다. 소스 프로그램이 EGL 프로그램인 경우 이 프로그램은 레코드가 있는 transfer to transaction 문을 사용하여 이를 수행합니다. | 소스 프로그램은 첫 번째 SPA 쓰기 후에 터미널에 연관된 메시지 큐에 양식을 작성해야 합니다. 소스 프로그램이 EGL 프로그램인 경우 이 프로그램은 양식 및 선택적 레코드가 있는 show 문을 사용하여 이를 수행합니다. |
| 입력 양식 사용 | 대상 프로그램에 선택적으로 입력 양식이 있을 수 있습니다. | 대상 프로그램에 입력 양식이 있어야 합니다. |
| 레코드 전달 | 레코드가 SPA 뒤에 있는 메시지 세그먼트를 통해 전송됩니다. | 레코드(있는 경우)가 작업 데이터베이스를 통해 전송됩니다. |
| 세그먼테이션 상태 바이트 지정 | spaStatusBytePosition이 지정된 경우 대상 프로그램은 SPA의 지정된 오프셋에 있는 세그먼테이션 상태 바이트 값을 항상 무시합니다. | spaStatusBytePosition이 지정된 경우 프로그램 사용자가 PA1 또는 PA2를 눌러 발생한 입력 양식 무결성 문제점이 있으면 대상 프로그램은 지정된 오프셋에 있는 세그먼테이션 상태 바이트 값을 사용합니다. |
| spaStatusBytePosition으로 지정된 세그먼테이션 상태 바이트는 대화식 프로그램의 프로그램 대 프로그램 전송에만 사용됩니다. 이 바이트는 대화식 프로그램과 기타 프로그램 간의 전송을 위한 바이트입니다. 그러나 비EGL 프로그램을 전송할 때는 이 바이트를 항상 공백으로 설정해야 합니다. 대상 비EGL 프로그램은 세그먼테이션 상태 바이트의 값을 무시할 수 있습니다. | ||
대화식 즉각적 프로그램 대 프로그램 메시지 전환
- 두 EGL 프로그램 사이에서.
- 비EGL 프로그램에서 EGL 프로그램으로.
- EGL 프로그램에서 비EGL 프로그램으로.
두 EGL 프로그램 사이의 즉각적 전환
이 방법을 사용하면 두 세그먼트된 대화식 EGL 프로그램은 프로그램 사용자에게 양식을 제시하지 않고 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 여기서 두 프로그램은 서로 다른 FormGroup을 사용할 수 있습니다. 두 프로그램의 스켈레톤 정의는 "IMS/VS 환경에서의 제어 전송"에 있는 "두 EGL 프로그램 사이의 즉각적 전환"을 참조하십시오. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오.
EGL 프로그램 제어 로직은 SPA를 자동으로 유지하고 프로그램 A 및 B 모두에서 SPA 뒤에 메시지 세그먼트로 전달되는 레코드를 관리합니다. 두 프로그램 A 및 B에 동일한 spaSize 빌드 디스크립터 옵션을 지정하십시오.
비EGL 프로그램에서 EGL 프로그램으로의 즉각적 전환
비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 "IMS/VS 환경에서의 제어 전송"의 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 B와 유사하게 정의되어야 합니다. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오.
- IMSADF II SPA 형식을 유지합니다.
- 대상이 EGL 프로그램의 트랜잭션 이름으로 설정된 대체 PCB에 SPA를 삽입합니다. spaStatusBytePosition 빌드 디스크립터 옵션을 지정한 경우 세그먼테이션 상태 바이트는 SPA의 지정된 오프셋에 있습니다. SPA를 삽입하기 전에 세그먼테이션 상태 바이트를 공백으로 초기화하십시오.
- SPA 다음에 메시지 세그먼트로 전달할 레코드를 동일한 대체 PCB에 삽입하십시오. 메시지의 필수 레이아웃은 "IMS 비대화식 메시지 전환을 위한 EGL 입력 메시지 형식"을 참조하십시오.
EGL 프로그램에서 비EGL 프로그램으로의 즉각적 전환
비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램은 "IMS/VS 환경에서의 제어 전송"의 "두 EGL 프로그램 사이의 즉각적 전환"에 있는 프로그램 A와 유사하게 정의되어야 합니다. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오.
- I/O PCB에 get unique를 발행하여 SPA를 읽습니다. 이 SPA의 형식은 EGL 프로그램에 의해 변경되지 않은 원래 IMSADF II 형식입니다. spaStatusBytePosition 빌드 디스크립터 옵션을 지정한 경우 세그먼테이션 상태 바이트는 SPA의 지정된 오프셋에 있습니다. 비EGL 프로그램은 세그먼테이션 상태 바이트의 값을 무시해야 합니다.
- I/O PCB에 get next를 발행하여 EGL 프로그램에서 전달한 레코드를 포함하는 메시지를 읽습니다. 메시지의 필수 레이아웃은 "IMS 비대화식 메시지 전환을 위한 EGL 입력 메시지 형식"을 참조하십시오.
- IMSADF II SPA 형식을 유지합니다.
대화식 지연된 프로그램 대 프로그램 메시지 전환
- 두 EGL 프로그램 사이에서.
- 비EGL 프로그램에서 EGL 프로그램으로.
- EGL 프로그램에서 비EGL 프로그램으로.
두 EGL 프로그램 사이의 지연된 전환
이 방법을 사용하면 프로그램 사용자에게 양식이 제시되었을 때 두 세그먼트된 대화식 EGL 프로그램이 트랜잭션 이름과 PSB 이름을 둘 다 변경할 수 있습니다. 여기서 두 프로그램은 동일한 FormGroup을 사용해야 합니다. 레코드를 전송할 필요는 없지만 양식은 필수입니다. 두 프로그램의 스켈레톤 정의는 "IMS/VS 환경에서의 제어 전송"에 있는 "두 EGL 프로그램 사이의 지연된 전환"을 참조하십시오. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오.
비EGL 프로그램에서 EGL 프로그램으로의 지연된 전환
비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램을 "IMS/VS 환경에서의 제어 전송"에 있는 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 B와 유사하게 정의하십시오. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오.
- IMSADF II SPA 형식을 유지합니다. spaStatusBytePosition 빌드 디스크립터 옵션을 지정한 경우 세그먼테이션 상태 바이트는 SPA의 지정된 오프셋에 있습니다. SPA를 삽입하기 전에 세그먼테이션 상태 바이트를 공백으로 초기화하십시오.
- ELATSPUT을 호출하여 작업 데이터베이스를 통해 EGL 프로그램에 전달할 레코드를 저장합니다. 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.
- SPA를 I/O PCB에 삽입합니다.
- EGL 프로그램의 메시지 입력 디스크립터에 대응하는 메시지 출력 디스크립터를 사용하여 I/O PCB에 양식을 삽입합니다. 비EGL 프로그램은 양식에 있는 모든 변수 데이터 필드의 수정된 데이터 태그(MDT) 속성이 지연된 전환에서 EGL 프로그램에 전달되도록 설정해야 합니다. 다른 모든 속성은 기본값을 유지해야 합니다. 양식의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 작성합니다.
EGL 프로그램에서 비EGL 프로그램으로의 지연된 전환
비EGL 프로그램은 IMS 대화식 프로그램이어야 합니다. EGL 프로그램을 "IMS/VS 환경에서의 제어 전송"에 있는 "두 EGL 프로그램 사이의 지연된 전환"에 있는 프로그램 A와 유사하게 정의하십시오. IMSADF II 프로그램이 관련되어 있는 경우에는 빌드 디스크립터 옵션 spaADF를 YES로 설정해야 된다는 점을 기억하십시오. EGL 프로그램은 비EGL 프로그램에서 입력으로 필요로 하는 양식에 있는 모든 변수 데이터 필드의 modified 특성을 YES로 설정해야 합니다.
- I/O PCB에 get unique를 발행하여 SPA를 읽습니다. 이 SPA의 형식은 EGL 프로그램에 의해 변경되지 않은 원래 IMSADF II 형식입니다.
- I/O PCB에 get next를 발행하여 EGL 프로그램에서 사용하는 메시지 출력 디스크립터에 대응하는 메시지 입력 디스크립터를 검색합니다. 맵의 필수 레이아웃은 "IMS MFS 메시지 입력 디스크립터(MID)의 형식"을 참조하십시오. EGL은 비EGL 프로그램이 레코드 형식 일치를 위해 사용해야 하는 MID/MOD 레코드 레이아웃의 COBOL 카피북을 작성합니다.
- MID 양식 필드 EZEMAP-SSM-STATUS의 값을 사용하여 레코드가 작업 데이터베이스에 전달되었는지 판별합니다.
- EZEMAP-SSM-WSR-SAVED 또는 EZEMAP-SSM-WSR-MAP-SAVED가 true인 경우에는 작업 데이터베이스에 레코드가 있는 것입니다. 아래 4단계에 설명되어 있는 바와 같이 이를 검색하십시오.
- EZEMAP-SSM-FILL-CHAR이 true이며 이것이 첫 SPA가 아닌 경우에는 입력 양식 무결성 문제점이 발생한 것이며, 이는 프로그램 사용자가 PA1 또는 PA2를 눌렀기 때문일 가능성이 높습니다. 프로그램이 입력 양식에서 손실된 데이터를 복구하는 데 필요한 적절한 조치를 취하십시오. 프로그램 사용자에게 오류 메시지를 발행하고 트랜잭션을 다시 시작하거나, 프로그램 디자인에 따라 다른 복구 조치를 취해야 할 수 있습니다. spaStatusBytePosition 빌드 디스크립터 옵션을 지정한 경우에는 이 상황에서 프로그램에서는 세그먼테이션 상태 바이트를 사용하여 레코드가 전송 이전에 작업 데이터베이스에 저장되었는지 판별할 수 있습니다. 세그먼테이션 상태 바이트의 값이 C, c, D 또는 d인 경우에는 레코드가 작업 데이터베이스에 저장된 것이며 아래 4단계에 설명되어 있는 바와 같이 이를 검색할 수 있습니다.
- ELATSGET를 호출하여 EGL 프로그램이 저장한 레코드를 작업 데이터베이스에서 검색합니다. 세부사항은 "IMS/VS에 EGL COBOL 런타임 작업 데이터베이스 사용"을 참조하십시오.
- IMSADF II SPA 형식을 유지합니다.