2

我刚刚进入大型机开发,所以请原谅任何无知,但是有没有办法确定正在显示或最后发送到终端的地图?

例如,我在 mapset 中有MAP1& 。地图将通过按 PF 键交替。在每张地图上,用户可以输入一个由程序评估的值。是否有适当的方法来确定从用户接收时应该评估哪个地图?MAP2MAPS(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 **

我不确定这是否有效,但我想知道是否已经有一个命令或更好的方法来做到这一点。

4

2 回答 2

4

PresumingCURRENT-MAP-SCREEN设置为指示当您将地图发送到屏幕时正在发送的地图并存储在您的 中DFHCOMMAREA,这就是我通常看到的完成方式。

通常,编写伪会话 CICS 事务的初始程序的方式是检查EIBCALEN = 0哪个表明这是事务的初始调用。 EIBCALEN(CALEN 是 Communication Area LENgth 的缩写)是EIB(执行接口块)中的一个字段,它会自动传递给事务的初始程序(as ),并由预编译器或协处理器(无论您使用哪个DFHEIBLK)插入Linkage Section)。EIB包含许多描述事务上下文的字段。

如果EIBCALEN = 0您知道初始化您的WS-COMMAREA,发送您的初始地图,存储您发送的地图的指示符CURRENT-MAP-SCREEN,然后EXEC CICS RETURN TRANSID(EIBTRNID) COMMAREA(WS-COMMAREA) LENGTH(...)

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

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

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

人们通常会MOVE DFHCOMMAREA TO WS-COMMAREA在其工作存储中使用数据副本,然后使用这些副本。当然,如果EIBCALEN = 0您不这样做,就没有数据可以移动。

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

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

于 2017-09-21T19:48:04.480 回答
1

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

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

于 2018-06-27T10:15:59.387 回答