IM-BPM for Accel Platform IM-BPM 仕様書 第18版 2024-04-01

4.8. 画面連携

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

4.8.1. 画面連携について

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

4.8.2. フォームキー

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

    IM-FormaDesignerと連携するための方式です。
    “forma:”プレフィックスと共に、IM-FormaDesignerにより作成されたアプリケーションIDを設定してください。
    また、”?”と共に、クエリ文字列の形式で、表示するIM-FormaDesignerのアプリケーションの履歴番号および、連携するプロセスインスタンス変数を指定できます。
    クエリパラメータとしてimfr_application_noを設定すると指定されたアプリケーション履歴のIM-FormaDesignerのアプリケーション実行画面が表示されます。
    imfr_application_noを設定しない場合、最新のアプリケーション履歴のIM-FormaDesignerのアプリケーション実行画面が表示されます。
    変数連携の詳細については フォームの値と変数の連携 を参照してください。
    以下のような形式です。
    forma:{APPLICATION_ID}?imfr_application_no={APPLICATION_NO}&inputVariableNames={variableName1}&resultVariableName={variableName2}

    注意

    IM-FormaDesignerのアプリケーションの履歴番号の指定について

    IM-FormaDesignerのアプリケーションの履歴番号は、2023 Autumn(Hollyhock)または、8.0.7-PATCH_001以降のバージョンから設定できます。
    指定できるIM-FormaDesignerのアプリケーションの履歴は、IM-FormaDesignerのアプリケーション実行画面の呼び出し時点で有効である必要があります。

    コラム

    IM-FormaDesignerのアプリケーションの履歴について

    IM-FormaDesignerのアプリケーションの履歴については、「IM-FormaDesigner 仕様書」-「アプリケーション履歴の仕様」を参照してください。
  • forward:{PATH}

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

    外部システムと連携するための方式です。
    “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. 検証

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

    プロセス定義に設定された権限の検証を行う必要があります。
    プロセス開始時の処理画面の場合、JavaEE開発モデルでは「BPMAuthorityHelper#canStartProcess」メソッドを使用することで、アカウントコンテキストのユーザにプロセス定義を開始する権限があるかを判定できます。(スクリプト開発モデルの場合は「bpm.BPMAuthorityHelper#canStartProcess」メソッドを使用してください。)

    履歴画面からの参照の場合、JavaEE開発モデルでは「BPMAuthorityHelper#canReferProcessInstance」メソッドを使用することで、アカウントコンテキストのユーザにプロセスインスタンス履歴を参照する権限があるかを判定できます。(スクリプト開発モデルの場合は「bpm.BPMAuthorityHelper#canReferProcessInstance」メソッドを使用してください。)
  • タスク画面の場合

    タスクに設定された権限の検証を行う必要があります。
    タスク処理時のタスク処理画面の場合、JavaEE開発モデルでは「BPMAuthorityHelper#canCompleteTask」メソッドを使用することで、アカウントコンテキストのユーザにアクティブなタスクを完了する権限があるかを判定できます。(スクリプト開発モデルの場合は「bpm.BPMAuthorityHelper#canCompleteTask」メソッドを使用してください。)

    履歴画面からの参照の場合、JavaEE開発モデルでは「BPMAuthorityHelper#canReferTask」メソッドを使用することで、アカウントコンテキストのユーザにタスク履歴を参照する権限があるかを判定できます。(スクリプト開発モデルの場合は「bpm.BPMAuthorityHelper#canReferTask」メソッドを使用してください。)

コラム

BPMAuthorityHelper」および「bpm.BPMAuthorityHelper」について

BPMAuthorityHelper」の詳細については「APIドキュメント」-「クラス BPMAuthorityHelper」を参照してください。
bpm.BPMAuthorityHelper」の詳細については「APIドキュメント」-「bpm.BPMAuthorityHelperオブジェクト」を参照してください。

4.8.6. IM-BloomMaker画面連携

IM-BloomMakerで作成したアプリケーション画面を開始イベント、または、ユーザタスクに対して設定したい場合、フォームキーとして”forward:”プレフィックスの後にアプリケーション画面のURLを指定してください。
このとき、IM-BloomMaker側にて事前にルーティング定義を作成し、ルーティングURLにアプリケーション画面のURLを設定しておく必要があります。
例: アプリケーション画面のURL foo/bar/baz と連携する場合
forward:/foo/bar/baz

コラム

ルーティング定義については、「 IM-BloomMaker for Accel Platform ユーザ操作ガイド 」-「 ルーティング 」を参照してください。

コラム

ユーザタスクに対するフォームキーには、EL式を含めることができます。
これにより、アプリケーション画面のURLを変数を用いて動的に指定することが可能です。
例: 変数 parameter の内容をアプリケーション画面のURLに含めて指定する場合
forward:/foo/bar/${parameter}

また、IM-BloomMaker側でルーティングURLに動的URLやワイルドカードを指定することで、この値をURLパラメータとして受け取ることが可能です。
例: 上記の例での変数 parameter の部分をURLパラメータとして、入力のキー名 id で受け取る場合のルーティングURL指定
foo/bar/{id}

入力の設定については、「 IM-BloomMaker for Accel Platform ユーザ操作ガイド 」-「 URLから入力値を設定する 」を参照してください。

4.8.6.1. パラメータ

IM-BloomMaker画面連携では、スクラッチ画面連携と同じく、プロセスの実行に必要なパラメータがリクエストパラメータとして受け渡されます。
詳細については「 パラメータ 」を参照してください。

IM-BloomMakerのアプリケーション画面の入力の設定にて、リクエストパラメータと同名のキー名の変数を定義することで、パラメータを受け取ってアプリケーションで利用することが可能です。
../../../_images/bloommaker_input_1.png
図:「デザイナ」 - 「変数タブ」 - 「入力」

4.8.6.2. 検証

IM-BloomMaker画面連携を行う場合、ルーティング定義に設定したJavaプログラムによる前処理にて、業務プロセスおよびタスクに対する権限の検証を行ってください。
詳細については「 検証 」を参照してください。

コラム

前処理の作成方法については、「 IM-BloomMaker for Accel Platform プログラミングガイド 」-「 前処理プログラム 」を参照してください。

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

ユーザタスク処理後、そのユーザタスクを実際に処理したユーザコードを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 設定ファイルリファレンス 」-「 システム変数の格納方式の設定 」を参照してください。