2015-02-24 55 views
2

我有一個程序通過WRITE語句將假日誌輸出到假脫機日誌。當我在前臺運行程序時,這些WRITE在屏幕上清晰可見,但如果我使用後臺中的相同參數(通過選擇屏幕中的F9)運行程序或將其計劃在後臺作業中,則SM37指示沒有輸出列表可用於卷軸中的作業。假脫機請求未鏈接到後臺作業

如果我檢查表TBTCP(「後臺作業步驟概述」),我發現LISTIDENT字段對於我的作業是空的。然而,輸出列表發送到後臺,因爲我可以在事務SP01(表TSP01)中找到它。

進一步的調查顯示,這隻發生在我的程序中處理ROLLBACK WORK聲明時。

+0

小心解釋downvote? – Lilienthal 2015-02-25 12:08:43

回答

5

此行爲似乎發生的原因在於假脫機輸出列表未鏈接到作業,直到程序完成處理,觸發隱式COMMIT操作。如果在沒有執行COMMIT的情況下運行ROLLBACK,則作業和假脫機之間關係的掛起保存顯然會丟失。

爲了避免這種情況,任何有可能執行ROLLBACK的程序在啓動其主邏輯之前都應該運行COMMIT WORK [AND WAIT]但是,僅僅執行提交還不夠:在保存鏈接之前,輸出列表中還需要至少一行。

因此,首先初始化輸出列表與WRITE語句,然後運行COMMIT WORK到輸出列表閥芯鏈接到工作

只要您在任何可能會回滾的代碼之前提交,就可以在程序的INITIALIZATION步驟或START-OF-SELECTION中完成此操作。

+1

我很高興我讀了這段回來。如果線軸與神祕的工作沒有聯繫,就必須在今天付諸實踐。然後我想起了這個,神祕莫測! – 2015-04-01 20:14:27

+0

@GertBeukema感謝您檢查,很高興知道這不僅僅是一個系統上的孤立案例。 – Lilienthal 2015-04-01 20:46:33