アプリケーション プログラムに必要な各ユーザー出口は、その出口が呼び出される前に有効にする必要があります。アプリケーション プログラムがユーザー出口の使用を終了したら、そのユーザー出口を無効にすることができます。ただし、ユーザー出口を無効にする必要性はありません。CICS の起動時には、ユーザー出口は常にデフォルトで無効になります。ユーザー出口プログラムを有効にする場合は CICS コマンド ENABLE PROGRAM を使用し、無効にする場合は CICS コマンド DISABLE PROGRAM を使用します。不正な出口を有効にしようとすると、X'804000' の EIBRCODE が返されます。正当であるが実装されていない出口を有効にしようとすると、X'804010' の EIBRCODE が返されます。また、EXTRACT EXIT コマンドも用意されています。ユーザー出口プログラムの作業領域にアクセスするには、このコマンドを使用します。これらのコマンドに対して提供されるサポートのレベルの詳細は、「System Programmers Commands」トピックを参照してください。
各ユーザー出口プログラムは、プログラムとして (PLT で) 定義する必要があり、その定義は稼働中のシステムで利用できなければなりません。
グローバル ユーザー出口とタスク関連ユーザー出口の詳細については、IBM マニュアルの『CICS/ESA 3.3 Customization Guide』を参照してください。このマニュアルには、正当なユーザー出口ポイントの一覧が記載されています。
ユーザー出口プログラムには、それがグローバル ユーザー出口とタスク関連ユーザー出口のどちらを対象としているかに関わらず、次の 2 つのコピーブックをインクルードする必要があります。
78 78-uxi-TRUE value 1. 78 78-uxi-XZCATT value 2. 78 78-uxi-XZCIN value 3. 78 78-uxi-XZCOUT value 4. 78 78-uxi-XEIIN value 5. 78 78-uxi-XEIOUT value 6. 78 78-uxi-XWBOPEN value 7. 78 78-uxi-XWBSNDO value 8. 78 78-uxi-XWBAUTH value 9. ***--------------------------------------------------------------* *** Base parameters * ***--------------------------------------------------------------* 01 uxi-user-exit-interface. 02 uxi-operational-flags-ptr pointer. 02 uxi-scheduling-flags-ptr pointer. 02 uxi-global-area-ptr pointer. 02 uxi-global-area-length pic x(4) comp-5. 02 uxi-local-area-ptr pointer. 02 uxi-local-area-length pic x(4) comp-5. 02 uxi-dfheiblk-ptr pointer. 02 uxi-unit-of-recovery-ptr pointer. ***--------------------------------------------------------------* *** Exit specific parameters * ***--------------------------------------------------------------* 02 uxi-exit-specific-ptrs. *> XZCATT In/Out XEin/out 03 uxi-resource-ptr pointer. *> TCTTE TCTTE Arg list 03 uxi-resource-data-ptr pointer. *> TIOA TIOA user-id 03 uxi-res-data-len-ptr pointer. *> * * 03 uxi-aux-1-ptr pointer. *> APPC program 03 uxi-aux-1-length-ptr pointer. *> * 03 uxi-aux-2-ptr pointer. *> Tran Sys EIB 03 uxi-aux-2-length-ptr pointer. *> 03 uxi-aux-3-ptr pointer. *> TEUA TEUA 03 uxi-aux-3-length-ptr pointer. *> * * 03 uxi-aux-4-ptr pointer. *> ComA ComA 03 uxi-aux-4-length-ptr pointer. *> * * 03 pointer. *> ***--------------------------------------------------------------* *** System parameters * ***--------------------------------------------------------------* 02 uxi-PCA-ptr pointer. 02 uxi-CSA-ptr pointer. 02 uxi-DCA-ptr pointer. 02 uxi-local-trace-table-ptr pointer.
01 lk-uxc-operation. 03 lk-uxc-exit-id pic x comp-x. 88 lk-uxc-TRUE-88 value 78-uxi-TRUE. 88 lk-uxc-XZCATT-88 value 78-uxi-XZCATT. 88 lk-uxc-XZCIN-88 value 78-uxi-XZCIN. 88 lk-uxc-XZCOUT-88 value 78-uxi-XZCOUT. 88 lk-uxc-XEIIN-88 value 78-uxi-XEIIN. 88 lk-uxc-XEIOUT-88 value 78-uxi-XEIOUT.. 88 lk-uxc-XWBOPEN-88 value 78-uxi- XWBOPEN. 88 lk-uxc-XWBSNDO-88 value 78-uxi- XWBSNDO. 88 lk-uxc-XWBAUTH-88 value 78-uxi- XWBAUTH. 03 lk-uxc-schedule pic x. 88 lk-uxc-generic-88 value x'80'. 88 lk-uxc-TRUE-on-start-88 value x'80'. 88 lk-uxc-TRUE-on-sync-88 value x'40'. 88 lk-uxc-TRUE-on-prep-88 value x'20'. 88 lk-uxc-TRUE-on-tr-wrap-88 value x'01'. 03 lk-uxc-modifier pic x comp-x. 88 lk-uxc-user-syncpoint-88 value 0. 88 lk-uxc-task-syncpoint-88 value 1. 88 lk-uxc-task-start-88 value 2. 88 lk-uxc-initialization-88 value 254. 88 lk-uxc-shutdown-88 value 255. 03 lk-uxc-action pic x comp-x. 88 lk-uxc-syncpoint-commit-88 value 0. 88 lk-uxc-syncpoint-rollback-88 value 1. 88 lk-uxc-syncpoint-prepare-88 value 2. 03 lk-uxc-return-code pic x(4) comp-5. 01 lk-uxc-schedule-parm. 03 lk-uxc-schedule-byte pic x. 78 78-lk-uxc-TRUE-on-start value x'80'. 78 78-lk-uxc-TRUE-on-sync value x'40'. 78 78-lk-uxc-TRUE-on-prep value x'20'. 78 78-lk-uxc-TRUE-on-tr-wrap value x'01'.
タスク関連ユーザー出口プログラムの骨組みの例を次に示します。
id division. program-id. samptrue. environment division. configuration section. input-output section. data division. file section. working-storage section. 01 work-scl. 02 ws-allocate-local. 03 ws-allocate-local-ptr-x. 04 ws-allocate-local-ptr pointer. 03 ws-allocate-local-size pic x(4) comp-5. 03 ws-allocate-local-return pic x(4) comp-5. 88 ws-allocate-local-ok-88 value 0. 88 ws-allocate-local-no-space-88 value 1. 88 ws-deallocate-local-invalid-88 value 2. 88 ws-deallocate-inv-length-88 value 157. 02 ws-allocate-local-type pic x. 02 pic x. 02 ws-mfpm-register-flag pic x(2). 88 ws-mfpm-assign-24-88 value x'0000'. 88 ws-mfpm-absolute-24-88 value x'0200'. 88 ws-mfpm-assign-31-88 value x'0001'. 88 ws-mfpm-absolute-31-88 value x'0201'. 02 ws-mfpm-allocate-size pic x(4) comp-x. 02 ws-mfpm-allocate-ptr-x. 03 ws-mfpm-allocate-ptr pointer value null. linkage section . copy 'dfhcbuxi.cpy'. copy 'dfhcbuxc.cpy'. 01 lk-global-area. 03 lk-ga-byte pic x occurs 0 to 4096 depending on uxi-global-area-length. 01 lk-local-area. 03 lk-la-byte pic x occurs 0 to 4096 depending on uxi-local-area-length. procedure division using uxi-user-exit-interface. module-entry-point. move 0 to return-code set address of lk-uxc-operation to uxi-operational-flags-ptr set address of lk-uxc-schedule-parm to uxi-scheduling-flags-ptr move 0 to lk-uxc-return-code *> -- Are we being called by an application? *> -- (User application sets unused value in lk-uxc-schedule.) if lk-uxc-schedule = x'02' perform called-by-application goback end-if *> -- Register syncpoint interest move 78-lk-uxc-TRUE-on-sync to lk-uxc-schedule-byte *> -- Register start of task interest call "CBL_OR" using 78-lk-uxc-TRUE-on-start lk-uxc-schedule-byte by value 1 end-call *> -- Register any other interest here by OR'ing bits *> -- in lk-uxc-schedule-byte as above. if lk-uxc-exit-id not = 0 *> -- handle only TRUEs goback end-if evaluate true when lk-uxc-initialization-88 when lk-uxc-shutdown-88 goback when lk-uxc-task-start-88 perform save-TA-address when lk-uxc-task-syncpoint-88 perform end-task-process when lk-uxc-user-syncpoint-88 set address of lk-global-area to uxi-global-area-ptr set address of lk-local-area to uxi-local-area-ptr evaluate true when lk-uxc-syncpoint-prepare-88 *> -- We haven't registered an interest for this continue when lk-uxc-syncpoint-commit-88 perform commit-process when lk-uxc-syncpoint-rollback-88 perform rollback-process end-evaluate end-evaluate goback . called-by-application section. *> -- Add any code here that you wish to execute when *> -- called by an application program. *> -- This sample passes back the address of the local *> -- task area. set uxi-local-area-ptr to ws-mfpm-allocate-ptr exit . save-TA-address section. *> -- Convert local task area address and save in W/S. exit . end-task-process section. *> -- Insert code here that you wish to perform at *> -- end of task. exit . commit-process section. *> -- Insert code here that you wish to perform at *> -- user syncpoint. exit . rollback-process section. *> -- Insert code here that you wish to perform at *> -- user backout. exit .