Cobol 当前正在显示哪个地图?
我刚刚进入大型机开发阶段,请原谅我的无知,但有没有办法确定哪张地图正在显示或最后发送到终端 例如,我在mapsetCobol 当前正在显示哪个地图?,cobol,mainframe,cics,3270,Cobol,Mainframe,Cics,3270,我刚刚进入大型机开发阶段,请原谅我的无知,但有没有办法确定哪张地图正在显示或最后发送到终端 例如,我在mapsetMAPS中有MAP1和MAP2。按下PF键(PF7/PF8),地图将交替显示。在每个地图上,用户可以输入一个值,该值将由程序(SLCTOPTI)评估。当从用户处收到地图时,是否有适当的方法来确定应该评估哪个地图 以下是我目前必须尝试的: ** some code before ** WHEN DFHENTER
MAPS
中有MAP1
和MAP2
。按下PF键(PF7/PF8),地图将交替显示。在每个地图上,用户可以输入一个值,该值将由程序(SLCTOPTI)
评估。当从用户处收到地图时,是否有适当的方法来确定应该评估哪个地图
以下是我目前必须尝试的:
** some code before **
WHEN DFHENTER
+0103
%+0104 IF CURRENT-MAP-SCREEN = 1
%+0104 EXEC CICS RECEIVE
%+0104 MAP ('MAP1')
%+0104 INTO (MAP1I)
%+0104 RESP (WS-RESP)
%+0104 END-EXEC
%+0104 ELSE
%+0104 EXEC CICS RECEIVE
%+0104 MAP ('MAP2')
%+0104 INTO (MAP2I)
%+0104 RESP (WS-RESP)
%+0104 END-EXEC
%+0104 END-IF
+0103
%+0104 EVALUATE SLCTOPTI
+0103
%+0104 WHEN ' 1'
%+0104 WHEN '01'
%+0104 WHEN '1'
+0103
%+0104 MOVE 'XXXX' TO WS-START-TRAN
%+0104
%+0104 WHEN ' 2'
%+0104 WHEN '02'
%+0104 WHEN '2'
+0103
%+0104 MOVE 'XXXX' TO WS-START-TRAN
** some code after **
我不确定这是否有效,但我想知道是否已经有了用于此的命令或更好的方法。假定
CURRENT-MAP-SCREEN
设置为指示当您将地图发送到屏幕并存储在DFHCOMMAREA
中时正在发送的地图,这是我通常看到的操作方式
通常,伪会话CICS事务初始程序的编写方式是检查EIBCALEN=0
,这表明这是事务的初始调用EIBCALEN
(CALEN是通信区域长度的缩写)是EIB
(执行接口块)中的一个字段,它自动传递到事务的初始程序(如DFHEIBLK
)中,并由预编译器或协处理器插入到链接节中(无论您使用哪个)。EIBEIB
包含许多描述交易上下文的字段
如果EIBCALEN=0
您知道要初始化您的WS-COMMAREA
,发送您的初始映射,存储您在CURRENT-map-SCREEN
中发送的映射的指示符,以及EXEC CICS RETURN TRANSID(EIBTRNID)COMMAREA(WS-COMMAREA)长度(…)
事务的初始程序也会自动传递一个指向DFHCOMMAREA
的指针,预编译器或协处理器(以您使用的为准)也会自动插入链接部分。在事务调用之间,CICS代表您保留DFHCOMMAREA
如果EIBCALEN NOT=0
您知道如何将DFHCOMMAREA移动到WS-COMMAREA
并选中CURRENT-MAP-SCREEN
查看要接收的映射
当您执行CICS返回TRANSID(EIBTRNID)COMMAREA(WS-COMMAREA)长度(…)
您正在为CICS提供要保留的数据,并在下次调用时在DFHCOMMAREA
中传递回事务的初始程序。一旦发生EXEC CICS返回
,分配给工作存储和本地存储的内存将被释放
人们通常会将DFHCOMMAREA移动到WS-COMMAREA
,然后处理其工作存储器中的数据副本。如果EIBCALEN=0
不这样做,当然,就没有数据可移动
一些商店试图在程序和地图之间建立1:1的关系,以避免跟踪当前显示的地图
希望在以后的学习中,您的讲师将讨论使用通道和容器而不是DFHCOMMAREA。后者是CICS应用程序几十年来的构建方式,因此您肯定会看到以这种方式编写的代码,前者是一种较新的功能。系统编程接口(SPI)在INQUIRE TERMINAL命令中有选项MAPNAME和MAPSETNAME。您的四字符终端标识符在EXEC接口块(EIB)中作为字段EIBTRMID可用
任务的EIB可用于CICS中运行的每个任务,在大多数语言中,它是直接可用的,并且字段可以直接按名称使用,尽管在C中,您必须使用EXEC CICS address EIB向CICS询问其地址。是的,它用于指示正在发送的映射,但我将其存储在WS-COMMAREA
中,这会是一个问题吗嗯?但我明白了,我会开始调查一些频道和容器。谢谢。