我有一个程序通过WRITE
语句将一些日志输出到假脱机日志。当我在前台运行程序时,那些WRITE在屏幕上清晰可见,但如果我在后台运行具有相同参数的程序(通过选择屏幕中的F9)或在后台作业中计划,SM37表示没有输出列表是可用于线轴中的作业。
如果我检查表TBTCP(“后台作业步骤概述”),我发现LISTIDENT字段对我的工作是空的。但是,输出列表 发送到假脱机,因为我可以在事务SP01(表TSP01)中找到它。
进一步调查表明,只有在我的程序中处理ROLLBACK WORK
语句时才会出现这种情况。
答案 0 :(得分:6)
这种情况似乎发生是因为在程序完成处理之前,假脱机中的输出列表未链接到作业,这会触发隐式COMMIT操作。如果在没有先完成COMMIT的情况下运行ROLLBACK,则作业和假脱机之间关系的挂起保存显然会丢失。
为了避免这种情况,任何有可能进行ROLLBACK的程序都应该在启动其主逻辑之前运行COMMIT WORK [AND WAIT]
。 然而,只提交是不够的:在保存链接之前,输出列表中还必须至少有一行。
因此,首先使用WRITE
语句初始化输出列表,然后运行COMMIT WORK
将输出列表假脱机链接到作业。
只要您在任何可能进行回滚的代码之前提交,就可以在程序的INITIALIZATION
步骤或START-OF-SELECTION
中完成此操作。