iDempiereのワークフロー(WF)で承認者を決定するロジックに関係するマスタでWF責任者というのがあります。そのWF責任者はさらに、「WF責任者タイプ」というのがあり、承認者を決定するロジックは、WF責任者タイプ毎に異なります。
WF責任者タイプはリスト選択できるようになっており、そのリストには「職責」、「組織」、「人」、「マニュアル」と4つの選択肢があるのですが、この中で「組織」を選択した時に承認者を決定するロジックは2021年6月20日現在でまだ実装されていません。
そのため、JPiereで実装しました。
WF責任者タイプが「組織」の場合の承認者決定ロジック
WF責任者タイプが「組織」の場合、WFアクティビティーの承認者は、組織マスタの組織情報タブの責任者になっているユーザーになります。
WFノードに割り当てられているWF責任者の組織が"*"以外の場合
WFノードに割り当てられているWF責任者の組織が"*"以外の場合は、組織に割り当てられている責任者のユーザーが承認者となります。
WFノードに割り当てられているWF責任者の組織が"*"の場合
WFノードに割り当てられているWF責任者の組織が"*"の場合は、承認する伝票の組織の責任者が承認者となります。そのため伝票の組織ごとに承認者を変える事ができます。
【注意】システムクライアントにある"*"のデータについて
iDempiereには、予めシステムクライアントに"*"でWF責任者タイプが「組織」のデータが登録されていますが、これは使用しないで下さい。エラーになります。
WFの申請時
職責の「自己作成伝票承認」フラグ(IsCanApproveOwnDocフラグ)がONになっている場合でも、WFの申請と承認を同時は行えないようにしています。自己承認したい人は、申請したあとに、別途承認して下さい。
WFの承認時
職責の「自己作成伝票承認」フラグ(IsCanApproveOwnDocフラグ)がOFFになっている場合で、WFを申請した人が、承認する組織の責任者でもあった場合、承認する事ができません。そのような場合、承認権限を委譲して他のユーザーに承認してもらう運用を想定しています。 自己作成伝票承認フラグがOFFになっているので、内部統制的な観点より、上記のような仕様にしました。
下記のロジックのいずれかの場合に自己作成した伝票と判定しています。「自己作成伝票承認」フラグがOFFで、自己作成伝票と判定された場合には、エラーになり承認処理できません。
-
承認ノードのWFアクティビティーの作成者が、ログインしているユーザーと同じユーザーである場合。 - ->(2022年5月13日修正) 承認者が、伝票ステータス更新を実行しWFプロセスを作成したユーザーと同じユーザーである場合
- ログインしているユーザーと、DocAction#getDoc_User_ID()メソッドで取得されるユーザーが同じユーザーである場合。
【ポイント】「自己作成伝票承認」がONでも承認する!
WF責任者タイプが組織の場合、「自己作成伝票承認」がONの場合で、承認権限のある人がWF申請を行っても、必ず「承認」行為が必要になるというのが、他のWF責任者タイプとは異なる挙動になります。
この仕様にする事で、他のWF責任者タイプとの使い分けができるようにも意図しています。
カスタマイズ情報
クラス
- org.compiere.wf.MWFActivity
カスタマイズ履歴
2022年5月13日(Ver9)
自己作成伝票の判定処理に、「WFアクティビティーを作成していた人」と「承認する人」が同じ場合、自己作成伝票と判定していましたが、このロジックだと連続する2つのWFノードで、たまたま同じ人が承認者となる場合、2回目の承認の際に自己作成伝票と判断しエラーになってしまいます。そのため、「WFアクティビティーを作成していた人」ではなく、「伝票ステータス更新を実行しWFプロセスを作成した人」と「承認者」が同一の場合に自己作成伝票と判定するようにしました。