后台处理请求未链接到后台作业



我有一个程序,它通过WRITE语句将一些日志输出到spool日志。当我在前台运行程序时,这些WRITE在屏幕上清晰可见,但如果我在后台(通过选择屏幕上的F9)使用相同的参数运行程序或在后台作业中计划程序,SM37表示假脱机中的作业没有可用的输出列表。

如果我检查表TBTCP("后台作业步骤概述"),我会发现LISTIDENT字段对于我的作业是空的。但是,输出列表被发送到spool,正如我在事务SP01(表TSP01)中可以找到的那样。

进一步的研究表明,只有当我在程序中处理ROLLBACK WORK语句时,才会发生这种情况。

出现这种行为似乎是因为在程序完成处理之前,假脱机中的输出列表不会链接到作业,从而触发隐式COMMIT操作。如果您在没有首先完成COMMIT的情况下运行ROLLBACK,那么作业和假脱机之间关系的挂起保存显然会丢失。

为了避免这种情况,任何有可能执行ROLLBACK的程序都应该在启动其主逻辑之前运行COMMIT WORK [AND WAIT]然而,仅仅提交是不够的:在保存链接之前,还需要在输出列表中至少有一行。

因此,首先用WRITE语句初始化输出列表,然后运行COMMIT WORK将输出列表假脱机链接到作业

这可以在程序的INITIALIZATION步骤或START-OF-SELECTION中完成,只要您在任何可能执行回滚的代码之前提交即可。

相关内容

  • 没有找到相关文章

最新更新