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

时间:2015-02-24 15:56:04

标签: abap

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

如果我检查表TBTCP(“后台作业步骤概述”),我发现LISTIDENT字段对我的工作是空的。但是,输出列表 发送到假脱机,因为我可以在事务SP01(表TSP01)中找到它。

进一步调查表明,只有在我的程序中处理ROLLBACK WORK语句时才会出现这种情况。

1 个答案:

答案 0 :(得分:6)

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

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

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

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