@dli
@dli 복합 특성을 사용하면 설정된 값 블록을 사용하여 프로그램으로부터 DL/I 호출에 대한 동작을 지정할 수 있습니다.
DL/I 데이터베이스 I/O를 수행하거나 IMS/VS 또는 IMS™ BMP 대상 플랫폼을 위해 생성할 프로그램에 대해 이 특성을 포함해야 합니다.
- callInterface DLICallInterfaceKind
- callInterface 특성은 add 및 get 등의 EGL 명령문에 대한 응답으로 EGL 생성 COBOL 프로그램이 구현하는 IMS 및 DL/I 호출의 측면을 정의합니다. 우수 사례는 AIBTDLI를 사용하는 것이지만 해당 설정을 사용하려면 조직이 AIBTDLI 인터페이스에 적합하게 PSB를 구성해야 합니다.
- 값은 다음과 같습니다.
- AIBTDLI(기본값)
- 이 최신 인터페이스는 IMS AIB(Application Interface Block)를 활용합니다.
이 인터페이스는 AIB를 사용하여 주소가 아니라 이름별로 런타임 PCB에 액세스합니다.
이 인터페이스를 사용하기 전에 데이터베이스 관리자가 각각의 런타임 PCB에
기호 이름을 지정했는지 확인하십시오. 특히 프로그래머는 PSBGEN 정의에서
PCBNAME 매개변수를 설정해야 합니다.
EGL에서 사용자는 PCB 레코드의 PCBName 특성을 설정하여 이름을 식별합니다. 해당 특성의 기본값은 레코드의 이름입니다.
- CBLTDLI
- 이 인터페이스를 사용하여 PCB에 액세스하면 프로그램이 PCB 이름 대신 주소를 사용하기 때문에 속도가 약간 더 빠릅니다. 하지만 PSBRecord 파트 정의를 위한 요구사항은 AIBTDLI보다 엄격합니다. 더 중요하게는 단순히 호출된 프로그램의 지정된 PCB 레코드에 있는 이름에 의존하는 대신 일반적으로 PSB 레코드 또는 PCB 레코드를 호출된 프로그램에 전달해야 합니다. 프로그램 호출의 추가 데이터를 처리하는 것 외에도 PSB 레코드를 전달하려면 호출된 프로그램의 psbParm 특성을 설정해야 하고 PCB 레코드를 전달하려면 호출된 프로그램의 pcbParms 특성을 설정해야 합니다. (PSB 레코드와 PCB 레코드를 모두 전달하는 경우에는 PSB가 무시됩니다.)
- psb STRING
- psb 특성은 프로그램에서 사용할 PSB(Program
Specification Block)(런타임 PSB)에 해당하는 PSBRecord를 기반으로 하는
프로그램 변수를 식별합니다. 예를 들어, 다음과 같습니다.
program Prog1 type basicProgram { @DLI { psb = "myPSB" }} // declare variable based on PSBRecord definition myPSB CustomerPSBRecord;PSBRecord는 사용자가 암시적 DL/I 데이터베이스 I/O를 사용할 때 EGL이 기본 SSA 작성 시 사용하는 데이터베이스 계층 구조 정보를 제공합니다. 또한 CICS®의 경우 PSBRecord는 첫 번째 DL/I 데이터베이스 I/O가 발생할 때 EGL이 스케줄하는 기본 PSB를 제공합니다.
- pcbParms STRING[]
- PCB 레코드를 매개변수로 수신하는 호출된 프로그램에서 사용되는 것과 같이
pcbParms 특성 필드는 EGL이 각각의 매개변수(PCB
레코드 유형)를 프로그램 PSB 레코드 파트의 PCB 레코드와 일치시키는 데 사용하는
문자열의 목록을 제공합니다. callInterface 특성의 값이
AIBTDLI인 경우 특성은 영향을 미치지 않습니다.
다음 예제와 같이 배열에서 문자열의 위치는 프로그램 PSB 레코드 파트에서 PCB 레코드의 위치와 일치해야 하고 배열에서 각각의 비어 있지 않은 문자열은 프로그램 매개변수의 목록에 있는 PCB 레코드의 이름과 동일해야 합니다.
Record PSBRecordPart type PSBRecord {defaultPSBName = "ibmPSB"} // details of the following records are omitted in this example ioPCB IO_PCBRecord; dbPCB DB_PCBRecord; // passed in db2PCB DB_PCBRecord; gsamPCB GSAM_PCBRecord; // passed in gsam2PCB GSAM_PCBRecord; end program Prog2 type basicProgram (GSAM_PCB_parm GSAM_PCBRecord, DB_PCB_parm DB_PCBRecord) { @DLI{ psb = "myPSB", callInterface = CBLTDLI, pcbParms = ["", "DB_PCB_parm", "", "GSAM_PCB_parm", ""] } } myPSB PSBRecordPart;pcbParms 및 psbParm 특성을 지정하는 경우에는 전자의 PCB 특정 주소가 후자의 동등한 주소를 대체합니다.
PSB 레코드 파트에 있지만 매개변수가 일치하지 않는 각각의 PCB 레코드에 비어 있는 문자열이 사용되더라도 배열의 마지막 요소가 매개변수가 일치하지 않는 PCB 레코드를 참조하는 경우 해당 요소의 지정을 방지할 수 있습니다. 현재 예제에서는 다음과 같은 지정도 유효합니다.pcbParms = ["", "DB_PCB_parm", "", "GSAM_PCB_parm"]나중에 PCB 레코드를 PSB 레코드 파트에 추가하는 경우에는 PSB 레코드 파트에 각 PCB 레코드에 대한 배열 요소를 포함(예외 없음)하여 배열-요소 위치 지정에서 오류를 방지할 수 있습니다.
PSB 레코드 파트에 있는 PCB 레코드가 해당 파트에 있는 또다른 PCB 레코드의 재정의인 경우 원래 레코드와 재정의된 레코드는 메모리의 동일한 영역을 나타내므로 pcbParms에 대한 배열을 구성할 때 한 번만 계수됩니다.
- psbParm STRING
EGL은 런타임 PSB에 액세스하는 데 필요한 이름 및 주소가 포함된 12바이트 영역인 dliLib.psbData 시스템 변수에 PSB 정보를 저장합니다. EGL은 12바이트 영역에 대한 필드 구조를 제공하는 PSBDataRecord라는 사전 정의된 레코드를 제공합니다. callInterface 특성의 값이 CBLTDLI인 경우 호출된 프로그램에서 매개변수로 전체 PSB를 수신해야 하면 psbParm 특성을 사용하여 PSB 정보가 포함된 프로그램 매개변수를 표시하십시오. PSBDataRecord를 이 매개변수에 대한 유형 정의로 사용하십시오.
다음 예제에서는 psbParm 특성을 보여줍니다.program Prog3 type basicProgram ( psbData PSBDataRecord ) // parameter to receive the PSB { @DLI { psb = "myPSB", psbParm = "psbData", callInterface = CBLTDLI } } // declare variable based on PSBRecord definition myPSB CustomerPSBRecord;EGL 프로그램이 호출되면 EGL은 psbParm 특성에 의해 식별된 매개변수의 정보를 dliLib.psbData 시스템 변수에 자동으로 지정합니다.
pcbParms 및 psbParm 특성을 지정하는 경우에는 전자의 PCB 특정 주소가 후자의 동등한 주소를 대체합니다.
- handleHardDLIErrors BOOLEAN
- vgVar.handleHardDLIErrors 시스템 변수의
기본값을 설정합니다. 이 변수는 try 블록의
DL/I 또는 데이터베이스 I/O 조작에서 하드 오류가 발생한 후 프로그램이
계속 실행되는지 여부를 제어합니다. 이 특성의 기본값은 YES이며 변수를
1로 설정합니다.
handleHardDLIErrors를 NO로 설정하여 변수를 0으로 설정하는 경우가 아니면 VisualAge® Generator에서 마이그레이션된 코드가 예전처럼 작동하지 않을 수 있습니다.
세부사항은 "예외 처리"를 참조하십시오.