CICS - 伪编程
到目前为止,我们已经介绍了非转换和转换程序。转换程序有一个主要缺点,因为它们的思考时间相当长。为了克服这个问题,伪转换编程应运而生。我们现在将进一步讨论伪转换程序。
伪转换程序
以下是伪转换程序中发生的事件顺序 −
步骤 1 − 系统向屏幕发送一条消息并终止事务,指定在收到用户输入时要启动的事务。
步骤 2 − 系统将此事务使用的资源分配给系统中运行的其他事务。因此,我们可以在伪转换程序中利用资源,直到用户输入为止。
步骤 3 − 系统定期轮询终端输入。收到输入后,对其进行处理并显示输出。
步骤 4 − 应用程序在需要时加载到主存储器中,不使用时释放。
伪转换技术
伪对话中要注意的重要一点是每个任务之间的数据传递。我们将讨论传递数据的技术。
COMMAREA
COMMAREA 称为通信区域。COMMAREA 用于在任务之间传递数据。以下示例显示如何传递 COMMAREA,其中 WSCOMMAREA 和 WS-COMMAREA-LENGTH 在工作存储部分 − 中声明
EXEC CICS RETURN
TRANSID ('transaction-id')
COMMAREA (WS-COMMAREA)
LENGTH (WS-COMMAREA-LENGTH)
END-EXEC.
DFHCOMMAREA
DFHCOMMAREA 是 CICS 为每个任务提供的一个特殊内存区域。
它用于将数据从一个程序传递到另一个程序。程序可以存在于同一事务中,也可以存在于不同的事务中。
它在 01 级程序的链接部分中声明。
它应该具有与 WS-COMMAREA 相同的图片子句。
可以使用 MOVE 语句将数据从 DFHCOMMAREA 移回 WS-COMMAREA。
MOVE DFHCOMMAREA TO WS-COMMAREA.
示例
发送映射后,任务结束并等待用户响应。在此阶段,需要保存数据,因为虽然任务已结束,但事务尚未结束。当要恢复此事务时,需要任务的先前状态。用户输入输入。现在必须通过 RECEIVE MAP 命令接收输入,然后进行验证。以下示例显示如何声明 COMMAREA 和 DFHCOMMAREA −
WORKING-STORAGE SECTION. 01 WS-COMMAREA. 05 WS-DATA PIC X(10). LINKAGE SECTION. 01 DFHCOMMAREA. 05 LK-DATA PIC X(10).
伪代码
下面给出了我们在伪编程中使用的伪代码逻辑 −
MOVE DFHCOMMAREA TO WS-COMMAREA
IF EIBCALEN = 0
STEP1: SEND MAP
STEP2: MOVE <internal-transaction-id1> to WS-COMMAREA
STEP3: ISSUE CONDITIONAL RETURN
ELSE
IF WS-COMMAREA = <internal-transaction-id1>
STEP4: RECEIVE MAP
STEP5: PROCESS DATA
STEP6: SEND OUTPUT MAP
STEP7: MOVE <internal-transaction-ID2> to WS-COMMAREA
STEP8: ISSUE CONDITIONAL RETURN
END-IF
END-IF
STEP9: REPEAT STEP3 TO STEP7 UNTIL EXIT
示例
以下示例显示了一个伪转换程序 −
******************************************************************
* PROGRAM TO DEMONSTRATE PSEUDO-CONVERSATION *
******************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(30).
01 WS-COMMAREA PIC X(10) VALUE SPACES.
LINKAGE SECTION.
01 DFHCOMMAREA PIC X(10).
PROCEDURE DIVISION.
MOVE DFHCOMMAREA TO WS-COMMAREA
IF WS-COMMAREA = SPACES
******************************************************************
* TRANSACTION GETTING EXECUTED FOR THE FIRST TIME *
******************************************************************
MOVE 'HELLO' TO WS-MESSAGE
EXEC CICS SEND TEXT
FROM (WS-MESSAGE)
END-EXEC
MOVE 'FIRST' TO WS-COMMAREA
******************************************************************
* TASK ENDS AS A RESULT OF RETURN. IF AID KEY PRESSED, NEXT *
* TRANSACTION SHOULD BE TP002. DATA PASSED FROM WS-COMMAREA TO *
* DFHCOMMAREA *
******************************************************************
EXEC CICS RETURN
TRANSID('TP002')
COMMAREA(WS-COMMAREA)
END-EXEC
******************************************************************
* IF COMMAREA IS NOT EMPTY , THEN TP002 HAS BEEN EXECUTED ONCE *
* ALREADY, USER INTERACTION IS FACILITATED BY RECEIVE *
******************************************************************
ELSE
EXEC CICS RECEIVE
INTO(WS-MESSAGE)
END-EXEC
EXEC CICS SEND TEXT
FROM (WS-MESSAGE)
END-EXEC
******************************************************************
* TASK ENDS AS A RESULT OF RETURN, NO NEXT TRANSACTION SPECIFIED *
* TO BE EXECUTED *
******************************************************************
EXEC CICS RETURN
END-EXEC
END-IF.
伪转换的优点
以下是伪转换的优点 −
资源得到最佳利用。程序暂时挂起后,资源会立即释放。
看起来好像处于对话模式。
响应时间更快。
RETURN 返回语句
以下是 CICS 中使用的两种返回语句类型 −
Return-1
发出以下无条件返回语句时,任务和事务(程序)终止。
EXEC CICS RETURN END-EXEC。
Return-2
当发出以下条件返回,即 return with TRANSID 语句时,控制权将返回到 CICS,并执行下一个 transid。当用户按下 AID 键时,下一个事务开始。
EXEC CICS RETURN
TRANSID ('trans-id')
[COMMAREA(WS-COMMAREA)]
END-EXEC.

