【JPIERE-0607(v10)】キャンセルワークフロー(ボイド/リバースのワークフロー)

iDempiereの標準機能には、いわゆる承認のワークフロー(以下、WF)の機能が用意されています。iDempiere標準機能のWFは伝票を完成にする際には使用できますが、伝票を取り消す際には使用できませんでした。このカスタマイズでは伝票を取り消す際のワークフローを「キャンセルワークフロー(WF)」と呼んで、伝票のボイドとリバースする際にも承認ができるようにしています。

キャンセルWFの概要

キャンセルWFは、iDempiereの標準のWFを伝票のボイドやリバースの際にも利用できるようにした機能です。そのため基本的にはiDempiereの標準のWFと同じ操作及び設定で、同じことができます。

キャンセルWFの設定例
キャンセルWFの設定例

【JPIERE-0513】検索ウィンドウでのワークフロー(WF)承認でも、通常の伝票の承認と同じようにボイドやリバースも承認できます。

未処理WFアクティビティ(承認者用)
未処理WFアクティビティ(承認者用)

キャンセルWFの最終承認が行われると、ボイドかリバースが実行されます。

キャンセルWF申請ボタンとキャンセルWFステータス
キャンセルWF申請ボタンとキャンセルWFステータス

キャンセルWFには申請ボタンと、キャンセルWFの状況が確認できるステータスがあります。

「キャンセルWF申請」ボタンを押すと、ボイドかリバースを選択するポップアップア画面が表示され、OKボタンを押すとキャンセルWF申請の処理が行われます。そうすると「キャンセルWFステータス」が「確認中」になります。

キャンセルWF申請ボタンを押して表示されるポップアップ画面
キャンセルWF申請ボタンを押して表示されるポップアップ画面

キャンセルWFには下記のステータスがあり、WFの進行状況が確認できます。

  • 承認 ➡ 最初の1人目の承認者が承認するとなります。承認中を意味するステータスです。
  • 否認➡キャンセルWFが否認されるとなるステータス。キャンセルWFは終了となり、再申請することができます。
  • 確認中➡キャンセル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ベースノードに、承認ノード等を追加して独自のワークフローを構築できます。

キャンセル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申請(ボタン)」カラムに、ワークフローを起動させるプロセスを追加します。

キャンセルWFのその他のTopic

iDempiere/JPiereの標準ワークフローとの違い

キャンセルWFは、iDempiere/JPiereの伝票の完成を承認していく標準のワークフロー(以下、標準WF)と同じ枠組みで処理されますので大きな違いはありませんが、下記の点は大きく異なります。

キャンセルWFでは、承認と否認の伝票ステータス更新処理は実行されない。

標準WFでは、承認した時には伝票のモデルクラスに実装されている approveIt()が呼び出され、否認した時には、rejectIt()が呼び出されるようになっていますが、キャンセルWFでは呼び出しません。

 

否認時のメールと通知

標準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は基本的に伝票ステータスが草案や確認中の時にボイドして、完成の時にリバースします。選択している伝票の伝票ステータスに応じて、ボイドするかリバースするを選択できるダイナミックバリデーションです。