JPiereでは、【JPIERE-0158】クライアントの初期化と削除 を使用して、いろいろな要望に応じたレコードの削除ができますが、その要望の中で多いのはトランザクションデータだけを削除したいというもののようです。そこで、トランザクションデータを削除するためのポイントについてまとめておきました。
トランザクションデータだけを削除する時の参考にして下さい。
【ポイント】削除は計画的に‼
トランザクションデータの削除のポイント
【JPIERE-0158】クライアントの初期化と削除 では、"クライアントのトランザクション削除"という選択肢が用意されており、これを選択すれば、iDempiere/JPiereのトランザクションデータをすべて削除してくれそうですが、残念ながらそのような仕様にはなっていません。
ここで削除対象となるテーブルは、iDempiereの標準機能の伝票(Document)のテーブルであり、JPiereで追加されている伝票のテーブルは削除の対象にはなっていません。
【JPIERE-0158】クライアントの初期化と削除は、JPPS(JPiere Plugins)として、この機能だけでプラグインとして独立しており、JPiere以外のiDempiereの各ディストリビューションでも使用できるように意図しています。そのため、トランザクションテーブルとして予め定義しているのは、iDempiereの標準機能の伝票のテーブルだけであり、JPiereで追加したトランザクションテーブルは含めていません。
【JPIERE-0158】クライアントの初期化と削除 における"トランザクションテーブル"とは、iDempiereの標準機能の伝票(Document)のテーブルが中心であり、JPiereで追加されているテーブルは1つも含まれていない!!
また、何をもってトランザクションデータとするかは、人によって見解が分かれるところもあり、かつiDempiereとしてもトランザクションテーブルと明確に区分しているわけではありませんので、すべての人の希望に沿うようなトランザクションデータだけを削除するということはそもそも不可能です。
何をもってトランザクションデータとするかは人それぞれ!!
"クライアントのトランザクション削除"は、あくまでもトランザクションデータを削除するための設定を簡素化するためのものと考えて頂いて、トランザクションデータとして一緒に削除したいテーブルがあったら削除プロファイルを使用して追加して下さい。
JPiereで追加されているトランザクションテーブルのデータを削除する場合や、他に削除したいテーブルのデータがある場合には、「削除プロファイル」を使用する。
「削除プロファイル」は、削除したいテーブルを自由に指定する事ができます。トランザクションデータだけでなく、必要に応じて削除したいテーブルを追加して活用して下さい。
「トランザクションデータの削除」においては、削除プロファイルにはレコードを削除したいテーブルを登録するわけですが、そのSQL WHERE句のフィールドには残したい(削除したくない)レコードの条件を指定します。そして、SQL WHERE句のフィールドが空欄だと、そのテーブルのレコードは全て残したい(削除したくない)という設定になってしまいますので、" AD_Clinet_ID = 0 " などと入力する事で、全てのレコードが削除対象となります。
削除プロファイルには、トランザクションデータとして一緒に追加でレコードを削除したいテーブルを登録するが、SQL WHERE句が空欄だと削除されない。そのため、レコードをすべて削除したい場合には"AD_Client_ID=0"という条件を設定するのがおススメ!!
この仕様は意図がわかりにくい仕様かと思います。^^;
このような仕様にしている理由は、"クライアントの初期化"の設定の手間を軽減して、削除漏れの可能性を低くするためです。
"クライアントの初期化"では、"初期化テーブル"と"削除プロファイル"に登録されているテーブル以外のテーブルのレコードは全て削除されます。削除プロファイルに設定が無いテーブルは基本方針として削除対象とする事で、削除プロファイルを設定する手間を少なくして、レコードの削除漏れの可能性が低くなるようにしています。
つまり、"削除プロファイル"には本当はレコードを削除したくないテーブルの情報を登録する仕様になっています。そして、この仕様はトランザクションデータの削除においても実は同様で、削除したくないテーブルと削除したくないレコードの条件を設定する事で、その条件に合致しないレコードを削除しています。
「クライアントの初期化」と「クライアントのトランザクション削除の使いわけ
『クライアントの初期化と削除プロセス』を100%意図した通りに実行したい場合は、「カスタム削除」を使用して、"削除プロファイル"に削除したい意図通りの設定をすれば良いわけですが、iDempiere/JPiereはテーブルが多いので"削除プロファイル"の登録が大変になる場合があります。そこで簡易設定的に「クライアントの初期化」と「クライアントのトランザクション削除」を用意しています。
- 「クライアントの初期化」は、"初期化テーブル"と"削除プロファイル"に登録されているテーブル以外のテーブルのレコードは全て削除します。削除プロファイルに設定が無いテーブルは基本方針として削除対象とする事で、削除プロファイルを設定する手間を少なくして、データの削除漏れの可能性が低くなるようにしています。
- 「クライアントのトランザクション削除」では、"トランザクションテーブル"と"削除プロファイル"に登録されている以外のテーブルのレコードは削除しません。設定が無いテーブルは基本方針として削除対象としない事で、トランザクションデータを含む特定のテーブルのレコードだけを削除できるようにしています。
「クライアントの初期化」と「クライアントのトランザクション削除」は「カスタム削除」の簡易設定と理解して、特定のレコードを残してあとはすべて削除したい場合には「クライアントの初期化」を使用し、トランザクションデータ以外は削除したくない場合は「クライアントのトランザクション削除」を使用するような使い分けをして頂ければと思います。
「クライアントのトランザクション削除」ではレコードの削除漏れに注意する
「クライアントのトランザクション削除」の処理は、トランザクションテーブルとして定義されているテーブルと、削除プロファイルに設定されているテーブルが処理の対象となりますので、そこに含まれないテーブルのレコードは基本的に削除されません。そのためレコードの削除漏れが無いように気を付けて下さい。削除漏れがあると"外部キー制約のエラー"などに遭遇することになります。
削除漏れが嫌な場合は、「クライアントの初期化」を試してみて下さい。クライアントの初期化であれば、"初期化テーブル"と削除プロファイルに設定されているテーブル以外のテーブルはデータ削除の対象となりますので削除漏れになる可能性が低くなります(言い換えると"クライアントの初期化"では削除したくないテーブルは漏れなく削除プロファイルに設定しておく必要があります)。
トランザクションテーブルとは!? その確認方法は!?
トランザクションデータを削除するのに何をもってトランザクションデータとするのか、その定義は重要です。【JPIERE-0158】クライアントの初期化と削除においては、トランザクションデータはどのテーブルに登録されているデータの事が予め定義されいて、「クライアントのトランザクション削除」や「全クライアントのトランザクション削除」を選択した時に削除対象となるテーブルは決まっています。削除対象となるテーブルを確認したい場合は「削除テーブルの確認レポート」で確認できます。
削除テーブルの確認レポート
削除対象となるテーブルを確認したい削除プロファイルを選択して下さい。
表示された一覧レポートの説明欄に「トランザクションテーブル」となっているのが、「クライアントの初期化と削除プロセス」において、トランザクションテーブルと定義されて削除対象となっているテーブルになります。
削除プロファイルで追加されているテーブルは、「カスタム削除プロファイルのテーブル」と表示されます。
[全テーブルを表示する]にすると削除対象となっていないテーブルも表示され、その旨が示されます。削除漏れが無いように確認して下さい。
トランザクションデータのTruncate
トランザクションデータの削除方法は、「クライアントのトランザクション削除」と「全クライアントのトランザクション削除」の2種類が用意されています。
そして、「全クライアントのトランザクション削除」を選択すると"Truncate"での削除を選択実行できます。
"Truncate"を指定した削除は強力です。トランザクションテーブルの他に、削除プロファイルに指定されているテーブルのデータを全削除して、さらに削除対象のデータを参照しているレコードも削除されます。※Truncate 実行時に CASCADE を指定して実行します。
【注意】Truncateの注意
Truncateを選択した場合、削除プロファイルのSQL WHERE句の条件指定に関わらず、処理対象となっているテーブルの全てのデータが削除されますので注意して下さい。

















