当前正在显示哪个地图?

Which map is currently being displayed?

我刚刚开始大型机开发,请原谅我的无知,但是有没有办法识别正在显示或最后发送到终端的地图?

例如,我在地图集 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 是 Communication Area LENgth 的缩写)是 EIB(执行接口块)中的一个字段,它会自动传递给您交易的初始程序(如 DFHEIBLK)并且由预编译器或协处理器(无论您使用哪个)插入到您的 Linkage Section 中。 EIB 包含许多描述交易上下文的字段。

如果EIBCALEN = 0您知道要初始化您的WS-COMMAREA,请发送您的初始地图,将您发送的地图的指示符存储在CURRENT-MAP-SCREENEXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...)中。

您的事务的初始程序也会自动传递一个指向 DFHCOMMAREA 的指针,也会由预编译器或协处理器(无论您使用哪个)自动插入到您的 Linkage Section 中。 DFHCOMMAREA 由 CICS 在您的事务调用之间代表您保存。

如果 EIBCALEN NOT = 0 你知道 MOVE DFHCOMMAREA TO WS-COMMAREA 并检查 CURRENT-MAP-SCREEN 以查看哪个地图到 RECEIVE

当您 EXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...) 向 CICS 提供要保留的数据并在下次调用时传回 DFHCOMMAREA 中事务的初始程序。一旦 EXEC CICS RETURN 发生,分配给您的工作存储和本地存储的内存将被释放。

人们 MOVE DFHCOMMAREA TO WS-COMMAREA 然后在他们的工作存储中使用数据副本是很常见的。如果EIBCALEN = 0你当然不这样做,就没有数据可以移动。

有些商店试图在程序和地图之间建立 1:1 关系,以消除跟踪当前显示的地图的需要。

希望在您的学习后期,您的讲师会谈论使用通道和容器而不是 DFHCOMMAREA。后者是几十年来构建 CICS 应用程序的方式,因此您肯定会看到以这种方式编写的代码,前者是一种较新的功能。

系统编程接口 (SPI) 在查询终端命令中有选项 MAPNAME 和 MAPSETNAME。您的四字符终端标识符在 EXEC 接口块 (EIB) 中作为 EIBTRMID 字段可用。

任务的 EIB 可用于 CICS 中的每个任务 运行,在大多数语言中它是直接可用的,并且可以直接按名称使用字段,尽管在 C 中您必须使用 EXEC CICS 向 CICS 询问其地址地址 EIB.