1. ワークフロー
ワークフローとは業務上で必要な一連の処理手続きを指します。 この一連の処理手続きをWorkflowメタデータとして定義し、各プログラムから起動します。 主な機能として、起動されたワークフローに対するステータス管理、ユーザーによる承認処理などのタスクの管理と実行、起動可能なワークフローを制限するセキュリティ制御などがあります。
フロー定義は、下のようなフロー定義画面を利用して作成します。
2. 操作説明
2.1. タスク一覧
タスク一覧はTop画面に表示する画面部品です。 詳細はタスク一覧を参照してください。
2.2. タスク詳細
タスク詳細は割り当てられたタスクに対して、承認や差し戻しといったタスクを処理するための画面です。
タスク詳細画面
タスク詳細画面は完了済みのタスクの表示や、他のユーザーに割り当てられたタスクを表示します。
タスクの期限を表示しています。
タスクの優先度を表示しています。
自身に割り当てられたタスクの場合に表示されます。 タスク編集画面を表示します。
タスク詳細画面での操作をキャンセルし、TOP画面へ戻ります。
ワークフローを起動した際に紐付けられたデータです。 クリックすることでデータの詳細画面をダイアログ表示します。
親プロセスを含めた全履歴を表示する チェックボックスをチェックすることで、親プロセスを含めた全履歴を表示します。
タスク編集画面
タスク編集画面では自身に割り当てられたタスクを処理することができます。
タスクに対するコメントを設定します。 タスク処理のボタンをクリックした際に、ワークフロー履歴にコメントが記録されます。
タスクに対する処理を行います。 複数ある場合、ワークフローの設定に併せて以降の処理(データの更新、メールの送信、他のユーザーに次のタスクをアサイン等)が行われます。
自身に割り当てられたタスクを他のユーザーに委譲します。 クリックするとユーザーの選択画面が表示されるので、委譲先を選択します。
タスク編集画面での操作をキャンセルし、TOP画面へ戻ります。
管理可能なタスクから起動
タスク一覧の 管理可能なタスク タブから起動した場合、タスクの処理と割当変更ができます。
通常のタスク編集画面のタスク処理と同じですが、割当ユーザーが複数いる場合、どのユーザーの代わりにタスク処理を行うか選択する画面が表示されます。
割当ユーザーの代わりに他のユーザーへ委譲を行います。
3. ワークフローの管理
3.1. ワークフローの作成
フロー定義画面は4つのパーツで構成されています。
Item選択 パーツから必要なItemを フロー設計 パーツにドロップします。
ドロップしたItemをFlow Itemでつなげて一連のフローを作成します。
ドロップしたItemは フロー設計 パーツ内でドラッグすることで移動やサイズ変更ができます。
また フロー設計 パーツ内部でItemを選択すると、 プロパティ編集 パーツにプロパティが表示されます。
Hint にプロパティに対する説明が表示されるので、必要に応じてプロパティを設定します。
ドロップしたItemを削除する場合は、対象のItemを選択し、右クリックメニューから Itemを削除する を選択します。
また各Itemをつなぐ Flow については、線を曲げるためのPoint数(頂点)を変更する Point数を変更する メニューも表示されます。
フロー設計 パーツに表示されているグリッド表示を消したい場合は、 プロパティ編集 パーツの上部にあるボタンでON/OFFを切り替えます。
フロー設計 パーツ上でItemが重なってしまって、Itemを選択しにくい状況になった場合は、 プロパティ編集 パーツのリストから選択できます。
フローを構成するためのItemは、役割によって5つのカテゴリに分類されます。
- Variable
-
フロー内で共有する変数を定義するItemです。 この変数に格納した情報は各アイテムで参照できます。
- Flow
-
EventやActivity、Gatewayを結び、処理順序を定義するItemです。
- Event
-
フローの開始、完了、停止(キャンセル)など、処理のきっかけや終了を定義するItemです。 WorkflowはStartEventから開始されます。
- Activity
-
フロー内で実施する処理(タスク)を定義するItemです。 業務処理はActivityを利用して定義します。 ユーザーへのタスク設定やメール送信など予め定義されたActivityを利用したり、Commandで独自に処理を定義できます。
- Gateway
-
フローの分岐、または結合を定義するItemです。 Gatewayにはフローを分岐する
Splitと、フローを結合するJoinがあります。
またEvent、Activity、GatewayをまとめてNodeと表現します。
3.2. 設定
Variable
VariableItem
Workflow内で参照するオブジェクトを格納する入れ物。 Workflowの開始時または後述するCommandTask内でこの変数に対して値を設定できます。 またEntityの詳細画面と連携する際は、対象となるEntityをここで定義した変数に格納します。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
name |
○ |
アイテムの物理名。英数字のみ指定可能です。 各Itemからはこの変数名をkeyとして値を参照します。 |
|
displayName |
× |
アイテムの表示名。設定画面でのみ利用されます。 |
|
description |
× |
アイテムの概要などの説明用。 この項目は開発・メンテナンス用のものです。 |
|
multiple |
× |
false |
(未実装) |
lock |
× |
false |
この変数にEntityを格納する場合に、Workflowが開始されたタイミングで対象Entityをロックします。 このWorkflowが終了(またはキャンセル)したタイミングでロックを解除します。 ※ロックするユーザーは |
loadReferencesOnVariableRefresh |
× |
この変数にEntityを格納する場合に、変数を再読み込み(load)する際のLoadOptionに指定する |
起動時のパラメータについて
Workflowを開始するには
org.iplass.mtp.workflow.WorkflowManager#startProcess
を実行します。
public String startProcess(String workflowDefinitionName);
public String startProcess(String workflowDefinitionName, Map<String, Object> parameters);
この parameters で指定されたMapのkeyと name が一致するVariableItemに、
Mapのvalue値が格納されます。
起動方法についての詳細は プログラムコードからの起動 を参照してください。
Flow
SequenceFlow
各Nodeアイテムを結び、処理の順番を定義します。
遷移元Nodeの状態が COMPLETE になったタイミングで、遷移元Nodeの処理結果に応じて実行されるFlowが決定されます。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
name |
○ |
アイテムの物理名。英数字のみ指定可能です。 各Nodeはこの値を利用して接続情報を保持します。 |
|
displayName |
× |
アイテムの表示名。設定画面でのみ利用されます。 |
|
description |
× |
アイテムの概要などの説明用。この項目は開発・メンテナンス用のものです。 |
|
sourceNodeName |
○ |
遷移元のNodeの名前。 |
|
destinationNodeName |
○ |
遷移先のNodeの名前。 |
|
isDefault |
○ |
false |
遷移元Nodeに複数のFlowが接続されていた場合、 ※遷移元Nodeに対して |
nodeResultStatus |
× |
遷移元Nodeの実行結果(String)がここで指定したステータスと一致した場合に、このFlowを実行します。
未指定の場合、または ※実行結果を設定することができるNodeは |
|
conditionExpression |
× |
GroovyScriptを利用して、遷移元Nodeの処理結果に関係なく実行するための条件を指定できます。 ※ここで定義するスクリプトは |
遷移元Node、遷移先Nodeの指定
遷移元Node、遷移先Nodeは フロー設計 パーツ内でFlowをNodeにドロップすることで指定できます。
ドロップした位置によってNode上の結合部分(上下左右)に設定されます。
設定されるとPointが緑から黄色になります。
Nodeの状態(ステータス)
各Nodeは内部的に実行時の状態を持っています。
| 状態 | 説明 | 補足 |
|---|---|---|
NOT_START |
未開始 |
|
ACTIVE |
実行中 |
|
COMPLETED |
完了 |
遷移元Nodeがこの状態になるとFlowの実行条件が判断される。 |
CANCELED |
キャンセル |
遷移元のNodeが COMPLETED の状態になったタイミングで、接続されているFlowの実行条件が判断されます。
conditionExpressionの例
GroovyScriptの例です。 Workflowに定義されたVariableItemがバインドされています。
/*
* 対象商品のカテゴリコードが「category1」かを判定する。
* true:「category1」商品
*/
import org.iplass.mtp.ManagerLocator;
import org.iplass.mtp.entity.Entity;
import org.iplass.mtp.entity.EntityManager;
//商品カテゴリコード取得
def getProductCategoryCode() {
EntityManager em = ManagerLocator.manager(EntityManager.class);
//VariableItem(product)はnameを変数名にしてバインドされている
//変数productのcategoryに設定されているProductCategoryエンティティを検索
Entity category = em.load(product.category.oid, product.category.definitionName);
if (category != null) {
return category.code;
} else {
return "";
}
}
//商品カテゴリコードを取得
String categoryCode = getProductCategoryCode();
//判定
return "category1".equals(categoryCode);
Node(Event、Activity、Gateway)
Event、Activity、GatewayをNodeと呼びます。
Nodeには共通のプロパティがあります。
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
name |
○ |
アイテムの物理名。英数字のみ指定可能です。 |
|
displayName |
× |
アイテムの表示名。
|
|
description |
× |
アイテムの概要などの説明用。この項目は開発・メンテナンス用のものです。 |
|
historyLogging |
× |
false |
このタスクを実行した際の処理履歴を保存します。 |
historyLogging がtrueに設定されている場合、そのNodeの実行結果が mtp.workflow.ProccessHistory エンティティに登録されます。
ここに保存された履歴データは、Workflowエンティティの reference プロパティとして参照したり、タスク詳細画面でワークフロー履歴として参照できます。
Event
StartEvent
Workflowを開始する際の起点。
WorkflowManager#startProcess が実行されると、定義内に存在する StartEvent を実行します。
StartEventが実行されるとWorkflowの状態(ステータス)は ACTIVE になります。
StartEvent自体はWorkflowの状態を変更後、Nodeの状態が COMPLETED となり、後続の処理(接続されたFlow)を実行します。
StartEventについては以下の点に注意してください。
-
Workflow内で必ず1つ定義してください。
-
複数定義しないでください。
-
StartEventに対して複数のFlowを接続しないでください。
プロパティ
共通プロパティ を参照してください。
Flowの決定順序
後続の実行Flowを以下の優先度で決定します。
-
isDefaultプロパティがtrueのFlow -
接続されているFlowが1つのみの場合、接続されているFlow
-
該当するFlowが見つからない場合、
WorkflowRuntimeExceptionをthrow
Workflowエンティティについて
Workflowは、処理が開始されると1起動ごとに mtp.workflow.Workflow エンティティを登録します。
このWorkflowエンティティには workflowStatus プロパティがあり、Workflowの状態を保持しています。
| 状態 | 説明 | 補足 |
|---|---|---|
NOT_START |
未開始 |
StartEventが存在しない場合(定義的には不正な状態です) |
ACTIVE |
実行中 |
StartEventによってこの状態に設定される |
COMPLETED |
完了 |
EndEventによってこの状態に設定される |
CANCELED |
キャンセル |
TerminateEventやCommandTask、SubProcessTaskによってこの状態に設定される |
これは各Nodeの実行状態とは異なります。 Workflow全体のステータスです。
EndEvent
Workflowを終了させるNode定義。
EndEventが実行されるとWorkflowの状態(ステータス)は COMPLETED になり、Workflowは終了します。
プロパティ
共通プロパティ を参照してください。
TerminateEvent
WorkflowをキャンセルさせるNode定義。
TerminateEventが実行されるとWorkflowの状態(ステータス)は CANCELED になり、Workflowは終了します。
プロパティ
共通プロパティ を参照してください。
IntermediateEvent
Workflowの中間イベントを表すNode定義。 HistoryLogの出力によるWorkflowの状態マーク用イベント。 このイベント内での処理は実行されず、続けて後続のフローに遷移します。
プロパティ
共通プロパティ を参照してください。
IntermediateTimerEvent
Workflowの中間イベントを表すNode定義。 このNodeを完了させるための日付を指定したり、到達後の遅延時間を指定できます。 (タイマー機能)
Timerの設定
Timerを設定する方法は2種類あります。 それぞれの方法によって設定するプロパティがあります。
このイベントを完了させる日時を直接指定する方法です。
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
Date Expression |
○ |
GroovyScriptを利用して、イベントの実行日時を指定します。
ここで定義するスクリプトは |
このイベントを完了させる日時を、イベント到達時からの遅延時間として指定する方法です。
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
Time Unit |
○ |
遅延時間として指定する単位を指定します。 |
|
Delay Expression |
○ |
GroovyScriptを利用して、遅延時間を指定します。
ここで定義するスクリプトは |
Activity
CommandTask
メタデータとして定義されたCommandを実行するタスク定義。
Commandの実行結果(String)によってNode自体の実行ステータスを制御できます。
またCommandの実行結果をNodeの実行結果として返します
(接続されているFlowの nodeResultStatus で利用可能)。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
commandConfig |
○ |
実行するCommandメタデータを指定します。 |
|
keepActiveStatus |
× |
Nodeのステータスを |
|
completedStatus |
○ |
Nodeのステータスを |
|
canceledStatus |
× |
Nodeのステータスを |
|
listenEventClassName |
× |
|
その他は 共通プロパティ を参照してください。
NodeがACTIVE状態の挙動
Nodeが ACTIVE の状態で処理を終了すると、後続のFlowへと遷移されない状態となり、Workflow自体が実行中の状態のまま処理が中断されます。
この状態のWorkflowを再開するには、
org.iplass.mtp.workflow.WorkflowManager#signalEvent
メソッドを実行する必要があります。
public void signalEvent(Object event, String workflowInstanceId);
第2引数の workflowInstanceId は1起動ごとに生成されるWorkflowエンティティのOIDです。
startEvent時の戻り値としても返ってきます。
第1引数で指定する event パラメータのインスタンスが listenEventClassName で指定したクラスと一致する場合、再度Commandが実行されます。
Commandの実装例
Commandにバインドされる request からVariableItemを取得できます。
またCommand内からVariableItemに対して値を設定する場合は、 request.getSession().setAttribute("変数名", 値); を使います。
/*
* 現在の商品登録ステータスから次の登録ステータスを算出する。
*/
//ステータス算出
def getNextStatus(status) {
String updateStatus = "";
if (status == "01") {
updateStatus = "11";
} else if (status == "11") {
updateStatus = "21";
} else if (status == "21") {
updateStatus = "31";
}
return updateStatus;
}
//商品Entityを取得(VariableItemとしてproductが定義されている)
def product = request.getAttribute("product");
//println("product:" + product);
//現在のステータスから次のステータスを取得
String updateStatus = getNextStatus(product.wfStatus.value);
//println("update-status:" + updateStatus);
//変数にセット
request.getSession().setAttribute("updateStatus", updateStatus);
//コマンドの戻り値を返す(利用しないためなんでもいい)
return "OK";
UserTask
登録ユーザーに対して、タスク(承認、差戻しなどの作業)を割り当て、その回答を制御するタスク定義。
ユーザーの処理結果(回答)をタスク実行結果とします。
(接続されているFlowの nodeResultStatus で利用可能)
またユーザーに直接タスクを割り当てずにQueue(キュー)にタスクを貯める方法もあります。
ここで割り当てられたタスクは タスク一覧 や タスク詳細 画面から実行できます。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
assignRule |
○ |
ユーザーの割当ルールを設定します。 |
|
autoSkipRule |
× |
GroovyScriptを利用して、自動的にこのタスクを終了する条件を設定します。
スキップした場合はタスク実行結果が |
|
waitCompleted |
× |
true |
|
taskTargetEntity |
× |
このタスクで対象とするデータがEntityの場合に、そのEntityが格納されている変数名(VariableItem)を設定します。
ここで設定されたEntityは |
|
lockEntity |
× |
このタスクで対象とするデータがEntityの場合で、かつタスクを実行しているユーザーによってEntityをロックさせたい場合に、そのEntityが格納されている変数名(VariableItem)を設定します。
このタスクを実行中( ※ |
|
taskResultStatus |
○ |
ユーザーが選択することができる回答を設定します。 |
|
userTaskName |
× |
ユーザータスクの名前を設定します。 |
|
userTaskDescription |
× |
ユーザータスクの説明を設定します。 |
|
priority |
× |
ユーザータスクの優先度をGroovyTemplate形式で設定します。 UserTaskEntityの優先度のいずれかの値を返却してください。 |
|
limit |
× |
ユーザータスクの期限をGroovyScript形式で設定します。
|
|
delegate |
× |
false |
自身に割り当てられたタスクを他の人に委譲できるようにするかを指定します。 |
notifyMailTemplate |
× |
ユーザーがタスクを割り当てられた際にメールで通知する場合、送信するMailTemplateを指定します。 |
|
notificationClassName |
× |
ユーザーへのタスクの割り当てが発生した際に独自の処理を組み込む場合、 |
|
customPropertySetting |
× |
ユーザタスクカスタムプロパティEntityのプロパティを設定する処理をGroovyScript形式で設定します。
ユーザタスクカスタムプロパティEntityは、 |
その他は 共通プロパティ を参照してください。
UserTaskエンティティについて
UserTaskが起動されると、 mtp.workflow.UserTask エンティティが登録されます。
UserTask の設定項目の内、以下の項目が UserTask エンティティに反映されます。
| 設定項目 | 形式 |
|---|---|
userTaskName |
|
userTaskDescription |
|
priority |
|
limit |
|
customPropertySetting |
|
sample01/ProductFlow1-${workflowInstanceId}_${product.code}_${updateStatus}
<%@import java.util.Date%>
<%@import org.iplass.mtp.web.template.TemplateUtil%>
<%
//販売開始日とシステム日付を比較し優先度を設定
//販売開始日
Date startDate = (java.util.Date)product.getValue("startSalesDate");
//システム日時
Date systemDate = TemplateUtil.getCurrentTimestamp();
long diffDays = (startDate.getTime() - systemDate.getTime()) / (1000 * 60 * 60 * 24);
%>
<% if (diffDays < 3){ %>
31_CRITICAL
<% } else if (diffDays < 5){ %>
21_HIGH
<% } else { %>
11_NORMAL
<% } %>
/*
* 販売開始日の2日前をWorkflowの期限に設定
*/
import java.util.Date;
import java.util.Calendar;
//販売開始日を取得
Date startDate = (java.util.Date)product.getValue("startSalesDate");
//2日前を計算
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(startDate.getTime());
cal.add(Calendar.DATE, -2);
return cal.getTime();
// customPropertyNameプロパティにVariableItem「item」に格納されているEntityのnameをセットします
entity.customPropertyName = context.item.name;
登録された UserTask データは、TOP画面の タスク一覧 パーツで表示されます。
割当ルールの設定
対象のタスクをユーザーに割り当てる設定を行います。
| 設定項目 | 内容 |
|---|---|
種類 |
ユーザーにタスクを割り当てる方法は3種類あります。
|
適用フロー名 |
ルールはこのタスクに接続されているフロー(このタスクを遷移先としているフロー)ごとに設定することが可能です。
フローごとにルールを変更したい場合は、フロー名を設定します。
|
割当種別 |
タスクの割当対象となったユーザー全員に同じタスクを割り当てるか、そのうちの誰か1人に割り当てるかを指定します。
|
完了条件 |
割当条件で割り当てられたユーザーの各自のタスク完了に対して、UserTaskとしてどうなったタイミングで完了にするかを指定します。
|
割当の設定には、 割当種別 と 完了条件 というプロパティを指定する必要があります。
例えば ALL - ANYONE を指定した場合は、全対象ユーザーにタスクを割り当て、割り当てられたユーザーのうち誰かが回答したタイミングで処理を完了します。
ユーザーを直接割り当てる方法です。 割り当てるユーザーを指定する方法は3種類あります。
-
SCRIPT
GroovyScriptを利用して定義する方法です。 戻り値としてUserEntityのアカウントIDを返すように実装します。 返されたアカウントIDのユーザーにタスクが割り当てられます。 VariableItemがバインドされます。(例)Scriptで定義した割当ルール/* * 登録ステータスを元に承認対象グループを取得し、 * そのグループに所属するユーザーのIDを返す。 */ import org.iplass.mtp.ManagerLocator; import org.iplass.mtp.entity.Entity; import org.iplass.mtp.entity.EntityManager; import org.iplass.mtp.entity.query.Query; //グループに所属するユーザーのコードを取得 def getGroupUserAccountId(groupCode) { EntityManager em = ManagerLocator.manager(EntityManager.class); //Groupの取得(多参照のためList) List groups = em.searchEntity( new Query() .select("code", "children.code") .from("mtp.auth.Group") .where("code = '" + groupCode + "'")) .getList(); //グループが存在しない場合は空を返す if (groups.size == 0) { return [] } //Groupに所属するUserの取得 List users = em.searchEntity( new Query() .select("accountId") .from("mtp.auth.User") .where("groups.code = '" + groupCode + "'")) .getList(); //accountIdの取得 List accounts = []; if (users.size() > 0) { accounts = users.collect{e -> e.accountId} } /* //子GroupのUser検索(再帰) //Groupが階層化されていて、子Groupに所属するユーザーも対象とする場合 for (Entity group : groups) { if (group.children.code != null) { List subUsers = getGroupUserAccountId(group.children.code); accounts = accounts + subUsers; } } */ return accounts; } //更新ステータスに対する承認ユーザーの取得 def getAccountIdByStatus(status) { String groupCode = ""; if (status == "11") { groupCode = "product_approval_group1"; } else if (status == "21") { groupCode = "product_approval_group2"; } return getGroupUserAccountId(groupCode); } //VariableItem(updateStatus変数)に格納されている更新ステータスに対する承認ユーザーの取得 getAccountIdByStatus(updateStatus) -
EQL
Userエンティティに対するWhere条件を指定する方法です。 Where条件のみ指定可能なので注意してください。 VariableItemがバインドされます。(例)EQLで定義した割当ルールgroups.code = 'product_approval_group1' -
STRING(GroovyTemplate)
アカウントIDを直接指定する方法です。 VariableItemがバインドされます。 複数返す場合はカンマで区切ります。 (GroovyTemplate書式のため、シングルクォーテーション、ダブルクォーテーションなし)(例)Stringで定義した割当ルールuser2-1@approval1,user2-2@approval1
ユーザーに直接タスクを割り当てずに、キューにタスクをプールする方法です。
-
UserTaskQueueエンティティの登録
この方法を利用する場合は、あらかじめmtp.workflow.UserTaskQueueエンティティにキューをプールするためのデータを登録する必要があります。 汎用画面などから登録してください。http://hostname:port/コンテキストパス/テナント名/gem/generic/search/view/mtp.workflow.UserTaskQueue
なお、割当を行うユーザーには
mtp.workflow.UserTaskQueueエンティティに対する参照権限が必要になります。 ユーザーが属するロールに対して、Entity権限を設定してください。 -
割当ルールの定義
GroovyScriptを利用して定義します。 戻り値として登録済みのUserTaskQueueエンティティのcodeを返すように実装します。 VariableItemがバインドされます。(例)Scriptで定義した割当ルール/* * 登録ステータスを元に承認対象用のキューコードを返す。 */ //更新ステータスに対するキューコードの取得 def getQueueCodeByStatus(status) { String queueCode = ""; if (status == "11") { queueCode = "ProductApproval1"; } else if (status == "21") { queueCode = "ProductApproval2"; } return queueCode; } //VariableItem(updateStatus変数)に格納されている更新ステータスに対するキューコードの取得 getQueueCodeByStatus(updateStatus) -
Queueに登録されたタスクの割り当て
Queueに登録されたタスクは未割当の状態になっています。 タスクを処理するためには、ユーザーが自身にタスクを割り当てる必要があります。 TOP画面のタスク一覧パーツでの割当方法を説明します。作成されたタスクは
全てのタスクタブに表示されます。
この状態では、まだユーザーには割り当てられていません。 このキューを参照可能なユーザーが、この一覧から
割当を実行することで、 そのユーザーにタスクが割り当てられます。
ユーザーに割り当てられると、
MYタスクタブに表示されます。
割当種別が ALL かつ完了条件が ALL や VOTE の場合、ユーザーの回答不一致などによりタスク結果を確定できない可能性があります。
こうした場合に実行される競合解決ロジックを設定できます。
競合解決ロジックはGroovyScriptを利用して定義します。
戻り値としてタスクの taskResultStatus のnameを返すよう実装します。
VariableItemと各ユーザーの回答結果がバインドされます。
競合解決ロジックが実行されると、戻り値をタスク結果としてUserTaskが完了します。
競合解決ロジックが未設定、または競合解決ロジックから taskResultStatus 以外の値が返された場合は、 CONFLICTED をタスク結果としてUserTaskは未完了のまま待機します。
タスク結果の設定
ユーザーがタスクを実行する際に結果として選択可能な値を taskResultStatus に設定します。
ここで設定した値は、 タスク詳細 画面でユーザーが選択する候補(ボタン)になります。
| 設定項目 | 内容 |
|---|---|
name |
ステータスの値です。この値がユーザーが選択した結果として利用されます。 |
displayName |
表示名です。ユーザータスクに表示されるボタン文言になります。 |
primary |
|
ここでユーザーが選択した結果と割当ルールの完了条件によって、このタスクの実行結果が決定されます。
スキップルールの設定
タスクを自動的に完了(スキップ)するルールをGroovyScriptとして定義できます。
ここで定義するスクリプトは boolean(true:スキップ)を返すようにする必要があります。
VarialbleItemがバインドされます。
/*
* 商品の価格が500円未満でステータスが「21」(G3承認待ち)の場合はスキップする。
* true:500円未満かつステータスが「21」(G3承認待ち)
*/
//println("checkPrice:" + product.price);
//println("checkWfStatus:" + product.wfStatus);
return (product.price < 500 && "21".equals(product.wfStatus.value));
委譲の設定
delegate をtrueにするとユーザーが処理を他者に委譲できます。
委譲可能な場合、 タスク詳細 画面に 委譲 ボタンが表示され、委譲するユーザーが選択できます。
委譲先のユーザーを選択すると、委譲先のユーザーにタスクが割り当てられます。 (委譲したユーザーのタスクはキャンセルされます)
カスタム処理の設定
ユーザーにタスクが割り当てられた際に実行するカスタム処理を設定できます。
org.iplass.mtp.workflow.UserTaskNotification インターフェースを実装したクラスの名前を指定します。
package sample;
import java.util.Arrays;
import org.iplass.mtp.workflow.Assignment;
import org.iplass.mtp.workflow.UserTask;
import org.iplass.mtp.workflow.UserTaskNotification;
public class SampleUserTaskNotification implements UserTaskNotification {
@Override
public void assigned(UserTask userTask, Assignment[] assignments) {
System.out.println("userTask:" + userTask.getOid());
if (assignments != null) {
Arrays.asList(assignments).stream().forEach(a -> {
System.out.println("assignment:" + a.getOid());
});
}
}
}
UpdateEntityTask
Entityが格納されている変数(VariableItem)を指定して、格納されているEntityを更新するタスク定義。
UpdateEntityTask自体はEntityを変更後、Nodeの状態が COMPLETED となり、後続の処理(接続されたFlow)を実行します。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
variableName |
○ |
Entityが格納されている変数名(VariableItem)を設定します。 |
|
updateRule |
○ |
更新内容を設定します。 |
その他は 共通プロパティ を参照してください。
updateRuleの設定
updateRule を指定する方法は2種類あります。
それぞれの方法によって設定するプロパティがあります。
-
Property
対象EntityのProperty名と設定値を直接指定する方法です。
設定値が固定できる場合に利用します。設定項目 必須 デフォルト値 内容 プロパティ名
○
更新対象のプロパティ名を指定します。
更新値
○
更新する値を指定します。
-
Scripting
GroovyScriptを利用してバインドされたEntityのプロパティを設定する方法です。 指定したVariableItemに格納されたEntityはentityとしてバインドされます。 他のVariableItem値を取得したい場合はcontext.変数名で取得できます。(例)Scriptingの例/* * 対象商品の更新ステータスに「updateStatus」変数に設定されたステータスをセットする。 * * 対象となるproductエンティティは「entity」としてバインドされる。 * (variableNameプロパティで「product」を設定する必要がある) * また変数を取得したい場合は「context.変数名」で取得できる。 */ import org.iplass.mtp.entity.SelectValue; //変数updateStatusにセットされた値でステータスを更新 //println("更新Status:" + context.updateStatus); entity.wfStatus = new SelectValue(context.updateStatus);
MailTask
メタデータとして定義されたMailTemplateをメール本文のテンプレートとして、メールを送信するタスク定義。
MailTask自体はメールを送信後、Nodeの状態が COMPLETED となり、後続の処理(接続されたFlow)を実行します。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
mailTemplateName |
○ |
利用するMailTemplateメタデータを指定します。 MailTemplateにはVariableItemがバインドされます。 |
|
sendIndividual |
× |
false |
To、Cc、Bccに指定されたユーザーが複数いる場合に、個別にメールを送信する場合に |
from |
× |
送信元メールアドレスを設定します。未指定の場合、テナントの設定値が指定されます。 |
|
replyTo |
× |
返信先メールアドレスを設定します。未指定の場合、テナントの設定値が指定されます。 |
|
to |
× |
TOメールアドレスを設定します。 |
|
cc |
× |
CCメールアドレスを設定します。 |
|
bcc |
× |
BCCメールアドレスを設定します。 |
その他は 共通プロパティ を参照してください。
メールアドレスの設定
from と replyTo は1つのみ、 to 、 cc 、 bcc は複数指定できます。
またメールアドレスを指定する方法は3種類あります。
-
SCRIPT
GroovyScriptによる設定方法です。 戻り値としてメールアドレスの文字列を返すように実装します。(例)SCRIPTの例new String[] {"user2-1@approval1", "user2-2@approval1"}; -
EQL
EQLの結果としてメールアドレスを返すQueryを定義する方法です。(例)EQLの例select mail from mtp.auth.User where oid = ${product.updateBy} -
STRING(GroovyTemplate)
メールアドレスを直接指定する方法です。 複数返す場合はカンマで区切ります。
(GroovyTemplate書式のため、シングルクォーテーション、ダブルクォーテーションなし)(例)STRINGの例user2-1@approval1,user2-2@approval1
SubProcessTask
メタデータとして定義されたWorkflowをサブプロセスとして実行するタスク定義。 フローを分割したり、共通のフローなどを別途Workflowとして定義しておくことで利用できます。
プロパティ
| 設定項目 | 必須 | デフォルト値 | 内容 |
|---|---|---|---|
subWorkflowName |
○ |
サブプロセスとして実行するWorkflowメタデータを指定します。 |
|
variableMapping |
× |
サブプロセスで定義したWorkflowの変数(VariableItem)に自身の変数を引き渡す際、変数名が異なる場合にMappingを定義します。
変数名が同じ場合は指定する必要はありません。 |
|
cascadeSubProcessCancel |
× |
true |
サブプロセスが |
その他は 共通プロパティ を参照してください。
変数の連携
GroovyScript形式で設定します。
SubProccessに渡す変数設定用のMapは subParam としてバインドされます。
この変数に対して、 subParam.SubProccess変数名 = 自身の変数名 の形式でMappingを定義します。
/*
* SubProcessに渡す変数Map(バインド変数:subParam)に対して変数をセットする。
*/
//println("before.subParam.size=" + subParam.size()); //空のMap
//println("product=" + product);
subParam.productSub = product;
Gateway
SplitParallelGateway
分岐用。自身が接続元になっている全てのFlowを実行します。
SplitParallelGateway自体はすぐにNodeの状態が COMPLETED となり、後続の処理(接続されたFlow)を実行します。
接続されているFlowに conditionExpression が設定されている場合は、trueのもののみ実行します。
プロパティ
共通プロパティ を参照してください。
SplitExclusiveGateway
分岐用。自身が接続元になっているFlowのうち、どれか1つを実行します。
SplitExclusiveGateway自体はすぐにNodeの状態が COMPLETED になり、後続の処理(接続されたFlow)を実行します。
プロパティ
共通プロパティ を参照してください。
Flowの決定順序
後続の実行Flowを以下の優先度で決定します。
-
conditionExpressionが指定されていない、またはconditionExpressionがtrueのFlow -
該当するFlowが見つからない場合、
isDefaultがtrueのFlow -
該当するFlowが見つからない場合、
WorkflowRuntimeExceptionをthrow
conditionExpression の判定にて複数のFlowが該当する場合、
どのFlowが実行されるかは不確定となります。
JoinAsyncGateway
結合用。自身が接続先となっているそれぞれのFlowが到達するタイミングで、後続の処理(接続されたFlow)を実行します。
もし複数Flowが別々のタイミングで到達した場合は、都度、後続の処理(接続されたFlow)を実行します。
JoinAsyncGateway自体はすぐにNodeの状態が COMPLETED となり、後続の処理(接続されたFlow)を実行します。
プロパティ
共通プロパティ を参照してください。
Flowの決定順序
後続の実行Flowを以下の優先度で決定します。
-
isDefaultがtrueのFlow -
接続されているFlowが1つのみの場合、接続されているFlow
-
該当するFlowが見つからない場合、
WorkflowRuntimeExceptionをthrow
JoinAsyncGatewayに対して複数のFlowを接続しないでください。
JoinSyncGateway
結合用。自身が接続先となっているFlowが全て到達したタイミングで、後続の処理(接続されたFlow)を実行します。
JoinSyncGatewayは全てのFlowが到達するまで ACTIVE 状態のままで、全て到達したタイミングで COMPLETED となり、後続の処理(接続されたFlow)を実行します。
プロパティ
共通プロパティ を参照してください。
Flowの決定順序
後続の実行Flowを以下の優先度で決定します。
-
isDefaultがtrueのFlow -
接続されているFlowが1つのみの場合、接続されているFlow
-
該当するFlowが見つからない場合、
WorkflowRuntimeExceptionをthrow
JoinSyncGatewayに対して複数のFlowを接続しないでください。
3.3. 利用方法
プログラムコードからの起動
プログラムコードからワークフローを起動するには、org.iplass.mtp.workflow.WorkflowManager の startProcess(ワークフロー定義名, パラメータ) を実行します。
パラメータにワークフローのVariableItemの名前をキーにして値を格納することで、ワークフロー内で変数として利用できるようになります。
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("orderDetail", entity);
parameters.put("orderMail", entity.orderMail);
//ワークフロー定義とパラメータを指定してワークフローを起動
wm.startProcess("order/deliveryOrder", parameters);
gem画面からの起動
定義したWorkflowとEntityを紐づけてEntityの詳細画面からWorkflowを起動したり、ログインユーザーに割り当てられたタスクをTop画面上に表示し、タスクを処理する画面を提供しています。
ユーザータスク画面
UserTaskを利用した場合、ユーザーにタスクが割り当てられます。
キューを利用した場合はキューにタスクがプールされます。
この割り当てられたタスクをユーザーに通知する機能として、TOP画面のパーツ タスク一覧 があります。
また、この タスク一覧 からユーザーに割り当てられたタスクを実行するための編集画面が表示されます。
TOP画面の設定方法については、TopViewを参照してください。
タスク一覧及び編集画面の表示設定は、TOP画面のパーツにて行います。
TOP画面にユーザーに割り当てられたタスクの一覧を表示します。 ワークフローの処理はこの一覧からタスク詳細を表示し、処理を行っていきます。
| 設定項目 | 設定内容 |
|---|---|
Title |
タイトルをカスタマイズしたい場合に指定します。
未設定の場合は |
Icon Tag |
Font Awesomeによるアイコンタグを設定します。 |
Class |
スタイルシートのクラス名を指定します。複数指定する場合は半角スペースで区切って下さい。 |
Height |
タスク一覧の高さを設定します。 |
Tab Settings |
タブの表示を設定します。
|
Search Limit |
タスク一覧に表示するタスクの件数を設定します。 |
hide [Detail] link when editable |
タスクが編集可能な場合に、詳細リンクを非表示にするかを設定します。
非表示にした場合、完了しているタスクは |
hide [Edit] link |
編集リンクを非表示にするかを設定します。 必ず詳細画面に遷移させてから編集させたい場合に利用します。 |
Detail Link Display name |
詳細リンクの表示文言を設定します。
未指定の場合は |
Edit Link Display name |
編集リンクの表示文言を設定します。
未指定の場合は |
Mark processed assignment as complete. |
未完了のタスクでも、自身の割当が完了すれば完了済みのタスクとして扱うかどうかを設定します。
チェックした場合、 |
Display tasks completed by other assigned people. |
自分以外の人が完了したタスクを表示するかを設定します。
チェックした場合、 |
Default Sort Setting |
ソートする項目と種別(昇順、降順)を指定します。 |
Target Workflow |
タスク一覧の |
Task Queue Select Condition |
|
Display tasks whoes taskQueues is null. |
キューの取得条件を指定した場合に、キューに紐づかないタスクを取得するかを指定します。 チェックした場合、キューが未指定のタスクも取得します。 |
Hide the comment input field in task view. |
タスク詳細画面のコメント入力欄の表示・非表示を設定します。 チェックした場合、コメント入力欄が非表示になります。 |
Show Properties |
タスク一覧に表示するタスクの項目を指定します。 |
Filter Condition Setting |
フィルター条件に表示する項目を指定します。詳細はフィルター条件設定項目を参照してください。 |
Variable |
タスク一覧に変数の項目を表示する場合に、対象となる変数を選択します。 |
Entity |
タスク一覧に変数の項目を表示する場合に、対象となるEntityを選択します。 |
Entity Properties |
|
Show Properties |
|
フィルター条件設定項目です。
| 設定項目 | 設定内容 |
|---|---|
Show Filter Condition |
タスク一覧画面のフィルター条件の表示・非表示を設定します。 チェックした場合、フィルター条件が表示されます。 |
Custom Filter Title |
フィルター条件のタイトルを変更する場合に指定します。カスタマイズ多言語対応可能です。 |
UserTask Property |
UserTaskプロパティ、UserTaskカスタムプロパティが表示されます。
|
Show Filter Condition Property |
タスク一覧のフィルター条件に表示する項目です。
|
フィルター条件プロパティエディタは各フィルター条件プロパティの入力表示設定になります。
TOP画面パーツ タスク一覧フィルター条件設定`の`Show Filter Condition Property に配置した各プロパティの設定を変更をすることができます。
フィルター条件設定について、詳細はフィルター条件設定項目を参照してください。
各プロパティエディタで共通の設定項目です。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
入力カスタムスタイル |
各プロパティのinput要素に対して、直接style属性を指定することが可能です。 例えば入力用のinputの幅を調整したい場合などに利用します。 GroovyTemplate書式で設定します。 バインド変数についてはScript編集画面のNoteを参照してください。 |
AutoNumber 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
完全一致で検索 |
検索一覧での検索処理時に完全一致検索とする場合はチェックを入れます。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Binary 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Boolean 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
真の表示ラベル |
真の選択肢に表示するラベルを設定します。カスタマイズ多言語対応可能です。 |
|
偽の表示ラベル |
偽の選択肢に表示するラベルを設定します。カスタマイズ多言語対応可能です。 |
|
RADIO形式の場合、アイテムを縦に並べる |
RADIO形式の場合、アイテムを縦に並べるかを指定します。 |
|
「値なし」を検索条件の選択肢に追加する |
「値なし」を検索条件の選択肢に追加するかを指定します。値なしが選択された場合、IS NULLを検索条件として指定します。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Date 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
単一日で指定 |
チェックした場合、検索条件を単一日を指定する形で表示します。 OFFの場合は、FromToの入力フィールドを表示し、範囲検索を行います。 単一日で指定がONの場合
単一日で指定がOFFの場合
From、To入力時 → |
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From日付を非表示にします。 単一日で指定がOFFの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To日付を非表示にします。 単一日で指定がOFFの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
現在日付設定ボタンを非表示 |
チェックした場合、DatePickerの現在日付設定ボタンを非表示にします。 |
|
曜日を表示 |
チェックした場合、日付にあわせて曜日を表示します。 曜日の入力はできません。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Decimal 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
カンマ表示 |
チェックした場合、テキストフィールドからフォーカスアウトした際にカンマ区切りの表示を行います。 |
|
範囲で検索 |
チェックした場合、検索条件でFromToの入力フィールドを表示し、範囲検索を行います。 範囲検索がONの場合
From、To入力時 → 範囲検索がOFFの場合
|
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Expression 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
プロパティエディタを指定している場合は、指定されたプロパティエディタの設定が優先されます。 |
|
プロパティエディタ |
プロパティエディタを設定します。 ExpressionプロパティのResultTypeに設定されている内容に合わせて設定してください。 設定した場合、そのEditor設定にあわせて画面表示を行います。 未設定の場合は、値を文字列として表示します。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 プロパティエディタが設定されている場合は、そのプロパティエディタの表示カスタムスタイルが適用されます。 |
Float 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
カンマ表示 |
チェックした場合、テキストフィールドからフォーカスアウトした際にカンマ区切りの表示を行います。 |
|
範囲で検索 |
チェックした場合、検索条件でFromToの入力フィールドを表示し、範囲検索を行います。 範囲検索がONの場合
From、To入力時 → 範囲検索がOFFの場合
|
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Integer 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
カンマ表示 |
チェックした場合、テキストフィールドからフォーカスアウトした際にカンマ区切りの表示を行います。 |
|
範囲で検索 |
チェックした場合、検索条件でFromToの入力フィールドを表示し、範囲検索を行います。 範囲検索がONの場合
From、To入力時 → 範囲検索がOFFの場合
|
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Reference 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 | ||
|---|---|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|||
表示ラベルとして扱うプロパティ |
Link |
表示ラベルとして扱うプロパティを設定します。
|
||
選択ダイアログを利用 |
Link |
チェックした場合、条件指定方法をテキストから、選択ダイアログ(レコード選択)にします。 |
||
検索条件で単一選択 |
Link |
チェックした場合、条件指定時に、選択ダイアログでのレコード選択方法を複数選択から単一選択に変更します。 |
||
検索条件で全選択許可 |
Link |
参照先の選択画面で複数選択が可能な場合、全選択時の範囲を変更します。 ただし多重度以上の選択はできず、先頭から順に選択されます。
|
||
アイテムを縦に並べる |
Checkbox |
アイテムを縦に並べるかを指定します。 |
||
「値なし」を検索条件の選択肢に追加する |
Checkbox |
「値なし」を検索条件の選択肢に追加するかを指定します。値なしが選択された場合、IS NULLを検索条件として指定します。
|
||
ダイアログ表示アクション |
Link |
参照リンク押下時のダイアログ表示時のアクションを設定します。 |
||
選択アクション |
Link |
選択ボタン押下で実行されるアクションを設定します。 |
||
ビュー定義名 |
Link |
各アクション実行時に表示する画面のView定義名を設定します。
未指定の場合は |
||
URLパラメータ |
Link |
選択ボタン、新規ボタン、詳細/編集リンク押下で表示する画面に渡すパラメータを設定します。 詳細はURLパラメータを参照してください。 |
||
動的URLパラメータ |
Link |
選択ボタン押下で表示する画面に渡すパラメータを作成するためのJavascriptを設定します。 URLパラメータに設定した値が変数のurlParamに格納されます。 urlParamを含めてURLパラメータの文字列をreturnしてください。 詳細は動的URLパラメータを参照してください。 |
||
検索条件 |
Select |
選択可能項目を検索する際の条件に依存しない検索条件を設定します。 |
||
ソートアイテム |
Select |
選択項目をソートする項目を設定します。 |
||
ソート種別 |
Select |
選択項目をソートする種別を設定します。 |
||
参照コンボ設定 |
RefCombo |
選択値を階層的に指定することができます。 詳細は参照コンボの設定を参照してください。 |
||
参照コンボの検索方法 |
RefCombo |
通常検索(検索一覧の検索タブ)の検索条件に参照コンボを利用する場合に、参照コンボの検索方法を設定します。
|
||
参照ツリー設定 |
Tree |
再帰構造のエンティティ(同一エンティティの参照をプロパティに持つエンティティ)をツリーから選択することが出来ます。 詳細は参照ツリーの設定を参照してください。 |
||
ユニークキープロパティ |
Unique |
参照エンティティを検索するためのユニークキープロパティを指定します。 |
||
入力カスタムスタイル |
共通設定項目を参照してください。 |
選択ボタン押下で表示する画面に渡すパラメータを設定します。
以下の変数がバインドされています。
- request
-
リクエスト
- session
-
セッション
GroovyTemplate書式で設定します。改行やスペースは無視されます。
<%
if (request.getParam("sc_name") == null) {
//初期表示時に検索(es=t)
%>
es=t
<%
}
%>
選択ボタン押下で表示する画面に渡すパラメータを作成するためのJavascriptを設定します。
以下の変数がバインドされています。
- urlParam
-
URLパラメータで設定した固定パラメータ
Javascript書式で設定します。画面内の項目の値を取得し、URLパラメータ形式の文字列をreturnします。 URLパラメータの項目でパラメータを設定している場合、それを含めた形でreturnしてください。
const name = $("input[name='name']").val()
const str = $("input[name='str']").val()
return "sc_name=" + name + "&sc_str=" + str + "&" + urlParam;
表示タイプを RefCombo に設定することで、階層的な構造をもつ参照プロパティを絞り込みながら選択することが可能になります。
上位の選択値(連動元)に合わせて選択可能な項目を絞り込みます。
| 設定項目 | 設定内容 |
|---|---|
プロパティ名 |
上位のコンボとして表示する参照のプロパティ名を設定します。 |
検索条件 |
上位コンボの選択肢を取得する際に自動的に付与される検索条件をPreparedQuery形式で指定します。 WHERE句に指定する条件を指定してください。 |
参照コンボ設定 |
複数階層化させる場合に、さらに上位のコンボに関する設定をします。 |
ソートアイテム |
選択可能項目をソートする項目を設定します。 |
ソート種別 |
選択可能項目をソートする種別を設定します。 |
表示ラベルとして扱うプロパティ |
表示ラベルとして扱うプロパティを設定します。
|
(例)ユーザータスクカスタムプロパティエンティティで3階層の構造をもったカテゴリエンティティ3を定義した場合の設定方法
-
ユーザータスクカスタムプロパティエンティティ
3階層のカテゴリ構造となっている最下位層のCategory3エンティティを保持している。
-
参照している各カテゴリエンティティ
Category1 > Category2 > Category3
-
Category3エンティティを配置
-
Category3の設定
Category3エンティティから上位のCategory2エンティティ、さらに上位のCategory1エンティティの設定を行う
表示タイプを Tree に設定することで、再帰構造をもつエンティティをツリー表示し、任意の階層から選択することが出来ます。
同一エンティティを対象にしているため、どの階層からでもデータを選択できます。
| 設定項目 | 設定内容 |
|---|---|
最上位階層の検索条件 |
ツリーに表示する最上位階層の検索条件を設定します。 |
子階層のプロパティ名 |
選択可能項目をソートする項目を設定します。 |
(例)ユーザータスクカスタムプロパティエンティティで再帰構造をもったCategoryエンティティを定義した場合の設定方法
-
メインエンティティ
再帰構造となっているCategoryエンティティを保持している。
-
Categoryエンティティ
親と子(被参照)を持ち、再帰構造となっている。
-
Categoryエンティティを配置
-
Categoryの設定
Select 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 | ||
|---|---|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|||
選択値 |
詳細は選択値設定を参照してください。 未指定の場合、エンティティ定義から選択値を取得します。 画面個別にカスタマイズしたい場合に設定して下さい。 |
|||
RADIO、CHECKBOX形式の場合、アイテムを縦に並べる |
RADIO、CHECKBOX形式の場合、アイテムを縦に並べるかを指定します。 |
|||
「値なし」を検索条件の選択肢に追加するか |
「値なし」を検索条件の選択肢に追加するかを指定します。値なしが選択された場合、IS NULLを検索条件として指定します。
|
|||
入力カスタムスタイル |
共通設定項目を参照してください。 |
選択値を設定します。
| 設定項目 | 設定内容 |
|---|---|
表示名 |
選択肢のラベルを設定します。 |
値 |
選択肢の値を設定します。 |
クラス名 |
スタイルシートのクラス名を指定します。 複数指定する場合は半角スペースで区切って下さい。 |
String 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 | ||
|---|---|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|||
選択値 |
選択値を追加設定できます。 詳細は選択値設定を参照してください。 PropertyとしてはStringで保持するが、入力値を固定させたい場合に利用します。 |
|||
範囲で検索 |
チェックした場合、通常検索(検索一覧の検索タブ)の検索条件でFromToの入力フィールドを表示し、範囲検索を行います。 範囲検索がONの場合
From、To入力時(入力string値数字を含まれている場合) → 範囲検索がOFFの場合
|
|||
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|||
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|||
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|||
完全一致で検索 |
チェックした場合、条件を設定した時に完全一致で検索します。
表示タイプが |
|||
「値なし」を検索条件の選択肢に追加するか |
「値なし」を検索条件の選択肢に追加するかを指定します。値なしが選択された場合、IS NULLを検索条件として指定します。
|
|||
入力カスタムスタイル |
共通設定項目を参照してください。 |
Time 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
単一日で指定 |
チェックした場合、検索条件を単一日を指定する形で表示します。 |
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
時間の表示範囲 |
時間の各リストをどこまで表示するか下記から選択します。
|
|
分の間隔 |
分のリストの表示間隔を下記から選択します。
|
|
TimePickerを利用 |
チェックした場合、入力フィールドでTimePickerを利用できます。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
Timestamp 型用のプロパティエディタです。
| 設定項目 | 表示タイプ | 設定内容 |
|---|---|---|
表示タイプ |
画面に表示する方法を下記から選択します。
|
|
単一日で指定 |
チェックした場合、検索条件を単一日を指定する形で表示します。 |
|
検索条件Fromを非表示 |
チェックした場合、検索条件のうち、From部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件Toを非表示 |
チェックした場合、検索条件のうち、To部分を非表示にします。 範囲で検索がONの場合に有効になります。 |
|
検索条件範囲記号を非表示 |
チェックした場合、検索条件のうち、範囲記号 |
|
現在日付設定ボタンを非表示 |
チェックした場合、DatePickerの現在日付設定ボタンを非表示にします。 |
|
曜日を表示 |
チェックした場合、日付にあわせて曜日を表示します。 曜日の入力はできません。 |
|
時間のデフォルト値を設定しない |
チェックした場合、日付入力時に時間のプルダウンにデフォルト値を設定しないようにします。 |
|
時間の表示範囲 |
時間の各リストをどこまで表示するか下記から選択します。
|
|
分の間隔 |
分のリストの表示間隔を下記から選択します。
|
|
TimePickerを利用 |
チェックした場合、入力フィールドでTimePickerを利用できます。 |
|
入力カスタムスタイル |
共通設定項目を参照してください。 |
タスク詳細画面の表示項目を設定します。
| 設定項目 | 設定内容 |
|---|---|
Show Section Properties |
タスク詳細で表示する項目を選択します。カスタマイズ多言語対応可能です。 詳細はタスク詳細項目を参照してください。 |
Variable Entity View Names |
リンクまたはタスク詳細内で表示するタスク対象データの表示設定を行います。 詳細はVariable Entity View Nameを参照してください。 |
Section Configuration |
タスク詳細で表示する項目のカスタマイズ多言語対応などを設置します。 |
Workflow History Settings |
ワークフロー履歴表示に関する設定を行います。 詳細はワークフロー履歴設定項目を参照してください。 |
タスク詳細画面に表示される項目です。
| Property | Section | 詳細画面の項目名 |
|---|---|---|
Variable Item |
Task Target |
タスク対象データ |
Status |
Detail |
詳細情報 - ステータス |
Workflow |
Detail |
詳細情報 - ワークフロー名 |
Workflow Status |
Detail |
詳細情報 - ワークフロー状態 |
Task Result |
Detail |
詳細情報 - 処理結果 |
QueueName |
Detail |
詳細情報 - タスクキュー名 |
CompletionDate |
Detail |
詳細情報 - 完了日 |
User |
Propsessing reseult of the user assignment |
割当ユーザーの処理結果 - ユーザー |
Task |
Propsessing reseult of the user assignment |
割当ユーザーの処理結果 - 処理結果 |
Assign State |
Propsessing reseult of the user assignment |
割当ユーザーの処理結果 - アサイン状態 |
CompletionDate |
Propsessing reseult of the user assignment |
割当ユーザーの処理結果 - 完了日 |
Comment |
Propsessing reseult of the user assignment |
割当ユーザーの処理結果 - コメント |
Process Name |
Workflow History |
ワークフロー履歴 - 処理名 |
Task Status |
Workflow History |
ワークフロー履歴 - ステータス |
Task Result |
Workflow History |
ワークフロー履歴 - 処理結果 |
ProcessBy |
Workflow History |
ワークフロー履歴 - プロセス実行者 |
CompletionDate |
Workflow History |
ワークフロー履歴 - 完了日 |
Detail |
Workflow History |
ワークフロー履歴 - 詳細 |
タスク詳細内でタスク対象データを表示する際の設定を行います。
Display in Detail をチェックした場合、Entityの詳細画面をタスク詳細内に表示します。
未チェックの場合はリンクで表示され、リンククリックでEntityの詳細画面を表示します。
| 設定項目 | 設定内容 |
|---|---|
Workflow |
表示設定を行うワークフローを選択します。 |
Variable |
表示設定を行う変数を選択します。 |
Entity |
表示設定を行うEntityを選択します。 |
Entity View Name |
上記で選択したワークフロー、変数、Entityが一致するタスク対象データに使用するビュー名を設定します。 タスク詳細からのリンク、タスク詳細内での表示を行う際に利用されます。 ※GroovyTemplate書式で記述してください。 |
Display in Detail |
タスク詳細にEntityを表示する場合にチェックします。 |
ワークフロー履歴に関する設定項目です。
| 設定項目 | 設定内容 |
|---|---|
Display only the user who processed the task. |
ワークフロー履歴の詳細にタスクを完了させた人のみ表示するかを設定します。 |
Display all history including parent process. |
|
Display all history including parent process in initial view. |
ワークフロー履歴初期表示時に親プロセスを含めた全履歴を表示するかを設定します。 |
Workflowの実行権限
Workflowを実行できるユーザーをロールをベースに制御できます。 Entityの詳細画面では、この設定により実行ボタンの表示・非表示が自動的に制御されます。
連携方法については、Workflow権限を参照してください。
UserTaskの管理権限
タスク詳細からタスクを操作できるのは、タスクを割り当てられたユーザーだけですが、管理権限がある場合、割り当てられたユーザーの代わりにタスクの操作を行ったり、ユーザーの割り当てを変更出来るようになります。
タスク一覧の 管理可能なタスク タブをクリックすると、管理可能な未処理のタスクが表示されます。
ここから編集画面を表示することで代理でタスクの処理が行えます。
連携方法については、UserTask権限を参照してください。