4.5. オプショナルタスク¶
IM-BPM では、プロセスインスタンスの実行の流れとは関係なく、ユーザの判断で任意にタスクを追加できる機能を用意しています。
このようなタスクのことを「オプショナルタスク」と呼びます。
コラム
オプショナルタスクの詳細は「IM-BPM 仕様書」 - 「オプショナルタスク」を参照してください。
項目
オプショナルタスクはプロセスインスタンスの状態により、追加した際に実行される場合と事前追加状態になる場合があります。
追加するオプショナルタスクの配置されているプロセス(サブプロセスやイベントサブプロセス)が実行中の場合、追加時に実行されます。
追加するオプショナルタスクの配置されているプロセス(サブプロセスやイベントサブプロセス)が実行中でない場合、追加時に事前追加状態で待機します。
プロセスインスタンスの状態が遷移し、事前追加状態のオプショナルタスクが配置されているプロセスが実行中になった際にオプショナルタスクは実行されます。
オプショナルタスクを追加できます。
事前追加状態になっているオプショナルタスクは、削除することやパラメータを編集できます。
- 「 オプショナルタスクのパラメータを編集する 」
- 「 オプショナルタスクのパラメータを削除する 」
- 「 オプショナルタスクを削除する 」
事前追加状態になっているオプショナルタスクの情報を取得できます。
現在のプロセスインスタンスの状態からプショナルタスクを追加した際に、実行中になるオプショナルタスクの情報を取得できます。
オプショナルタスクの追加、および、編集の競合を防ぐために排他制御を行います。
排他制御を行う際にバージョンを使用します。
ただし、オプショナルタスク追加時に事前追加状態にならずに実行された場合は排他制御の対象外です。
- 「 バージョンを取得する 」
4.5.1. オプショナルタスクを追加してプロセスインスタンスを開始する¶
オプショナルタスクを追加してプロセスインスタンスを開始する方法はいくつかあります。
- プロセス定義キーを指定してプロセスを開始する。
- プロセス定義IDを指定してプロセスを開始する。
4.5.1.1. プロセス定義キーを指定してプロセスインスタンスを開始する¶
プロセス定義キーを指定してプロセスインスタンスを開始します。
プロセス定義キーを指定してプロセスインスタンスを開始した場合、最新バージョンのプロセス定義が開始されます。
4.5.1.1.1. REST-API「オプショナルタスクを追加してプロセスインスタンスを登録」¶
メソッド POST URI %ベースURL%/api/bpm/runtime/process-instances-reserve-option-tasks BODY {‘processDefinitionKey’ : ‘%プロセス定義キー%’,‘businessKey’ : ‘%業務キー%’,‘returnVariables’ : true,‘variables’ : [{‘name’ : ‘%変数名%’, ‘type’ : ‘%変数タイプ%’, ‘variableScope’ : ‘%変数スコープ%’, ‘value’ : ‘%値%’}, ...],‘optionTaskReserveInfoList’ : [{‘activityId’: ‘%オプショナルタスクのアクティビティID%’, ‘parameterList’ : [{‘key’ : ‘%パラメータ変数キー%’ , ‘value’, ‘%パラメータ変数値%’}, ...]}, ...]}
4.5.1.1.2. JavaEE開発モデル「プロセス定義キーを指定して、プロセスインスタンスを開始します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); // オプショナルタスクリスト List<OptionalTaskInstance> optionalTaskInstances = new ArrayList<>() OptionalTaskInstance optionalTaskInstance = new OptionalTaskInstance(); // オプショナルタスクのアクティビティIDを設定 optionalTaskInstance.setActivityId("%オプショナルタスクのアクティビティID%"); // オプショナルタスクのパラメータを設定 Map<String, Object> parameterMap = new HashMap<String, Object>(); parameterMap.put("key1", "value1"); parameterMap.put("key2", "value2"); optionalTaskInstance.setParameterMap(parameterMap); optionalTaskInstances.add(optionalTaskInstance); optionalTaskService.startProcessInstanceByKey("%プロセス定義キー%", optionalTaskInstances); // 業務キーを設定する場合 optionalTaskService.startProcessInstanceByKey("%プロセス定義キー%", "%業務キー%", optionalTaskInstances); // 変数を設定する場合 optionalTaskService.startProcessInstanceByKey("%プロセス定義キー%", "%業務キー%", %変数Map%, optionalTaskInstances);
4.5.1.1.3. スクリプト開発モデル「プロセス定義キーにより、プロセスを開始します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var optionalTaskInstances = [ { "activityId" : "%オプショナルタスクのアクティビティID%" "parameterMap" : { "key1" : "value1", "key2" : "value2" } } ]; optionalTaskService.startProcessInstanceByKey("%プロセス定義キー%", optionalTaskInstances); // 変数を設定する場合 var variables = { "var1": "string", "var2": 123, "var3": new Date(), "var4": true }; runtimeService.startProcessInstanceByKey("%プロセス定義キー%", variables, optionalTaskInstances); // 業務キーと変数を設定する場合 runtimeService.startProcessInstanceByKey("%プロセス定義キー%", "%業務キー%", variables, optionalTaskInstances);
4.5.1.2. プロセス定義IDを指定してプロセスインスタンスを開始する¶
プロセス定義IDを指定してプロセスインスタンスを開始します。
プロセス定義IDを指定することにより、過去のバージョンのプロセス定義も開始できます。
コラム
プロセス定義IDの詳細は「IM-BPM 仕様書」 - 「プロセス」を参照してください。
4.5.1.2.1. REST-API「オプショナルタスクを追加してプロセスインスタンスを登録」¶
メソッド POST URI %ベースURL%/api/bpm/runtime/process-instances-reserve-option-tasks BODY {‘processDefinitionId’ : ‘%プロセス定義ID%’,‘businessKey’ : ‘%業務キー%’,‘returnVariables’ : true,‘variables’ : [{‘name’ : ‘%変数名%’, ‘type’ : ‘%変数タイプ%’, ‘variableScope’ : ‘%変数スコープ%’, ‘value’ : ‘%値%’}, ...],‘optionTaskReserveInfoList’ : [{‘activityId’: ‘%オプショナルタスクのアクティビティID%’, ‘parameterList’ : [{‘key’ : ‘%パラメータ変数キー%’ , ‘value’, ‘%パラメータ変数値%’}, ...]}, ...]}
4.5.1.2.2. JavaEE開発モデル「プロセス定義IDを指定して、プロセスインスタンスを開始します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); // オプショナルタスクリスト List<OptionalTaskInstance> optionalTaskInstances = new ArrayList<>() OptionalTaskInstance optionalTaskInstance = new OptionalTaskInstance(); // オプショナルタスクのアクティビティIDを設定 optionalTaskInstance.setActivityId("%オプショナルタスクのアクティビティID%"); // オプショナルタスクのパラメータを設定 Map<String, Object> parameterMap = new HashMap<String, Object>(); parameterMap.put("key1", "value1"); parameterMap.put("key2", "value2"); optionalTaskInstance.setParameterMap(parameterMap); optionalTaskInstances.add(optionalTaskInstance); optionalTaskService.startProcessInstanceById("%プロセス定義ID%", optionalTaskInstances); // 業務キーを設定する場合 optionalTaskService.startProcessInstanceById("%プロセス定義ID%", "%業務キー%", optionalTaskInstances); // 変数を設定する場合 optionalTaskService.startProcessInstanceById("%プロセス定義ID%", "%業務キー%", %変数Map%, optionalTaskInstances);
4.5.1.2.3. スクリプト開発モデル「プロセス定義IDにより、プロセスを開始します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var optionalTaskInstances = [ { "activityId" : "%オプショナルタスクのアクティビティID%" "parameterMap" : { "key1" : "value1", "key2" : "value2" } } ]; optionalTaskService.startProcessInstanceById("%プロセス定義ID%", optionalTaskInstances); // 変数を設定する場合 var variables = { "var1": "string", "var2": 123, "var3": new Date(), "var4": true }; runtimeService.startProcessInstanceById("%プロセス定義ID%", variables, optionalTaskInstances); // 業務キーと変数を設定する場合 runtimeService.startProcessInstanceById("%プロセス定義ID%", "%業務キー%", variables, optionalTaskInstances);
4.5.2. オプショナルタスクを操作する¶
オプショナルタスクの操作について以下を解説します。
- オプショナルタスクを追加する。
- オプショナルタスクのパラメータを編集する。
- オプショナルタスクのパラメータを削除する。
- オプショナルタスクを削除する。
4.5.2.1. オプショナルタスクを追加する¶
オプショナルタスクを追加します。
プロセスインスタンスIDと追加するアクティビティIDを指定します。
任意でパラメータを指定します。
バージョンを指定することにより、排他制御を行います。バージョンの取得については「 バージョンを取得する 」を参照してください。
4.5.2.1.1. REST-API「プロセスインスタンスのオプショナルタスク追加」¶
REST-APIの場合は、追加するスコープのエグゼキューションIDと追加するアクティビティIDを指定します。
バージョンを指定できません。
プロセスインスタンスバージョンを指定することにより、プロセスインスタンスの状態の変更による排他制御を行えます。プロセスインスタンスバージョンは、「 プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する 」から取得してください。
メソッド POST URI %ベースURL%/api/bpm/runtime/process-instances/option-task/add/{processInstanceId} BODY {‘activityId’ : ‘%オプショナルタスクのアクティビティID%’,‘executionId’ : ‘%スコープのエグゼキューションID%’,‘parameterList’ : [{‘key’ : ‘%パラメータ変数キー%’ , ‘value’, ‘%パラメータ変数値%’}, ...],‘processInstanceVersion’ : %プロセスインスタンスバージョン%}
4.5.2.1.2. JavaEE開発モデル「オプショナルタスクを追加します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); Map<String, Object> parameterMap = new HashMap<String, Object>(); parameterMap.put("key1", "value1"); parameterMap.put("key2", "value2"); optionalTaskService.add("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap); // 排他制御を行う場合 optionalTaskService.add("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap, %バージョン%);
4.5.2.1.3. スクリプト開発モデル「オプショナルタスクを追加します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var parameterMap = { "key1" : "value1", "key2" : "value2" } optionalTaskService.add("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap); // 排他制御を行う場合 optionalTaskService.add("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap, %バージョン%);
4.5.2.2. オプショナルタスクのパラメータを編集する¶
事前追加済のオプショナルタスクのパラメータを編集します。
プロセスインスタンスIDとアクティビティIDを指定し、編集するパラメータを設定します。
バージョンを指定することにより、排他制御を行います。バージョンの取得については「 バージョンを取得する 」を参照してください。
4.5.2.2.1. REST-API「プロセスインスタンスのオプショナルタスク予約」¶
REST-APIの場合は、プロセスインスタンスの全ての事前追加済のオプショナルタスクの情報を上書きします。
プロセスインスタンスバージョンを指定することにより、プロセスインスタンスの状態の変更による排他制御を行えます。プロセスインスタンスバージョンは、「 プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する 」から取得してください。
メソッド PUT URI %ベースURL%/api/bpm/runtime/process-instances/option-task/reserve/{processInstanceId} BODY {‘optionTaskReserveInfoList’ : [{‘activityId’ : ‘%オプショナルタスクのアクティビティID%’, ‘parameterList’ : [{‘key’ : ‘%パラメータ変数キー%’ , ‘value’, ‘%パラメータ変数値%’}, ...]}, ...],‘processInstanceVersion’ : %プロセスインスタンスバージョン%,‘reserveVersion’ : %バージョン%}
4.5.2.2.2. JavaEE開発モデル「事前追加済のオプショナルタスクのパラメータの変数を設定します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); Map<String, Object> parameterMap = new HashMap<String, Object>(); optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%", %パラメータの値%); // 排他制御を行う場合 optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%", %パラメータの値%, %バージョン%); // マップで複数編集する場合 parameterMap.put("key1", "value1_update"); parameterMap.put("key2", "value2_update"); optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap); // 排他制御を行う場合 optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap, %バージョン%);
4.5.2.2.3. スクリプト開発モデル「事前追加済のオプショナルタスクの複数のパラメータの変数を設定します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var parameterMap = { "key1" : "value1_update", "key2" : "value2_update" } optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap); // 排他制御を行う場合 optionalTaskService.setParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", parameterMap, %バージョン%);
4.5.2.3. オプショナルタスクのパラメータを削除する¶
事前追加済のオプショナルタスクのパラメータを削除します。
プロセスインスタンスIDとアクティビティIDを指定し、削除するパラメータの変数名を指定します。
バージョンを指定することにより、排他制御を行います。バージョンの取得については「 バージョンを取得する 」を参照してください。
4.5.2.3.1. REST-API「プロセスインスタンスのオプショナルタスク予約」¶
REST-APIの場合は、「 オプショナルタスクのパラメータを編集する 」を参照してください。
パラメータのみ削除する場合は、既に追加されているプロセスインスタンスの全ての事前追加済のオプショナルタスクの情報から、削除したいパラメータのみ除いて送信してください。
既に追加されているプロセスインスタンスの他の事前追加済のオプショナルタスク情報を送信しない場合、他の情報も削除されてしまいます。
4.5.2.3.2. JavaEE開発モデル「事前追加済のオプショナルタスクのパラメータの変数を削除します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%"); // 排他制御を行う場合 optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%", %バージョン%); // 複数削除する場合 List<String> variableNames = new ArrayList<>(); variableNames.add("key1"); variableNames.add("key2"); optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", variableNames); // 排他制御を行う場合 optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", variableNames, %バージョン%);
4.5.2.3.3. スクリプト開発モデル「事前追加済のオプショナルタスクのパラメータの変数を削除します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%"); // 排他制御を行う場合 optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", "%パラメータの変数名%", %バージョン%); // 複数削除する場合 var variableNames = [ "key1", "key2" ] optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", variableNames); // 排他制御を行う場合 optionalTaskService.removeParameter("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", variableNames, %バージョン%);
4.5.2.4. オプショナルタスクを削除する¶
事前追加済のオプショナルタスクを削除します。
プロセスインスタンスIDと削除するアクティビティIDを指定します。
バージョンを指定することにより、排他制御を行います。バージョンの取得については「 バージョンを取得する 」を参照してください。
4.5.2.4.1. REST-API「プロセスインスタンスのオプショナルタスク予約」¶
REST-APIの場合は、「 オプショナルタスクのパラメータを編集する 」を参照してください。
事前追加済のオプショナルタスク(アクティビティ)のみ削除する場合は、既に追加されているプロセスインスタンスの全ての事前追加済のオプショナルタスクの情報から、削除したい事前追加済のオプショナルタスクのみ除いて送信してください。
既に追加されているプロセスインスタンスの他の事前追加済のオプショナルタスク情報を送信しない場合、他の情報も削除されてしまいます。
4.5.2.4.2. JavaEE開発モデル「事前追加済のオプショナルタスクを削除します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%"); // 排他制御を行う場合 optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", %バージョン%);
4.5.2.4.3. スクリプト開発モデル「事前追加済のオプショナルタスクを削除します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%"); // 排他制御を行う場合 optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", %バージョン%);
4.5.3. オプショナルタスク情報を取得する¶
オプショナルタスク情報の取得について以下を解説します。
- プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する。
- プロセスインスタンスに追加できるオプショナルタスク情報を取得する。
- バージョンを取得する。
4.5.3.1. プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する¶
事前追加済のオプショナルタスクの情報を取得します。
プロセスインスタンスIDを指定します。
アクティビティIDを指定することで、1件のみ取得できます。
返却値の詳細は「APIドキュメント」を参照してください。
4.5.3.1.1. REST-API「プロセスインスタンスのオプショナルタスク予約情報取得」¶
REST-APIは、アクティビティIDを指定して1件のみ取得することに対応していません。
プロセスインスタンスIDに対するプロセスインスタンスの全ての事前追加済のオプショナルタスク情報を取得します。
メソッド GET URI %ベースURL%/api/bpm/runtime/process-instances/option-task/reserve/{processInstanceId} BODY {}
4.5.3.1.2. JavaEE開発モデル「プロセスインスタンスに事前追加済のオプショナルタスクを取得します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); // プロセスインスタンス配下の全てを取得する場合 List<OptionalTaskInstance> optionalTaskInstances = optionalTaskService.getOptionalTaskInstances("%プロセスインスタンスID%"); // アクティビティIDを指定する場合 OptionalTaskInstance optionalTaskInstance = optionalTaskService.getOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%");
4.5.3.1.3. スクリプト開発モデル「事前追加済のオプショナルタスクを取得します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); // プロセスインスタンス配下の全てを取得する場合 var optionalTaskInstances = optionalTaskService.getOptionalTaskInstances("%プロセスインスタンスID%"); // アクティビティIDを指定する場合 var optionalTaskInstance = optionalTaskService.getOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%");
4.5.3.2. プロセスインスタンスに追加できるオプショナルタスク情報を取得する¶
4.5.3.2.1. REST-API「プロセスインスタンスの追加可能なオプショナルタスク取得」¶
メソッド GET URI %ベースURL%/api/bpm/runtime/process-instances/option-task/can-add-option-task/{processInstanceId} BODY {}
4.5.3.2.2. JavaEE開発モデル「プロセスインスタンスに追加できるオプショナルタスクの情報を取得します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); List<OptionalTaskInfo> optionalTaskInfos = optionalTaskService.getAddableOptionalTaskInfo("%プロセスインスタンスID%");
4.5.3.2.3. スクリプト開発モデル「プロセスインスタンスに追加できるオプショナルタスクの情報を取得します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var optionalTaskInfos = optionalTaskService.getAddableOptionalTaskInfo("%プロセスインスタンスID%");
4.5.3.3. バージョンを取得する¶
バージョンを取得します。
プロセスインスタンスのオプショナルタスクの操作によってバージョンがインクリメントされます。
ただし、オプショナルタスク追加時に事前追加状態にならずに実行された場合はインクリメントされません。
オプショナルタスクの操作以外に、プロセスインスタンスの状態が遷移し、事前追加状態のオプショナルタスクが配置されているプロセスが実行中になり、オプショナルタスクが実行中になった際もインクリメントされます。
REST-APIの場合は、「 プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する 」から取得してください。
4.5.3.3.1. JavaEE開発モデル「バージョンを取得します。」¶
OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService(); long version = optionalTaskService.getVersion("%プロセスインスタンスID%");
4.5.3.3.2. スクリプト開発モデル「バージョンを取得します。」¶
var optionalTaskService = new bpm.OptionalTaskService(); var version = optionalTaskService.getVersion("%プロセスインスタンスID%");
4.5.3.4. プロセスインスタンスバージョンを取得する¶
プロセスインスタンスバージョンを取得します。
REST-APIの場合は、「 プロセスインスタンスに事前追加済のオプショナルタスク情報を取得する 」から取得してください。
REST-API以外は対応していません。