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

Does BAPI_TRANSACTION_COMMIT commit changes since the last commit

我知道当您在程序中调用 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 是否提交了自上次提交以来的所有更改?还是只提交之前的交易?

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

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

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

它将提交 SAP 上下文之间的任何内容。即

JCoContext.begin(m_jcoDestination);
// your transactions using function module
JCoFunctionTemplate functionTemplate = m_jcoDestination.getRepository().getFunctionTemplate("BAPI_TRANSACTION_COMMIT");   
JCoFunction commFunct = functionTemplate.getFunction();
commFunct.execute(m_connection.getJcoDestination()); 
JCoContext.end(m_jcoDestination);