Developer Guide
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ワークフロータスクノードリファレンス

重要

DXP 2024.Q3 以降、スクリプトはデフォルトで無効になっています。 システム設定 → スクリプト管理 (セキュリティ カテゴリ) で有効にできます。

タスクは、作業が実行されるワークフローの一部です。 タスクはユーザーに割り当てる必要があります。ユーザーは送信されたアセットを確認し、ワークフローのコンテンツが公開に適しているか、さらに作業が必要かを決定します。

他のワークフロー ノードとは異なり、タスク ノードには割り当てがあります。これは、ワークフロー プロセスがタスク ノードに入ると、ユーザーが何らかの操作 (多くの場合、送信の承認または拒否) を行うことが予想されるためです。

通常、タスクノードには、タスクタイマー、割り当て、アクション(通知とスクリプトを含めることができます)、およびトランジションが含まれます。 通知とアクションはタスクノードに限定されませんが、タスクノードとその割り当ては独自の記事(この記事)に値します。

単一承認者 ワークフロー定義のレビュー タスクを確認します。

<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 つの アクション があり、どちらも <notification>です。 各通知には、名前、テンプレート、通知タイプ、実行タイプ、および受信者を含めることができます。 通知以外にも、 <action> タグも使用できます。 これらには名前と スクリプト があり、タスクよりも状態ノードで使用されることが多いです。

割り当て

ワークフロー タスクはユーザーによって完了されます。 割り当てを行うことで、適切なユーザーがタスクにアクセスできるようになります。 割り当ての設定方法を選択できます。 割り当ては以下に追加できます

  • あらゆるタイプの特定のロール(組織、サイト、アセット ライブラリ、アカウント、または通常)

    <assignments>
       <roles>
          <role>
             <role-type>organization</role-type>
             <name>Organization Administrator</name>
          </role>
       </roles>
    </assignments>
    

    上記の割り当ては、組織管理者がタスクを完了する必要があることを指定しています。

  • アセット作成者

    <assignments>
       <user />
    </assignments>
    
  • リソースアクション

    <assignments>
       <resource-actions>
          <resource-action>UPDATE</resource-action>
       </resource-actions>
    </assignments>
    
  • 特定のユーザー

    <assignments>
       <user>
          <user-id>20156</user-id>
       </user>
    </assignments>
    

    上記の割り当てでは、ID 20156 を持つユーザーのみがタスクを完了できることを指定しています。 あるいは、ユーザーの <screen-name> または <email-address>を指定します。

割り当てを定義するスクリプトを記述できます。 例については、 single-approver-scripted-assignment-workflow-definition.xmlを参照してください。

ユーザー 変数に単一のユーザーを設定するか、 ユーザー 変数のリストにユーザーを追加します。 ロールの割り当てを指定するには、ロールのリスト(たとえ 1 つだけであっても)を ロール 変数に追加します。

<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);
                  }

               ]]>
         </script>
      <script-language>groovy</script-language>
   </scripted-assignment>
</assignments>

上記の割り当てでは、タスクを管理者ロールに割り当て、資産のグループが組織であるかどうかを確認します。 該当する場合は、組織のコンテンツ レビュー担当者のロールが割り当てられます。 そうでない場合、タスクはサイト コンテンツ レビュー担当者のロールに割り当てられます。

上記の roles = new ArrayList<Role>(); 行に注意してください。 スクリプトによる割り当てでは、 ロール 変数で、タスクが割り当てられているロールを指定します。 たとえば、 roles.add(adminRole); が呼び出されると、管理者ロールが割り当てに追加されます。

リソースアクションの割り当て

ユーザーは、更新アクションなどのリソース アクションにタスクを割り当てることができます。 ワークフロー定義で割り当てに UPDATE アクションを指定している場合、ワークフローで処理されるコンテンツを更新する権限を持つすべてのユーザーがタスクに割り当てられます。 1つのタスクに複数の割り当てを設定することができます。

リソースアクション は、アプリケーションまたはエンティティに対してユーザーが実行する操作です。 たとえば、ユーザーにはメッセージボードのメッセージを更新する権限がある場合があります。 ユーザーがリソースを更新できるため、これは UPDATE リソース アクションと呼ばれます。

利用可能なすべてのリソース アクションを見つけるには、コントロール パネルのロール管理アプリケーションにアクセスできる必要があります (つまり、ロール リソースに対する VIEW アクションに対する権限が必要です)。

  1. コントロール パネルユーザーロールに移動します。
  2. 新しい標準ロールを追加します。 詳細については、 ロールの管理 を参照してください。
  3. ロールが追加されたら、そのロールの権限の定義インターフェイスに移動します。
  4. ワークフローの割り当てを定義するアクションを持つリソースを探します。

割り当てのXMLは次のようになります。

<assignments>
   <resource-actions>
      <resource-action>UPDATE</resource-action>
   </resource-actions>
</assignments>

ワークフローがリソース アクション割り当てを含むタスクに進むと、リソース (メッセージ ボード メッセージなど) に対する更新権限を持つユーザーにタスクが通知され、そのタスクを自分自身に割り当てることができます (通知がタスク割り当て先に設定されている場合)。 具体的には、ユーザーは自分の「自分のワークフロー タスク」アプリケーションの「自分のロールに割り当て済み」タブでタスクを確認できます。

リソースのアクション名には、すべて大文字を使用してください。 一般的なリソースアクションは次のとおりです。

  • 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要素では、上記で示したようにdurationscaleを使って繰り返し間隔を指定します。 上記のrecurrence要素は、タイマーアクションが最初の発生後10分ごとに再度実行されることを指定しています。 ブロッキングをtrueに設定すると、タイマーアクションが繰り返されなくなります。

<timer-actions>
   <reassignments>
      <assignments>
      <roles>
         <role>
            <role-type></role-type>
            <name></name>
         </role>
         ...
      </roles>
      </assignments>
   </reassignments>
</timer-actions>

上記のスニペットは、再割り当てアクションを設定する方法を示しています。

<action> 要素と同様に、 <timer-action> 要素にもスクリプトを含めることができます。 詳細については、「 ワークフローでのスクリプト エンジンの使用 」を参照してください。

タイマーアクション には、 アクションと同じタグをすべて含めることができますが、 実行タイプは例外です。 タイマーアクションは、時間切れになると常にトリガーされるため、たとえば onEntryの実行タイプを指定しても、タイマー内では意味がありません。