iPLAssのワークフロー機能を利用し、さまざまな要件に対応するフローを作成可能です。 ここでは準備編、基本編、実践編にわけ、ワークフローの作成方法を説明していきます。 準備編ではワークフローの概要、iPLAssでのワークフローの簡単な説明を、基本編では各イベントの動作、設定方法について、実践編では基本編で説明した内容を利用し、より現実的なワークフローの作成を行います。
1. 前提条件
本チュートリアルは以下を前提条件としています。 チュートリアルを進めるにあたり、以下のいずれかを実施し、Webアプリケーションが動作する環境を準備してください。
-
チュートリアル実施にあたり、Enterprise Editionでのみ実施可能なものがあります。
オープンソース版の環境をEnterprise Editionにアップグレードする場合は、Enterprise Editionへのアップグレードを参照してください。
2. 準備編
2.1. ワークフロー概要
ワークフローとは業務上の一連の処理手続きのことを指します。 例えば、「社員が休暇を申請し、上司が承認し、社員は承認を確認し休暇をとる」といった流れも単純ですがワークフローとなります。
この流れを図にすると下記のようになります。

それぞれの処理をタスクと呼びます。 ユーザが処理するタスクの他に、システム側で自動処理させるようなタスクもあります。 このタスクをシーケンスフローと呼ぶ矢印で接続することでワークフローを作成してきます。 また、ワークフローには必ず開始イベントが存在します。 基本編を実施しながら確認してください。 具体的な作成方法は操作方法を参照してください。
iPLAssのワークフローは、ワークフローアイテムというオブジェクトで構成されています。 上述したタスクもワークフローアイテムのひとつです。 ワークフローアイテムにはActivity(Task)、Event、Gateway、Flow、Variableとあり、これらを組み合わせることで、様々な要件に対応するワークフローを組み立てます。 それぞれの簡単な役割は下表の通りです。
ワークフローアイテム | 役割 |
---|---|
Activity(Task) |
上図の、「休暇申請」や「上司承認」の部分にあたります。そのほかにもいくつか種類があります。 |
Event |
上図の、「完了」の部分にあたります。そのほかにもいくつか種類があります。 |
Gateway |
分岐処理等行います。上図に該当する箇所はありません。 |
Flow |
上図の矢印にあたる部分です。 |
Variable |
ワークフロー実行にあたり、必要な値を格納する変数となります。上図に該当する箇所はありません。 |
2.2. 操作方法
AdminConsoleでWorkflowを作成する上で必要な操作となります。 これら操作を踏まえ、基本編をはじめて下さい。 また、その他MetaDataの基本操作についてはチュートリアル(ベーシック)をご確認ください。
Workflowの作成
AdminConsoleを開き、他MetaData同様、Workflowで右クリックし、「Workflowを作成する」をクリックします。

NameにMetaDataの名前をセットし、「Save」ボタンをクリックします。

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

右上の赤枠のアイコンをクリックすると、水色のグリッド線が非表示となります。 もう一度クリックすると再表示されます。
画面左ペインからItemをドラッグアンドドロップしてWorkflowを組み立てていきます。 配置した各ItemをSequenceFlowで接続していきます。 SequenceFlowは接続対象Item付近にドラッグすることで吸着します。 必ずしっかり接続させてください。

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

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

タスク一覧
実行中のワークフローの状況や、ワークフローの対象データ等を確認するツールとして、タスク一覧が用意されています。 基本編、実践編ともに、ワークフロー終了やタスクの実行履歴を確認するにあたり、タスク一覧を利用します。 下記の手順に従い、タスク一覧を表示可能な状態にしておいてください。
デフォルトではタスク一覧は表示されません。 AdminConsoleのTopview設定を行う必要があります。
-
TopViewの設定
AdminConsoleのTopViewにはあらかじめ「DEFAULT」というデータが登録されています。ダブルクリックすると下記画面が表示されます。 画面右側のItemsにある「Workflow」フォルダの中の「UserTaskList」をMainAreaにドラッグアンドドロップして下さい。 「UserTaskList」が追加された状態になります。
-
UserTaskListの設定
UserTaskListの設定画面は下図のようになっています。 今回はUserTaskViewの設定をします。 「UserTaskView Setting」タブをクリックして画面を切り替えましょう。デフォルトだと表示項目が全てチェックされていない状態です。 今回はワークフロー履歴や担当割り当て状況等ワークフローの機能を確認したいので、全てチェックをいれてください。
最後に「OK」をクリックし、Topview自体の「Save」ボタンをクリックし保存することで設定が完了します。
-
表示確認
トップ画面にタスク一覧が表示されます。
2.3. 各アイコンの説明
Activity(Task)
iPLAssのコマンドを呼び出すことができるタスクです。 ワークフロー内でロジカルな処理を行いたい場合に利用します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. 基本編
基本編ではワークフローの機能を単純な処理を例に説明していきます。
3.1. 単純な承認
ここでは主にUserTaskの利用方法について説明します。 あるユーザがデータを登録し、そのデータを確認して承認がほしい場合のフローを考えてみます。

事前準備
basic.BasicWorkflowEntity001というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow001 |
displayName |
BasicWorkflow001 |
description |
単純な承認 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 Workflow履歴にて確認可能にする為、すべてのItemに対してhistoryLogginをtrueに設定してください。
-
VariableItem
項目名 設定値 name
bwe001Variable
displayName
BWE001Variable
※nameの値をEntityViewのワークフロー起動時の変数に設定することで、対象EntityのデータをWorkflowで利用可能となります。
-
StartEvent
項目名 設定値 name
bw001StartEvent1
displayName
BW001StartEvent1
historyLogging
true
-
UserTask
項目名 設定値 name
bw001UserTask1
displayName
BW001UserTask1
historyLogging
true
assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
assignRuleを設定します。 assignRuleでは、誰がこのUserTaskを処理するかを設定します。 -
taskResultStatus
taskResultStatusを設定します。 taskResultStatusを設定することで、承認、否認による処理の分岐が可能になります。 今回は承認だけとなります。今回は分岐の必要ないのでok:承認のみ設定します。 下図の通り、ここで設定した値がワークフロー起動後の画面でボタンとして表示されます。
-
-
EndEvent
項目名 設定値 name
bw001EndEvent1
displayName
BW001EndEvent1
historyLogging
true
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
作成したbasic.BasicWorkflowEntity001に対して下記設定を行います。項目名 設定値 ワークフロー定義名
basic/BasicWorkflow001
ワークフロー変数名
bwe001Variable
ボタン表示名
単純承認ワークフロー起動
プロセス実行中のメッセージ
単純承認ワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用してみましょう。
Workflowの利用
汎用検索画面から対象Entityにデータを登録してください。 左図の通り「単純承認ワークフロー起動」というボタンが表示されいます。 このボタンはEntiyViewで設定したボタン名となっています。 このボタンをクリックすることでワークフローが起動します。

ワークフローの開始メッセージと同時、EntityViewで設定したプロセス実行中のメッセージが表示されます。
ホーム画面のタスク一覧を確認すると、WorkflowのassignRuleに基づいて割り当てがなされた状態になっています。

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

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

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

事前準備
basic.BasicWorkflowEntity002というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
user001@tenantNameというアカウントを用意してください。
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | |
---|---|
name |
basic/BasicWorkflow002 |
displayName |
BasicWorkflow002 |
description |
差し戻し |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 「単純な承認」で解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。 admin@tenantNameの他にuser001@tenantNameというユーザを用意しておいてください。
-
UserTask(BW002UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
user001@tenantName
-
taskResultStatus
項目名 設定値 name
post
displayName
申請
-
-
UserTask(BW002UserTask2)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名
設定値
タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
今回は承認ボタンと差し戻しボタンが必要なのでそれぞれ登録します。項目名 設定値 name
ok
displayName
承認
項目名 設定値 name
ng
displayName
差し戻し
正しく設定されていると下図のような状態になります。
-
-
SequenceFlow(BW002UserTask2 → BW002EndEvent1)
承認の場合のフローになります。
項目名 設定値 nodeResultStatus
ok
-
SequenceFlow(BW002UserTask2 → BW002UserTask1)
差し戻しの場合のフローになります。
項目名 設定値 nodeResultStatus
ng
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow002
ワークフロー変数名
bwe002Variable
ボタン表示名
差し戻しワークフロー起動
プロセス実行中のメッセージ
差し戻しワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。
「単純な承認」承認と同様にワークフローを確認してください。
user001アカウントでログインしなおし、タスク処理の編集画面を表示してください。 申請可能となっていますので、申請ボタンをクリックします。

申請が終ったらadminアカウントでログインしなおしてください。 タスク一覧に先ほど申請されたタスクのの承認依頼がきています。 編集リンクをクリック、承認、差し戻しを行います。

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

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

再申請が終ったらadminアカウントでログインしなおしてください。 タスク一覧に先ほど申請されたタスクのの承認依頼がきています。 編集リンクをクリック、承認、差し戻しを行います。 今度は承認してみましょう。
承認後ワークフロー履歴を確認すると下図のようになっていると思います。

以上が差し戻しのWorkflowとなります。
3.3. 承認と同時にメール送信
ここでは主にメール送信方法について説明します。 あるユーザがデータを登録した上で、申請を行います。同時に確認してほしいユーザへメールを送信します。

事前準備
basic.BasicWorkflowEntity003というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
basic/SimpleWorkflow003というMailTemplateを準備しておいてください。 件名、メッセージ等は任意の文字列を入力してください。
ローカルでメールの確認がしたい場合のみservice-configの設定が必要になります。 MailServiceのlistenerを有効にしてください。
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow003 |
displayName |
BasicWorkflow003 |
description |
メール送信 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(BW003UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
ok
displayName
申請と送信
-
-
MailTask(BW003MailTask1)
項目名 設定値 mailTemplateName
basic/SimpleWorkflow003
to
to参照
-
to
送信先を設定します。 今回は実際に送信はせず、ログでの確認となるため、「test@test.jp」と設定します。
-
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow003
ワークフロー変数名
bwe003Variable
ボタン表示名
メール送信ワークフロー起動
プロセス実行中のメッセージ
メール送信ワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。
「単純な承認」承認と同様にワークフローを確認してください。
「承認を送信」ボタンをクリックします。 ワークフローは完了状態になり、メールが送信されます。 ローカル環境ではEclipseのコンソールにメール内容がログ出力されます。

11:32:33.257 [http-nio-8080-exec-1] DEBUG 38 63312 CompositeCommand o.i.m.m.l.LoggingSendMailListener - From:test@contract.isid.co.jp ReplyTo:test@contract.isid.co.jp To:(1)test@test.jp; Cc:(0) Bcc:(0) Subject:メール送信サンプル FileName: PlainMessage:メール送信サンプル HtmlMessage:
以上がメール送信処理を含むWorkflowとなります。
3.4. 承認と同時にEntity操作を実施
ここでは主にEntity操作方法について説明します。 あるユーザがデータを登録した上で、申請を行います。 同時にEntityデータの更新を行います。

事前準備
basic.BasicWorkflowEntity004というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow004 |
displayName |
BasicWorkflow004 |
description |
Entity操作 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(BW004UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
ok
displayName
承認して更新
-
-
UpdateEntityTask(BW004UpdateentitylTask1)
項目名 設定値 variableName
bwe004Variable
updateRule
updateRule参照
-
updateRule
本ワークフローが実行され、正常に完了した際には対象データのdescriptionが更新値にて更新されています。
-
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow004
ワークフロー変数名
bwe004Variable
ボタン表示名
Entity操作ワークフロー起動
プロセス実行中のメッセージ
Entity操作ワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。
「単純な承認」承認と同様にワークフローを確認してください。
更新前のデータを対象データリンクから確認してみましょう。 説明項目が空であることがわかります。 「承認を更新」ボタンをクリックします。

ワークフロー完了後に更新されていることを確認しましょう。
以上がEntity操作を含むWorkflowとなります。
3.5. 承認と同時にカスタムロジック処理を実施
ここでは主にカスタムロジックを利用する方法について説明します。 あるユーザがデータを登録した上で、申請を行います。 同時にカスタムロジックの実行を行います。

事前準備
basic.BasicWorkflowEntity005というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
basic/BasicWorkflowCommand005というCommandを準備しておいてください。 コードは以下のようにログを出力するのみです。

System.out.println("### Executed BasicWorkflowCommand005.");
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow005 |
displayName |
BasicWorkflow005 |
description |
カスタムロジック処理 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(BW005UserTask1)
項目名 設定値 assignRule
a.assignRule参照
taskResultStatus
b.taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
ok
displayName
承認してカスタム処理
-
-
CommandTask(BW005CommandTask1)
項目名 設定値 commandConfig
basic/BasicWorkflowCommand005
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow005
ワークフロー変数名
bwe005Variable
ボタン表示名
カスタムロジック処理ワークフロー起動
プロセス実行中のメッセージ
カスタムロジック処理ワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。
「単純な承認」承認と同様にワークフローを確認してください。
「承認してカスタム処理」ボタンをクリックします。

アプリログを確認し、Commandが実行されたことを確認しましょう。

以上がカスタムロジック処理を含むWorkflowとなります。
3.6. スプリット
ここでは主にGateway(Split)の利用方法について説明します。 あるユーザがデータを登録すると同時にメール送信と、そのデータの申請タスクが起動します。 申請タスクが実行されると終了します。

事前準備
basic.BasicWorkflowEntity006というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow006 |
displayName |
BasicWorkflow006 |
description |
スプリット |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(BW006UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
post
displayName
申請
-
-
MailTask(BW006MailTask1)
項目名 設定値 mailTemplateName
basic/SimpleWorkflow003
to
定義形式:string
to取得ロジック:test@test.jp
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow006
ワークフロー変数名
bwe006Variable
ボタン表示名
スプリットワークフロー起動
プロセス実行中のメッセージ
スプリットワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。 起動と同時にメールが送信されることを確認してください。
「単純な承認」承認と同様にワークフローを確認してください。
「分岐して申請」ボタンをクリックします。

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

以上がスプリットを含むWorkflowとなります。
3.7. タイマー
ここでは主にTimerの利用方法について説明します。 あるユーザがデータを登録し、そのデータに対して確認が実施された数分後にメールが送信されます。

事前準備
basic.BasicWorkflowEntity007というEntityを準備しておいてください。 プロパティ等についての操作は不要です。
service-configに設定が必要になります。 下記の通りuseQueueをtrueにして下さい。
<!-- 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のMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
basic/BasicWorkflow007 |
displayName |
BasicWorkflow007 |
description |
タイマー |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(BW007UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名
設定値
name
post
displayName
申請3分後にメール
-
-
IntermediateTimerEvent(BW007IntermediateTimerEvent1)
項目名 設定値 Timer Type
Delay
Timer Unit
Minuites
Delay Expression
"3"
-
MailTask(BW007MailTask1)
項目名 設定値 mailTemplateName
basic/SimpleWorkflow003
to
定義形式:string
to取得ロジック:test@test.jp
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
basic/BasicWorkflow007
ワークフロー変数名
bwe007Variable
ボタン表示名
タイマーワークフロー起動
プロセス実行中のメッセージ
タイマーワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
adminアカウントでログインし「単純な承認」承認と同様にワークフローを起動してください。
「単純な承認」承認と同様にワークフローを確認してください。
「申請3分後にメール」ボタンをクリックします。

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

以上がタイマーを含むWorkflowとなります。
4. 実践編
実践編ではワークフローの複数の機能を組み合わせて複雑な処理を組み立てていきます。
4.1. 問合せ管理
問合せがあった場合に、対応及び、上長の対応確認を実施するフローを実現します。 簡単な流れは以下のようになります。

事前準備
practice.PracticeWorkflowEntity001というEntityを準備しておいてください。 設定値は以下の通りです。

Name | DisplayName | Type | |
---|---|---|---|
inquiryNo |
お問合せ番号 |
AutoNumber |
書式:in-${yyyy}${MM}-${nextVal()} |
familyName |
姓 |
String |
|
firstName |
名 |
String |
|
familyNameKana |
セイ |
String |
|
firstNameKana |
メイ |
String |
|
メール |
String |
||
content |
内容 |
LongText |
|
kind |
種別 |
Select |
LocalValue: |
inquiryStatus |
問合せステータス |
Select |
LocalValue: |
以下のようにリスナーの設定をして下さい。

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("pwe001Variable", entity);
wm.startProcess("practice/PracticeWorkflow001", parameters);
この設定により、Entityへのデータ登録後に自動的にWorkflowが起動するようになります。
以下のアカウントを用意してください。
-
user001@tenantName
-
user002@tenantName
-
user003@tenantName
Workflowの設定
下記の通りWorkflowのMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
practice/PracticeWorkflow001 |
displayName |
PracticeWorkflow001 |
description |
問合せ管理 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(PW001UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
userTaskName
お問合せ対応:${pwe001Variable.inquiryNo}
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
EQL
ID取得ロジック
state = 'V'
-
taskResultStatus
項目名 設定値 name
OK
displayName
完了
-
-
UpdateEntityTask(PW001UpdateEntityTask1)
項目名 設定値 variableName
pwe001Variable
updateRule
タイプ:property
プロパティ名:inquiryStatus
更新値:3
-
UserTask(PW001UserTask2)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
userTaskName
お問合せ対応の承認:${pwe001Variable.inquiryNo}
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ANYONE
完了条件
ANYONE
定義形式
EQL
ID取得ロジック
state = 'V'
-
taskResultStatus
項目名 設定値 name
OK
displayName
承認
項目名 設定値 name
NG
displayName
差し戻し
-
-
SequenceFlow(PW001UserTask2 → PW001UpdateEntityTask3)
承認の場合のフローになります。
項目名 設定値 nodeResultStatus
OK
-
SequenceFlow(PW001UserTask2 → PW001UpdateEntityTask2)
差し戻しの場合のフローになります。
項目名 設定値 nodeResultStatus
NG
-
UpdateEntityTask(PW001UpdateEntityTask2)
項目名 設定値 variableName
pwe001Variable
updateRule
タイプ:property
プロパティ名:inquiryStatus
更新値:2
-
UpdateEntityTask(PW001UpdateEntityTask3)
項目名 設定値 variableName
pwe001Variable
updateRule
タイプ:property
プロパティ名:inquiryStatus
更新値:4
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
対象Entityにデータを登録することでWorkflowが起動します。
「単純な承認」承認と同様にワークフローを確認してください。
データを登録します。

MYタスクに登録されていることを確認します。

問合せ完了の為「完了」ボタンをクリックします。

MYタスクには表示されなくなります。 「作成したタスク」を選択してください。

担当者が自分ではなくなっていることが確認できます。

担当者になっているユーザでログインし、タスク処理を実施します。

以上が問合せ管理管理Workflowとなります。
4.2. 配送管理
キューを利用した割り当て処理を行うワークフローを作成します。

事前準備
practice.PracticeWorkflowEntity002というEntityを準備しておいてください。 設定値は以下の通りです。

Name | DisplayName | Type | |
---|---|---|---|
settlementNo |
請求番号 |
AutoNumber |
書式:se-${yyyy}${MM}-${nextVal()} |
settlementStatus |
請求状況 |
Select |
LocalValue: |
deliverGoodsDate |
納品予定日 |
Date |
|
orderMail |
メール |
String |
以下のようにリスナーの設定をして下さい。

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("pwe002Variable", entity);
parameters.put("orderMail", entity.orderMail);
wm.startProcess("practice/PracticeWorkflow002", parameters);
この設定により、Entityへのデータ登録後に自動的にWorkflowが起動するようになります。
今回はUserTaskQueueを利用します。 利用にあたり、事前にデータを登録しておく必要がります。 iPLAssが用意しているmtp.workflow.UserTaskQueueというEntityのnameとコードに
practiceWorkflowQueue002
を指定してデータを作成してください。
なお、mtp.workflow.UserTaskQueueはメニューに登録されていません。 一時的にメニューに登録してください。
以下のアカウントを用意してください。
-
user001@tenantName
-
user002@tenantName
-
user003@tenantName
以下の2つのMailTemplateを用意してください。
-
practice/PracticeWorkflow002_001

-
practice/PracticeWorkflow002_002

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

import org.iplass.mtp.entity.UpdateOption;
import org.iplass.mtp.entity.SelectValue;
import org.iplass.mtp.impl.core.ExecuteContext;
def settlement = request.getAttribute("pwe002Variable");
// 請求状況
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のMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
practice/PracticeWorkflow002 |
displayName |
PracticeWorkflow002 |
description |
配送管理 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
VariableItem
項目名 設定値 name
orderMail
displayName
OrderMail
※今回はメール送信先を保持するためにEntityDataとは別にVariableItemを利用します。
-
MailTask(PW002MailTask1)
項目名
設定値
mailTemplateName
practice/PracticeWorkflow002_001
to
定義形式:script
to取得ロジック:orderMail
-
UserTask(PW002UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
userTaskName
配送処理:${pwe002Variable.settlementNo}
-
assignRule
項目名 設定値 タイプ
ToQueue
適用フロー名
*
割り当て種別
ANYONE
完了条件
ANYONE
QueueCode取得ロジック
return "practiceWorkflowQueue002";
今まで同様assingRuleを設定します。 今回はQueueを利用します。 下図のような設定にして下さい。
なお、事前準備のUserTaskQueue登録作業が完了していない場合、ワークフロー実行時にエラーとなります。
-
taskResultStatus
項目名 設定値 name
OK
displayName
配送完了
項目名 設定値 name
NG
displayName
配送不可
-
-
SequenceFlow(PW002UserTask1 → PW002CommandTask1)
承認の場合のフローになります。
項目名 設定値 nodeResultStatus
OK
-
SequenceFlow(PW002UserTask1 → PW002UpdateEntityTask1)
差し戻しの場合のフローになります。
項目名 設定値 nodeResultStatus
NG
-
UpdateEntityTask(PW002UpdateEntityTask1)
項目名 設定値 variableName
pwe002Variable
updateRule
タイプ:property
プロパティ名:settlementStatus
更新値:3
-
CommandTask(PW002CommandTask1)
項目名 設定値 commandConfig
practice/PracticeWorkflowCommand002
-
MailTask(PW002MailTask2)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow002_002
to
定義形式:script
to取得ロジック:orderMail
以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
対象Entityにデータを登録することでWorkflowが起動します。
「単純な承認」承認と同様にワークフローを確認してください。
データを登録します。

登録と同時にメールが送信されます。
作成したタスクを確認します。

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

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

タスク処理を実施します。

今回は配送完了をクリックします。 完了と同時にメールが送信されます。

以上が配送管理Workflowとなります。
4.3. 議事録承認
データのロック機能を利用して、議事録の承認後に変更できないようにします。

通知ありのフローではタスク完了後にメール送信タスクを実行します。
事前準備
practice.PracticeWorkflowEntity003というEntityを準備しておいてください。 設定値は以下の通りです。

Name | DisplayName | Type | |
---|---|---|---|
minutes |
議事録 |
Binary |
|
members |
回覧先 |
Reference |
参照先:User |
authorizerList |
承認者リスト |
Binary |
以下のアカウントを用意してください。
-
user001@tenantName
-
user002@tenantName
-
user003@tenantName
以下の5つのMailTemplateを用意してください。
-
practice/PracticeWorkflow003_001(議事録提出通知)
-
practice/PracticeWorkflow003_002(承認/否認依頼通知)
-
practice/PracticeWorkflow003_003(承認通知)
-
practice/PracticeWorkflow003_004(否認通知)
-
practice/PracticeWorkflow003_005(完了通知)
件名、内容は任意に設定して下さい。
以下のコマンドを用意してください。
-
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");
// コンテキストからwokrflowのoidを取得
def workflowId = request.workflowInstanceId;
// UserTaskのdefinitionKeyを生成(ワークフロー定義名 + ユーザータスク定義名 + ワークフローID)
def definitionKey = "practice/PracticeWorkflow003-" + "pw003UserTask3-" + 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("### worflowId : " + workflowId);
// UserTaskのdefinitionKeyを生成(ワークフロー定義名 + ユーザータスク定義名 + ワークフローID)
def definitionKey = "practice/PracticeWorkflow003-" + "pw003UserTask3-" + 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("pwe003Variable");
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");
// コンテキストからwokrflowの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のMetaDataを作成します。
項目名 | 設定値 |
---|---|
name |
practice/PracticeWorkflow003 |
displayName |
PracticeWorkflow003 |
description |
議事録承認 |
作成したワークフローを表示し、下図のワークフローを作成してください。 具体的な操作は操作方法を参考にして下さい。

各Itemの設定をしていきます。記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。
-
UserTask(PW003UserTask1)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ANYONE
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
post
displayName
議事録提出
-
-
MailTask(PW003MailTask1)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow003_001
to
定義形式:STRING
to取得ロジック:任意のアドレス
-
UserTask(PW003UserTask2)
項目名 設定値 assignRule
assignRule参照
taskResultStatus
taskResultStatus参照
-
assignRule
項目名 設定値 タイプ
ById
適用フロー名
*
割り当て種別
ALL
完了条件
ANYONE
定義形式
STRING
ID取得ロジック
admin@tenantName
-
taskResultStatus
項目名 設定値 name
memberset
displayName
回覧先セット
項目名 設定値 name
ngminutes
displayName
議事録差し戻し
-
-
MailTask(PW003MailTask2)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow003_002
to
定義形式:STRING
to取得ロジック:任意のアドレス
-
IntermediateTimerEvent(PW003IntermediateTimerEvent1)
項目名 設定値 Timer Type
Delay
Timer Unit
Minuites
Delay Expression
"3"
-
CommandTask(PW003CommandTask1)
項目名 設定値 commandConfig
practice/PracticeWorkflowCommand003_1
-
UserTask(PW003UserTask3)
項目名 設定値 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", pwe003Variable.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
否認
-
-
MailTask(PW003MailTask3)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow003_003
to
定義形式:STRING
to取得ロジック:任意のアドレス
-
MailTask(PW003MailTask4)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow003_004
to
定義形式:STRING
to取得ロジック:任意のアドレス
-
CommandTask(PW003CommandTask2)
項目名 設定値 commandConfig
practice/PracticeWorkflowCommand003_2
-
CommandTask(PW003CommandTask3)
項目名 設定値 commandConfig
practice/PracticeWorkflowCommand003_3
-
MailTask(PW003MailTask5)
項目名 設定値 mailTemplateName
practice/PracticeWorkflow003_005
to
定義形式:STRING
to取得ロジック:任意のアドレス
-
SequenceFlow(PW003UserTask2 → PW003UserTask1)
差し戻しの場合のフローになります。
項目名 設定値 nodeResultStatus
ng
-
SequenceFlow(PW003UserTask3 → PW003MailTask4 → PW003UserTask2)
差し戻しの場合のフローになります。
項目名 設定値 nodeResultStatus
ng
-
SequenceFlow(PW003UserTask3 → PW003MailTask3)
項目名 設定値 nodeResultStatus
ok
ここからは今までの操作で作成したWorkflowを実施に利用するための準備となります。
-
DetailFormViewの設定
項目名 設定値 ワークフロー定義名
practice/PracticeWorkflow003
ワークフロー変数名
pwe003Variable
ボタン表示名
議事録ワークフロー起動
プロセス実行中のメッセージ
議事録ワークフロー実行中です。
ここまででWorkflow利用準備が完了しました。 次項からはWokflowを利用しみましょう。
Workflowの利用
practice.PracticeWorkflowEntity003エンティティにデータを登録しワークフローを起動します。

「単純な承認」承認と同様にワークフローを確認してください。
議事録を登録し、提出します。

「議事録提出」ボタンをクリックした時点でメール通知がされます。
回覧先を登録し、回覧先セットを実施します。 議事録の登録時と同様に、対象データの編集にて回覧先を選択して保存します。 ここでセットしたユーザが承認/否認実施者となります。

「回覧先セット」ボタンをクリックした時点でメール通知がされます。
セットしたユーザで承認するか、タイマーで設定した時間待機します。 承認判定が完了した時点でメール通知がされます。
ワークフローが完了したら、承認者リストが登録され、ロックされていることを確認します。

以上が議事録承認Workflowとなります。
5. 次のステップ
ワークフローについて、このチュートリアルで触れた内容が知りたい場合は、Developer GuideのWorkflowを参照してください。
その他の機能の詳細を理解したい場合は、 Developer Guide を参照し、いろいろと定義を変更してみてください。