【iDempiere Lab】iDempiereのモデルクラス内でのトランザクション処理

 1年以上前に、Compiereでのモデルクラス内でのトランザクション処理の実装について書きましたが、ここで、同じようにiDempiereについてもモデルクラス内でのトランザクション処理の実装について書きたいと思います。

 Compiereの場合、モデルクラス内でのトランザクション処理は、トランザクション処理について実装しないといけませんでしたが、iDempiereでは、保存等される時に常にトランザクション処理が行われているようです。

 そのため、iDempiereでは特にトランザクション処理を意識する必要はありませんが、場合によっては意図時にロールバック処理を行いたい場合もあるかと思います。そのような場合は、afterSave()メソッドなどで下記のように書けばロールバック処理ができると思います。

 

Trx.get(get_TrxName(), false).rollback();

 

 ただ、もっと簡単に行う方法があります。それはafterSave()メソッドの戻り値を"false"にする事です。Compiereではトランザクション処理を意図時に実装しないと、afterSave()の戻り値に関係なくコミットされてデータが登録されてしましましたが、iDempiereでは、afterSave()の戻り値が"true"でないとコミットされない仕様になっているようです。

 iDempiereの仕様の方がCompiereの仕様より、個人的には良いと思います。Compiereの仕様には実装していて違和感があったので・・・。