重置和删除重新附加事件

自动从重新附加队列检索原子事件(但不是组合事件)将导致事件的触发状态重置为 NOTFIRED。 您可以遵循活动可用于处理重新附加事件的这个顺序。

关于此任务

从重新连接队列中检索组合事件 不会 将事件的触发状态重置为 NOTFIRE ,因为组合事件只有在其谓词变为 false 时才会重置。 因此,如果活动程序检索组合事件,那么它应该重置已触发的子事件或子事件的触发状态。 (执行此操作的一种方法是发出一个或多个 RETRIEVE SUBEVENT 命令。) 这反过来会导致重新评估组合事件的触发状态。

如果由于某个子活动的完成而重新连接了该活动,那么应该发出 CHECK ACTIVITY 命令以检查该子活动是否正常完成。 从 CHECK ACTIVITY 命令返回时, CICS® 会从父级的事件池中删除活动完成事件。

如果由于计时器到期而重新连接了活动,那么它可以发出 CHECK TIMER 命令来检查计时器是否正常到期。 从 CHECK TIMER 命令返回时, CICS 会从活动的事件池中删除计时器事件。

如果活动想要从其事件池中删除输入和组合事件,那么可以发出 DELETE EVENT 命令。 或者,它可以依赖于在其最终激活时发出的 RETURN ENDACTIVITY 命令来删除这些命令。

图 1 显示了活动可用于处理重新连接事件的典型序列。 处理原子事件 框在 图 2中展开。

图 1。 正在处理重新连接事件。 处理原子事件 框在 图 2 中展开。 该图显示在单个激活中处理的多个重新连接事件-您可能希望每次激活都处理一个事件。
图为显示活动如何处理重新连接事件的流程图。 图表顶部是 RETRIEVE REATTACH EVENT 命令。 根据检索到的事件是原子事件还是组合事件,将 followed.If 不同的路径。如果检索到的事件是原子事件,那么活动将以下图中描述的方式处理该事件。 然后,它将在重新连接队列上检查更多重新连接事件。 如果在重新连接队列上存在更多重新连接事件,那么活动将循环返回以发出另一个 RETRIEVE REATTACH EVENT 命令。 否则,将发出 EXEC CICS RETURN.If 检索到的事件是组合事件,那么该活动将发出 RETRIEVE SUBEVENT 命令。 它以下图中描述的方式处理检索到的原子事件。 然后,它将在子事件队列上检查更多原子事件。 如果子事件队列上有更多原子事件,那么活动循环返回以发出另一个 RETRIEVE SUBEVENT EVENT 命令。 如果不需要,它将决定是否仍需要检索到的组合事件。 如果不是,那么它将发出 DELETE EVENT (comp-event) 命令。 然后,该活动将在重新连接队列上检查更多重新连接事件。 如果在重新连接队列上存在更多重新连接事件,那么活动将循环返回以发出另一个 RETRIEVE REATTACH EVENT 命令。 否则,将发出 EXEC CICS RETURN。
图 2。 处理原子事件
此图是显示活动如何处理原子事件的流程图。 有四个 elipses ,表示原子事件的四种类型-系统,输入,活动完成和 timer.If 检索到的事件是输入事件,那么活动将决定是否仍需要该事件。 如果不是,那么它将发出 DELETE EVENT (input_event) command.If 检索到的事件是活动完成事件,那么该活动将发出 CHECK ACTIVITY command.If 检索到的事件是计时器事件,那么该活动将发出 CHECK TIMER command.The 活动将根据其内部规则来处理事件,以处理不同类型的事件。
注:
  1. 图 1 显示了在一次激活中处理多个重新连接事件的情况。 这可能并不总是适当的。 您可能始终希望每次激活时只检索一个重新连接事件,即使在重新连接队列上存在多个事件也是如此。 例如,如果您希望在每个处理步骤之间采用同步点,那么可能会发生这种情况。 (请特别注意,异步运行的子活动在其父代返回时发生同步点之前不会启动。 处理同一激活中的许多重新连接事件可能会延迟子代的启动。)
  2. 这些图显示了通过 DELETE EVENT 命令显式删除的输入和组合事件。 这并不总是绝对必要的,请参阅使用 RETURN 命令的 ENDACTIVITY 选项。 同样,可能并不总是需要发出 CHECK TIMER 命令。 否则,可以通过对活动的最终激活发出 RETURN ENDACTIVITY 命令来删除计时器事件。