Cobol 当前正在显示哪个地图?

Cobol 当前正在显示哪个地图?,cobol,mainframe,cics,3270,Cobol,Mainframe,Cics,3270,我刚刚进入大型机开发阶段,请原谅我的无知,但有没有办法确定哪张地图正在显示或最后发送到终端 例如,我在mapsetMAPS中有MAP1和MAP2。按下PF键(PF7/PF8),地图将交替显示。在每个地图上,用户可以输入一个值,该值将由程序(SLCTOPTI)评估。当从用户处收到地图时,是否有适当的方法来确定应该评估哪个地图 以下是我目前必须尝试的: ** some code before ** WHEN DFHENTER

我刚刚进入大型机开发阶段,请原谅我的无知,但有没有办法确定哪张地图正在显示或最后发送到终端

例如,我在mapset
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
)中,并由预编译器或协处理器插入到
链接节中(无论您使用哪个)。EIB
EIB
包含许多描述交易上下文的字段

如果
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
中,这会是一个问题吗嗯?但我明白了,我会开始调查一些频道和容器。谢谢。