条件ノードの使用
変更通知を受け取る(購読する)
条件ノードは、ワークフローの中で条件付きで行動(移行、割り当てなど)する場合に役立ちます。 複数のレビュアがいて、どのレビュアにタスクを割り当てるべきかを決定しなければならない場合があります。 例えば、法務部によるレビューが必要な文書もあれば、マーケティングチームによるレビューが必要な文書もあります。
条件ノードにはスクリプトが必要ですが、DXP 2024.Q3 以降ではデフォルトで無効になっています。 つまり、条件は SaaS 展開では使用できません。 セルフホスト型および PaaS 展開では、システム設定 → スクリプト管理 (セキュリティ カテゴリ) でスクリプトを有効にできます。
条件は、指定された条件が満たされているかどうかをチェックし、それらの条件に基づいて、アセット—に適切なレビュー担当者を割り当てたり、特定のタスクに移行したりすることで、ゲートキーパーとして機能します。
カテゴリ固有の定義 には条件ノードが含まれています。 条件付きロジックは、アセットカテゴリをチェックして、法務レビュータスクに移行するか、またはコンテンツレビュータスクに移行するかを選択します。 ワークフローに条件ノードを追加するには、以下の手順を行います。
-
グローバル メニュー → アプリケーション → ワークフロー → プロセス ビルダーに移動します。
-
(
) をクリックして、新しいワークフローを追加します。 -
ワークフローデザイナーのキャンバスで、ワークフローの名前を入力します。
-
ソース ビューを開きます。
-
カテゴリ固有の定義を見つけます。 その生のコンテンツをソースビューにコピーして既存のコンテンツをすべて上書きするか、 [ファイルをインポート] をクリックして、定義のXMLファイルをアップロードします。
-
ダイアグラム ビューを開きます。
-
[条件ノード]、[ Determine Branch]をクリックして、ノードのプロパティを設定します。
-
スクリプト (Groovy) フィールドを見つけます。 コンテンツをより見やすくするには、フィールドのサイズを変更します(大きくします)。

スクリプトは、アセットのカテゴリをループして、文字列
legalを探します。 それが見つかった場合、ワークフローは法務レビューパスに沿って続行されます。 それ以外の場合は、コンテンツレビューパスに沿って進みます。完全な内容は、 カテゴリ固有の定義の条件スクリプトで参照できます。
-
条件のスクリプトの操作が完了したら、戻る矢印 (
) または [保存] (以前のバージョンのワークフロー デザイナーを使用している場合) をクリックします。

条件ノードが3つの異なるタスクノードにどのように接続されているかに注目してください。
- ドキュメントが
legalカテゴリにある場合、アセットは法務部に送られます。 - それ以外の場合、アセットはマーケティングチームに送信されます。
- アップデートノードは、元の作成者によって更新されると、処理を条件に送り返します(アセットがいずれかのレビューノードで拒否された場合)。
タスク ノードを構成する方法については、 ワークフロー タスクの作成 および タスク ノードの割り当て を参照してください。
カテゴリ固有の定義の条件スクリプト
import com.liferay.asset.kernel.model.AssetCategory;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetRenderer;
import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.workflow.WorkflowHandler;
import com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil;
import java.util.List;
String className = (String)workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME);
WorkflowHandler workflowHandler = WorkflowHandlerRegistryUtil.getWorkflowHandler(className);
AssetRendererFactory assetRendererFactory = workflowHandler.getAssetRendererFactory();
long classPK = GetterUtil.getLong((String)workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
AssetRenderer assetRenderer = workflowHandler.getAssetRenderer(classPK);
AssetEntry assetEntry = assetRendererFactory.getAssetEntry(assetRendererFactory.getClassName(), assetRenderer.getClassPK());
List<AssetCategory> assetCategories = assetEntry.getCategories();
returnValue = "Content Review";
for (AssetCategory assetCategory : assetCategories) {
String categoryName = assetCategory.getName();
if (categoryName.equals("legal")) {
returnValue = "Legal Review";
return;
}
}