1

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

4

3 回答 3

1

BAPI_TRANSACTION_COMMIT做一个COMMIT WORKCOMMIT WORK AND WAIT取决于参数WAIT。这意味着它将提交所有尚未提交的数据库更改。

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

于 2015-03-03T20:41:38.887 回答
1

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

于 2015-03-04T19:38:04.947 回答
0

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

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);
于 2022-01-28T10:10:48.377 回答