IM-BPM for Accel Platform プログラミングガイド 第6版 2019-08-01

4.5. オプショナルタスク

IM-BPM では、プロセスインスタンスの実行の流れとは関係なく、ユーザの判断で任意にタスクを追加できる機能を用意しています。
このようなタスクのことを「オプショナルタスク」と呼びます。

コラム

オプショナルタスクの詳細は「IM-BPM 仕様書」 - 「オプショナルタスク」を参照してください。
オプショナルタスクはプロセスインスタンスの状態により、追加した際に実行される場合と事前追加状態になる場合があります。
追加するオプショナルタスクの配置されているプロセス(サブプロセスやイベントサブプロセス)が実行中の場合、追加時に実行されます。
../../../_images/optional_task_1.png
図:サブプロセスの中に配置されているオプショナルタスクが実行されるプロセスの状態
追加するオプショナルタスクの配置されているプロセス(サブプロセスやイベントサブプロセス)が実行中でない場合、追加時に事前追加状態で待機します。
../../../_images/optional_task_2.png
図:サブプロセスの中に配置されているオプショナルタスクが事前追加状態になるプロセスの状態
プロセスインスタンスの状態が遷移し、事前追加状態のオプショナルタスクが配置されているプロセスが実行中になった際にオプショナルタスクは実行されます。
オプショナルタスクを追加できます。
事前追加状態になっているオプショナルタスクは、削除することやパラメータを編集できます。
事前追加状態になっているオプショナルタスクの情報を取得できます。
現在のプロセスインスタンスの状態からプショナルタスクを追加した際に、実行中になるオプショナルタスクの情報を取得できます。
オプショナルタスクの追加、および、編集の競合を防ぐために排他制御を行います。
排他制御を行う際にバージョンを使用します。
ただし、オプショナルタスク追加時に事前追加状態にならずに実行された場合は排他制御の対象外です。

4.5.1. オプショナルタスクを追加してプロセスインスタンスを開始する

オプショナルタスクを追加してプロセスインスタンスを開始する方法はいくつかあります。
  • プロセス定義キーを指定してプロセスを開始する。
  • プロセス定義IDを指定してプロセスを開始する。

4.5.1.1. プロセス定義キーを指定してプロセスインスタンスを開始する

プロセス定義キーを指定してプロセスインスタンスを開始します。
プロセス定義キーを指定してプロセスインスタンスを開始した場合、最新バージョンのプロセス定義が開始されます。
../../../_images/process_1.png
図:プロセス定義キー

コラム

プロセス定義キーの詳細は「IM-BPM 仕様書」 - 「プロセス」を参照してください。

4.5.1.1.1. 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.2. スクリプト開発モデル

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. 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.startProcessInstanceById("%プロセス定義ID%", optionalTaskInstances);

// 業務キーを設定する場合
optionalTaskService.startProcessInstanceById("%プロセス定義ID%", "%業務キー%", optionalTaskInstances);

// 変数を設定する場合
optionalTaskService.startProcessInstanceById("%プロセス定義ID%", "%業務キー%", %変数Map%, optionalTaskInstances);

4.5.1.2.2. スクリプト開発モデル

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. 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.2. スクリプト開発モデル

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. 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.2. スクリプト開発モデル

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. 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.2. スクリプト開発モデル

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. JavaEE開発モデル

OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService();

optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%");

// 排他制御を行う場合
optionalTaskService.deleteOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%", %バージョン%);

4.5.2.4.2. スクリプト開発モデル

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. JavaEE開発モデル

OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService();

// プロセスインスタンス配下の全てを取得する場合
List<OptionalTaskInstance> optionalTaskInstances = optionalTaskService.getOptionalTaskInstances("%プロセスインスタンスID%");

// アクティビティIDを指定する場合
OptionalTaskInstance optionalTaskInstance = optionalTaskService.getOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%");

4.5.3.1.2. スクリプト開発モデル

var optionalTaskService = new bpm.OptionalTaskService();

// プロセスインスタンス配下の全てを取得する場合
var optionalTaskInstances = optionalTaskService.getOptionalTaskInstances("%プロセスインスタンスID%");

// アクティビティIDを指定する場合
var optionalTaskInstance = optionalTaskService.getOptionalTaskInstance("%プロセスインスタンスID%", "%オプショナルタスクのアクティビティID%");

4.5.3.2. プロセスインスタンスに追加できるオプショナルタスク情報を取得する

プロセスインスタンスに追加できるオプショナルタスク情報を取得します。
プロセスインスタンスIDを指定します。
返却値の詳細は「APIドキュメント」を参照してください。

4.5.3.2.1. JavaEE開発モデル

OptionalTaskService optionalTaskService = ProcessEngineFactory.getInstance().getProcessEngine().getOptionalTaskService();

List<OptionalTaskInfo> optionalTaskInfos = optionalTaskService.getAddableOptionalTaskInfo("%プロセスインスタンスID%");

4.5.3.2.2. スクリプト開発モデル

var optionalTaskService = new bpm.OptionalTaskService();

var optionalTaskInfos = optionalTaskService.getAddableOptionalTaskInfo("%プロセスインスタンスID%");

4.5.3.3. バージョンを取得する

バージョンを取得します。
プロセスインスタンスのオプショナルタスクの操作によってバージョンがインクリメントされます。
ただし、オプショナルタスク追加時に事前追加状態にならずに実行された場合はインクリメントされません。
オプショナルタスクの操作以外に、プロセスインスタンスの状態が遷移し、事前追加状態のオプショナルタスクが配置されているプロセスが実行中になり、オプショナルタスクが実行中になった際もインクリメントされます。

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%");