フローイベントスクリプトを用意する

最終更新日: 2021年12月14日
R8 | R9

定義方法

ワークフロー設定画面に用意された「フローイベントスクリプト」を定義します。

図1 フローイベントスクリプトの設定(1)

ノードとイベントタイプに応じたスクリプトを設定することができます。

図2 フローイベントスクリプトの設定(2)

例外を発生させてワークフローを進めないようにする

スクリプト内で何らかのチェックを行い、その結果が不正と判断したときに Wagby の例外BusinessLogicException を投げることができます。ワークフローを先へ進めずにエラーと表示するような制御を行うことができます。

次のフローイベントスクリプトを「申請」ノード、イベントタイプ「申請」に記載します。(注意:これは必ずエラーとなるようにしたものです。)

図3 フローイベントスクリプトにBusinessLogicExceptionを設定する
throw new BusinessLogicException("申請時にエラーが発生しました。エラー内容を修正後に再申請してください。");

ワークフローの申請時にエラーとなり、上記エラーメッセージが画面に表示されます。ワークフローは進まないため、エラー発生後に再度申請ボタンが押下可能となっています。

図4 ワークフローの申請処理(1)
図5 ワークフローの申請処理(2)

決裁ノードでの例外処理

決裁ノードで例外を発生させロールバックさせる場合、同ノードのイベント "承認" にスクリプトを設定します。"決裁" イベントではないことに注意してください。

"決裁" イベントでは、決裁されたあとに行う処理を記述することができます。

スクリプト内で利用できる暗黙変数

こちらをお読みください。

自モデルのデータを更新する

フローイベントスクリプトで自モデルのデータを *更新* する場合、EntityService の findById メソッドを使って「最新のデータを取得」してください。 具体的には次のようになります。

//最新のオブジェクトを取得する
var service = p.appctx.getBean("LeaveEntityService");

leave = service.findById(modelpkey);//modelpkeyは主キーの値

leave.status = 1;// 状態フラグを書き換えて更新する。
service.update(leave);

重要

再取得を行わない場合、ワークフローの状態が更新されません。例えば決裁時のスクリプトで自データを更新したが、決裁状態にならない、といった不整合が生じる場合があります。

仕様・制約

  • フロー参加者スクリプトのデータベースの型は、各データベースの CLOB に相当する型を用いるようにしています。スクリプトのサイズの最大長は、データベースの CLOB 型の上限値となります。例えば Oracle では NCLOB となります。
  • 複数のフローイベントスクリプトを定義し、そのイベントタイプが重複している場合、このスクリプトはワークフロー処理の過程で複数回、実行されることになります。例えば異なるフローイベントスクリプトだがそれぞれで "申請" をチェックした場合や、決裁用のフローイベントスクリプトでイベントタイプに "承認" と "決裁" の両方を指定した場合などです。
  • 運用中(テスト中を含む)にスクリプトを修正した場合、ワークフロー利用者(申請者、承認者など)をいったんログアウトし、再度ログオンすることで新しいスクリプトが有効になります。