1. 程式人生 > >ABAP-SAP的LUW和DB的LUW的區別

ABAP-SAP的LUW和DB的LUW的區別

轉載:http://www.cnblogs.com/helileng/archive/2010/10/14/1851409.html

LUW是Logical Unit of Work,也就是邏輯工作單元。將系統中連續的變化放做一個邏輯單元裡,可以全部執行,也可以全部不執行

 

一般來說,一個業務事物不能被一個LUW處理,比如說從客戶訂單到收到的發票問題的過程,就是分為邏輯的幾個部分,每個部分是用一個LUW處理;

SAP的LUWs定義依賴於整個過程及其造型

 

資料庫的LUW是若干個變化(資料庫資料的變化),直到出現DB COMMIT為止;

 

在一個數據庫LUW中,它可以放棄所有的變化都發生在那一刻(資料庫回滾),在這種情況下,在當前資料庫LUW中,資料庫將重置它的狀態。所以如果發生了錯誤,為了恢復以前的(一致)資料庫狀態,我們可以使用這個資料庫回滾功能

但是如果資料庫LUW被DBCOMMIT封住,那麼回滾就失效了

使用ABAP的工作的ROLLBACK和COMMIT語句時,可以顯式實現一個DB或DB提交回滾。也有情況會triggerred隱含的DB Commit

 

如果有一個SAP - LUW的處理錯誤,它應該有可能返回到一個一致的資料庫狀態前的開始就存在SAP的LUW中。所以這是可能的,SAP的LUW的範圍內必須處理一個DB - LUW中。

如下圖所示:

 

  但值得注意的是:SAP R/3是一個C/S架構的,通常一個事物會有多個螢幕中的切換,每一個螢幕切換都是一個隱形的DBCOMMIT,但是,它應該有可能在捆綁使用者條目內形成一個一個的SAP LUW的交易的DB - LUW,並寫入資料庫。

  隱形的DBcommit有:

      A:當系統輸出一個螢幕的時候

      B:當系統輸出一個message的時候

      C:執行CALL RFC的時候

      D:CALL TRANSACTION <t_code> or SUBMIT <program>.

  為了保證資料庫的統一性,SAP使用了Bundling changes:

    

 

 

  對於在SAP LUW的資料庫更改捆綁技術確保他們仍然可以逆轉。這也意味著,可以分發交易在多個工作流程,甚至在多個SAP系統。

  下面講幾種方法:

    A:在子程式中的bundling技術應用:

      PERFORM   ON COMMIT .

 

 

 

  B:在funciton modules for update的bundling 應用

        CALL FUNCTION... IN UPDATE TASK

  C:在funciton modules 在其他的SAP系統中的bundling 應用

        CALL FUNCTION... IN BACKGROUND TASK DESTINATION

   D:SAP的tcode

       SAP的TCODE是一個應用程式,它可能包含一個或多個SAP LUWs,每當系統達到一個COMMIT WORK或ROLLBACK WORK語句時,只要不是在交易的最後一個對話方塊中的SAP步驟結束時,它會開啟一個新的SAP LUW中,但之前的資料會已經提交到資料庫中。

LUW是Logical Unit of Work,也就是邏輯工作單元。將系統中連續的變化放做一個邏輯單元裡,可以全部執行,也可以全部不執行

 

一般來說,一個業務事物不能被一個LUW處理,比如說從客戶訂單到收到的發票問題的過程,就是分為邏輯的幾個部分,每個部分是用一個LUW處理;

SAP的LUWs定義依賴於整個過程及其造型

 

資料庫的LUW是若干個變化(資料庫資料的變化),直到出現DB COMMIT為止;

 

在一個數據庫LUW中,它可以放棄所有的變化都發生在那一刻(資料庫回滾),在這種情況下,在當前資料庫LUW中,資料庫將重置它的狀態。所以如果發生了錯誤,為了恢復以前的(一致)資料庫狀態,我們可以使用這個資料庫回滾功能

但是如果資料庫LUW被DBCOMMIT封住,那麼回滾就失效了

使用ABAP的工作的ROLLBACK和COMMIT語句時,可以顯式實現一個DB或DB提交回滾。也有情況會triggerred隱含的DB Commit

 

如果有一個SAP - LUW的處理錯誤,它應該有可能返回到一個一致的資料庫狀態前的開始就存在SAP的LUW中。所以這是可能的,SAP的LUW的範圍內必須處理一個DB - LUW中。

如下圖所示:

 

  但值得注意的是:SAP R/3是一個C/S架構的,通常一個事物會有多個螢幕中的切換,每一個螢幕切換都是一個隱形的DBCOMMIT,但是,它應該有可能在捆綁使用者條目內形成一個一個的SAP LUW的交易的DB - LUW,並寫入資料庫。

  隱形的DBcommit有:

      A:當系統輸出一個螢幕的時候

      B:當系統輸出一個message的時候

      C:執行CALL RFC的時候

      D:CALL TRANSACTION <t_code> or SUBMIT <program>.

  為了保證資料庫的統一性,SAP使用了Bundling changes:

    

 

 

  對於在SAP LUW的資料庫更改捆綁技術確保他們仍然可以逆轉。這也意味著,可以分發交易在多個工作流程,甚至在多個SAP系統。

  下面講幾種方法:

    A:在子程式中的bundling技術應用:

      PERFORM   ON COMMIT .

 

 

 

  B:在funciton modules for update的bundling 應用

        CALL FUNCTION... IN UPDATE TASK

  C:在funciton modules 在其他的SAP系統中的bundling 應用

        CALL FUNCTION... IN BACKGROUND TASK DESTINATION

   D:SAP的tcode

       SAP的TCODE是一個應用程式,它可能包含一個或多個SAP LUWs,每當系統達到一個COMMIT WORK或ROLLBACK WORK語句時,只要不是在交易的最後一個對話方塊中的SAP步驟結束時,它會開啟一個新的SAP LUW中,但之前的資料會已經提交到資料庫中。