自上次提交以来BAPI_TRANSACTION_COMMIT是否提交更改

时间:2015-03-03 17:17:06

标签: java sap abap jco

我知道当您在程序中调用BAPI来更改SAP系统中的数据时,您必须调用BAPI_TRANSACTION_COMMIT将更改写入数据库。

   JCoFunctionTemplate functionTemplate = dest.getRepository().getFunctionTemplate("BAPI_FIXEDASSET_CHANGE");      
   JCoFunction ChangeFunction = functionTemplate.getFunction();
   ...//some code
   ChangeFunction.execute(destination);

    JCoFunctionTemplate functionTemplate = dest.getRepository().getFunctionTemplate("BAPI_TRANSACTION_COMMIT");   
    JCoFunction commFunct = functionTemplate.getFunction();
    commFunct.execute(destination);

我的问题是,BAPI_TRANSACTION_COMMIT是否提交了自上次提交以来的所有更改?或者它只承诺以前的交易?

2 个答案:

答案 0 :(得分:1)

BAPI_TRANSACTION_COMMIT根据参数COMMIT WORK执行COMMIT WORK AND WAITWAIT。这意味着它将提交尚未提交的数据库的所有更改。

因此,在您的示例代码中,它将提交来自BAPI_FIXEDASSET_CHANGE的更改,但也提交之前所做的任何尚未提交的更改。

答案 1 :(得分:1)

依赖数据库操作的常用方法也称为事务。根据定义,事务是对db的原子操作,以便在任何更改后保持一致的数据一致。如果彼此之后的n个数据库操作属于事务,则必须在最后一次成功操作之后发出提交。如果n个操作中的任何一个失败,则认为该事务未完全发布。回滚工作是通常的方法。如果您有一个应该拆分的事务只提交几个更改,请考虑重新设计您的整个方法。或者,不太好,创建一个发布功能模块并在更新任务中调用它。小心一点。哦,我明白了,你称之为标准的sap功能模块。寻找它的参数。它可能有一个隐式提交标志。永远不要忘记SAP GUI事务“BAPI”并阅读文档。您的愿望很可能不是交易一致的,因此bapi必须做得更多。如果以后出现故障,则事务不一致,因此不会提交。 sap大多知道他们应该做什么。但在处理质量通知和质量检验时,我对此表示怀疑。 :-D