假脱机请求未链接到后台作业
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
中完成,只要您在任何可能执行回滚的代码之前提交。
我有一个程序可以通过 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
中完成,只要您在任何可能执行回滚的代码之前提交。