2012-04-28 34 views
-1

我首先有两个问题是主要问题。 1.我能够在cics地图中显示日期,但我需要的是,我希望它在滴答作响,即它应该显示每秒更新。 2.我有一个自动将数据库(DB2)中的数据插入到文件的COBOL-DB2程序。我希望这个程序在时间戳的基础上被调用,即每1小时,2小时或每天。如何在cics中自动更新时间

谢谢

+0

请将您的DB2问题分解为单独的主题。它与你的主题无关。 – zarchasmpgmr 2012-04-29 04:27:46

回答

0

这是不可能的使用地图的标准CICS。 3270协议不适合不断更新屏幕。大多数自动更新屏幕(如控制台和监视显示器)都使用本地VTAM方法,构建自己的数据流。

使用未格式化的数据可能会这样做,但我不会在CICS中推荐它。伪会话CICS在屏幕显示期间没有控制程序,并且会话编程极不鼓励。

2

您可以这样做,但您需要更改修改传统的对话方式。不用返回并等待用户事件,您可以使用当前的逗号在几秒钟后开始传输并退出。如果用户事件发生在那个时间,您可以取消您的开始请求,如果没有,您可以刷新屏幕时间戳并重复。

只是为了得到一个时间戳刷新是有点痛苦。除非你有一个非常好的理由,否则没有什么意义打扰。

DB2的东西很简单。使用间隔控制开始你的tran,和上面描述的START AFTER()一样,你可以让它每小时运行一次,或者两小时运行,或者其他什么。

1

在CICS中,您无法真正做到这一点,CICS最多只能用于伪交互式响应。它被设计用于你的终端被发送整个页面或屏幕的大型机,程序在接收到屏幕时读取屏幕(有一些字段用户会更新,如果你没有更改它们,终端不会发回数据),那么CICS事务处理已经包含了一个包含更改的屏幕的一部分,并将响应发回并退出。

这使得非常有效的数据输入和查询程序。但是要意识到,当程序结束处理屏幕时,它已经退出,它已经不存在了,甚至不再存储在内存中,所有的资源都被回收了。这使得该公司可以运行一台拥有300台终端和10兆字节实际内存的大型机,因为当程序等待您响应时,如果有200人在运行数据录入程序,则根本不使用任何资源,他们正在运行一个可重入的程序,其中所有200个程序都运行同一程序的同一副本,并且他们唯一使用的是可以为每个用户写入1K个可写入存储,以便必须读取屏幕或文件的部分记录并做一些计算。想想看,200人正在运行相同的程序,并且他们所有人同时使用了一个使用20K内存的模块 - 并且每个人都有相同的20K - 每个实际读/写入数据。

想一想,第一个启动数据录入程序的用户使用20K内存作为应用程序,加上1K作为可写入数据。之后,在该程序中正在处理的每个用户都使用额外的1K内存,就这些了。当他们坐在那里看着终端时,他们可能使用的是一个表中的4个字节来告诉系统有一个终端连接。根本没有资源被使用。

为了能够定期更新屏幕,意味着必须保持运行状态,这不是CICS所做的非常好的事情。由于您实际上是在PC上运行,因此CICS不适用于PC的交互式处理。

2

我不认为你需要修改你的伪对话方法来实现你所需要的。只需发出一个延迟一秒的EXEC CICS START命令(只需执行一次),即可发送一个仅向终端设备发送发送映射(或TC写入)的小程序。理想情况下,在屏幕上预留一个公共区域,以便所有交易都可以使用通用程序。在某些时候,当不再需要更新时,取消START请求。按照我的看法,定时器更新事务将与用户发起的事务流很好地混合。如果用户事务在启动计时器弹出时处于活动状态,则计时器更新程序将稍微延迟一点。

虽然这应该起作用,但您需要记住,您可能每个用户每小时驾驶3,600笔交易。这个功能真的值得吗?

0

EXEC CICS ASK TIME END-EXEC更新时间戳。 EXEC CICS发送MAP数据仅用于END-EXEC以更新屏幕。

然而,使用建议 EXEC CICS START TRANSID( '名' | namefld) DELAY(时间) END-EXEC。 实际上是更好的方法。