使用return()将控制传递给不同程序并使用xctl

时间:2015-06-09 09:40:37

标签: mainframe cics cobol85

如果我有2个屏幕。首先是提示屏幕,例如,询问一些记录键,下一个屏幕显示有关记录的信息。 现在,当我想将控件转移到第二个屏幕时(在完成第一个屏幕的工作之后),我可以通过以下方式完成:

 exec cics
    return(trans-id)
    commarea(ws-commarea)
 end exec.    

其中trans-id是第二个屏幕的。

那么当我们已经在cics中使用return()时,需要使用调用函数(如xctl)吗?

2 个答案:

答案 0 :(得分:4)

使用XCTL或LINK或动态CALL将您的处理限制在一个CICS事务中。

如果您愿意,可以设计应用程序以跨多个事务传播不同的业务功能,并使用commarea传递数据。

从历史上看,这并不是出于多种原因。三十年前,一些CICS系统程序员认为交易ID是有限的资源,并鼓励应用程序设计人员将处理保持在尽可能少的交易数量。

CICS中的安全性在事务级别处理,因此您的用户必须有权执行构成必须执行的业务功能的所有事务。

临时存储队列等资源通常使用事务ID进行部分命名,以区分并将它们分开。

在CICS TS版本2之前(我认为),这些事务之间共享的数据仅限于commarea(32K)的大小。所有受支持的CICS版本现在都有通道和容器,允许您传递更大量的数据。

我的经验是,如果代码全部在一个事务中,则使用屏幕交互编码和更容易维护伪对话事务更简单。您真的希望您的交易是伪会话或非会话。我认为这是您看到设计使用XCTL,LINK或动态CALL的交易的首要原因。

答案 1 :(得分:0)

XCTL也不允许动态路由(您始终留在同一CICS区域中),并且只是一种方式。上面的伪对话返回将使用户更新屏幕,然后只有当他们按下注意标识符(例如Enter)时,下一个程序才会运行。 XCTL将立即运行。