假脱机请求未链接到后台作业

Spool request not linked to background job

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

如果我检查 table TBTCP ("Background Job Step Overview"),我发现 LISTIDENT 字段对于我的工作是空的。但是,输出列表 发送到假脱机,因为我可以在事务 SP01 (table TSP01) 中找到它。

进一步调查表明,这仅在我在程序中处理 ROLLBACK WORK 语句时发生。

出现此行为的原因似乎是在程序完成处理之前,假脱机中的输出列表不会link编辑到作业,这会触发隐式 COMMIT 操作。如果您 运行 未先执行 COMMIT 就执行 ROLLBACK,作业和假脱机之间关系的未决保存显然会丢失。

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

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

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