cobol - 当前显示的是哪张 map ?

标签 cobol mainframe cics 3270

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

例如,我在 map 集 MAPS 中有 MAP1MAP2。按下 PF 键(PF7/PF8) 即可交替显示 map 。在每个 map 上,用户可以输入要由程序(SLCTOPTI)评估的值。是否有正确的方法来确定在从用户接收时应评估哪个 map ?

这是我目前必须尝试的:

** 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 设置为指示当您将 map 发送到屏幕时正在发送的 map 并存储在 DFHCOMMAREA 中,这就是方式我通常会看到它完成。

通常,伪 session CICS 事务的初始程序的编写方式是检查 EIBCALEN = 0,这表明这是事务的初始调用。 EIBCALEN(CALEN 是通信区域 LENgth 的缩写)是 EIB(执行接口(interface) block )中的一个字段,它会自动传递到事务的初始程序(如 DFHEIBLK)并通过预编译器或协处理器(无论您使用哪个)插入到您的链接部分中。 EIB 包含许多描述您的交易背景的字段。

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

您的事务的初始程序也会自动传递一个指向 DFHCOMMAREA 的指针,并且由预编译器或协处理器(无论您使用哪个)自动插入到您的链接部分 )。在调用您的事务期间,CICS 会代表您保留 DFHCOMMAREA

如果EIBCALEN NOT = 0,您知道将 DFHCOMMAREA 移动到 WS-COMMAREA 并检查CURRENT-MAP-SCREEN 以查看要使用哪个 map 接收

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

人们将 DFHCOMMAREA 移动到 WS-COMMAREA 然后使用其工作存储中的数据副本是很常见的。如果EIBCALEN = 0您当然不这样做,则没有数据可以移动。

一些商店尝试在程序和 map 之间建立 1:1 的关系,以便无需跟踪当前显示的 map 。

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

关于cobol - 当前显示的是哪张 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46350002/

相关文章:

java - 具有用户特定功能的 JSF Web 应用程序

java - CICS 中 Java JDBC 中的 Db2 native 库加载错误?

cobol - cobol 中的 "copy corresponding"是什么,它是如何工作的?

db2 - COBOL 程序、JCL 作业,还是两者兼而有之?

unix - 从 JCL 调用 BPXBATCH 是使用批处理作业的优先级还是独立于 OMVS 的优先级?

assembly - 是否有为z/assembler量身定制的emacs组织模式的变体?

cobol - CICS 返回 VS GOBACK

error-handling - 倾销到ABEND-AID

cobol - 多次退出导致编译器警告

cobol - 嵌套执行需要并且不需要结束执行