flowableワークフローにおいて、最終タスクの承認を自動的に回付したい。

実現したいこと

flowableワークフローの最後から2番目のタスクをconfirmしたとき、続く最終タスクもapproveする機能を実装したいです。
taskServiceが利用できるようになった段階でそれを検知することができればいいのですが……

前提

flowableを用いて業務フローを進めるためのwebアプリを作っています。
外部から叩くバッチ処理ではなく、アプリ内で処理を完結させるようにとの指定なので、イベントリスナーを実装しようとしています。
flowable modelerから、最終タスクのExecution Listener

発生している問題・エラーメッセージ

TASK_CREATEDイベントにリスナーを追加しましたが、その段階ではまだデータベースがコミットされていないのかなんなのか、taskServiceを用いた処理を実行することができません。したがってタスクcompleteもできません。

該当のソースコード

Java

1@Scope("prototype")2public class WfApproveExecuter implements ExecutionListener {3 4 private static final Logger logger = LogManager.getLogger(WfApproveExecuter.class);5 6 @Autowired7 TaskService taskService;8 9 @Autowired10 RuntimeService runtimeService;11 12 @Override13 public void notify(DelegateExecution delegateExecution) {14 logger.info("Start WfApproveExecuter");15 16 // タスク定義キーとプロセスインスタンスIDを取得17 String taskDefKey = delegateExecution.getCurrentActivityId();18 String processInstanceId = delegateExecution.getProcessInstanceId();19 20 // taskIdを取得する。21 FlowableEventListener listener = new FlowableEventListener() {22 @Override23 public void onEvent(FlowableEvent event) {24 runtimeService.removeEventListener(this);25 ExecutionEntityManager eman =26 CommandContextUtil.getExecutionEntityManager(Context.getCommandContext());27 List<ExecutionEntity> exes =28 eman.findChildExecutionsByProcessInstanceId(processInstanceId);29 String taskId = "";30 for (ExecutionEntity ee : exes) {31 logger.info("child execution:{}", ee.getId());32 for (TaskEntity te : ee.getTasks()) {33 34 if (taskDefKey.equals(te.getTaskDefinitionKey())) {35 logger.info(taskId);36 taskId = te.getId();37 break;38 }39 }40 if (!taskId.isEmpty())41 break;42 }43 logger.info("start task:{}", taskId);44 45 Task task = taskService.createTaskQuery().processInstanceId(processInstanceId)46 .taskId(taskId).singleResult(); // ここが不可能47 }48 49 @Override50 public boolean isFailOnException() {51 logger.info("isFailOnException");52 return true;53 }54 55 @Override56 public boolean isFireOnTransactionLifecycleEvent() {57 logger.info("isFireOnTransactionLifecycleEvent");58 return false;59 }60 61 @Override62 public String getOnTransaction() {63 logger.info("getOnTransaction");64 return null;65 }66 };67 runtimeService.addEventListener(listener, FlowableEngineEventType.TASK_CREATED);68 69 logger.info("End WfApproveExecuter");70 }71}

試したこと

・イベントをTASK_ASSIGNEDに変更
→リスナーは実行されましたが、ダメでした

補足情報(FW/ツールのバージョンなど)

Spring 5.1.1.RELEASE
flowable 6.4.0-15

コメントを投稿

0 コメント