IM-BPM for Accel Platform プログラミングガイド 第8版 2020-12-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.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.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.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.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.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.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.3. スクリプト開発モデル「事前追加済のオプショナルタスクを取得します。

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.3. スクリプト開発モデル「プロセスインスタンスに追加できるオプショナルタスクの情報を取得します。

var optionalTaskService = new bpm.OptionalTaskService();

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

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

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

4.5.3.3.2. スクリプト開発モデル「バージョンを取得します。

var optionalTaskService = new bpm.OptionalTaskService();

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

4.5.3.4. プロセスインスタンスバージョンを取得する

プロセスインスタンスバージョンを取得します。
REST-API以外は対応していません。