startTransaction()

vgLib.startTransaction() 시스템 함수는 기본 프로그램을 비동기식으로 호출하고 레코드를 전달하여 다음과 같은 결과를 얻습니다.
  • 대상 프로그램이 EGL에서 생성되면 레코드가 입력 레코드를 초기화하는 데 사용됩니다.
  • 대상 프로그램이 VisualAge® Generator에서 생성되면 레코드가 작업 스토리지 레코드를 초기화하는 데 사용됩니다.

transfer 또는 call 명령문과 달리(둘 다 동기식으로 프로그램 호출), vgLib.startTransaction()을 통해 호출 프로그램이 계속해서 피호출 프로그램과 동시에 실행될 수 있습니다.

Java™에 대해 생성 중인 경우 함수 호출에서 매개변수로 시작하는 데 프로그램을 지정하여 레코드에서 프로그램 이름을 대체할 수 있습니다.

구문

  vgLib.startTransaction(
    request ANY in
    [, prID INT or CHAR inOut
    [, termID INT or CHAR(4) inOut ]])

  vgLib.startTransaction(
    request ANY in
    [, progName CHAR inOut ])
request
다음 형식이어야 하는 기본 레코드의 이름입니다.
  • 처음 2개 바이트(10진수 없는 SMALLINT 또는 BIN)에는 전달되지 않는 2개의 필드(이 필드 포함)에 대한 10에 더하여 시작된 트랜잭션에 전달될 데이터의 길이가 포함됩니다.
  • 다음 8개의 바이트(CHAR)도 전달되지 않습니다. 컨텐츠는 대상 시스템에 따라 다릅니다. 이 주제의 "호환성" 절을 참조하십시오.
  • 나머지 요청 레코드는 전달됩니다.
prID
이 인수는 CICS® 및 iSeries COBOL 플랫폼에서만 사용됩니다. 이 주제의 "호환성" 절을 참조하십시오.
termID
이 인수는 CICS 플랫폼에서만 사용됩니다. 이 주제의 "호환성" 절을 참조하십시오.
progName
비동기식으로 시작될 프로그램의 이름입니다. 이 옵션은 Java 전용입니다. 이 주제의 "호환성" 절을 참조하십시오.

예제

다음 예제는 vgLib.startTransaction() 함수를 표시합니다.

myRequest RequestPart;
myRequest.prefix = "18";
myRequest.progName = "MyProgrm";
myRequest.reqrec = "MyData";
vgLib.startTransaction(myRequest);

프로그램 코드에 대한 이 예제를 동반하는 레코드 선언은 다음과 같습니다.

Record RequestPart type BasicRecord
    10 prefix SMALLINT;
    10 progName CHAR(8);
    10 reqrec CHAR(8);
end

호환성

표 1. vgLib.startTransaction()의 호환성 고려사항
플랫폼 문제
Java 생성
  • Java 프로그램은 별도의 JVM(Java Virtual Machine)에서 동일한 머신의 EGL이 생성한 다른 Java 프로그램만 시작할 수 있습니다. 기본 동작은 동일한 Java 패키지에 상주하는 프로그램을 시작하는 것입니다. 그러나 progName을 완전히 규정하여 다른 패키지를 지정할 수 있습니다. (또는 호출 프로그램을 생성하는 데 사용되는 연계 옵션 파트의 asynchLink 요소를 변경할 수 있습니다.)
  • request 레코드의 바이트 3-10에는 시작될 기본 프로그램의 이름이 포함됩니다. progName을 지정하는 경우 이 인수가 request 레코드에서 프로그램 이름을 대체합니다. 전달된 레코드의 크기는 32767바이트를 초과할 수 없습니다. prIDtermID 매개변수는 무시됩니다.
  • V6 예외 호환성을 사용하는 경우(V6 예외 호환성 사용 참조) 다음 값이 sysVar.errorCode에 리턴됩니다.
    00000000
    새 JVM이 작성되었고 레코드가 전달되었습니다. 해당 값은 피호출 프로그램이 실행하는 데 실패한 경우에도 발생할 수 있습니다.
    00000001
    새 JVM을 작성할 수 없거나 레코드를 전달하는 중 오류가 발생했습니다.
CICS
  • vgLib.startTransaction() 함수는 대상 트랜잭션에 대해 CICS START 명령을 실행합니다. 기본 동작은 동일한 CICS 영역에 상주하는 프로그램을 시작하는 것입니다. 그러나 호출 프로그램을 생성할 때 사용되는 연계 옵션 파트의 asynchLink 요소를 정의하여 다른 영역을 지정할 수 있습니다. 대상 트랜잭션이 원격 시스템에서 시작되는 경우 prIDtermID 매개변수가 무시됩니다.
  • request 레코드의 바이트 3-6에는 트랜잭션 ID가 포함되고 다음 4개의 바이트가 공백이어야 합니다. 전달된 레코드의 크기는 32767바이트를 초과할 수 없습니다.
  • termID 매개변수의 값에 따라, EGL은 연관된 디바이스가 있는지 여부에 상관없이 CICS START 명령을 실행합니다.
    • termID가 지정되지 않은 경우 EGL이 현재 터미널을 대상 트랜잭션과 연관시킵니다. 특히, EGL은 CICS START 명령에서 TERMID 옵션에 현재 터미널 ID를 지정합니다.
    • termID가 지정되고 해당 값이 2진 0이 아니면 EGL이 지정된 디바이스(터미널 또는 프린터)를 대상 트랜잭션과 연관시킵니다. 특히, EGL은 termID의 값을 CICS START 명령의 TERID 옵션에 지정하지만 RTERMID 옵션에는 값을 지정하지 않습니다.

      termID의 값이 현재 트랜잭션과 연관된 CICS 터미널 ID인 경우 결과를 예상할 수 없습니다. 현재 트랜잭션을 종료하고 현재 터미널에서 새 트랜잭션을 시작하려면 vgLib.startTransaction 시스템 함수가 아니라 transfer to transaction 또는 show 명령문을 사용하십시오.

    • termID 매개변수의 값이 2진 0이면 EGL이 대상 트랜잭션과 연관시키는 터미널이 없습니다. 특히, EGL은 prID 매개변수의 값을 CICS START 명령의 RTERMID 옵션에 지정하지만 TERMID 옵션에는 값을 지정하지 않습니다. 또한, prID 매개변수는 대상 트랜잭션에서 converseVar.printerAssociation 시스템 변수를 초기화하는 데 사용되는 프린터 ID입니다. termID CHAR 필드를 2진 0으로 설정하려면 2진 0의 4바이트에 대해 16진 리터럴이 포함된 지정 명령문을 사용하십시오.
        myCHAR = x"00000000";
  • 대상 프로그램에서 printerAssociation을 초기화하는 데 prIDtermID 매개변수가 사용되는 방식에 대한 자세한 정보는 "printerAssociation"을 참조하십시오.
  • 대상 트랜잭션에는 PCT 및 PPT 항목이 있어야 합니다. 해당 트랜잭션의 첫 번째 프로그램이 EGL 또는 VisualAge Generator에서 생성되지 않은 경우 전달된 작업 영역 및 터미널 정보를 가져오려면 해당 프로그램이 CICS RETRIEVE를 실행해야 합니다.
CICS(계속)
  • V6 예외 호환성을 사용하는 경우(V6 예외 호환성 사용 참조) 다음 값이 sysVar.errorCode에 리턴될 수 있습니다.
    00000000
    성공
    00000203
    트랜잭션 ID가 유효하지 않습니다.
    00000205
    터미널 ID가 유효하지 않습니다.
    00000206
    매개변수가 유효하지 않습니다.
    00000207
    시스템 ID가 유효하지 않습니다.
    00000208
    링크 서비스가 중단되었습니다.
    ffrrrrrr
    다른 CICS 오류인데, 여기서 ff는 EIBFN 바이트 0의 16진 표현이고 rrrrrr은 EIBRCODE 바이트 0-2의 16진 표현입니다.
iSeries COBOL
  • 함수가 동일한 iSeries 머신에서 프로그램을 시작합니다. EGL 런타임은 2개의 명령 언어(CL) 프로그램을 통해 이에 대한 지원을 제공합니다.
    CREATX
    이 프로그램은 다음 조치를 수행합니다.
    • 현재 작업 번호 가져오기
    • 데이터 큐 VGCREATX에 사용자 데이터 보내기
    • CL 프로그램 CREATXPP를 시작하는 새 CREATXJOB 시작
    CREATXPP
    이 프로그램은 다음 조치를 수행합니다.
    • 데이터 큐 VGCREATX에서 데이터를 검색할 키로 이전 작업 번호를 사용합니다.
    • request 레코드 바이트 3-11에 지정된 비동기 CL 프로그램을 호출합니다.
  • request 레코드의 바이트 3-10에는 시작될 프로그램의 이름이 포함됩니다. 전달된 레코드의 크기는 4095바이트를 초과할 수 없습니다.
  • prID 매개변수는 비동기 작업에 사용되는 출력 큐의 값이 포함된 선택적 4바이트 CHAR 필드입니다. 기본값은 VGEN입니다. 프로그램이 converseVar.printerAssociation을 실행하기 전에 출력 큐를 정의해야 합니다.
  • termID 매개변수가 무시됩니다.
IMS/VS 또는 IMS™ BMP
  • vgLib.startTransaction()은 동일한 IMS 시스템에서만 트랜잭션을 시작할 수 있습니다. request 레코드의 바이트 3-10에는 IMS 트랜잭션 코드가 포함됩니다. 전달된 레코드의 크기는 32765바이트를 초과할 수 없습니다. prIDtermID 매개변수는 무시됩니다.
  • 이 함수로 수정 가능한 대체 PCB에 삽입됩니다. EGL은 길이에 2를 추가하고 길이 및 트랜잭션 필드 간에 2바이트를 삽입하여 IMS 메시지에 필요한 형식으로 request 레코드를 변환합니다. 트랜잭션은 연관된 터미널 없이 시작됩니다.
  • 시작된 트랜잭션은 시스템 IMS 시스템 정의에 포함되어야 하며 비대화식 트랜잭션으로 정의되어야 합니다. 대상 트랜잭션이 EGL 프로그램이 아닌 경우 GU 호출을 I/O PCB에 실행하여 메시지를 검색해야 합니다.
  • V6 예외 호환성을 사용하는 경우(V6 예외 호환성 사용 참조) 다음 값이 sysVar.errorCode에 리턴될 수 있습니다.
    00000000
    호출에 성공했습니다.
    00000203
    유효하지 않은 트랜잭션 코드 등의 이유로 호출에 실패했습니다.
z/OS® 일괄처리 이 함수는 지원되지 않습니다.