iDempiereの標準機能には、いわゆる承認のワークフロー(以下、WF)の機能が用意されています。iDempiere標準機能のWFは伝票を完成にする際には使用できますが、伝票を取り消す際には使用できませんでした。このカスタマイズでは伝票を取り消す際のワークフローを「キャンセルワークフロー(WF)」と呼んで、伝票のボイドとリバースする際にも承認ができるようにしています。
キャンセルWFの概要
キャンセルWFは、iDempiereの標準のWFを伝票のボイドやリバースの際にも利用できるようにした機能です。そのため基本的にはiDempiereの標準のWFと同じ操作及び設定で、同じことができます。
【JPIERE-0513】検索ウィンドウでのワークフロー(WF)承認でも、通常の伝票の承認と同じようにボイドやリバースも承認できます。
キャンセルWFの最終承認が行われると、ボイドかリバースが実行されます。
キャンセルWFには申請ボタンと、キャンセルWFの状況が確認できるステータスがあります。
「キャンセルWF申請」ボタンを押すと、ボイドかリバースを選択するポップアップア画面が表示され、OKボタンを押すとキャンセルWF申請の処理が行われます。そうすると「キャンセルWFステータス」が「確認中」になります。
キャンセルWFには下記のステータスがあり、WFの進行状況が確認できます。
- 承認 ➡ 最初の1人目の承認者が承認するとなります。承認中を意味するステータスです。
- 否認➡キャンセルWFが否認されるとなるステータス。キャンセルWFは終了となり、再申請することができます。
- 確認中➡キャンセルWFを申請するとなるステータスです。まだ誰も承認していないことを意味します。
- 空欄 ➡ キャンセルWFは申請されていない状態です。
【ポイント】サンプル設定
"OSS ERP Solutions"のテナントの受注伝票(全項目)と売上請求伝票(全項目)ウィンドウには、キャンセルWFのサンプルを設定しています。動作の検証や各種設定を確認したい方はアクセスしてみて下さい。
伝票のテーブルにカラムの追加
キャンセルWFを動かすためには、伝票のテーブルに2つのカラムを追加して、WFの設定を行う必要があります。
◆JP_CancelWFAction: キャンセルWF申請(ボタン)
ボタンを押すと、ポップアップウィンドウが表示され、ボイドするかリバースするのか選択できます。※伝票の種類や伝票ステータスによっては選択できない場合があります。
◆JP_CancelWFStatus: キャンセルWFステータス
キャンセルWFの進捗状況のステータスを表示します。直接変更することはできません。
キャンセルWFの設定
キャンセルWF用のワークフロー設定を行います。「キャンセルWFベースノード」を基に、ノードを追加して独自のWFを構築することができます。基本はiDempiereの標準WFの設定と同様です。
【補足説明】サンプル設定
OSS ERP Solutionsのテナントに下記のサンプルとなるキャンセルWFの設定がされていますので、参考にして下さい。
- Process_Order - Cancel WF(伝票WF - 受注伝票/発注伝票 - キャンセルWF)
- Process_Invoice - Cancel WF(伝票WF - 売上請求伝票 / 仕入請求伝票 - キャンセルWF)
◆キャンセルWFベースノード
キャンセルWFには、基本となる下記の3つのノードがあります。新規にキャンセルWFを構築する際には、下記の3つのノードをシステムテナントに登録して下さい。
- 開始ノード … WFで最初に呼び出されるノード
- キャンセルノード … 伝票のボイド/リバースを行うノード
- WFクローズノード … WFのクローズ処理を行うノード
キャンセルWFベースノードに、承認ノード等を追加して独自のワークフローを構築できます。
【注意】「標準ワークフロー」フラグはOFFにする
ワークフロー設定において、移行タブにある標準ワークフローフラグはOFFにして下さい。キャンセルWFではONにしてしまうと意図しないノード遷移になってしまう場合があります。
キャンセルWFを起動するプロセスの設定
設定したキャンセルWFを起動するプロセスを設定します。キャンセルWFを起動させるプロセスは伝票のテーブル毎に用意する必要があります。「キャンセルワークフロー」フィールドに、先に設定したワークフローを選択入力して下さい。
クラス名には「jpiere.base.plugin.org.adempiere.process.CancelWFStart」と入力して下さい。
◆受注伝票/発注伝票のキャンセルWFの起動プロセス
プロセスのパラメーターには「DocAction」を必須入力として追加して下さい。
キャンセルWF起動時にここで選択した伝票ステータス更新処理が、キャンセルWFの最終承認後に実行されます。
【技術情報】伝票の種類と伝票のステータスによって選択できる伝票ステータス更新をダイナミックバリデーションで制御する
伝票の種類と伝票ステータスによって、選択できる伝票ステータス更新が異なります。多くの伝票では伝票ステータスが完成の時には伝票ステータスとしてリバースが選択できて、草案の時にはボイドが選択できるようになっていますが、受注伝票や発注伝票では、伝票ステータスが完成でもボイドが選択できるようになっています。※受注伝票と発注伝票は基本的にリバースはない。
伝票の種類と伝票ステータスによって、選択できる伝票ステータス更新が異なりますので、それらに対応するためにダイナミックバリデーション等を活用してユーザーの選択肢を制御して下さい。
伝票ステータスが草案や確認中の時にボイドを選択肢に表示して、完成の時にリバースを選択肢に表示するダイナミックバリデーション「JP_CancelWFActionValidate」を用意しましたので活用して下さい。
キャンセルWF申請(ボタン)にプロセスを設定
追加した「JP_CancelWFAction: キャンセルWF申請(ボタン)」カラムに、ワークフローを起動させるプロセスを追加します。
iDempiere/JPiereの標準ワークフローとの違い
キャンセルWFは、iDempiere/JPiereの伝票の完成を承認していく標準のワークフロー(以下、標準WF)と同じ枠組みで処理されますので大きな違いはありませんが、下記の点は大きく異なります。
キャンセルWFでは、承認と否認の伝票ステータス更新処理は実行されない。
標準WFでは、承認した時には伝票のモデルクラスに実装されている approveIt()が呼び出され、否認した時には、rejectIt()が呼び出されるようになっていますが、キャンセルWFでは呼び出しません。
自己作成伝票の承認(自己承認)
自己承認については、下記のJPiereの仕様に準拠した実装を行っています。
否認時のメールと通知
標準WFでは、否認時に自動的に伝票の担当者にメールや通知を送れます。同じロジックでキャンセルWFも否認時にメールや通知を送ることができます。
追加カラム
◆AD_Processテーブル
- JP_CancelWorkflow_ID ➡ キャンセルWFを登録するカラム
◆C_Orderテーブル
サンプル設定として下記2つのカラムを追加
- JP_CancelWFAction
- JP_CancelWFStatus
◆C_Invoiceテーブル
サンプル設定として下記2つのカラムを追加
- JP_CancelWFAction
- JP_CancelWFStatus
追加プロセス
◆jpiere.base.plugin.org.adempiere.process.CancelWFStart
キャンセルWFをキックするプロセスです。キャンセルWF申請ボタンに割り当てるプロセスです。
◆jpiere.base.plugin.org.adempiere.process.CancelWFProcess
キャンセルノードに割り当てるプロセスです。キャンセルWF申請(ボタン)を押したとき選択したボイドもしくはリバースの伝票ステータス更新の処理が行われます。
◆jpiere.base.plugin.org.adempiere.process.CancelWFClose
WFクローズノードに割り当てるプロセスです。リバースもしくはボイドした後で、ワークフロープロセスをクローズする処理です。
◆jpiere.base.plugin.org.adempiere.process.WFProcessManageExtendForCancelWF
WFProcessManageクラスをキャンセルWF用に拡張しているプロセスです。ワークフロープロセスを中止する時に、キャンセルWFステータスとキャンセルWF申請ボタンを空欄にする処理が追加されています。
修正プロセス
◆jpiere.base.plugin.org.adempiere.process.WFActivityApproval
キャンセルWFの承認と否認ができるように修正しました。
承認もしくは否認の際に、WFのもととなった伝票が削除されて存在しないケースの対応を追加しました。
◆jpiere.base.plugin.org.adempiere.process.WFActivityFoward
転送する時に、WFのもととなった伝票が削除されているケースの対応を追加しました。
◆jpiere.base.plugin.org.adempiere.process.WFProcessAbort
キャンセルWFの承認申請を取り消しする際に、キャンセルWFステータスとキャンセルWF申請ボタンを空欄にする処理を追加しました。また取り消しする際に伝票が削除されて存在しないケースの対応を追加しました。
追加リストバリデーションのリファレンス
◆JP_CancelWFActionList
- VO … ボイドする
- RA … 現在の日付でリバースする
- RC … 同じ日付でリバースする
◆JP_CancelWFActionList_Void
- VO … ボイドする
◆JP_CancelWFStatusList
- AP … 承認 ➡ 最初の1人目の承認者が承認するとなるステータス。
- NA …否認➡キャンセルWFが否認されるとなるステータス。
- IP … 確認中➡キャンセルWFを申請するとなるステータス。
- 空欄 … キャンセルWFは申請されていない状態のステータス。
追加ダイナミックバリデーション
◆JP_CancelWFActionValidate
iDempiereは基本的に伝票ステータスが草案や確認中の時にボイドして、完成の時にリバースします。選択している伝票の伝票ステータスに応じて、ボイドするかリバースするを選択できるダイナミックバリデーションです。