4.7.1 JSMDRTEXT

LANSA Integrator

4.7.1 JSMDRTEXT


以下のライフ・サイクル・イベントが発生すると、JSMDIRECTプログラムはCLプログラムJSMDRTEXTを呼び出します。

ENTRY

プログラムが開始します。

EXIT

プログラムが正常に終了します。

ERRnnnn

nnnnは、3000で始まる4桁の数字です。
エラーが発生すると、プログラムが終了し、EXITイベントは呼び出されません。

 

JSMDRTEXTプログラムはJSMDRTDTAデータ・エリアを読み込み、JSMLSAEXT/LANSAプログラムが呼び出される前に現在のCGIジョブに追加する必要があるライブラリを取得します。ブランクのライブラリ・エントリーは無視されます。

省略値では、JSMDRTDTAデータ・エリアはブランクです。最初のLANSAインストールの際に、LANSAプログラム・ライブラリとコミュニケーション・ライブラリが最初の2つの位置に追加されます。

データ・エリアのサイズは2000バイトで、レイアウトは以下のようになります。

1-10

ライブラリ(LANSAプログラム・ライブラリ)

11-10

ライブラリ(LANSAコミュニケーション・ライブラリ)

21-10

ライブラリ

xx-10

ライブラリ...

1991-10

ライブラリ

 

この終了プログラムのソース・コードは、JSMライブラリのQCLSRCに保管されます。

 

/* JSMDIRECT終了プログラム*/

 

PGM PARM(&EVENT &SERVICE &SERVERHOST &HOST &PORT &REMOTEUSER &REMOTEADDR &CONTINUE &MESSAGE)

 

DCL VAR(&EVENT)      TYPE(*CHAR) LEN(10)

DCL VAR(&SERVICE)    TYPE(*CHAR) LEN(30)

DCL VAR(&SERVERHOST) TYPE(*CHAR) LEN(80)

DCL VAR(&HOST)       TYPE(*CHAR) LEN(80)

DCL VAR(&PORT)       TYPE(*CHAR) LEN(5)

DCL VAR(&REMOTEUSER) TYPE(*CHAR) LEN(30)

DCL VAR(&REMOTEADDR) TYPE(*CHAR) LEN(15)

DCL VAR(&CONTINUE)   TYPE(*CHAR) LEN(1)

DCL VAR(&MESSAGE)    TYPE(*CHAR) LEN(256)

 

DCL VAR(&JOBNAME)   TYPE(*CHAR) LEN(10)

DCL VAR(&JOBUSER)   TYPE(*CHAR) LEN(10)

DCL VAR(&JOBNUMBER) TYPE(*CHAR) LEN(6)

DCL VAR(&JOBCMD)    TYPE(*CHAR) LEN(50)

DCL VAR(&JOBMSG)    TYPE(*CHAR) LEN(100)

DCL VAR(&JOBCHGSTS) TYPE(*CHAR) LEN(7) VALUE(OK)

 

DCL VAR(&TMPLIB)     TYPE(*CHAR) LEN(10)

DCL VAR(&TMPLIBPOS)  TYPE(*DEC)  LEN(5)

DCL VAR(&TMPLIBLIST) TYPE(*CHAR) LEN(2000)

 

MONMSG MSGID(CPF0000)

 

/*ライブラリを取得する*/

 

RTVDTAARA  DTAARA(JSMDRTDTA (1 2000))  RTNVAR(&TMPLIBLIST)

 

/*残っている以前の失敗したシナリオを消去する*/

 

CHGVAR VAR(&TMPLIBPOS) VALUE(1)

RMVLIB:

  CHGVAR VAR(&TMPLIB) VALUE(%SST(&TMPLIBLIST &TMPLIBPOS 10))

  IF (&TMPLIB *EQ ' ' ) THEN(GOTO ENDRMVLIB)

 

  RMVLIBLE LIB(&TMPLIB)

  RCVMSG MSGQ(*PGMQ)

 

  CHGVAR VAR(&TMPLIBPOS) VALUE(&TMPLIBPOS + 10)

  IF (&TMPLIBPOS *GE 2000)  THEN(GOTO ENDRMVLIB)

 

  GOTO RMVLIB

ENDRMVLIB:

 

IF COND(%SUBSTRING(&EVENT 1 3) *EQ 'ERR') THEN(DO)

 

  /*エラー・イベントのログを取得する*/

 

  SNDPGMMSG MSG('------- JSMDIRECT ERROR -------')

  SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&EVENT)

  SNDPGMMSG MSGID(&EVENT)  MSGF(JSMMSGF)

 

  SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&SERVICE)

  SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&SERVERHOST)

  SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&REMOTEUSER)

  SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&REMOTEADDR)

  SNDPGMMSG MSG('-------------------------------')

 

  /*文字列を作成する - WRKJOB JOB(464971/QTMHHTTP/JSMINST) */

 

  RTVJOBA JOB(&JOBNAME) USER(&JOBUSER) NBR(&JOBNUMBER)

 

  CHGVAR  VAR(&JOBCMD) VALUE('WRKJOB JOB(' *TCAT +

                       &JOBNUMBER *TCAT '/' *TCAT +

                       &JOBUSER *TCAT '/' *TCAT +

                       &JOBNAME *TCAT ')' )

 

  CHGVAR VAR(&JOBMSG) VALUE('JSMDirect error, use command' *BCAT +

                      &JOBCMD)

 

  /*メッセージMSG(&JOBMSG)をユーザーに送信する(*SYSOPR) */

 

  GOTO END

 

ENDDO

 

IF COND(&EVENT *EQ 'ENTRY') THEN(DO)

 

  /* CONTINUEの省略値は'Y' */

  /* CHGVAR VAR(&CONTINUE)の値('N') */

  /* CHGVAR VAR(&MESSAGE)の値('I do not know you') */

  /*終了*/

 

  /*現在のサービスのジョブを準備する*/

 

  /* PGM(JSMCHGJOB) PARM(&JOBCHGSTS)を呼び出す*/

 

  IF COND(&JOBCHGSTS *NE 'OK') THEN(DO)

    CHGVAR VAR(&JOBMSG) VALUE('Change job exception' *BCAT +

                        &JOBCHGSTS)

    SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&JOBMSG)

  ENDDO

 

  /* JSMLSAEXTとLANSA呼び出し用にライブラリを追加する*/

 

  CHGVAR VAR(&TMPLIBPOS) VALUE(1)

  ADDLIB:

    CHGVAR VAR(&TMPLIB) VALUE(%SST(&TMPLIBLIST &TMPLIBPOS 10))

    IF (&TMPLIB *EQ ' ' ) THEN(GOTO ENDADDLIB)

 

    ADDLIBLE LIB(&TMPLIB)

    RCVMSG MSGQ(*PGMQ)

 

    CHGVAR VAR(&TMPLIBPOS) VALUE(&TMPLIBPOS + 10)

    IF (&TMPLIBPOS *GE 2000)  THEN(GOTO ENDADDLIB)

 

    GOTO ADDLIB

  ENDADDLIB:

 

  GOTO END

 

ENDDO

 

IF COND(&EVENT *EQ 'EXIT') THEN(DO)

 

  /*次のサービスのジョブを復元する*/

 

  GOTO END

 

ENDDO

 

END: ENDPGM