【JPIERE-0621(v11)】一括更新プロセス

 iDempiere/JPiereに登録されているデータを一括で更新するプロセスです非常に強力なツールですので使用する際には十分に気を付けて下さい。

機能概要

一括更新プロセスはメニューの「一括更新プロセス」から実行することができます。

一括更新プロセスを実行するためには、その更新内容を事前に「一括更新プロファイル」に登録しておきます。 「一括更新プロファイル」を登録しておくことで、繰り返し同じ内容の更新を行うことができます。

一括更新プロセスと一括更新プロファイル
一括更新プロセスと一括更新プロファイル

 

想定利用ケース

◆市区町村の合併により住所が変更になった場合に旧住所から新住所に一括して置換する

 市区町村の合併により住所が変更になる場合があります。そのような場合に旧住所を新住所に一括で置換するような使い方を想定しています。

◆本番環境のデータをもとに検証環境を構築する際に、重要なデータをマスキングする

 本番環境のDBを、検証環境や開発環境のDBにリストアしてテストデータとして使用したい場合があります。そのような場合に個人情報など重要な情報をマスキングして情報流出のリスクを排除するような使い方を想定しています。

【補足説明】データを実際に更新します!!

 重要なデータを見えなくする(隠す)という意味でここでは「マスキング」と表現していますが、アプリケーション上の見た目として隠しているわけではなく、DBのデータを実際に更新しています。

◆データをインポートする際にインポートテーブル上で必要な情報を追加する

 他のシステムからiDempiere/JPiereにデータをインポートする際には、iDempiere/JPiereに固有情報を付加する必要がある場合があります。そのような場合に、インポートテーブル上で必要な情報を付加するような使い方を想定しています。

◆環境毎に設定を変更する必要がある場合

 本番環境、検証環境、開発環境などいくつかの環境を運用している場合、環境を見分けやすように、JPiereとしてはロゴを変更するこを推奨しています(※参照:【JPIERE-0379】サーバー環境の識別用JPiereロゴ)。このような環境毎に設定を変更したい場合に、その変更内容を「一括更新プロファイル」にまとめておき、一括更新プロセスを実行するだけで簡単に設定を変更するような使い方を想定しています。

一括更新プロセスの実行

一括更新プロセスはメニューツリーからと、一括更新プロファイルウィンドウから実行できます。

メニューツリーからの実行

メニューツリーから一括更新プロセスを実行する際には、一括更新プロファイルを選択して実行します。

メニュー: 一括更新プロセス
メニュー: 一括更新プロセス
一括更新プロセス
一括更新プロセス

 

一括更新プロファイルウィンドウから実行

一括更新プロファイルウィンドウのプロセスアイコンから一括更新プロセスを実行することもできます。

一括更新プロファイルウィンドウからの一括更新プロセスの実行
一括更新プロファイルウィンドウからの一括更新プロセスの実行

一括更新プロファイルウィンドウから一括更新プロセスを実行する場合、選択している一括更新プロファイルを使用して実行されます。

 

実行時の確認

一括更新プロセスは、データを実際に更新するので誤って実行してしまった場合、バックアップしているデータベースをリストアしないと元に戻せません。そのため、間違って実行するのを防ぐために、プロセスを実行する前に確認用のポップアップを表示させて確認を促すことができます。

◆確認のためにOKボタンを押させる

一括更新処理が行われる前に、処理を実行する環境の情報等を表示します。OKボタンを押すと処理が実行されます。×(バツ)ボタンを押すと一括更新プロセスの実行がキャンセルされます。

◆確認のために必要な情報を入力させる

確認のために必要な情報を入力し、OKボタンを押すことで処理が実行されます。

確認のためにユーザーに入力させる情報は下記のいずれかを選択できます。

  • ホスト情報
  • データベースの情報
  • 実行する一括更新プロセスの検索キー

◆確認しない

確認をせずに処理を実行することもできます。

一括更新プロファイル

 一括更新プロセスを実行するためには、事前に一括更新する諸条件を設定した一括更新プロファイルを登録しておく必要があります。一括更新プロファイルを登録しておくことで、繰り返し同じ処理を実行することが容易になります。

一括更新プロファイルタブ

◆実行時の確認

一括更新プロセスを実行する前に、ユーザーに確認を促すポップアップを表示することができます。

  • ホスト … ホスト名を入力することにより一括更新プロセスを実行できます。
  • データベース … データベース名を入力することにより一括更新プロセスを実行できます。
  • 検索キー… 一括プロファイルの検索キーの値を入力することで一括更新プロセスを実行できます。 
  • 確認のみ … Yes or No のポップアップウィンドウが表示され、Yesを選択すると一括更新プロセスを実行できます。
  • 確認しない … 確認を促すポップアップは表示されずに一括更新プロセスが実行されます。※通常のプロセス実行と同じ挙動です。

【補足説明】実行時の確認の意義

 一括更新プロセスは実行すると元に戻せません。※もとに戻したい場合はDBのバックアップから戻す必要があります。 本番環境などで間違って意図してない一括更新プロセスの実行を防ぐために、この”実行時の確認”を実装しています。

 

一括更新プロファイル明細タブ

一括更新したい処理の内容を明細に登録します。登録した明細は一括更新プロセスで明細番号順に実行されます。

一括更新プロファイル明細
一括更新プロファイル明細

◆一括更新タイプ

一括更新プロセスの処理の方針となる区分を下記の選択肢から選択します。

  • 文字列を置換 … 特定の文字列を特定の文字列に変換することができます。
  • 文字列を置換(正規表現) … 正規表現を使用して特定の文字列を特定の文字列に変換することができます。
  • 文字列をマスキング(最初のマスキング除外文字数以外) …最初の数文字を残して、それ以外の文字を特定の文字に置き換えることができます。
  • 文字列をマスキング(最後のマスキング除外文字数以外) …最後の数文字を残して、それ以外の文字を特定の文字に置き換えることができます。
  • 文字列をマスキング(最初と最後のマスキング除外文字数以外)  …最初と最後の数文字を残して、それ以外の文字を特定の文字に置き換えることができます。
  • SQL(UPDATE) … SQLのUPDATE文を使用してデータを一括更新することができます。

【補足説明】一括更新タイプがSQL(UPDATE)以外は文字列系のリファレンスのカラムに使用して下さい。

一括更新タイプがSQL(UPDATE)以外は文字列系のリファレンスのカラムに使用することを想定しています。文字列系のリファレンス以外に使用すると、一括更新プロセス実行時にエラーになります。

 

◆テーブル

一括更新の対象となるテーブルを選択入力します。

 

◆カラム

一括更新の対象となるカラムを選択入力します。テーブルフィールドに入力されているテーブルに属するカラムを選択できます。

※一括更新タイプが”SQL(Update)”以外の時に表示され必須入力となります。

 

◆更新ログの取得

一括更新プロセスで更新ログを記録するかどうか選択します。

  • ON:更新ログを取得する … モデルクラス側で更新ログを記録しない場合に、一括更新プロセスで更新ログを記録します。言い換えると、モデルクラス側で更新ログを記録するようになっている場合は、このフラグをONにしても一括更新プロセスでは更新ログは記録しません。
  • OFF:更新ログは取得しない … 一括更新プロセスでは更新ログは記録しません。一括更新プロセスで更新ログを記録しなくても、モデルクラス側で更新ログを記録するようになっている場合は、更新ログは記録されます。

※一括更新タイプが”SQL(Update)”の時には保存時に強制的にOFFになります。一括更新タイプが”SQL(UPDATE)”の場合、SQLで直接更新してしまうため更新ログを取得することはできません!!

【補足説明】セキュアコンテンツのログは取得できません!!

セキュアコンテンツとなっているカラムの情報は、更新ログの取得をしないように一括更新プロファイル明細の保存時に自動的に更新ログの取得フラグはOFFになります。

- 文字列を置換

「一括更新タイプ」が”文字列を置換”と”文字列を置換(正規表現)”の時に表示されるフィールドグループです。

◆ターゲット文字列

 置き換えたい文字列を入力します。「一括更新タイプ」が”文字列を置換(正規表現)”の場合は正規表現で入力します。入力が無い場合は、文字列の全ての文字をターゲット文字列とします。

※「一括更新タイプ」が”文字列を置換する(正規表現)“の場合は必須入力となります。

 

◆置き換える文字列

 置き換える文字列を入力します。

【補足説明】空欄にしたい場合

更新対象のカラムの文字列を空欄(null)にしたい場合は、「一括更新タイプ」は”文字列を置換”を選択し、「ターゲット文字列」フィールドと「置き換える文字列」フィールドの両方を空欄にして下さい。

- 文字列をマスキング

「一括更新タイプ」が”文字列をマスキング(最初のマスキング除外文字数以外)”か”文字列をマスキング(最後のマスキング除外文字数以外)”、”文字列をマスキング(最初と最後のマスキング除外文字数以外)”の時に表示されるフィールドグループです。

◆マスキング文字列

 マスキングに使用する文字列を入力します。

 

◆マスキングタイプ

 マスキングの方法を選択入力します。

  • マスキングする文字数に合わせる …マスキングする対象となった文字数の数だけマスキング文字列に置換します。マスキングした文字数が何文字か残しておきたい時に使用します。その場合、マスキングする対象となった文字数と実際にマスキングした文字数が分かりやすいようにマスキング文字列フィールドに設定するマスキング文字列は1文字にすることをオススメします。
  • マスキング文字列に合わせる … マスキングする対象の文字数に関係なくマスキング文字列に置換します。マスキングした文字列が何文字かわからなくしたい時に使用します。マスキングする対象となった文字数に関係なく、マスキング文字列フィールドの値に置き換えられるので、マスキングした文字数はわからなくなります。

 

◆マスキング除外文字数

 マスキング対象外とする文字数を入力します。マスキング除外文字数を0にすると、文字列全体をマスキングすることができます!!

- 文字列をマスキング

◆SQL UPDATE SET 句

一括更新タイプが”SQL(Update)”の時に表示されるフィールドで、UPDATE文のSET句を入力します。SETは含めずに入力して下さい。そしてWHERE句はSQL WHERE句フィールドに入力して下さい。

 

◆SQL WHERE 句

一括更新プロセスの処理対象となるレコードを制限するための条件を入力します。SQLのWHERE句をWHEREを含めずに記述します。一括更新プロセス実行時に、実行するテナントを制限する条件が自動的に追加されますので、”AD_Client_ID=1000000”等のテナントを制限する条件は記述する必要はありません。

【補足説明】他のテナントのデータは更新できません!!

一括更新プロセスの実行時に、ログインテナントのデータだけを更新するように自動的に制限されますので、一括更新プロセスを実行して他のテナントのデータを更新することはできません!!

 

◆コミット区分

コミットのタイミングを選択入力します。途中で一度もコミットしない場合でもプロセスが問題なく終了したタイミングで最後にコミットされます。

  • レコード毎 … 1レコードの処理が完了した都度コミットします。
  • 明細毎 … 一括更新プロファイル明細の1明細の処理が完了したタイミングでコミットします。
  • コミットしない … 一括更新プロファイル明細の処理が完了してもコミットせずに、次の明細の処理に移ります。

【補足説明】一括更新タイプが”SQL(UPDATE)”のコミットタイミング

一括更新タイプが”SQL(UPDATE)”の場合、コミット区分が”レコード毎”と”明細毎”は、両方ともUPDATE文が実行された後でコミットされるというほぼ同じ挙動になります。

 

アクセスタブ

一括更新プロファイルを使用できる職責を設定します。

カスタマイズ情報

追加テーブル

  • JP_BulkUpdateProfileテーブル
  • JP_BulkUpdateProfile_Trlテーブル
  • JP_BulkUpdateProfileLineテーブル
  • JP_BulkUpdateProfileAccessテーブル

追加クラス

◆プロセス

  • jpiere.base.plugin.org.adempiere.process.BulkUpdateProcess

◆モデルクラス

  • jpiere.base.plugin.org.adempiere.model.MBulkUpdateProfile
  • jpiere.base.plugin.org.adempiere.model.X_JP_BulkUpdateProfile
  • jpiere.base.plugin.org.adempiere.model.I_JP_BulkUpdateProfile
  • jpiere.base.plugin.org.adempiere.model.MBulkUpdateProfileLine
  • jpiere.base.plugin.org.adempiere.model.X_JP_BulkUpdateProfileLine
  • jpiere.base.plugin.org.adempiere.model.I_JP_BulkUpdateProfileLine
  • jpiere.base.plugin.org.adempiere.model.MBulkUpdateProfileAccess
  • jpiere.base.plugin.org.adempiere.model.X_JP_BulkUpdateProfileAccess
  • jpiere.base.plugin.org.adempiere.model.I_JP_BulkUpdateProfileAccess