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

XMLワークフロー定義の作成

重要

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

Liferay DXPのすべてのワークフロー定義は、XML形式で記述されています。 独自のワークフロー定義を作成するためには、実際の承認プロセスを反映した定義が必要です。

ヒント

DXP を使用するサブスクライバーは、 グラフィカル デザイナー を使用してワークフローを作成できます。 すでにXMLでワークフローを作成している場合は、それをアップロードしてGUIで続行できます。

  1. グローバル メニュー (Global Menu) を開きます。 [ワークフロー]で、[プロセスビルダー]を選択します。

  2. 新しいワークフロー定義を追加するには、 add アイコンをクリックします。

  3. ワークフローの定義は、エディターに入力することも、ローカルで作成したものを読み込むこともできます。

ワークフローを公開すると、ワークフローが有効な場所であればどこでも適用できるようになります。

既存のワークフロー定義

デフォルトでは、唯一の承認者という1つのワークフロー定義のみがインストールされています。 また、Liferayのソースコードにもいくつか組み込まれています。 これらの定義は、ここで説明するすべての機能を理解する良い例となります。

以下では、最もシンプルなワークフローである「単一承認者」を使用して基本を学習します。 唯一の承認者のワークフローには、[開始]と[終了]の2つの必須ステータスが含まれており、それぞれ[作成済み][承認済み]という名前が付けられています。 また、2 つのタスクも含まれています: レビュー更新。 これらのタスクは、 承認拒否再送信などの アクションを定義します。

ワークフローを構成しているコンポーネントに分解するときは、[ステータス]、[タスク]、[アクション]について考えます。 それらを定義したら、作業を開始する準備が整います。 これで、唯一の承認者のワークフローがどのように機能するかを確認して、すべてをまとめる準備が整いました。

スキーマ

ワークフロー定義の構造は、XSD ファイルで定義されています: liferay-workflow-definition-7_4_0.xsd

ワークフロー定義ファイルの先頭でスキーマを宣言します。

<?xml version="1.0"?>
<workflow-definition
   xmlns="urn:liferay.com:liferay-workflow_7.4.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="urn:liferay.com:liferay-workflow_7.4.0
      http://www.liferay.com/dtd/liferay-workflow-definition_7_4_0.xsd">

メタデータ

定義には、名前、説明、バージョンを付けます。

<name>Single Approver</name>
<description>A single approver can approve a workflow content.</description>
<version>1</version>

開始ノードと終了ノード

各ワークフローの定義は、ステータスノードで開始および終了します。 単一承認者から次のような 開始 ノードを作成します。

<state>
   <name>created</name>
   <initial>true</initial>
   <transitions>
      <transition>
         <name>review</name>
         <target>review</target>
      </transition>
   </transitions>
</state>

この例では、 開始ノードに以下のようなプロパティが設定されています。

  • それが初期状態です。
  • ノードは、 タスク ノードレビューに遷移します。

End ノードは次のようになります。

   <state>
      <name>approved</name>
      <actions>
         <action>
            <name>approve</name>
            <script>
               <![CDATA[
                  import com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil;
                  import com.liferay.portal.kernel.workflow.WorkflowConstants;

                  WorkflowStatusManagerUtil.updateStatus(WorkflowConstants.getLabelStatus("approved"), workflowContext);
               ]]>
            </script>
            <script-language>groovy</script-language>
            <execution-type>onEntry</execution-type>
         </action>
      </actions>
   </state>

ワークフローが最終ステータスに移行すると、送信が承認されます。 例をシンプルにするために、通知機能は含まれていませんが、追加することも可能でした。 終了ノードには、ワークフローのステータスを 承認済みに設定する スクリプト があります。

詳細については、 ワークフロー定義ノードリファレンス を参照してください。

タスクノード

タスクノードは、ユーザーがワークフロープロセスで行うべきことを定義します。 他のワークフロー ノードとは異なり、タスク ノードには割り当てがあり、タスクをユーザーまたは ロールに割り当てることができます。

タスクノードには、タスクタイマー、アクション(通知やスクリプトを含む)、トランジションを含めることができます。 詳細については、 ワークフロー タスク ノード リファレンス を参照してください。 単一承認者ワークフローには、 レビュー更新の 2 つのタスクが含まれています。

レビュータスクノードの作成

レビュータスクには、[拒否]または[承認]の2つの結果があります。 これには、提出物のレビューの準備が整ったことをレビュアに通知する<notification>要素が含まれています。 ユーザーに割り当てられた場合、そのユーザーはアセットをレビューする必要があります。 ロールに割り当てられている場合、そのロールを持つ人は誰でもアセットをレビューできます。

可能な遷移は 2 つあります: 承認拒否。 承認されると、ワークフローは終了ステータスに移行します。このステータスは、以前はapprovedと呼ばれていました。 拒否された場合、ワークフローはアップデートタスクに移行します。

   <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>
            <recipients receptionType="to">
               <assignees />
            </recipients>
            <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 receptionType="to">
               <user />
            </recipients>
            <execution-type>onExit</execution-type>
         </notification>
      </actions>
      <assignments>
         <roles>
            <role>
               <role-type>depot</role-type>
               <name>Asset Library Administrator</name>
            </role>
            <role>
               <role-type>depot</role-type>
               <name>Asset Library Content Reviewer</name>
            </role>
            <role>
               <role-type>depot</role-type>
               <name>Asset Library Owner</name>
            </role>
            <role>
               <role-type>organization</role-type>
               <name>Organization Administrator</name>
            </role>
            <role>
               <role-type>organization</role-type>
               <name>Organization Content Reviewer</name>
            </role>
            <role>
               <role-type>organization</role-type>
               <name>Organization Owner</name>
            </role>
            <role>
               <role-type>regular</role-type>
               <name>Administrator</name>
            </role>
            <role>
               <role-type>regular</role-type>
               <name>Portal Content Reviewer</name>
            </role>
            <role>
               <role-type>site</role-type>
               <name>Site Administrator</name>
            </role>
            <role>
               <role-type>site</role-type>
               <name>Site Content Reviewer</name>
            </role>
            <role>
               <role-type>site</role-type>
               <name>Site Owner</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>

レビュータスクノードが追加され、設定されました。 あとは、アップデートタスクを残すのみです。

アップデートタスクノードの作成

提出物がレビュータスクで拒否トランジションに入ると、アップデートタスクに送られ、レビューのために再提出できるようになります。 アセットがアップデートタスクに到着すると、似たような名前の拒否アクションが実行され、ワークフローのステータスがdeniedに割り当てられ、次にpendingに割り当てられます。 原作者には通知が送られます。 また、そのアセットは原作者に再度割り当てられます。 ここで、原作者は、アセットを編集して拒否される原因となった問題を解決した後、アセットを再送信できます。

   <task>
      <name>update</name>
      <actions>
         <action>
            <name>reject</name>
            <script>
               <![CDATA[
                  import com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil;
                  import com.liferay.portal.kernel.workflow.WorkflowConstants;

                  WorkflowStatusManagerUtil.updateStatus(WorkflowConstants.getLabelStatus("denied"), workflowContext);
                  WorkflowStatusManagerUtil.updateStatus(WorkflowConstants.getLabelStatus("pending"), workflowContext);
               ]]>
            </script>
            <script-language>groovy</script-language>
            <execution-type>onAssignment</execution-type>
         </action>
         <notification>
            <name>Creator Modification Notification</name>
            <template>Your submission was rejected by ${userName}, please modify and resubmit.</template>
            <template-language>freemarker</template-language>
            <notification-type>email</notification-type>
            <notification-type>user-notification</notification-type>
            <recipients receptionType="to">
               <user />
            </recipients>
            <execution-type>onAssignment</execution-type>
         </notification>
      </actions>
      <assignments>
         <user />
      </assignments>
      <transitions>
         <transition>
            <name>resubmit</name>
            <target>review</target>
            </transition>
      </transitions>
   </task>

さいごに

ここで、終了タグを追加します。

</workflow-definition>

これで唯一の承認者のワークフローが完成しました。 ワークフローがどのように作成されるかがわかったところで、フォーク、結合、条件など、その他の可能なオプションについて学びましょう。 Liferayのワークフローシステムには、必要なプロセスを実装することができます。