IM-BPM for Accel Platform IM-BPM 仕様書 第12版 2019-12-01

4.8. 画面連携

画面連携の仕様について説明します。

4.8.1. 画面連携について

IM-BPM for Accel Platformでは、開始イベント、および、ユーザタスクの処理画面を自由に設定することが可能です。
以下に代表的な連携方式を示します。
  • IM-FormaDesignerにより作成された画面
  • TERASOLUNA Frameworkにより作成された画面
  • スクリプト開発モデルにより作成された画面
  • フレームワークを利用せず、HTMLのみで構成された画面
  • チケットモジュールにより作成された、チケット画面
IM-BPM for Accel Platformでは、通常のユーザタスクについてはIM-FormaDesigner連携と、その他スクラッチ画面連携の2種類の連携方法を用意しています。
アドホックタスクについてはチケットモジュール連携を用意しています。

4.8.2. フォームキー

開始イベント、および、ユーザタスクに設定するフォームキーに対し画面連携方式を設定することが可能です。
  • forma:{APPLICATION_ID}

    IM-FormaDesignerと連携するための方式です。
    “forma:”プレフィクスと共に、IM-FormaDesignerにより作成されたアプリケーションIDを設定してください。
    また、”?”と共に、クエリ文字列の形式で連携するプロセスインスタンス変数を指定できます。
    詳細については フォームの値と変数の連携 を参照してください。
    以下のような形式です。
    forma:{APPLICATION_ID}?inputVariableNames={variableName1}&resultVariableName={variableName2}
  • forward:(PATH)

    スクラッチ画面と連携するための方式です。
    “forward:”プレフィクスと共に、遷移先の画面パスを指定してください。
    画面パスは必ず “/” から始まる必要があります。
    例: https://example.org/imart/foo/bar 画面と連携する場合
    forward:/foo/bar
  • redirect:(PATH)

    スクラッチ画面と連携するための方式です。
    “redirect:”プレフィクスと共に、遷移先のURLを指定してください。
    例: https://example.org/foo/bar 画面と連携する場合
    redirect:https://example.org/foo/bar
  • ticket:(チケットマスタID)

    チケットモジュールのチケット画面と連携するための方式です。
    “ticket:”プレフィクスと共に、チケットマスタ管理により作成されたチケットマスタIDを指定してください。
    アドホックタスクのみで使用できる方式です。
    例: “ticket_master_id” というチケットマスタIDを指定する場合
    ticket:ticket_master_id

4.8.3. 詳細画面のURL

フォームキーを設定している開始イベント、および、ユーザタスクに関しては、以下のURLを呼ぶことで開始画面や詳細画面に遷移できます。
  • プロセス開始画面
    プロセスの開始画面を表示し、プロセスを開始できます。
    %ベースURL%/bpm/task/form/{プロセス定義ID}?callbackPath={遷移先パス}
  • タスク処理画面
    「ユーザタスク」の処理画面を表示し、タスクを処理できます。
    %ベースURL%/bpm/task/task/{タスクID}?callbackPath={遷移先パス}
  • プロセス開始詳細画面
    プロセスが開始された「開始イベント」の詳細画面を表示します。
    %ベースURL%/bpm/task/reference/form/{プロセスインスタンスID}
  • タスク詳細画面
    「ユーザタスク」の詳細画面を表示します。
    %ベースURL%/bpm/task/reference/task/{タスクID}

コラム

プロセス定義IDについては、「プロセス定義ID」を参照してください。
タスクIDについては、「 タスク 」を参照してください。
プロセスインスタンスIDについては、 「プロセスインスタンスID」を参照してください。

注意

ベースURLを省略することで、相対パス形式でURLを指定できます。
例 : /bpm/task/reference/task/{タスクID}

URLは、絶対パスまたは相対パスで指定してください。
相対パスの指定は、詳細画面と詳細画面を開こうとしている環境のベースURLが同一の場合のみ利用可能です。

4.8.4. IM-FormaDesigner連携

IM-FormaDesignerにより作成された画面と連携を行うためには以下の条件が必要です。
  • アプリケーション種別が標準であること

  • テーブル設定が行われていること

  • 権限設定が行われていること

    IM-BPM for Accel Platformと連携する場合権限として “登録” と “参照” が必要です。

4.8.4.1. 前処理と後処理

IM-FormaDesigner連携機能を利用する場合、必ずフォームに対するユーザプログラムとして前処理、後処理が必要です。
  • 前処理: jp.co.intra_mart.activiti.extension.forma.BPMPreProcessExecutor
  • 後処理: jp.co.intra_mart.activiti.extension.forma.BPMPostProcessExecutor
前処理の実行処理種別 “登録”、”編集”、”参照”と後処理の実行処理種別 “登録”、”更新”、”削除”、”一時保存”にユーザプログラムを登録する必要があります。
この前処理、後処理は IM-BPM for Accel Platformから呼び出されていない場合、何も処理を行いません。
前処理、後処理はプロセス定義がデプロイされた際に、自動的に登録が行われます。

注意

フォームキーにEL式が含まれている場合、前処理、後処理はデプロイ時に登録されません。
例: forma:${dynamicFormKey}
この場合には、事前に前処理、後処理を手動で登録する必要があります。
前処理では、以下の検証が行われます。
  • プロセス開始の場合、処理対象プロセスに設定された権限(ユーザ、ロール)を保持していない場合例外を通知する
  • タスク処理の場合、処理対象ユーザタスクに設定された権限(ユーザ、ロール)を保持していない場合例外を通知する
  • タスク実行履歴からの参照の場合、処理対象ユーザタスクに設定された権限(ユーザ、ロール)を保持していない場合例外を通知する
前処理では以下の処理が行われます。
  • プロセスインスタンスに格納されている変数情報を取得し、フォームの初期値として設定する。

    フォームの初期値として利用されるプロセスインスタンス変数は、フォームに含まれるフィールド識別IDと同名の変数が利用されます。
後処理では、以下の検証が行われます。
  • プロセス開始の場合、処理対象プロセスに設定された権限(ユーザ、ロール)を保持していない場合例外を通知する
  • タスク開始の場合、処理対象ユーザタスクに設定された権限(ユーザ、ロール)を保持していない場合例外を通知する
後処理では、以下の処理が行われます。
  • プロセス開始の場合、{アプリケーションID}${アプリケーション番号}${FormaID}を業務キーとして設定する。
  • プロセス開始の場合、フォームに入力された内容をプロセスインスタンス変数として業務プロセスの開始を行う。
  • タスク処理の場合、フォームに入力された内容をプロセスインスタンス変数としてユーザタスクを進める。

コラム

タスク処理の場合以下のデータは変数として保存されません。
  • im_frで始まるデータ
  • im_で始まるデータ
  • __が前後に付与されているデータ
上記のデータはユーザタスク固有のローカル変数として保存されます。

4.8.4.2. フォームの値と変数の連携

前処理・後処理の結果として、IM-FormaDesignerフォームの各アイテムの値とプロセスインスタンス変数は1対1にバインドされます。
  • フォームの画面を開いた際、各アイテムの初期値として、フィールド識別IDと同名のプロセスインスタンス変数の値が利用される
  • フォームが登録された際、各アイテムに入力された値が、フィールド識別IDと同名のプロセスインスタンス変数に保存される
ただし、フォームキーの最後に「 ? (クエスチョンマーク)」に続いて以下のクエリ文字列を記述した場合は、フォームの値は変数に個別にバインドされるのではなく、指定されたMap型の変数のフィールドにバインドされます。
  • 初期値の連携(inputVariableNames)

    フォームの画面を開いた際、各アイテムの初期値として、指定されたMap型変数内のフィールド識別IDと同名のフィールドの値が利用されます。
    次の形式で指定します。
    inputVariableNames={入力変数名1},{入力変数名2}, ...
  • 入力結果の連携(resultVariableName)

    フォームが登録された際、各アイテムに入力された値が、指定されたMap型変数内のフィールド識別IDと同名のフィールドに保存されます。
    次の形式で指定します。
    resultVariableName={結果変数名}
    ただし、フィールド識別IDと同名の変数を、連携元の開始イベントまたはユーザタスクのフォームプロパティに設定している場合は、そちらが優先され、Map型変数内のフィールドではなく通常通り同名の変数に保存されます。
例: アプリケーションIDが xxxx 、フィールド識別IDが yyyy のとき、フォームキーを以下のように指定した場合
forma:xxxx?inputVariableNames=inputVar&resultVariableName=resultVar
  • アイテムの初期値として ${ inputVar.yyyy } の値が利用されます。
  • アイテムに入力された値は ${ resultVar.yyyy } にバインドされます。
プロセスインスタンス変数が大量に存在する場合、データベース上のレコード数の増加によりパフォーマンスの劣化を招くことがあります。
入力結果の連携を行うことで、プロセスインスタンスに保存される変数の数を減らし、この問題を回避することが可能です。

コラム

inputVariableNamesまたはresultVariableNameで指定する変数名には、?& を含むことはできません。

コラム

以下のようなケースで、入力結果の連携を行いつつ一部の変数をプロセスインスタンスに保存したい場合は、その変数を連携元の開始イベントまたはユーザタスクのフォームプロパティに設定してください。
  • プロセス一覧画面においてプロセスインスタンスを検索する際、「変数検索」として検索条件に指定したい場合
  • タスク一覧画面において「一覧表示設定」で表示対象に指定し、かつ検索条件に指定したい場合

4.8.5. スクラッチ画面連携

4.8.5.1. パラメータ

スクラッチ画面連携では、プロセスの実行に必要なパラメータがリクエストパラメータとして受け渡されます。
画面表示時のパターンと、リクエストパラメータについて説明します。
  • プロセス開始時における画面初期表示パラメータ

    callbackPath: 戻り先のURL
    processDefinitionId: プロセス定義ID
  • タスク処理時における画面初期表示パラメータ

    callbackPath: 戻り先のURL
    taskId: タスクID
  • プロセス開始時の情報を履歴から参照する場合の画面初期表示パラメータ

    callbackPath: 戻り先のURL
    historicProcessInstanceId: 実行済プロセスインスタンスID
  • タスク処理後の情報を履歴から参照する場合の画面初期表示パラメータ

    callbackPath: 戻り先のURL
    historicTaskId: タスクID
それぞれの画面において処理を実行した後、戻り先のURL (callbackPath)パラメータにリダイレクトを行ってください。
タスクの一括処理を行った場合、callbackPathには、一括処理用のtransactionIdパラメータが埋め込まれており、次の処理対象画面へ遷移するURLです。

4.8.5.2. 検証

スクラッチ画面連携を行う場合、それぞれの画面において業務プロセスおよびタスクに対する権限の検証を行ってください。
検証処理を実装しなかった場合、第三者から画面情報が閲覧できる状態になる可能性があります。
  • プロセス開始画面の場合

    プロセス定義に設定された権限の検証を行う必要があります。
    プロセス開始時の処理画面の場合、RepositoryService#getIdentityLinksForProcessDefinition メソッドによりプロセス定義に設定された権限情報の取得ができます。

    履歴画面からの参照の場合、HistoryService#getHistoricIdentityLinksForProcessInstance メソッドによりプロセスインスタンスに紐づく関係者の取得ができます。
  • タスク画面の場合

    タスクに設定された権限の検証を行う必要があります。
    タスク処理時のタスク処理画面の場合、TaskService#getIdentityLinksForTask メソッドによりタスクに設定された権限情報の取得ができます。

    履歴画面からの参照の場合、HistoryService#getHistoricIdentityLinksForTask メソッドによりタスクに紐づく関係者の取得ができます。

4.8.6. ユーザタスク処理者の取得

ユーザタスク処理後、そのユーザタスクを実際に処理したユーザコードをEL式より取得できます。
暗黙のオブジェクトとして、 “im_operation_users” オブジェクトが用意されています。
この “im_operation_users” オブジェクトは、Map型となり、キーとしてユーザタスクのID、値としてユーザタスクを処理したユーザコードを持ちます。
例: ユーザタスク(id: foo_user_task) を処理したユーザコードをEL式にて取得する場合
${im_operation_users.foo_user_task}

プロセス定義によっては、同一のユーザタスクを複数回呼び出す場合が存在します。
同一のユーザタスクが複数回呼びだされた場合には、最後にそのユーザタスクを処理したユーザコードが格納されます。

コラム

ユーザタスクに指定するIDにハイフン等EL式で直接利用できない文字が含まれている場合には ${im_operation_users[‘foo-bar-baz’]} 形式で指定することにより値の取得ができます。

注意

システム変数の格納方式の設定

システム変数の格納方式の設定(is-system-variable-save-as-object)がtrueの場合は、暗黙のオブジェクト “im_bpm_system_variables” オブジェクトの要素として”im_operation_users” オブジェクトが格納されます。
例: ユーザタスク(id: foo_user_task) を処理したユーザコードをEL式にて取得する場合
${im_bpm_system_variables.im_operation_users.foo_user_task}
システム変数の格納方式の設定の詳細については、「 IM-BPM 設定ファイルリファレンス 」-「 システム変数の格納方式の設定 」を参照してください。