转载: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中,但之前的数据会已经提交到数据库中。

posted on 2018-12-21 11:01  ricoo  阅读(844)  评论(0编辑  收藏  举报