0

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

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

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

那么当我们在 cics 中已经有了 return() 时,还需要使用诸如 xctl 之类的调用函数吗?

4

2 回答 2

4

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

如果您愿意,您可以设计您的应用程序以将不同的业务功能分布在多个事务中,并使用逗号传递数据。

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

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

诸如临时存储队列之类的资源通常部分地使用事务 ID 来命名,以区分并保持它们分开。

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

我的经验是,如果代码都在一个事务中,则编码更简单,并且更容易维护带有屏幕交互的伪对话事务。你真的希望你的交易是伪对话或非对话的。我相信这是您看到设计为使用 XCTL、LINK 或动态 CALL 的事务的最重要原因。

于 2015-06-09T11:48:05.393 回答
0

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

于 2018-11-08T10:06:12.760 回答