ワークフロータスクノードリファレンス
名前が示すように、タスクは 作業 が行われるワークフローの一部です。 タスクはユーザーに割り当てる必要があります。ユーザーは送信されたアセットを確認し、ワークフローのアセットが公開するための条件を満たしているか、またはさらに作業が必要かを判断します。
他のワークフローノードとは異なり、タスクノードには割り当てがあります。これは、ワークフロープロセスがタスクノードに入ったときに、ユーザーが 何かを行う(多くの場合は、送信されたアセットの承認または拒否)ことが期待されるためです。
通常、タスクノードには、タスクタイマー、割り当て、アクション(通知とスクリプトを含めることができます)、およびトランジションが含まれます。 通知とアクションはタスクノードに限定されませんが、タスクノードとその割り当ては独自の記事(この記事)に値します。
唯一の承認者定義のレビュータスクを見てみましょう。
<task>
<name>review</name>
<actions>
<notification>
<name>Review Notification</name>
<template>${userName} sent you a ${entryType} for review in the workflow.</template>
<template-language>freemarker</template-language>
<notification-type>email</notification-type>
<notification-type>user-notification</notification-type>
<execution-type>onAssignment</execution-type>
</notification>
<notification>
<name>Review Completion Notification</name>
<template><![CDATA[Your submission was reviewed<#if taskComments?has_content> and the reviewer applied the following ${taskComments}</#if>.]]></template>
<template-language>freemarker</template-language>
<notification-type>email</notification-type>
<recipients>
<user />
</recipients>
<execution-type>onExit</execution-type>
</notification>
</actions>
<assignments>
<roles>
<role>
<role-type>organization</role-type>
<name>Organization Administrator</name>
</role>
...
</roles>
</assignments>
<transitions>
<transition>
<name>approve</name>
<target>approved</target>
</transition>
<transition>
<name>reject</name>
<target>update</target>
<default>false</default>
</transition>
</transitions>
</task>
レビュータスクには2つのactions
があり、両方とも<notification>
です。 各通知には、名前、テンプレート、通知タイプ、実行タイプ、および受信者を含めることができます。 通知のほかに、<action>
タグを使用することもできます 。 これらには名前とスクリプトがあり、タスクよりもステータスノードで使われることが多いです。
割り当て
ワークフロータスクはユーザーが完了します。 割り当てを行うことで、適切なユーザーがタスクにアクセスできるようになります。 割り当ての設定方法を選択できます。 割り当ては以下に追加できます
- 特定のロール
- 1つのロールタイプ(組織、サイト、アセットライブラリ、アカウント、または通常のロールタイプ)の複数のロール
- アセット作成者
- リソースアクション
- 特定のユーザー
さらに、割り当てを定義するスクリプトを書くこともできます。 例として、 single-approver-scripted-assignment-workflow-definition.xml をご覧ください。
<assignments>
<roles>
<role>
<role-type>organization</role-type>
<name>Organization Administrator</name>
</role>
</roles>
</assignments>
上記の割り当ては、組織管理者がタスクを完了する必要があることを指定しています。
<assignments>
<user>
<user-id>20156</user-id>
</user>
</assignments>
上記の割り当ては、ユーザーIDが20156のユーザーのみがタスクを完了できることを指定しています。 または、ユーザーの <screen-name>
または <email-address>
を指定します。
<assignments>
<scripted-assignment>
<script>
<![CDATA[
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Role;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.RoleLocalServiceUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
long companyId = GetterUtil.getLong((String)workflowContext.get(WorkflowConstants.CONTEXT_COMPANY_ID));
long groupId = GetterUtil.getLong((String)workflowContext.get(WorkflowConstants.CONTEXT_GROUP_ID));
Group group = GroupLocalServiceUtil.getGroup(groupId);
roles = new ArrayList<Role>();
Role adminRole = RoleLocalServiceUtil.getRole(companyId, "Administrator");
roles.add(adminRole);
if (group.isOrganization()) {
Role role = RoleLocalServiceUtil.getRole(companyId, "Organization Content Reviewer");
roles.add(role);
}
else {
Role role = RoleLocalServiceUtil.getRole(companyId, "Site Content Reviewer");
roles.add(role);
}
user = null;
]]>
</script>
<script-language>groovy</script-language>
</scripted-assignment>
</assignments>
上記の割り当てでは、タスクを 管理者 ロールに割り当て、アセットの グループ が組織であるかどうかをチェックします。 組織の場合は、 組織コンテンツレビュア ロールが割り当てられます。 組織でない場合、タスクは サイトコンテンツレビュア のロールに割り当てられます。
上記のroles = new ArrayList<Role>();
の行に注目してください。 スクリプトでの割り当てでは、roles
変数で、タスクが割り当てられるロールを指定します。 例えば、roles.add(adminRole);
が呼び出されると、管理者ロールが割り当てに追加されます。
リソースアクションの割り当て
ユーザーは、 アップデート アクションなどのリソースアクションにタスクを割り当てることができます。 ワークフロー定義で割り当てにUPDATEアクションが指定されている場合、ワークフローで処理されているアセットタイプを更新する権限を持つユーザーがタスクに割り当てられます。 1つのタスクに複数の割り当てを設定することができます。
リソースアクション は、ユーザーがアプリケーションやエンティティに対して行う操作です。 例えば、ユーザーが掲示板のメッセージを更新する権限を持っているとします。 これは、ユーザーがリソースを更新できることから、UPDATEリソースアクションと呼ばれます。 リソースアクションの詳細は、権限システムの開発者チュートリアルで詳細な説明を参照してください。
作成されたすべてのリソースアクションを見つけるには、コントロールパネルのロールの管理アプリケーションへのアクセスが必要です(すなわち、ロールリソースのVIEWアクションの権限が必要です)。
- [コントロールパネル] → [Users] → [Roles] に移動します。
- 新しい標準ロールを追加します。 詳細は、ロールの管理を参照してください。
- ロールが追加されたら、ロールの[権限の定義]インターフェイスに移動します。
- ワークフローの割り当てを定義するアクションを持つリソースを探します。
割り当てのXMLは次のようになります。
<assignments>
<resource-actions>
<resource-action>UPDATE</resource-action>
</resource-actions>
</assignments>
これで、ワークフローがリソースアクションの割り当てがあるタスクに進むと、リソース(たとえば、掲示板のメッセージ)に対するUPDATE
権限を持つユーザーにタスクが通知され、タスクを自分に割り当てることができます(通知が[タスク担当者]に設定されている場合)。 具体的には、ユーザーには、 [自分のロールに割り当て済み] タブに [マイワークフロータスク] アプリケーションのタスクが表示されます。
リソースのアクション名には、すべて大文字を使用してください。 一般的なリソースアクションは次のとおりです。
- UPDATE
- ADD
- DELETE
- VIEW
- PERMISSIONS
- SUBSCRIBE
- ADD_DISCUSSION
考えられるリソースアクション名を、そのリソースの権限画面から決定します。 例えば、掲示板では、その画面に表示される権限の1つに Add Discussion があります。 これをすべて大文字に変換し、スペースをアンダースコアに置き換えると、アクション名になります。
タスクタイマー
タスクタイマーは、指定された期間が経過した後にアクションをトリガーします。 タイマーは、タスクが長時間放置されないようにするために便利です。 使用可能なタイマーアクションには、追加の通知の送信、アセットの再割り当て、タイマーアクションの作成などがあります。
<task-timers>
<task-timer>
<name></name>
<delay>
<duration>1</duration>
<scale>hour</scale>
</delay>
<blocking>false</blocking>
<recurrence>
<duration>10</duration>
<scale>minute</scale>
</recurrence>
<timer-actions>
<timer-notification>
<name></name>
<template></template>
<template-language>text</template-language>
<notification-type>user-notification</notification-type>
</timer-notification>
</timer-actions>
</task-timer>
</task-timers>
上記のタスクタイマーは通知を作成します。 <delay>
タグで期間を指定し、 <timer-actions>
ブロックで期間が過ぎたときのアクションを指定します。 <blocking>
要素は、タイマーアクションを繰り返すかどうかを指定します。 ブロッキングがfalse
に設定されている場合、タイマーアクションを繰り返すことができます。 recurrence
要素では、上記で示したようにduration
とscale
を使って繰り返し間隔を指定します。 上記のrecurrence要素は、タイマーアクションが最初の発生後10分ごとに再度実行されることを指定しています。 ブロッキングをtrueに設定すると、タイマーアクションが繰り返されなくなります。
<timer-actions>
<reassignments>
<assignments>
<roles>
<role>
<role-type></role-type>
<name></name>
</role>
...
</roles>
</assignments>
</reassignments>
</timer-actions>
上記のスニペットは、再割り当てアクションを設定する方法を示しています。
<action>
要素と同様に、 <timer-action>
要素にはスクリプトを含めることができます。 詳細は、 ワークフローでのスクリプトエンジンの使用 を参照してください。
timer-action
には、execution-type
という1つの例外を除いて、action
と同じタグをすべて含めることができます。 タイマーアクションは、時間切れになると常にトリガーされるため、たとえば、 実行タイプにonEntry
を指定しても、タイマーの中では意味がありません。