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

Lil*_*hal 2 abap

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

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

进一步调查显示,这只发生在我的程序中处理ROLLBACK WORK语句时.

Lil*_*hal 6

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

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

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

这可以INITIALIZATION在程序的步骤中完成,也可以在START-OF-SELECTION任何可能执行回滚的代码之前提交.