BAPI_TRANSACTION_COMMIT 与 WAIT = 'X' 在 BADi 中

Nel*_*nda 6 abap commit bapi badi

当在 BADi 中等于 'X' 时,使用带有 'WAIT' 参数的 'BAPI_TRANSACTION_COMMIT' 会产生什么影响?我应该期望 SAP 在 LUW 提交时提交数据吗?

我知道在“BAPI_TRANSACTION_COMMIT”内部,如果您指定参数“WAIT”=“X”,它会发生“COMMIT WORK”或“COMMIT WORK AND WAIT”。

我也知道在 BADi 中进行“COMMIT WORK”是不正确的,但是如果我通过 BAPI 使用“COMMIT WORK AND WAIT”?

关于 COMMIT 的 SAP 文档说:

这将按照注册的顺序和在公共数据库 LUW 中执行所有高优先级 (VB1) 更新功能模块。如果不指定添加 AND WAIT,则程序不会等到更新工作进程执行完毕(异步更新),而是在 COMMIT WORK 后立即恢复。但是,如果指定了添加 AND WAIT,则 COMMIT WORK 之后的程序处理将不会继续,直到更新工作进程执行了高优先级更新功能模块(同步更新)。

当所有高优先级更新功能模块都成功完成后,该语句将按照注册顺序一起执行低优先级(VB2)更新功能模块在一个公共数据库LUW中。

我的困惑出现是因为我们有一个 BADi 实现,其中调用了带有参数 'WAIT' = 'X' 的上述函数,并且我们发现了一个 SAP Notes,它禁止在该 BADi 中使用“COMMIT WORK”,但是它说“提交工作”而不是“提交工作并等待”。

所以我可以认为实现是正确的,因为当 LUW 完成时,数据将被提交......或不。任何意见?

Jag*_*ger 4

COMMIT WORK实际上,当您调用或时,LUW 就会完成COMMIT WORK AND WAIT。唯一的区别是COMMIT WORK异步和COMMIT WORK AND WAIT同步。

withBAPI_TRANSACTION_COMMIT参数WAIT集等于COMMIT WORK AND WAIT参数如果没有设置参数,则等于COMMIT WORK

这是真的。您不得在 BAdI 中做出承诺。如果BAdI已经执行后出现回滚怎么办?它可能会使您的数据处于完全不一致的状态。

  • @nmiranda这是关于更新功能模块的。这些是用句子“IN UPDATE TASK”来调用的。查看事务“SE37”中任何功能模块的第一个名为“属性”的选项卡。在那里您可以选择“更新模块”和“立即启动”和“延迟启动”子选项。如果该功能模块被标记为立即启动,则表示该功能模块具有高优先级,将在 VB1 中执行。后者将在VB2 中执行。查看“SM50”中的进程,您会发现至少有两个进程标记为“UPD”和“UP2”。“UPD”是 VB1,“UP2”是 VB2。 (3认同)