【iDempiere Lab】論理削除を意味する~(チルダ)は変更できるのか!?

 オープンソースのERP iDempiereは、内部統制の観点やデータの整合性を保つために、一度登録したデータをデータベースから直接削除(Delete)するためには、いくつかの制約があります。

 このようなデータを削除するために制約があるのは、他のERPや業務アプリケーションでも同様だと思います。そして、もう使用しなくなったマスタなどは、直接データベースからデータを削除するような事はせずに、何らかの印(フラグ)をつけて、使わなくなった事をデータ的に表現すると思います。私はこのことを"論理削除"と言っています。

 iDempiereはこの論理削除のフラグとして、"アクテイブフラグ(IsActiveカラム)"があります。使用しないマスタはこのアクティブフラグをOFFにする事で、「データベース上はデータとして残っているけど、運用上は使わないよ!!」という論理的な削除状態を意味します。

組織マスタのアクティブフラグ
組織マスタのアクティブフラグ

このアクティブフラグをOFFにしたデータを参照している場合、iDempiereでは論理削除されている事を示す"(チルダ)"が表示されます。

このコンテンツでは、"~(チルダ)"が変更できるかどうかについて調査及び研究し、その成果をまとめています。

~(チルダ)を付ける処理が記述されているソースコードの場所

"~(チルダ)"を付ける実装は、org.compiere.model.MLookupクラスのgetDirect()メソッドで記述されています。

上のイメージの561行目において、取得したデータのIsActiveがfalseだったら(アクティブフラグがOFFだったら)、そのデータの前に"INACTIVE_S"とそのデータの後に"INACTIVE_E"を付すように記述されています。

"INACTIVE_S"と"INACTIVE_E"は、定数としてMLookupクラスに定義されています。

"~(チルダ)"を変更したい場合は、この"INACTIVE_S"と"INACTIVE_E"を修正すれば良い事になります。

試しに、下記のように修正してみました。

修正してみた結果は下記のようになりました。

結論

 2020年3月19日現在(iDempiere7.1)では、論理削除を意味する"~(チルダ)"を変更するためには、ソースコードを直接修正する必要があります。言い換えるとパラメーター設定では変更できないという事です。

 今後、パラメーター設定で変更できるようになるかもしれませんが、現時点では、論理削除されたデータはその目印として、前後に"~(チルダ)"を付して表示されるのがiDempiereの標準的な挙動になります。