3.2
チュートリアル(ワークフロー)

iPLAssのワークフロー機能を利用し、さまざまな要件に対応するフローを作成可能です。 ここでは準備編、基本編、実践編に分け、ワークフローの作成方法を説明していきます。

  • 準備編
    ワークフローの概要およびiPLAssでのワークフローを簡単に説明していきます。

  • 基本編
    各イベントの動作および設定方法について、簡単なワークフローを作成しながら説明していきます。

  • 実践編
    基本編で説明した内容を利用し、より現実的なワークフローの作成を行います。

1. 前提条件

本チュートリアルは以下を前提条件としています。 チュートリアルを進めるにあたり、以下のいずれかを実施し、Webアプリケーションが動作する環境を準備してください。

  • Install and Run

  • Eclipse開発環境の構築

  • Dockerで環境構築

  • 本チュートリアルは、Enterprise Editionでのみ実施可能です。

    オープンソース版の環境をEnterprise Editionにアップグレードする場合は、Enterprise Editionへのアップグレードを参照してください。

    Dockerの場合、Enterprise Edition版のDockerイメージを利用してください。

  • User Admin(デフォルトの管理者ユーザー)でGEM画面を操作する場合は、「メニューの変更」から「DEFAULT」のメニューに切り替えて操作してください。本チュートリアルでは、メニュー等の権限設定については割愛しています。

2. 準備編

2.1. ワークフロー概要

ワークフローとは

ワークフローとは業務上の一連の処理手続きのことを指します。
例えば、『社員が休暇を申請し、上司がそれを承認し、社員は上司の承認を確認して休暇を取る』 といった流れも単純ですがワークフローとなります。

この流れを図にすると下記のようになります。

description flow sample
iPLAssのワークフロー

iPLAssのワークフローは、「ワークフローアイテム(以降、Itemと記載)」というオブジェクトで構成されています。 Itemは、Activity(Task) Event Gateway Flow Variable という5つのカテゴリに分類されます。 各カテゴリの簡単な説明は下表の通りです。

カテゴリ 説明

Activity(Task)

処理(タスク)を定義するItemのカテゴリです。 上図の「休暇申請」や「上司承認」の部分にあたります。

Event

処理のきっかけや終了を定義するItemのカテゴリです。 上図の「完了」の部分にあたります。

Gateway

フローの分岐、または結合を定義するItemのカテゴリです。

Flow

処理順序を定義するItemのカテゴリです。上図の矢印にあたる部分です。

Variable

フロー内で共有する変数を定義するItemのカテゴリです。

各カテゴリには、それぞれ数種類のItemが存在します。Itemの詳細については、後述の各Itemの説明を参照してください。

2.2. 各Itemの説明

Activity(Task)

CommandTask

iPLAssのコマンドを呼び出すことができるタスクです。 ワークフロー内でロジカルな処理を行いたい場合に利用します。

icon activity command
UserTask

設定したユーザーに対してタスクを割り当て、回答結果で処理を振り分けるタスクです。 ユーザーAを割り当て、結果に承認、差し戻しをセットすることで、本処理に到達した際に、ユーザーAが承認、もしくは差し戻しを実行することで後続処理を進める等の利用が可能です。

icon activity user
UpdateEntityTask

後述するVariableItemを指定し、対象Entityの更新を行えます。

icon activity update
MailTask

MailTemplateを指定し、メール送信するタスクです。

icon activity mail
SubProcess

定義済みのWorkflowをSubProcessとして呼び出すことが可能です。 なお、本チュートリアルでは扱いません。

icon activity subprocess

Event

StartEvent

ワークフローが起動した際に一番初めに実行されるイベントです。 このイベントが起動することでワークフローの状態が「ACTIVE」となります。 ワークフローには必ず1つだけ定義する必要があります。

icon event start
EndEvent

ワークフローを終了させる為のイベントです。 Workflowの状態(ステータス)は「COMPLETED」になります。

icon event end
IntermediateEvent

ワークフロー履歴への出力用イベントです。 特にこのイベントによる処理は実行されず、続けて後続のフローに遷移します。

icon event intermediate
IntermediateTimerEvent

タイマー機能をもつイベントです。 後続イベントの実行日時や実行遅延時間を指定することができます。

icon event intermediatetimer
TerminateEvent

ワークフローをキャンセルさせる為のイベントです。 EndEventとの違いは完了後のステータスとなります。 Terminateが実行されるとWorkflowの状態(ステータス)は「CANCELED」になります。

icon event terminate

Gateway

SplitParallelGateway

分岐処理で利用します。 後続の全てのSequenceFlowを実行します。

icon gateway splitparallel
SplitExclusiveGateway

分岐処理で利用します。 後続のいずれかのSequenceFlowを実行します。 なお、本チュートリアルでは扱いません。

icon gateway splitexclusive
JoinAsyncGateway

結合処理で利用します。 前段の処理のいずれかが到達した時点で後続処理を実施します。 前段の処理が到達するたびに実行されます。

icon gateway joinasync
JoinSyncGateway

結合処理で利用します。 前段の処理がすべて完了した時点で後続処理を実施します。

icon gateway joinsync

Flow

SequenceFlow

Activity(Task)、Event、Gatewayの各Itemを結び付ける為に利用します。 SequenceFlowで結んだ順番に処理が実行されます。 遷移元のItemの設定次第で、条件を加え、分岐処理が可能になります。

icon flow sequence

Variable

VariableItem

Workflow内で参照するオブジェクトを格納することができます。 Entityからワークフローを起動する場合、この変数を利用することで登録したEntityデータをワークフロー内で利用することができます。 また、Entityからワークフローを起動する際の、プロセス実行中のメッセージや、ボタンの表示可否を有効にする場合、この変数の設定が必須となります。

icon variable item

2.3. 操作方法

AdminConsoleでWorkflowを作成する上で必要な操作となります。 これら操作を踏まえ、基本編をはじめて下さい。
また、その他MetaDataの基本操作についてはチュートリアル(ベーシック)をご確認ください。

Workflowの作成

AdminConsoleを開き、他MetaData同様、Workflowで右クリックし、「Workflowを作成する」をクリックします。

operation create workflow

作成するWorkflowの名前をName項目に設定し、 Save ボタンをクリックします。

operation createworkflowdialog

Workflowの編集

作成したWorkflowをダブルクリックすると空のWorkflow設定画面が表示されます。

operation edit workflow

右上の赤枠のアイコンをクリックすると、水色のグリッド線が非表示となります。 もう一度クリックすると再表示されます。

画面左ペインからItemをドラッグ&ドロップしてWorkflowを組み立てていきます。 配置した各ItemをSequenceFlowで接続していきます。 SequenceFlowは接続対象Item付近にドラッグすることで吸着します。

operation drop item

対象Itemをクリックし選択状態にします。 選択したItemの設定項目が画面右側に表示されます。 右上の「×」アイコンをクリックすることで対象Itemの削除が行えます。 対象Itemを右クリックすることでも削除が可能です。

operation setting item1

SequenceFlowを右クリックすると「Itemを削除する」以外に「Point数を変更する」が選択可能です。 3Pointにすると、SequenceFlowを折り曲げることが可能です。

operation setting item2

タスク一覧

ユーザーに割り当てられたタスク一覧をGEMのTop画面に表示するためのパーツが用意されています。 基本編、実践編ともに、ワークフロー終了やタスクの実行履歴を確認するにあたり、タスク一覧を利用します。 下記の手順に従い、タスク一覧を表示可能な状態にしておいてください。

タスク一覧を有効にする

デフォルトではタスク一覧は表示されません。 AdminConsoleのTopView設定を行う必要があります。

  • TopViewの設定
    AdminConsoleのTopViewにはあらかじめ「DEFAULT」というデータが登録されています。

    tasklist tree

    ダブルクリックすると下記画面が表示されます。 画面右側のItemsにある「Workflow」フォルダの中の「UserTask List」をMainAreaにドラッグ&ドロップして下さい。 「UserTask List」が追加された状態になります。

    tasklist topview
  • UserTask Listの設定
    UserTask Listの設定画面は下図のようになっています。 今回はUserTaskViewの設定をします。 パーツの設定画面を開き、「UserTaskView Setting」をクリックします。

    tasklist usertaskviewsetting
    tasklist tasklistsetting

    デフォルトだと表示項目が全てチェックされていない状態です。 今回はワークフロー履歴や担当割り当て状況等ワークフローの機能を確認したいので、全てチェックをいれてください。

    最後に「OK」をクリックし、Topview自体の Save ボタンをクリックし保存することで設定が完了します。

  • 表示確認
    トップ画面にタスク一覧が表示されます。

    tasklist tasklist

3. 基本編

基本編ではワークフローの機能を単純な処理を例に説明していきます。

3.1. 単純な承認

ここでは主にUserTaskの利用方法について説明します。 あるユーザーがデータを登録し、そのデータを確認して承認がほしい場合のフローを考えてみます。

simple flow

事前準備

Userの作成

以下を参考に、ワークフローの承認を行うユーザを用意してください。

項目名 設定値

ユーザID

authorizer@workflow

承認者

メールアドレス

workflow_authorizer@test.jp

所属グループ

GemUser

アカウントポリシー

標準

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow001

displayName

BasicWorkflow001

description

単純な承認

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

simple workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • VariableItem

    simple setting variable
    項目名 設定値

    name

    variableItem1

    displayName

    VariableItem1

    ※nameの値をEntityViewのワークフロー起動時の変数に設定することで、対象EntityのデータをWorkflowで利用可能となります。

  • StartEvent

    simple setting start
    項目名 設定値

    name

    startEvent1

    displayName

    StartEvent1

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    name

    endEvent1

    displayName

    EndEvent1

    historyLogging

    true

  • UserTask

    simple setting user
    項目名 設定値

    name

    userTask1

    displayName

    UserTask1

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule
      assignRuleを設定します。 assignRuleでは、誰がこのUserTaskを処理するかを設定します。

      simple setting assignrule
      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus
      taskResultStatusを設定します。 taskResultStatusを設定することで、承認、否認による処理の分岐が可能になります。 今回は承認だけとなります。

      simple setting taskresultstatus
      項目名 設定値

      name

      ok

      displayName

      承認

      今回は分岐させる必要がないので、ok(承認)のみ設定します。 下図の通り、ここで設定した値がワークフロー起動後の画面でボタンとして表示されます。 「Primary」にチェックを入れると、ボタンが強調表示になります。

      simple setting taskresultstatus button

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。
次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity001」というEntityを作成してください。

  • DetailFormViewの設定
    作成した「basic.BasicWorkflowEntity001」を右クリックして「DetailLayout」を開き、 標準ロード ボタンをクリックします。
    詳細画面の歯車アイコンをクリックすると「DetailFormView Setting」の設定画面が表示されるので、 画面下部にあるワークフロー設定に以下を設定し、作成したWorkflowを追加した後、 保存 ボタンをクリックして保存してください。

    simple setting detailview
    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow001

    ワークフロー変数名

    variableItem1

    ボタン表示名

    単純承認ワークフロー起動

    プロセス実行中のメッセージ

    単純承認ワークフロー実行中です。

    ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし、GEMのEntity登録画面から「BasicWorkflowEntity001」の検索画面を開き、 新規作成 ボタンを押して任意のデータを登録してください。 登録したEntityデータの詳細画面を開くと、単純承認ワークフロー起動 というボタンが表示されています。
このボタンはEntityViewで設定したボタン名となっています。 このボタンをクリックすることでワークフローが起動します。

ワークフローの起動方法は、①プログラムからの起動、②GEM画面からの起動の2パターンがあります。詳細は、利用方法を参照してください。
本チュートリアルでのワークフロー起動方法は、便宜上、一部手順を除いてGEM画面からの起動パターン(先の手順でDetailFormViewに設定したワークフロー設定の機能)を使用しています。
simple startworkflow

ワークフローの開始メッセージと同時に、EntityViewで設定したプロセス実行中のメッセージが表示されます。

Workflowのステータス確認

ユーザーID: authorizer@workflow でログインし、 トップ画面のタスク一覧を確認すると、WorkflowのassignRuleに基づいて割り当てがなされた状態になっています。

simple tasklist
UserTaskの操作

割り当てられたUserTaskを操作し、承認処理をしてみます。 タスク一覧にある「編集」リンクをクリックします。 下図が表示されます。 必要に応じてコメントを記入し、 承認 ボタンをクリックしてください。 この 承認 ボタンはWorkflowのtaskResultStatusで設定した値となります。

simple detail

承認が完了すると、この画面がリロードされます。 各項目を確認してみましょう。承認処理が完了していることが分かります。

simple apploval

以上が単純な承認のWorkflowとなります。

3.2. 差し戻し

ここではUserTaskの結果を利用した分岐処理を説明します。 いわゆる差し戻しについての説明となります。 あるユーザーがデータを登録した上で、申請を行います。 承認者はデータを確認し、問題なければ承認、問題があれば差し戻しを実行します。

remand flow

事前準備

Userの作成

以下を参考に、ワークフローの申請を行うユーザーを用意してください。

項目名 設定値

ユーザーID

user001@workflow

ユーザー001

メールアドレス

user001@test.jp

所属グループ

GemUser

アカウントポリシー

標準

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow002

displayName

BasicWorkflow002

description

差し戻し

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

remand workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • StartEvent

    simple setting start
    項目名 設定値

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    historyLogging

    true

  • UserTask1

    remand setting task1
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      user001@workflow

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      申請

  • UserTask2

    remand setting task2
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名

      設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus
      今回は 承認 ボタンと 差し戻し ボタンが必要なのでそれぞれ登録します。

      項目名 設定値

      name

      ok

      displayName

      承認

      項目名 設定値

      name

      ng

      displayName

      差し戻し

      正しく設定されていると下図のような状態になります。

      remand setting taskresultstatus
  • SequenceFlow(UserTask2 → EndEvent1)

    remand setting flow1

    承認の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ok

  • SequenceFlow(UserTask2 → UserTask1)

    remand setting flow2

    差し戻しの場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ng

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity002」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity002」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow002

    ワークフロー変数名

    variableItem1

    ボタン表示名

    差し戻しワークフロー起動

    プロセス実行中のメッセージ

    差し戻しワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

ユーザーID: user001@workflow でログインしなおし、タスク処理の編集画面を表示してください。 申請可能となっていますので、 申請 ボタンをクリックします。

remand detail

申請が終ったらユーザーID: authorizer@workflow でログインしなおしてください。 タスク一覧に先ほど申請されたタスクの承認依頼がきています。 編集リンクをクリックし、承認または差し戻しを行います。

remand tasklist

今回は 承認差し戻し の2つのボタンが表示されています。 タスク対象データを確認し、承認可能かどうかデータを確認するような利用法が想定されます。 ここで「差し戻し」をクリックします。

remand detail remand

差し戻しが終わったらユーザーID: user001@workflow でログインしなおし、タスク一覧に先ほど差し戻されたタスクがあることを確認します。 編集リンクをクリックし、再度申請を行います。

remand tasklist2

再申請が終ったらユーザーID: authorizer@workflow でログインしなおしてください。 タスク一覧に先ほど申請されたタスクの承認依頼がきています。 編集リンクをクリックし、今度は承認してみましょう。

承認後ワークフロー履歴を確認すると下図のようになっていると思います。 処理結果が差し戻しになり、再申請が行われた後承認されたことが確認出来ます。

remand history

以上が差し戻しのWorkflowとなります。

3.3. 承認と同時にメール送信

ここでは主にメール送信方法について説明します。 あるユーザーがデータを登録した上で、申請を行います。同時に確認してほしいユーザーへメールを送信します。

mail flow

事前準備

メールテンプレートの作成

「basic/SimpleWorkflow003」というMailTemplateを準備しておいてください。 件名、メッセージ等は任意の文字列を入力してください。

mtp-service-config.xmlの設定

ローカルでメールの確認がしたい場合のみ「mtp-service-config.xml」の設定が必要になります。 下記の通りMailServiceのlistenerを有効にしてください。

<!-- ■ for develop only (additional="true) ■ -->
<!-- 送信メールをデバッグ出力する場合、以下を有効にしてください。 -->
<!--
<property name="listener" class="org.iplass.mtp.mail.listeners.LoggingSendMailListener" additional="true"/> (1)
-->
1 コメント化を解除します。ただし、開発環境での利用に留めてください。

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow003

displayName

BasicWorkflow003

description

メール送信

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

mail workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • UserTask1

    mail setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      申請と送信

  • MailTask1

    mail setting task2
    項目名 設定値

    mailTemplateName

    basic/SimpleWorkflow003

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    test@test.jp

    • to
      送信先を設定します。 本チュートリアルでは実際に送信はせず、ログでの確認となるため、「test@test.jp」と設定します。

      mail setting to

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity003」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity003」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow003

    ワークフロー変数名

    variableItem1

    ボタン表示名

    メール送信ワークフロー起動

    プロセス実行中のメッセージ

    メール送信ワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

申請と送信 ボタンをクリックします。 ワークフローは完了状態になり、メールが送信されます。 ローカル環境ではEclipseのコンソールにメール内容がログ出力されます。

mail send
11:32:33.257 [http-nio-8080-exec-1] DEBUG 38 63312 CompositeCommand  o.i.m.m.l.LoggingSendMailListener -   From:test@contract.dentsusoken.com ReplyTo:test@contract.dentsusoken.com To:(1)test@test.jp; Cc:(0) Bcc:(0) Subject:メール送信サンプル FileName: PlainMessage:メール送信サンプル HtmlMessage:

以上がメール送信処理を含むWorkflowとなります。

3.4. 承認と同時にEntity操作を実施

ここでは主にEntity操作方法について説明します。 あるユーザーがデータを登録した上で、申請を行います。 同時にEntityデータの更新を行います。

entity flow

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow004

displayName

BasicWorkflow004

description

Entity操作

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

entity workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • UserTask1

    entity setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認して更新

  • UpdateEntityTask1

    entity setting task2
    項目名 設定値

    variableName

    variableItem1

    updateRule

    項目名 設定値

    タイプ

    Property

    プロパティ名

    description

    更新値

    更新ワークフローサンプル

    • updateRule
      本ワークフローが実行され、正常に完了した際には対象データのdescriptionが更新値にて更新されています。

      entity updaterule

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity004」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity004」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow004

    ワークフロー変数名

    variableItem1

    ボタン表示名

    Entity操作ワークフロー起動

    プロセス実行中のメッセージ

    Entity操作ワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

更新する前後のデータを「BasicWorkflowEntity004」の検索画面から検索して確認してみましょう。 承認して更新 ボタンをクリックすることにより、説明項目がupdateRuleで設定した値に更新されます。

entity detail

ワークフロー完了後に更新されていることを確認しましょう。

以上がEntity操作を含むWorkflowとなります。

3.5. 承認と同時にカスタムロジック処理を実施

ここでは主にカスタムロジックを利用する方法について説明します。 あるユーザーがデータを登録した上で、申請を行います。 同時にカスタムロジックの実行を行います。

custom flow

事前準備

Commandの作成

「basic/BasicWorkflowCommand005」というCommandを準備しておいてください。

コマンドの作成はAdminConsole画面で「Command」を選択し、右クリックメニューから「コマンドを作成する」を選択します。 下記の通りCommandを作成します。

項目名 設定値

name

basic/BasicWorkflowCommand005

displayName

BasicWorkflowCommand005

type

Script

custom edit command

作成したCommandを開き、 Edit ボタンから下記の内容を設定後、 Save ボタンをクリックして保存してください。

import org.iplass.mtp.ManagerLocator;
import org.iplass.mtp.entity.Entity;
import org.iplass.mtp.entity.EntityManager;
import org.iplass.mtp.entity.GenericEntity;

EntityManager em = ManagerLocator.manager(EntityManager.class);

Entity e = new GenericEntity("basic.BasicWorkflowEntity005");
e.setName("create by CustomLogic");
em.insert(e);

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow005

displayName

BasicWorkflow005

description

カスタムロジック処理

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

custom workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • UserTask1

    custom setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認してカスタム処理

  • CommandTask1

    custom setting task2
    項目名 設定値

    commandConfig

    basic/BasicWorkflowCommand005

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity005」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity005」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow005

    ワークフロー変数名

    variableItem1

    ボタン表示名

    カスタムロジック処理ワークフロー起動

    プロセス実行中のメッセージ

    カスタムロジック処理ワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

承認してカスタム処理 ボタンをクリックします。

custom detail

「BasicWorkflowEntity005」の検索画面から登録されているデータを検索し、 カスタムロジックによってデータが追加されていることを確認しましょう。

custom log

以上がカスタムロジック処理を含むWorkflowとなります。

3.6. スプリット

ここでは主にGateway(Split)の利用方法について説明します。 あるユーザーがデータを登録すると同時にメール送信と、そのデータの申請タスクが起動します。 申請タスクが実行されると終了します。

split flow

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow006

displayName

BasicWorkflow006

description

スプリット

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

split workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • StartEvent

    simple setting start
    項目名 設定値

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    historyLogging

    true

  • SplitParallelGateway

    icon gateway splitparallel
    項目名 設定値

    historyLogging

    true

  • JoinSyncGateway

    icon gateway joinsync
    項目名 設定値

    historyLogging

    true

  • IntermediateEvent1

    icon event intermediate
    項目名 設定値

    historyLogging

    true

  • IntermediateEvent2

    icon event intermediate
    項目名 設定値

    historyLogging

    true

  • UserTask1

    split setting task1
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      申請

  • MailTask1

    split setting task2
    項目名 設定値

    historyLogging

    true

    mailTemplateName

    basic/SimpleWorkflow003

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    test@test.jp

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity006」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity006」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow006

    ワークフロー変数名

    variableItem1

    ボタン表示名

    スプリットワークフロー起動

    プロセス実行中のメッセージ

    スプリットワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。 起動と同時にメールが送信されることを確認してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

申請 ボタンをクリックします。

split detail

分岐したすべてのフローが実行されているかワークフロー履歴から確認します。

split history

以上がスプリットを含むWorkflowとなります。

3.7. タイマー

ここでは主にTimerの利用方法について説明します。 あるユーザーがデータを登録し、そのデータに対して確認が実施された数分後にメールが送信されます。

timer flow

事前準備

タイマー利用の設定

mtp-service-config.xmlに設定が必要になります。 下記の通りuseQueueをtrueにして下さい。
設定変更を行った際はTomcatサーバの再起動が必要になります。

<!-- AsyncTask queue and counter setting -->
<service>
  <interface>org.iplass.mtp.impl.async.rdb.RdbQueueService</interface>
  <!-- if use async rdb service set to true -->
  <property name="useQueue" value="true" />
</service>

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

basic/BasicWorkflow007

displayName

BasicWorkflow007

description

タイマー

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

timer workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • StartEvent

    simple setting start
    項目名 設定値

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    historyLogging

    true

  • UserTask1

    timer setting task1
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名

      設定値

      name

      post

      displayName

      申請3分後にメール

  • IntermediateTimerEvent1

    timer setting event
    項目名 設定値

    historyLogging

    true

    timer

    項目名 設定値

    Timer Type

    Delay

    Timer Unit

    Minuites

    Delay Expression

    "3"

  • MailTask1

    timer setting task2
    項目名 設定値

    historyLogging

    true

    mailTemplateName

    basic/SimpleWorkflow003

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    test@test.jp

以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを利用するための準備となります。

  • Entityの作成
    「basic.BasicWorkflowEntity007」というEntityを作成してください。

  • DetailFormViewの設定
    「basic.BasicWorkflowEntity007」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow007

    ワークフロー変数名

    variableItem1

    ボタン表示名

    タイマーワークフロー起動

    プロセス実行中のメッセージ

    タイマーワークフロー実行中です。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にワークフローを起動してください。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

申請3分後にメール ボタンをクリックします。

timer detail

3分後にメールが送信されることを確認します。

timer history

以上がタイマーを含むWorkflowとなります。

4. 実践編

実践編ではワークフローの複数の機能を組み合わせて複雑な処理を組み立てていきます。

4.1. 問合せ管理

問合せがあった場合に、対応及び、上長の対応確認を実施するフローを実現します。 簡単な流れは以下のようになります。

inquiry flow

事前準備

Entityの作成

「practice.PracticeWorkflowEntity001」というEntityを作成してください。

  • Properties
    作成したEntityを開き、Propertiesタブから以下のプロパティを追加してください。

inquiry property
Name Display Name Type その他

inquiryNo

お問合せ番号

AutoNumber

項目 設定値

書式(Script)

in-${yyyy}${MM}-${nextVal()}

familyName

String

firstName

String

familyNameKana

セイ

String

firstNameKana

メイ

String

mail

メール

String

content

内容

LongText

kind

種別

Select

LocalValueに以下の値を追加します。

Value Display Name

1

注文について

2

支払いについて

3

受け取りについて

4

その他

inquiryStatus

問合せステータス

Select

LocalValueに以下の値を追加します。

Value Display Name

1

未対応

2

対応中

3

対応完了

4

終了

  • EventListeners
    EventListenersタブから、以下の設定を追加してください。

inquiry listener
Type Script Events

Script

下記を参照

afterInsert

import java.util.LinkedHashMap;
import java.util.Map;
import org.iplass.mtp.workflow.WorkflowManager;

def wm = manager(WorkflowManager.class);

Map<String, Object> parameters = new LinkedHashMap<String, Object>();
parameters.put("variableItem1", entity);

wm.startProcess("practice/PracticeWorkflow001", parameters);

以上でEntityの設定は完了です。 Save ボタンをクリックして保存してください。
この設定により、Entityへのデータ登録後に自動的にWorkflowが起動するようになります。

Userの作成

以下のユーザーを用意してください。 作成済のユーザーについては、改めて用意する必要はありません。

ユーザーID メールアドレス 所属グループ アカウントポリシー

user001@workflow

ユーザー001

user001@test.jp

GemUser

標準

user002@workflow

ユーザー002

user002@test.jp

GemUser

標準

user003@workflow

ユーザー003

user003@test.jp

GemUser

標準

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

practice/PracticeWorkflow001

displayName

PracticeWorkflow001

description

問合せ管理

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

inquiry workflow
各Itemの設定

各Itemの設定をしていきます。記載のない項目名については設定不要です。

  • StartEvent

    simple setting start
    項目名 設定値

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    historyLogging

    true

  • UserTask1

    inquiry setting task1
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    userTaskName

    お問合せ対応:${variableItem1.inquiryNo}

    inquiry setting usertaskname
    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      EQL

      ID取得ロジック

      state = 'V'

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      完了

  • UpdateEntityTask1

    inquiry setting task2
    項目名 設定値

    historyLogging

    true

    variableName

    variableItem1

    updateRule

    項目名 設定値

    タイプ

    property

    プロパティ名

    inquiryStatus

    更新値

    3

  • UserTask2

    inquiry setting task3
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    userTaskName

    お問合せ対応の承認:${variableItem1.inquiryNo}

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ANYONE

      完了条件

      ANYONE

      定義形式

      EQL

      ID取得ロジック

      state = 'V'

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認

      項目名 設定値

      name

      ng

      displayName

      差し戻し

  • SequenceFlow(UserTask2 → UpdateEntityTask3)

    inquiry setting flow1

    承認の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ok

  • SequenceFlow(UserTask2 → UpdateEntityTask2)

    inquiry setting flow2

    差し戻しの場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ng

  • UpdateEntityTask2

    inquiry setting task4
    項目名 設定値

    historyLogging

    true

    variableName

    variableItem1

    updateRule

    項目名 設定値

    タイプ

    property

    プロパティ名

    inquiryStatus

    更新値

    2

  • UpdateEntityTask3

    inquiry setting task5
    項目名 設定値

    historyLogging

    true

    variableName

    variableItem1

    updateRule

    項目名 設定値

    タイプ

    property

    プロパティ名

    inquiryStatus

    更新値

    4

    以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし、「practice.PracticeWorkflowEntity001」にデータを登録することでWorkflowが自動的に起動します。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

担当者になっている任意のユーザー(user001@workflow 等)でログインし、 完了 ボタンをクリックします。

inquiry detail

MYタスクには表示されなくなります。 「作成したタスク」を選択してください。 担当者が自分ではなくなっていることが確認できます。

inquiry mytask

担当者になっているユーザーでログインし、 承認 ボタンをクリックしてタスクを完了させます。

inquiry detail2

完了したタスクを確認すると、以下のようになっていると思います。

inquiry detail3

以上が問合せ管理Workflowとなります。

4.2. 配送管理

キューを利用した割り当て処理を行うワークフローを作成します。

delivery flow

事前準備

Entityの作成

「practice.PracticeWorkflowEntity002」というEntityを準備しておいてください。

  • Properties
    作成したEntityを開き、Propertiesタブから以下のプロパティを追加してください。

delivery property
Name Display Name Type その他

settlementNo

請求番号

AutoNumber

項目 設定値

書式(Script)

se-${yyyy}${MM}-${nextVal()}

settlementStatus

請求状況

Select

LocalValueに以下の値を追加します。

Value Display Name

1

入金前

2

配送完了

3

配送不可

deliverGoodsDate

納品予定日

Date

orderMail

メール

String

  • EventListeners
    EventListenersタブから、以下の設定を追加してください。

delivery listener
Type Script Events

Script

下記を参照

afterInsert

import java.util.LinkedHashMap;
import java.util.Map;
import org.iplass.mtp.workflow.WorkflowManager;

def wm = manager(WorkflowManager.class);

Map<String, Object> parameters = new LinkedHashMap<String, Object>();
parameters.put("variableItem1", entity);
parameters.put("variableItem2", entity.orderMail);
wm.startProcess("practice/PracticeWorkflow002", parameters);

以上でEntityの設定は完了です。 Save ボタンをクリックして保存してください。
この設定により、Entityへのデータ登録後に自動的にWorkflowが起動するようになります。

UserTaskQueueの作成

今回はUserTaskQueueを利用します。 UserTaskQueueとは、ユーザーに直接タスクを割り当てずに、キューにタスクをプールする方法です。

以下の手順を実施し、事前にUserTaskQueueを利用するためのデータを登録しておきます。

  1. AdminConsole
    View Components配下にあるMenuから、EntityMenuItemを右クリックして以下のメニューを作成し、Menu Treeに設置します。

    delivery queue setting admin console
    項目名 設定値

    name

    mtp/workflow/UserTaskQueue

    displayName

    UserTaskQueue

    entity

    mtp.workflow.UserTaskQueue

  2. GEM画面
    GEMのトップ画面を更新し、追加したUserTaskQueueのメニュー画面から以下のデータを新規登録してください。

    delivery queue setting gem
    項目名 設定値

    基本項目.名前

    practiceWorkflowQueue002

    オブジェクト情報.コード

    practiceWorkflowQueue002

Userの作成

以下のユーザーを用意してください。 作成済のユーザーについては、改めて用意する必要はありません。

ユーザーID メールアドレス 所属グループ アカウントポリシー

user001@workflow

ユーザー001

user001@test.jp

GemUser

標準

user002@workflow

ユーザー002

user002@test.jp

GemUser

標準

user003@workflow

ユーザー003

user003@test.jp

GemUser

標準

MailTemplateの作成

以下の2つのMailTemplateを用意してください。

  • practice/PracticeWorkflow002_001

delivery edit mailtemplate1
  • practice/PracticeWorkflow002_002

delivery edit mailtemplate2
Name Display Name Description

practice/PracticeWorkflow002_001

PracticeWorkflow002_001

ご注文の確認

practice/PracticeWorkflow002_002

PracticeWorkflow002_002

ご注文の発送

件名、メッセージ内容は任意に設定して下さい。

Commandの作成

以下のコマンドを用意してください。

  • practice/PracticeWorkflowCommand002

delivery edit command
Name Display Name Description Type Command Attribute

practice/PracticeWorkflowCommand002

PracticeWorkflowCommand002

請求更新コマンド

Script

下記を参照

import org.iplass.mtp.entity.UpdateOption;
import org.iplass.mtp.entity.SelectValue;
import org.iplass.mtp.impl.core.ExecuteContext;

def settlement = request.getAttribute("variableItem1");

// 請求状況
settlement.setValue("settlementStatus", new SelectValue("2"));

// 納品予定日
settlement.setValue("deliverGoodsDate", ExecuteContext.getCurrentContext().getCurrentTimestamp());

UpdateOption option = new UpdateOption(false);
option.setUpdateProperties("settlementStatus", "deliverGoodsDate");
em.update(settlement, option);

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

practice/PracticeWorkflow002

displayName

PracticeWorkflow002

description

配送管理

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

delivery workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。

  • StartEvent

    simple setting start
    項目名 設定値

    historyLogging

    true

  • EndEvent

    simple setting end
    項目名 設定値

    historyLogging

    true

  • VariableItem2

    delivery setting variable
    項目名 設定値

    name

    variableItem2

    displayName

    VariableItem2

    ※今回はメール送信先を保持するためにEntityDataとは別にVariableItemを利用します。

  • MailTask1

    delivery setting task1
    項目名 設定値

    historyLogging

    true

    mailTemplateName

    practice/PracticeWorkflow002_001

    to

    項目名 設定値

    定義形式

    SCRIPT

    to取得ロジック

    variableItem2

  • UserTask1

    delivery setting task2
    項目名 設定値

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    userTaskName

    配送処理:${variableItem1.settlementNo}

    delvery setting usertaskname
    • assignRule

      項目名 設定値

      タイプ

      ToQueue

      適用フロー名

      *

      割当種別

      ANYONE

      完了条件

      ANYONE

      QueueCode取得ロジック

      return "practiceWorkflowQueue002";

      今まで同様assignRuleを設定します。 今回はQueueを利用します。 下図のような設定にして下さい。

      delivery setting assignrule

      なお、事前準備のUserTaskQueue登録作業が完了していない場合、ワークフロー実行時にエラーとなります。

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      配送完了

      項目名 設定値

      name

      ng

      displayName

      配送不可

  • SequenceFlow(UserTask1 → CommandTask1)

    delivery setting flow1

    配送完了の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ok

  • SequenceFlow(UserTask1 → UpdateEntityTask1)

    delivery setting flow2

    配送不可の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ng

  • UpdateEntityTask1

    delivery setting task3
    項目名 設定値

    historyLogging

    true

    variableName

    variableItem1

    updateRule

    項目名 設定値

    タイプ

    property

    プロパティ名

    settlementStatus

    更新値

    3

  • CommandTask1

    delivery setting task4
    項目名 設定値

    historyLogging

    true

    commandConfig

    practice/PracticeWorkflowCommand002

  • MailTask2

    delivery setting task5
    項目名 設定値

    historyLogging

    true

    mailTemplateName

    practice/PracticeWorkflow002_002

    to

    項目名 設定値

    定義形式

    SCRIPT

    to取得ロジック

    variableItem2

    以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし、「practice.PracticeWorkflowEntity002」にデータを登録することでWorkflowが自動的に起動します。
メール送信確認のため、メールの項目には必ず値を設定してください。

登録と同時にメールが送信されます。

Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

管理者アカウントのトップ画面から、作成したタスクを確認します。

delivery tasklist1

今回は割り当てをユーザーではなくタスクキューにしている為、自動でMYタスクには入りません。
ユーザーID: user001@workflowでログインし、全てのタスクから対象タスクの割当を行います。

delivery tasklist2

MYタスクをみると割り当て済みになってることが確認できます。

delivery tasklist3

MYタスクの編集リンクをクリックし、タスク処理を実施します。

delivery detail

今回は 配送完了 ボタンをクリックします。 完了と同時にメールが送信されます。 なお、タスク処理において配送不可をクリックした場合は請求状況が配送不可として扱われます。

delivery view

以上が配送管理Workflowとなります。

4.3. 議事録承認

データのロック機能を利用して、議事録の承認後に変更できないようにします。

approval flow

通知ありのフローではタスク完了後にメール送信タスクを実行します。

事前準備

Entityの作成

「practice.PracticeWorkflowEntity003」というEntityを準備しておいてください。

  • Properties
    作成したEntityを開き、Propertiesタブから以下のプロパティを追加してください。

approval property
Name Display Name Type multiple その他

minutes

議事録

Binary

1

members

回覧先

Reference

*

項目

設定値

参照エンティティ

mtp.auth.User

authorizerList

承認者リスト

Binary

1

以上でEntityの設定は完了です。 Save ボタンをクリックして保存してください。

Userの作成

以下のユーザーを用意してください。 作成済のユーザーについては、改めて用意する必要はありません。

ユーザーID メールアドレス 所属グループ アカウントポリシー

user001@workflow

ユーザー001

user001@test.jp

GemUser

標準

user002@workflow

ユーザー002

user002@test.jp

GemUser

標準

user003@workflow

ユーザー003

user003@test.jp

GemUser

標準

MailTemplateの作成

以下のMailTemplateを用意してください。

Name Display Name Description

practice/PracticeWorkflow003_001

PracticeWorkflow003_001

議事録提出通知

practice/PracticeWorkflow003_002

PracticeWorkflow003_002

承認/否認依頼通知

practice/PracticeWorkflow003_003

PracticeWorkflow003_003

承認通知

practice/PracticeWorkflow003_004

PracticeWorkflow003_004

否認通知

practice/PracticeWorkflow003_005

PracticeWorkflow003_005

完了通知

件名、メッセージ内容は任意に設定して下さい。

Commandの作成

以下のコマンドを用意してください。

Name Display Name Description Type Script

practice/PracticeWorkflowCommand003_001

PracticeWorkflowCommand003_001

自動承認処理

Script

practice/PracticeWorkflowCommand003_002

PracticeWorkflowCommand003_002

承認者リスト作成処理

Script

practice/PracticeWorkflowCommand003_003

PracticeWorkflowCommand003_003

凍結処理

Script

  • practice/PracticeWorkflowCommand003_001(自動承認処理)
    回覧先セットで登録された承認対象者が一定期間(タイマー設定)「承認しなかった場合」も自動的に「承認」とする為の処理です。 タイマーで設定された期間が過ぎた場合に本コマンドが実行されます。

import org.iplass.mtp.entity.query.Query;
import org.iplass.mtp.entity.query.condition.predicate.Equals;
import org.iplass.mtp.entity.EntityManager;
import org.iplass.mtp.entity.SearchResult;
import org.iplass.mtp.entity.SelectValue;
import org.iplass.mtp.entity.UpdateOption;
import org.iplass.mtp.workflow.Assignment;
import org.iplass.mtp.workflow.UserTask;

System.out.println("### START PracticeWorkflowCommand003_001");

// コンテキストからworkflowのoidを取得
def workflowId = request.workflowInstanceId;

// UserTaskのdefinitionKeyを生成(ワークフロー定義名 + ユーザータスク定義名 + ワークフローID)
def definitionKey = "practice/PracticeWorkflow003-" + "userTask3-" + workflowId;

// UserTaskを取得
Query taskQuery = new Query()
    .selectAll("mtp.workflow.UserTask", false, false)
    .from("mtp.workflow.UserTask").where(new Equals("definitionKey", definitionKey));

UserTask userTask = (UserTask) em.searchEntity(taskQuery).getFirst();
String userTaskOid = userTask.getOid();

// UserTask.oidからAssignmentを取得
Query assignmentQuery = new Query()
    .selectAll("mtp.workflow.Assignment", false, false)
    .from("mtp.workflow.Assignment")
    .where(new Equals("task.oid", userTaskOid));
SearchResult<Assignment> assignment = em.searchEntity(assignmentQuery);

for (Assignment e : assignment) {
  String assignState = e.getAssignState().getValue();
  System.out.println("assignState : " + assignState);

  // Assignmentのうちタスクが処理されていないものはすべて完了に更新する
  if ("ASSIGNED".equals(assignState)) {
    UpdateOption option = new UpdateOption();
    option.setUpdateProperties("assignState", "taskResult", "comment");
    e.setAssignState(new SelectValue("COMPLETED"));
    e.setComment("自動承認");
    e.setTaskResult("ok");
    em.update(e, option);
  }
}
  • practice/PracticeWorkflowCommand003_002(承認者リスト作成処理)
    「承認」したユーザー(自動承認含む)のみを取得し、CSVファイルを作成します。 また、作成したファイルを議事録ワークフロー用エンティティに登録する処理です。

import org.iplass.mtp.entity.query.Query;
import org.iplass.mtp.entity.query.condition.predicate.Equals;
import org.iplass.mtp.entity.BinaryReference;
import org.iplass.mtp.entity.EntityManager;
import org.iplass.mtp.entity.SearchResult;
import org.iplass.mtp.entity.UpdateOption;
import org.iplass.mtp.workflow.Assignment;
import org.iplass.mtp.workflow.UserTask;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.IOException;

System.out.println("### PracticeWorkflowCommand003_002");

// コンテキストからwokrflowのoidを取得
def workflowId = request.workflowInstanceId;
System.out.println("### workflowId : " + workflowId);

// UserTaskのdefinitionKeyを生成(ワークフロー定義名 + ユーザータスク定義名 + ワークフローID)
def definitionKey = "practice/PracticeWorkflow003-" + "userTask3-" + workflowId;

// UserTaskを取得
Query taskQuery = new Query()
    .selectAll("mtp.workflow.UserTask", false, false)
    .from("mtp.workflow.UserTask")
    .where(new Equals("definitionKey", definitionKey));

UserTask userTask = (UserTask) em.searchEntity(taskQuery).getFirst();
String userTaskOid = userTask.getOid();

// UserTask.oidからAssignmentを取得
Query AssignmentQuery = new Query()
    .selectAll("mtp.workflow.Assignment", false, true)
    .from("mtp.workflow.Assignment")
    .where(new Equals("task.oid", userTaskOid));

SearchResult<Assignment> assignment = em.searchEntity(AssignmentQuery);

// 承認者リスト作成
def authorizerList = "";
for (Assignment e : assignment) {
    if ("ok".equals(e.taskResult)) {
        authorizerList = authorizerList + e.user.name + "\r\n";
    }
}

// BinaryReferenceを利用するためのInputStreamを承認者情報のStringから作成
InputStream is = new ByteArrayInputStream(authorizerList.getBytes());

// BinaryReferenceの作成
BinaryReference br = em.createBinaryReference("承認者リスト.csv", "text/csv", is);

// Streamをclose
try {
  is.close();
} catch (IOException e) {
  e.printStackTrace();
}

// Entityの操作
def entity = request.getAttribute("variableItem1");
entity.setValue("authorizerList", br);

// 更新
UpdateOption option = new UpdateOption();
option.setUpdateProperties("authorizerList");
em.update(entity, option);
  • practice/PracticeWorkflowCommand003_003(凍結処理)
    登録した議事録、回覧先ユーザー、承認者リストを更新できないようにロックする処理です。

import org.iplass.mtp.entity.query.Query;
import org.iplass.mtp.entity.query.condition.predicate.Equals;
import org.iplass.mtp.entity.EntityManager;
import org.iplass.mtp.entity.UpdateOption;

System.out.println("### PracticeWorkflowCommand003_003");

// コンテキストからworkflowのoidを取得
def workflowId = request.workflowInstanceId;

// workflowIdからWorkflowTargetを取得
Query workflowTargetQuery = new Query()
    .select("targetEntityOid")
    .from("mtp.workflow.WorkflowTarget")
    .where(new Equals("workflow.oid", workflowId));

def workflowTarget = em.searchEntity(workflowTargetQuery).getFirst();

// 凍結対象エンティティ
def entity = em.lockByUser(workflowTarget.targetEntityOid, "practice.PracticeWorkflowEntity003");

Workflowの設定

Workflowの作成

下記の通りWorkflowのMetaDataを作成します。

項目名 設定値

name

practice/PracticeWorkflow003

displayName

PracticeWorkflow003

description

議事録承認

作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

approval workflow
各Itemの設定

各Itemの設定をしていきます。記載のない項目名については設定不要です。

  • UserTask1

    approval setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ANYONE

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      議事録提出

  • MailTask1

    approval setting task2
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_001

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    任意のアドレス

  • UserTask2

    approval setting task3
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      authorizer@workflow

    • taskResultStatus

      項目名 設定値

      name

      memberset

      displayName

      回覧先セット

      項目名 設定値

      name

      ngminutes

      displayName

      議事録差し戻し

  • MailTask2

    approval setting task4
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_002

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    任意のアドレス

  • IntermediateTimerEvent1

    approval setting event1
    項目名 設定値

    timer

    項目名 設定値

    Timer Type

    Delay

    Timer Unit

    Minuites

    Delay Expression

    "3"

  • CommandTask1

    approval setting task5
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_001

  • UserTask3

    approval setting task6
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割当種別

      ALL

      完了条件

      VOTE

      定義形式

      SCRIPT

      ID取得ロジック

      下記コード参照

      対象EntityのmembersにセットされたアカウントIDを取得しています。

      import org.iplass.mtp.entity.query.Query;
      import org.iplass.mtp.entity.query.condition.predicate.Equals;
      import org.iplass.mtp.entity.EntityManager;
      
      Query membersQuery = new Query()
          .select("members.accountId")
          .from("practice.PracticeWorkflowEntity003")
          .where(new Equals("oid", variableItem1.oid));
      
      def em = manager(EntityManager.class);
      def members = em.searchEntity(membersQuery).getList();
      
      def result = [];
      int cnt = 0;
      for (def e : members) {
          System.out.println(e.members.accountId);
          result[cnt] = e.members.accountId;
          cnt ++;
      }
      
      return result;
    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認

      項目名 設定値

      name

      ng

      displayName

      否認

  • MailTask3

    approval setting task7
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_003

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    任意のアドレス

  • MailTask4

    approval setting task8
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_004

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    任意のアドレス

  • CommandTask2

    approval setting task9
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_002

  • CommandTask3

    approval setting task10
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_003

  • MailTask5

    approval setting task11
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_005

    to

    項目名 設定値

    定義形式

    STRING

    to取得ロジック

    任意のアドレス

  • SequenceFlow(UserTask2 → UserTask1)

    approval setting flow1

    議事録差し戻しの場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ngminutes

  • SequenceFlow(UserTask2 → SP)

    approval setting flow4

    回覧先セット(承認ルート)の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    memberset

  • SequenceFlow(UserTask3 → MailTask4 → UserTask2)

    approval setting flow2

    否認の場合のフローになります。

    項目名 設定値

    nodeResultStatus

    ng

  • SequenceFlow(UserTask3 → MailTask3)

    approval setting flow3
    項目名 設定値

    nodeResultStatus

    ok

    以上でWorkflowの設定は完了です。 Save ボタンをクリックして保存してください。

EntityViewの設定

ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。

  • DetailFormViewの設定
    事前準備で作成した「practice.PracticeWorkflowEntity003」の「DetailLayout」を開き、 単純な承認と同様に標準ロードを実施後、以下を設定してください。

    項目名 設定値

    ワークフロー定義名

    practice/PracticeWorkflow003

    ワークフロー変数名

    variableItem1

    ボタン表示名

    議事録ワークフロー起動

    プロセス実行中のメッセージ

    議事録ワークフロー実行中です。

  • SearchLayoutの設定
    「practice.PracticeWorkflowEntity003」の「SearchLayout」を開き、標準ロードを実施後に保存してください。

ここまででWorkflow利用準備が完了しました。 次項からはWorkflowを利用してみましょう。

Workflowの利用

Workflowの起動

管理者アカウントでログインし単純な承認と同様にEntityに任意のデータを作成後、ワークフローを起動してください。
オブジェクト情報は後述の手順で追加するため、ここでは未設定の状態にしておきます。

approval startprocess
Workflowのステータス確認

単純な承認と同様にワークフローを確認してください。

UserTaskの操作

ユーザーID: authorizer@workflow でログインし、 トップ画面のタスク一覧にあるuserTask1の「編集」リンクをクリックします。 表示された「タスク処理」の編集画面にある「タスク対象データ」内のリンクをクリックするとEntity詳細画面がダイアログ表示されるので、 編集 ボタンをクリックします。

表示された編集画面で、議事録に任意のファイル(docx、xlsx、txtなど)を登録して保存してください。 その後、「タスク処理」の編集画面で任意のコメントを入力し、 議事録提出 ボタンをクリックしてフローを進めてください。

approval create data

議事録提出 ボタンをクリックした時点でメール通知がされます。

回覧先を登録し、回覧先セットを実施します。

ユーザーID: authorizer@workflowでログインし、 トップ画面のタスク一覧にあるuserTask2の「編集」リンクをクリックします。
議事録の登録時と同様に、Entityデータの編集画面にて以下の回覧先を選択して保存します。

  • user001@workflow

  • user002@workflow

  • user003@workflow

ここでセットしたユーザーが承認/否認実施者となります。

その後、userTask2の編集画面で任意のコメントを入力し、 回覧先セット ボタンをクリックしてフローを進めてください。

approval set

回覧先セット ボタンをクリックした時点でメール通知がされます。

セットしたユーザーで承認するか、タイマーで設定した時間待機します。 承認判定が完了した時点でメール通知がされます。

ワークフローが完了したら、承認者リストが登録され、ロックされていることを確認します。

approval detail

以上が議事録承認Workflowとなります。

5. 次のステップ

ワークフローについて、このチュートリアルで触れた内容が知りたい場合は、Developer GuideのWorkflowを参照してください。

その他の機能の詳細を理解したい場合は、 Developer Guide を参照し、いろいろと定義を変更してみてください。