Formaのスクリプトから処理対象者を制御するには

このCookBookでは、スクリプトを利用してIM-Workflowの動的ノード(動的承認、縦配置、横配置)の処理対象者を制御する方法をご紹介します。
スクリプトから動的処理対象者設定機能を利用することで制御を行います。

【注意事項】このCookBookのサンプルアプリケーション・サンプルスクリプトは、クライアントタイプ「PC」を対象としております。

完成イメージ

サンプルアプリケーションでは、Formaのアプリ実行画面で選択したユーザが動的承認ノードの処理対象者として自動で設定されます。


1. 任意のユーザを選択します。
2. 申請処理を行います。
3. 1で選択したユーザの未処理一覧に案件が展開されていることを確認します。

[iframe width="100%" height="400" src="https://dev-portal.intra-mart.jp/imart/certification?im_user=ueda&im_password=ueda&im_url=im_workflow/user/apply/apply_direct/im_cookbook_110547_1"]

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。

e builder プロジェクト : im_cookbook_110547_forma_node_setting.zip
imm ファイル : im_cookbook_110547_forma_node_setting-1.0.0.imm

ローカル環境で表示させる場合は、以下のURLにアクセスしてください。
http://localhost:8080/imart/im_workflow/user/apply/apply_direct/im_cookbook_110547_1

なおベースURLである以下の部分は、環境に合わせて適宜変更してください。
http://localhost:8080/imart

レシピ

  1. 動的ノードを配置したフローを作成する
  2. 動的ノードを制御するスクリプトを作成する

1. 動的ノードを配置したフローを作成する

「動的ノード」とは?

「動的ノード」とは、フローの申請(処理開始)後に、処理対象者の追加・削除などを設定することができるノードです。以下の3種類のノードが提供されています。

  • 動的承認ノード : 申請者や承認者が指定した処理対象者が、案件の承認を行うことを示すノードです。このノードより前のノード(前ノード)の処理者は、このノードに対する編集(処理対象者の変更・ノードの削除・復活)ができます。

  • 横配置ノード : 申請者や承認者が、連続した動的承認ノードを指定した範囲内で作成することができることを示すノードです。配置するノード数の上限と下限はフロー定義で設定することができます。下限のノード数を0に設定すると、ノードを配置しない(削除する)ことができます。

  • 縦配置ノード : 申請者や承認者が、並行した動的承認ノードを指定した範囲内で示すノードです。配置するノード数の上限と下限はフロー定義で設定することができます。下限のノード数を0に設定すると、ノードを配置しない(削除する)ことができます。

動的ノードの配置(ルート定義)

動的ノードを配置したルート定義を作成します。今回は、3種類の動的ノードのうち、動的承認ノードを利用します。

  1. 「サイトマップ」- 「ワークフロー」-「マスタ定義」-「ルート定義」からルート定義一覧画面を表示し、「新規作成」のメニューを押下してください。ルート定義新規作成画面が表示されます。

route_add

  1. 「ルートID」「ルート名」を入力し、ルート定義の登録を行います。ルート定義バージョン一覧が表示されます。

  2. 「新規作成」メニューを押下し、ルート定義バージョン新規作成画面を表示してください。

route_version_add

  1. 「ルート詳細」タブを押下し、ルート詳細画面を表示してください。開始ノード・申請ノード・終了ノードが配置されています。

  2. 動的承認ノードを配置してください。

node_add

  1. 配置した動的承認ノードを押下し、ノード設定画面を表示してください。処理対象者設定の「指定なし」を選択してください。

non_target

  1. 申請ノードから動的承認ノードへ、動的承認ノードから終了ノードへ矢印を引きます。

relation_add

  1. 「基本情報」タブを押下し、バージョン期間を入力し、ルート定義バージョンを新規登録してください。
動的ノードの処理対象者を決定するノードの設定(フロー定義)

作成したルート定義を利用したフロー定義を作成してください。
コンテンツ定義については、FormaのWF連携設定により作成済みのものを利用してください。

  1. 「サイトマップ」- 「ワークフロー」-「マスタ定義」-「フロー定義」からフロー定義一覧画面を表示し、「新規作成」のメニューを押下してください。フロー定義新規作成画面が表示されます。

flow_add

  1. 「フローID」「フロー名」を入力し、フロー定義の登録を行います。フロー定義バージョン一覧が表示されます。

  2. 「新規作成」メニューを押下し、フロー定義バージョン新規作成画面を表示してください。

flow_version_add

  1. バージョン期間・コンテンツ・ルートを設定し、フロー定義バージョンを新規登録してください。コンテンツについてはFormaのWF連携設定により作成したコンテンツ定義を、ルートについては前章で作成したルート定義を設定してください。

  2. フロー定義バージョン編集画面が表示されます。「ルート詳細」タブを押下し、ルート詳細画面を表示してください。

route_detail

  1. 動的承認ノードの編集リンクを押下し、ノード設定画面を表示してください。

  2. 処理対象者設定可能ノードに対して、申請ノードを登録してください。

node_select

  1. フロー定義バージョンを更新してください。

2. 動的ノードを制御するスクリプトを作成する

「動的処理対象者設定機能」とは?

動的処理対象者設定機能は、動的ノードの処理対象者をシステム的に制御できる機能です。以下が実現可能です。

  • 処理対象者の決定 : 標準処理画面で処理対象者の設定が可能な動的ノードに対して、ビジネスロジックによって決定した処理対象者を反映する。

  • 処理対象者検索時の暗黙条件の指定:標準処理画面で処理対象者の設定が可能なノードにおいて、申請者・承認者が処理対象者を検索・設定する際の暗黙条件を指定し、検索結果の絞り込みを行う。

処理対象者の決定・処理対象者検索時の暗黙条件の指定を行うには、ユーザコンテンツ画面から標準処理画面を呼び出す際のリクエストパラメータにて指定してください。

詳細については、「IM-Workflow プログラミングガイド 8.9. 動的処理対象者設定機能」をご参照ください。

また、IM-BISで作成したフローの場合、外部連携機能を利用することでスクリプトを作成することなく、設定ベースで動的処理対象者設定機能と連携することが可能です。

詳細については、「IM-BIS for Accel Platform / 業務管理者 操作ガイド 7.18. 動的ノード(動的承認、縦配置、横配置)の処理対象者条件を設定する」をご参照ください。

処理対象者の決定

動的処理対象者設定機能のうち、処理対象者を自動で設定する場合のスクリプトの書き方をご紹介します。

標準処理画面が呼び出される際に(申請・承認ボタンが押下されるタイミング)、動的ノードの処理対象者の設定内容をパラメータ「imwNodeSetting」で送信してください。

  1. 動的承認ノードが対象の場合、設定内容は以下のようなオブジェクト構造で作成してください。

    var nodeSetting = {
         "DCNodeSetting" : {
             "dynamic_001" : { // 設定対象のノード ID をプロパティ名とする
                 "displayFlag" : false, // 画面表示をしない
                 "processTargetConfigs" : [ // 任意の処理対象者を指定
                 {
                     // ユーザ:maruyama
                     "extensionPointId" : "jp.co.intra_mart.workflow.plugin.authority.node.dynamic",
                     "pluginId" : "jp.co.intra_mart.workflow.plugin.authority.node.dynamic.user",
                     "parameter" : "maruyama"
                     },
                 {
                     // ロール:IM-Workflow ユーザ
                     "extensionPointId" : "jp.co.intra_mart.workflow.plugin.authority.node.dynamic",
                     "pluginId" : "jp.co.intra_mart.workflow.plugin.authority.node.dynamic.role",
                     "parameter" : "im_workflow_user"
                     }
                 ]
             }
         }
    };
    
  1. 設定内容のオブジェクトはJSON文字列に変換した上でパラメータ「imwNodeSetting」に指定してください。

    ImJson.toJSONString(nodeSetting);
    
動的ノードで利用可能な処理対象者プラグイン

処理対象者は、IM-Workflowの処理対象者プラグイン(拡張ポイントID・プラグインID・パラメータ)形式で指定してください。

  1. 拡張ポイントID

以下のコード値を指定してください。すべての動的ノード(動的承認・縦配置・横配置ノード)で利用可能です。


    jp.co.intra_mart.workflow.plugin.authority.node.dynamic
    
  1. プラグインID・パラメータ

ここでは、よく利用されるプラグイン情報をご紹介します。
動的ノードで利用可能な全てのプラグイン情報については、以下のドキュメントをご参照ください。

「IM-Workflow 仕様書 3.9.2.2. 処理権限者プラグイン一覧 動的承認ノード、縦配置ノード、横配置ノード」

「IM-Workflow 管理者操作ガイド 処理対象者プラグイン設定ファイル一覧 動的承認・縦配置・横配置ノード」

ユーザ

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.user
パラメータ
ユーザーコード

組織

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.department
パラメータ
会社コード^組織セットコード^組織コード

ロール

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.role
パラメータ
ロールID

パブリックグループ

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.public_group
パラメータ
パブリックグループセットコード^パブリックグループコード

役職

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.post
パラメータ
会社コード^組織セットコード^役職コード

役割

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.public_group_role
パラメータ
パブリックグループセットコード^役割コード

組織+役職

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.department_and_post
パラメータ
会社コード^組織セットコード^組織コード|会社コード^組織セットコード^役職コード

パブリックグループ+役割

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.public_group_and_public_group_role
パラメータ
パブリックグループセットコード^パブリックグループコード|パブリックグループセットコード^役割コード

組織+ロール

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.department_and_role
パラメータ
会社コード^組織セットコード^組織コード|ロールID

パブリックグループ+ロール

プラグインID
jp.co.intra_mart.workflow.plugin.authority.node.dynamic.public_group_and_role
パラメータ
パブリックグループセットコード^パブリックグループコード|ロールID
(サンプルスクリプト)処理対象者の決定

画面アイテム「ユーザ選択」の入力値を元にリクエストパラメータ「imwNodeSetting」を生成し、動的承認ノードの処理対象者にセットするサンプルコードをご紹介します。


// パラメータ
var inputId = "userCd1"; // 画面アイテム「ユーザ選択」のフィールド識別ID
var userCd = $("input[name=" + inputId + "]").val();
var nodeId = "dynamic_001"; // 動的承認ノードのノードID

// リクエストパラメータ「imwNodeSetting」を作成します。
var nodeSetting = {};
nodeSetting.DCNodeSetting = {};
nodeSetting.DCNodeSetting[nodeId] = {};
nodeSetting.DCNodeSetting[nodeId].displayFlag = false; // 画面表示をしない
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs = [];
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs[0] = {};
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs[0].extensionPointId = "jp.co.intra_mart.workflow.plugin.authority.node.dynamic";
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs[0].pluginId = "jp.co.intra_mart.workflow.plugin.authority.node.dynamic.user";
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs[0].parameter = userCd;
var nodeSettingJson = ImJson.toJSONString(nodeSetting);

// リクエストパラメータ「imwNodeSetting」をフォームにセットします。
if($('input[name=imwNodeSetting]').size() === 0 ){
  $("#form").append('');
}
$('input[name=imwNodeSetting]').val(nodeSettingJson);

// 標準処理画面を呼び出します。
sendRegistData();
処理対象者検索時の暗黙条件の指定

動的処理対象者設定機能のうち、ユーザが選択できる処理対象者の範囲を限定する場合のスクリプトの書き方をご紹介します。

標準処理画面が呼び出される際に(申請・承認ボタンが押下されるタイミング)、申請者・処理者が処理対象者を検索する際の暗黙条件をパラメータ「imwNodeSetting」で送信してください。
暗黙条件を指定した場合は、申請者・処理者が選択できる処理対象者の指定方法はユーザ検索のみです。

  1. 動的承認ノードが対象の場合、設定内容は以下のようなオブジェクト構造で作成してください。

    var nodeSetting = {
         "DCNodeSetting" : {
         "dynamic_001" : { // 設定対象のノード ID をプロパティ名とする
             "displayFlag" : true, // 画面表示をする
             "searchCondition" : { // 処理対象者の検索時条件を指定
                 "criteria" : { // 暗黙条件を指定
                     "department_set_list" : [
                         {
                             // 組織:サンプル部門01
                             "company_cd" : "comp_sample_01",
                             "department_set_cd" : "comp_sample_01",
                             "department" : {
                             "department_cd" : "dept_sample_10",
                             "compare" : "eq"
                             }
                         }
                     ]
                 }
             },
             "processTargetConfigs" : [] // 処理対象者を指定(明示的に 0 件指定)
             }
         }
    };
    
  1. 設定内容のオブジェクトはJSON文字列に変換した上でパラメータ「imwNodeSetting」に指定してください。

    ImJson.toJSONString(nodeSetting);
    

検索条件は、IM-共通マスタのユーザ検索画面(キーワード タブ)に対する暗黙条件を指定可能です。検索条件に利用できる暗黙条件の詳細については、
「IM-共通マスタ 検索画面起動引数一覧」をご参照ください。

【注意事項】暗黙条件に「組織分類」・「パブリックグループ分類」「ユーザ分類」を利用することはできません。

(サンプルスクリプト)処理対象者検索時の暗黙条件の指定

画面アイテム「所属組織選択」の入力値を元にリクエストパラメータ「imwNodeSetting」を生成し、動的承認ノードの処理対象者を検索する際の暗黙条件にセットするサンプルコードをご紹介します。

サンプルコードは、画面アイテム「ボタン(イベント)」への記述を想定しています。



// パラメータ
var departmentField = "departmentCd1"; // 画面アイテム「所属組織選択」のフィールド識別ID
var departmentSetField = departmentField + "_s"; // 画面アイテム「所属組織選択」のフィールド識別ID
var companyField = departmentField + "_c"; // 画面アイテム「所属組織選択」のフィールド識別ID
var nodeId = "dynamic_002"; // 動的承認のノードID

var departmentCd = $('input[name=' + departmentField + ']').val();
var departmentSetCd = $('input[name=' + departmentSetField + ']').val();
var companyCd = $('input[name=' + companyField + ']').val();

// リクエストパラメータ「imwNodeSetting」を作成します。
var searchCondition = {};
searchCondition.company_cd = companyCd;
searchCondition.department_set_cd = departmentSetCd;
searchCondition.department = {};
searchCondition.department.department_cd = departmentCd;
searchCondition.department.compare = "eq";

var nodeSetting = {};
nodeSetting.DCNodeSetting = {};
nodeSetting.DCNodeSetting[nodeId] = {};
nodeSetting.DCNodeSetting[nodeId].displayFlag = true; // 画面表示
nodeSetting.DCNodeSetting[nodeId].processTargetConfigs = [];
nodeSetting.DCNodeSetting[nodeId].searchCondition = {};
nodeSetting.DCNodeSetting[nodeId].searchCondition.criteria = {};
nodeSetting.DCNodeSetting[nodeId].searchCondition.criteria.department_set_list = [];
nodeSetting.DCNodeSetting[nodeId].searchCondition.criteria.department_set_list[0] = searchCondition;
var nodeSettingJson = ImJson.toJSONString(nodeSetting);

// リクエストパラメータ「imwNodeSetting」をフォームにセットします。
if($('input[name=imwNodeSetting]').size() === 0 ){
  $("#form").append('');
}
$('input[name=imwNodeSetting]').val(nodeSettingJson);

// 標準処理画面を呼び出します。
sendRegistData();