iPLAssのワークフロー機能を利用し、さまざまな要件に対応するフローを作成可能です。 ここでは準備編、基本編、実践編にわけ、ワークフローの作成方法を説明していきます。 準備編ではワークフローの概要、iPLAssでのワークフローの簡単な説明を、基本編では各イベントの動作、設定方法について、実践編では基本編で説明した内容を利用し、より現実的なワークフローの作成を行います。

1. 前提条件

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

2. 準備編

2.1. ワークフロー概要

ワークフローとは

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

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

description flow sample

それぞれの処理をタスクと呼びます。 ユーザが処理するタスクの他に、システム側で自動処理させるようなタスクもあります。 このタスクをシーケンスフローと呼ぶ矢印で接続することでワークフローを作成してきます。 また、ワークフローには必ず開始イベントが存在します。 基本編を実施しながら確認してください。 具体的な作成方法は操作方法を参照してください。

iPLAssのワークフロー

iPLAssのワークフローは、ワークフローアイテムというオブジェクトで構成されています。 上述したタスクもワークフローアイテムのひとつです。 ワークフローアイテムにはActivity(Task)、Event、Gateway、Flow、Variableとあり、これらを組み合わせることで、様々な要件に対応するワークフローを組み立てます。 それぞれの簡単な役割は下表の通りです。

ワークフローアイテム 役割

Activity(Task)

上図の、「休暇申請」や「上司承認」の部分にあたります。そのほかにもいくつか種類があります。

Event

上図の、「完了」の部分にあたります。そのほかにもいくつか種類があります。

Gateway

分岐処理等行います。上図に該当する箇所はありません。

Flow

上図の矢印にあたる部分です。

Variable

ワークフロー実行にあたり、必要な値を格納する変数となります。上図に該当する箇所はありません。

簡易的な説明を各アイコンの説明に記載していますが、ここですべてを把握する必要はありません。 各Itemの種類等は基本編、実践編を通して説明していきます。 また、全てのItemの詳細についてはDeveloper GuideのWorkflowを参照してください。

2.2. 操作方法

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

Workflowの作成

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

operation create workflow

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

operation createworkflowdialog

Workflowの編集

作成したMetaDataをダブルクリックすると空の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

タスク一覧

実行中のワークフローの状況や、ワークフローの対象データ等を確認するツールとして、タスク一覧が用意されています。 基本編、実践編ともに、ワークフロー終了やタスクの実行履歴を確認するにあたり、タスク一覧を利用します。 下記の手順に従い、タスク一覧を表示可能な状態にしておいてください。

タスク一覧を有効にする

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

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

    tasklist tree

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

    tasklist topview
  • UserTaskListの設定
    UserTaskListの設定画面は下図のようになっています。 今回はUserTaskViewの設定をします。 「UserTaskView Setting」タブをクリックして画面を切り替えましょう。

    tasklist tasklistsetting

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

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

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

    tasklist tasklist

2.3. 各アイコンの説明

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

ワークフローが起動した再に一番初めに実行されるイベントです。 このイベントが起動することでワークフローの状態が「起動中」となります。 ワークフローには必ず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

3. 基本編

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

3.1. 単純な承認

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

simple flow

事前準備

Entityの作成

basic.BasicWorkflowEntity001というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

Workflowの設定

Workflowの作成

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

項目名 設定値

name

basic/BasicWorkflow001

displayName

BasicWorkflow001

description

単純な承認

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

simple workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 Workflow履歴にて確認可能にする為、すべてのItemに対してhistoryLogginをtrueに設定してください。

  • VariableItem

    simple setting variable
    項目名 設定値

    name

    bwe001Variable

    displayName

    BWE001Variable

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

  • StartEvent

    simple setting start
    項目名 設定値

    name

    bw001StartEvent1

    displayName

    BW001StartEvent1

    historyLogging

    true

  • UserTask

    simple setting user
    項目名 設定値

    name

    bw001UserTask1

    displayName

    BW001UserTask1

    historyLogging

    true

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

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

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

      simple setting taskresultstatus

      今回は分岐の必要ないのでok:承認のみ設定します。 下図の通り、ここで設定した値がワークフロー起動後の画面でボタンとして表示されます。

      simple setting taskresultstatus button
  • EndEvent

    simple setting end
    項目名 設定値

    name

    bw001EndEvent1

    displayName

    BW001EndEvent1

    historyLogging

    true

    以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定
    作成したbasic.BasicWorkflowEntity001に対して下記設定を行います。

    simple setting detailview
    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow001

    ワークフロー変数名

    bwe001Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

汎用検索画面から対象Entityにデータを登録してください。 左図の通り「単純承認ワークフロー起動」というボタンが表示されいます。 このボタンはEntiyViewで設定したボタン名となっています。 このボタンをクリックすることでワークフローが起動します。

simple startworkflow

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

Workflowのステータス確認

ホーム画面のタスク一覧を確認すると、WorkflowのassignRuleに基づいて割り当てがなされた状態になっています。

simple tasklist
UserTaskの操作

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

simple detail

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

simple apploval

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

3.2. 差し戻し

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

remand flow

事前準備

Entityの作成

basic.BasicWorkflowEntity002というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

Userの作成

user001@tenantNameというアカウントを用意してください。

Workflowの設定

Workflowの作成

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

項目名

name

basic/BasicWorkflow002

displayName

BasicWorkflow002

description

差し戻し

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

remand workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 「単純な承認」で解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。 admin@tenantNameの他にuser001@tenantNameというユーザを用意しておいてください。

  • UserTask(BW002UserTask1)

    remand setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      user001@tenantName

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      申請

  • UserTask(BW002UserTask2)

    remand setting task2
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名

      設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

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

      項目名 設定値

      name

      ok

      displayName

      承認

      項目名 設定値

      name

      ng

      displayName

      差し戻し

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

      remand setting taskresultstatus
  • SequenceFlow(BW002UserTask2 → BW002EndEvent1)

    remand setting flow1

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

    項目名 設定値

    nodeResultStatus

    ok

  • SequenceFlow(BW002UserTask2 → BW002UserTask1)

    remand setting flow2

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

    項目名 設定値

    nodeResultStatus

    ng

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow002

    ワークフロー変数名

    bwe002Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

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

Workflowのステータス確認

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

UserTaskの操作

user001アカウントでログインしなおし、タスク処理の編集画面を表示してください。 申請可能となっていますので、申請ボタンをクリックします。

remand detail

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

remand tasklist

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

remand detail remand

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

remand tasklist2

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

承認後ワークフロー履歴を確認すると下図のようになっていると思います。

remand history

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

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

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

mail flow

事前準備

Entityの作成

basic.BasicWorkflowEntity003というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

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

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

service-configの設定

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

Workflowの設定

Workflowの作成

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

項目名 設定値

name

basic/BasicWorkflow003

displayName

BasicWorkflow003

description

メール送信

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

mail workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(BW003UserTask1)

    mail setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      申請と送信

  • MailTask(BW003MailTask1)

    mail setting task2
    項目名 設定値

    mailTemplateName

    basic/SimpleWorkflow003

    to

    to参照

    • to
      送信先を設定します。 今回は実際に送信はせず、ログでの確認となるため、「test@test.jp」と設定します。

      mail setting to

以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow003

    ワークフロー変数名

    bwe003Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

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

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.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データの更新を行います。

entity flow

事前準備

Entityの作成

basic.BasicWorkflowEntity004というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

Workflowの設定

Workflowの作成

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

項目名 設定値

name

basic/BasicWorkflow004

displayName

BasicWorkflow004

description

Entity操作

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

entity workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(BW004UserTask1)

    entity setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認して更新

  • UpdateEntityTask(BW004UpdateentitylTask1)

    entity setting task2
    項目名 設定値

    variableName

    bwe004Variable

    updateRule

    updateRule参照

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

      entity updaterule

以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow004

    ワークフロー変数名

    bwe004Variable

    ボタン表示名

    Entity操作ワークフロー起動

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

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

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

Workflowの利用

Workflowの起動

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

Workflowのステータス確認

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

UserTaskの操作

更新前のデータを対象データリンクから確認してみましょう。 説明項目が空であることがわかります。 「承認を更新」ボタンをクリックします。

entity detail

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

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

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

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

custom flow

事前準備

Entityの作成

basic.BasicWorkflowEntity005というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

Commandの作成

basic/BasicWorkflowCommand005というCommandを準備しておいてください。 コードは以下のようにログを出力するのみです。

custom edit command
System.out.println("### Executed BasicWorkflowCommand005.");

Workflowの設定

Workflowの作成

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

項目名 設定値

name

basic/BasicWorkflow005

displayName

BasicWorkflow005

description

カスタムロジック処理

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

custom workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(BW005UserTask1)

    custom setting task1
    項目名 設定値

    assignRule

    a.assignRule参照

    taskResultStatus

    b.taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      ok

      displayName

      承認してカスタム処理

  • CommandTask(BW005CommandTask1)

    custom setting task2
    項目名 設定値

    commandConfig

    basic/BasicWorkflowCommand005

以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow005

    ワークフロー変数名

    bwe005Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

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

Workflowのステータス確認

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

UserTaskの操作

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

custom detail

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

custom log

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

3.6. スプリット

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

split flow

事前準備

Entityの作成

basic.BasicWorkflowEntity006というEntityを準備しておいてください。 プロパティ等についての操作は不要です。

Workflowの設定

Workflowの作成

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

項目名 設定値

name

basic/BasicWorkflow006

displayName

BasicWorkflow006

description

スプリット

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

split workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(BW006UserTask1)

    split setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      申請

  • MailTask(BW006MailTask1)

    split setting task2
    項目名 設定値

    mailTemplateName

    basic/SimpleWorkflow003

    to

    定義形式:string

    to取得ロジック:test@test.jp

以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow006

    ワークフロー変数名

    bwe006Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

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

Workflowのステータス確認

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

UserTaskの操作

「分岐して申請」ボタンをクリックします。

split detail

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

split history

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

3.7. タイマー

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

timer flow

事前準備

Entityの作成

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の作成

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

項目名 設定値

name

basic/BasicWorkflow007

displayName

BasicWorkflow007

description

タイマー

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

timer workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(BW007UserTask1)

    timer setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名

      設定値

      name

      post

      displayName

      申請3分後にメール

  • IntermediateTimerEvent(BW007IntermediateTimerEvent1)

    timer setting event
    項目名 設定値

    Timer Type

    Delay

    Timer Unit

    Minuites

    Delay Expression

    "3"

  • MailTask(BW007MailTask1)

    timer setting task2
    項目名 設定値

    mailTemplateName

    basic/SimpleWorkflow003

    to

    定義形式:string

    to取得ロジック:test@test.jp

以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    basic/BasicWorkflow007

    ワークフロー変数名

    bwe007Variable

    ボタン表示名

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

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

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

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

Workflowの利用

Workflowの起動

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

Workflowのステータス確認

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

UserTaskの操作

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

timer detail

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

timer history

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

4. 実践編

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

4.1. 問合せ管理

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

inquiry flow

事前準備

Entityの作成

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

inquiry property
Name DisplayName Type

inquiryNo

お問合せ番号

AutoNumber

書式:in-${yyyy}${MM}-${nextVal()}

familyName

String

firstName

String

familyNameKana

セイ

String

firstNameKana

メイ

String

mail

メール

String

content

内容

LongText

kind

種別

Select

LocalValue:
1:注文について
2:支払いについて
3:受け取りについて
4:その他

inquiryStatus

問合せステータス

Select

LocalValue:
1:未対応
2:対応中
3:対応完了
4:終了

以下のようにリスナーの設定をして下さい。

inquiry listener
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が起動するようになります。

Userの作成

以下のアカウントを用意してください。

  • user001@tenantName

  • user002@tenantName

  • user003@tenantName

Workflowの設定

Workflowの作成

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

項目名 設定値

name

practice/PracticeWorkflow001

displayName

PracticeWorkflow001

description

問合せ管理

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

inquiry workflow
各Itemの設定

各Itemの設定をしていきます。記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(PW001UserTask1)

    inquiry setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    userTaskName

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

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      EQL

      ID取得ロジック

      state = 'V'

    • taskResultStatus

      項目名 設定値

      name

      OK

      displayName

      完了

  • UpdateEntityTask(PW001UpdateEntityTask1)

    inquiry setting task2
    項目名 設定値

    variableName

    pwe001Variable

    updateRule

    タイプ:property

    プロパティ名:inquiryStatus

    更新値:3

  • UserTask(PW001UserTask2)

    inquiry setting task3
    項目名 設定値

    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)

    inquiry setting flow1

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

    項目名 設定値

    nodeResultStatus

    OK

  • SequenceFlow(PW001UserTask2 → PW001UpdateEntityTask2)

    inquiry setting flow2

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

    項目名 設定値

    nodeResultStatus

    NG

  • UpdateEntityTask(PW001UpdateEntityTask2)

    inquiry setting task4
    項目名 設定値

    variableName

    pwe001Variable

    updateRule

    タイプ:property

    プロパティ名:inquiryStatus

    更新値:2

  • UpdateEntityTask(PW001UpdateEntityTask3)

    inquiry setting task5
    項目名 設定値

    variableName

    pwe001Variable

    updateRule

    タイプ:property

    プロパティ名:inquiryStatus

    更新値:4

    以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

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

Workflowの利用

Workflowの起動

対象Entityにデータを登録することでWorkflowが起動します。

Workflowのステータス確認

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

UserTaskの操作

データを登録します。

inquiry detailview

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

inquiry tasklist

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

inquiry detail

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

inquiry mytask

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

inquiry detail2

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

inquiry detail3

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

4.2. 配送管理

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

delivery flow

事前準備

Entityの作成

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

delivery property
Name DisplayName Type

settlementNo

請求番号

AutoNumber

書式:se-${yyyy}${MM}-${nextVal()}

settlementStatus

請求状況

Select

LocalValue:
1:入金前
2:配送完了
3:配送不可

deliverGoodsDate

納品予定日

Date

orderMail

メール

String

以下のようにリスナーの設定をして下さい。

delivery listener
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の作成

今回はUserTaskQueueを利用します。 利用にあたり、事前にデータを登録しておく必要がります。 iPLAssが用意しているmtp.workflow.UserTaskQueueというEntityのnameとコードに

practiceWorkflowQueue002

を指定してデータを作成してください。

なお、mtp.workflow.UserTaskQueueはメニューに登録されていません。 一時的にメニューに登録してください。

Userの作成

以下のアカウントを用意してください。

  • user001@tenantName

  • user002@tenantName

  • user003@tenantName

MailTemplateの作成

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

  • practice/PracticeWorkflow002_001

delivery edit mailtemplate1
  • practice/PracticeWorkflow002_002

delivery edit mailtemplate2
Commandの作成

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

  • practice/PracticeWorkflowCommand002

delivery edit command
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の作成

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

項目名 設定値

name

practice/PracticeWorkflow002

displayName

PracticeWorkflow002

description

配送管理

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

delivery workflow
各Itemの設定

各Itemの設定をしていきます。 記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • VariableItem

    delivery setting variable
    項目名 設定値

    name

    orderMail

    displayName

    OrderMail

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

  • MailTask(PW002MailTask1)

    delivery setting task1

    項目名

    設定値

    mailTemplateName

    practice/PracticeWorkflow002_001

    to

    定義形式:script

    to取得ロジック:orderMail

  • UserTask(PW002UserTask1)

    delivery setting task2
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    userTaskName

    配送処理:${pwe002Variable.settlementNo}

    delvery setting usertaskname
    • assignRule

      項目名 設定値

      タイプ

      ToQueue

      適用フロー名

      *

      割り当て種別

      ANYONE

      完了条件

      ANYONE

      QueueCode取得ロジック

      return "practiceWorkflowQueue002";

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

      delivery setting assignrule

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

    • taskResultStatus

      項目名 設定値

      name

      OK

      displayName

      配送完了

      項目名 設定値

      name

      NG

      displayName

      配送不可

  • SequenceFlow(PW002UserTask1 → PW002CommandTask1)

    delivery setting flow1

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

    項目名 設定値

    nodeResultStatus

    OK

  • SequenceFlow(PW002UserTask1 → PW002UpdateEntityTask1)

    delivery setting flow2

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

    項目名 設定値

    nodeResultStatus

    NG

  • UpdateEntityTask(PW002UpdateEntityTask1)

    delivery setting task3
    項目名 設定値

    variableName

    pwe002Variable

    updateRule

    タイプ:property

    プロパティ名:settlementStatus

    更新値:3

  • CommandTask(PW002CommandTask1)

    delivery setting task4
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand002

  • MailTask(PW002MailTask2)

    delivery setting task5
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow002_002

    to

    定義形式:script

    to取得ロジック:orderMail

    以上でWorkflowの作成、設定が完了となります。 次項からはWorkflowを実際に利用する為の準備となります。

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

Workflowの利用

Workflowの起動

対象Entityにデータを登録することでWorkflowが起動します。

Workflowのステータス確認

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

UserTaskの操作

データを登録します。

delivery detailview

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

作成したタスクを確認します。

delivery tasklist1

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

delivery tasklist2

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

delivery tasklist3

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

delivery detail

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

delivery view

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

4.3. 議事録承認

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

approval flow

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

事前準備

Entityの作成

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

approval property
Name DisplayName Type

minutes

議事録

Binary

members

回覧先

Reference

参照先:User

authorizerList

承認者リスト

Binary

Userの作成

以下のアカウントを用意してください。

  • user001@tenantName

  • user002@tenantName

  • user003@tenantName

MailTemplateの作成

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

  • practice/PracticeWorkflow003_001(議事録提出通知)

  • practice/PracticeWorkflow003_002(承認/否認依頼通知)

  • practice/PracticeWorkflow003_003(承認通知)

  • practice/PracticeWorkflow003_004(否認通知)

  • practice/PracticeWorkflow003_005(完了通知)

件名、内容は任意に設定して下さい。

Commandの作成

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

  • 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の作成

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

項目名 設定値

name

practice/PracticeWorkflow003

displayName

PracticeWorkflow003

description

議事録承認

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

approval workflow
各Itemの設定

各Itemの設定をしていきます。記載のない項目名については設定不要です。 ここまでで解説した項目については割愛します。 name、displayName、historyLoggin等必要に応じて設定してください。

  • UserTask(PW003UserTask1)

    approval setting task1
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ANYONE

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      post

      displayName

      議事録提出

  • MailTask(PW003MailTask1)

    approval setting task2
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_001

    to

    定義形式:STRING

    to取得ロジック:任意のアドレス

  • UserTask(PW003UserTask2)

    approval setting task3
    項目名 設定値

    assignRule

    assignRule参照

    taskResultStatus

    taskResultStatus参照

    • assignRule

      項目名 設定値

      タイプ

      ById

      適用フロー名

      *

      割り当て種別

      ALL

      完了条件

      ANYONE

      定義形式

      STRING

      ID取得ロジック

      admin@tenantName

    • taskResultStatus

      項目名 設定値

      name

      memberset

      displayName

      回覧先セット

      項目名 設定値

      name

      ngminutes

      displayName

      議事録差し戻し

  • MailTask(PW003MailTask2)

    approval setting task4
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_002

    to

    定義形式:STRING

    to取得ロジック:任意のアドレス

  • IntermediateTimerEvent(PW003IntermediateTimerEvent1)

    approval setting event1
    項目名 設定値

    Timer Type

    Delay

    Timer Unit

    Minuites

    Delay Expression

    "3"

  • CommandTask(PW003CommandTask1)

    approval setting task5
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_1

  • UserTask(PW003UserTask3)

    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", 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)

    approval setting task7
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_003

    to

    定義形式:STRING

    to取得ロジック:任意のアドレス

  • MailTask(PW003MailTask4)

    approval setting task8
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_004

    to

    定義形式:STRING

    to取得ロジック:任意のアドレス

  • CommandTask(PW003CommandTask2)

    approval setting task9
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_2

  • CommandTask(PW003CommandTask3)

    approval setting task10
    項目名 設定値

    commandConfig

    practice/PracticeWorkflowCommand003_3

  • MailTask(PW003MailTask5)

    approval setting task11
    項目名 設定値

    mailTemplateName

    practice/PracticeWorkflow003_005

    to

    定義形式:STRING

    to取得ロジック:任意のアドレス

  • SequenceFlow(PW003UserTask2 → PW003UserTask1)

    approval setting flow1

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

    項目名 設定値

    nodeResultStatus

    ng

  • SequenceFlow(PW003UserTask3 → PW003MailTask4 → PW003UserTask2)

    approval setting flow2

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

    項目名 設定値

    nodeResultStatus

    ng

  • SequenceFlow(PW003UserTask3 → PW003MailTask3)

    approval setting flow3
    項目名 設定値

    nodeResultStatus

    ok

EntityViewの設定

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

  • DetailFormViewの設定

    項目名 設定値

    ワークフロー定義名

    practice/PracticeWorkflow003

    ワークフロー変数名

    pwe003Variable

    ボタン表示名

    議事録ワークフロー起動

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

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

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

Workflowの利用

Workflowの起動

practice.PracticeWorkflowEntity003エンティティにデータを登録しワークフローを起動します。

approval startprocess
Workflowのステータス確認

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

UserTaskの操作

議事録を登録し、提出します。

approval create data

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

回覧先を登録し、回覧先セットを実施します。 議事録の登録時と同様に、対象データの編集にて回覧先を選択して保存します。 ここでセットしたユーザが承認/否認実施者となります。

approval set

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

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

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

approval detail

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

5. 次のステップ

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

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

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