AEMのカスタムワークフローでのページ公開からエクスペリエンスフラグメントの除外
この記事では、エクスペリエンスフラグメントがページとともに公開されないように、カスタム Adobe Experience Manager(AEM)ワークフローを更新して、エクスペリエンスフラグメントを別のスケジュールで管理および公開できるようにする方法について説明します。
説明 description
環境
- カスタムページ公開ワークフローを備えたAEM Sites インスタンス
- カスタムワークフローは、参照を収集し、レプリケーション用にページと参照パスを送信します
問題/症状
- カスタムワークフローでは、
ReferenceProvider.findReferences()を使用して、すべての参照コンテンツを収集し、Replicator.replicate().を使用してページとその参照の両方を公開します - 作成者がそれらのフラグメントを別のスケジュールで管理および公開する場合でも、参照されたエクスペリエンスフラグメントはページで公開されます。
- 標準の「公開を管理」フローでは、作成者は参照の選択を解除できます。 カスタムワークフローは、ワークフローが実装しない限り、そのオプションを提供しません。
- カスタムワークフローでは、レプリケーション用のパスを送信する前に、エクスペリエンスフラグメントの参照を除外するための決定論的ルールが必要です。
原因
カスタムワークフローには、レプリケーション用に送信されるリストにエクスペリエンスフラグメントのパスが含まれます。 ワークフローではパスはフィルタリングされないため、参照されたエクスペリエンスフラグメントはページとともに公開されます。 標準の「公開を管理」フローには参照選択コントロールがありますが、カスタムワークフローには独自のフィルタリングまたは選択ロジックを実装する必要があります。
解決策 resolution
問題を解決するには、次の手順に従います。
-
Replicator.replicate()を呼び出す前に、カスタムWorkflowProcess実装を更新して、エクスペリエンスフラグメント参照を除外します。 -
ReferenceProvider.findReferences()を介して参照を取得した後、エクスペリエンスフラグメントを指す参照を特定します。 エクスペリエンスフラグメントは通常、/content/experience-fragmentsパスの下に保存されます。 -
収集した参照をレプリケートする前に、エクスペリエンスフラグメントのパスをフィルタリングします。 次の例は、1つのアプローチを示しています。
code language-none // Collect references List<Reference> references = referenceProvider.findReferences(resourceResolver, pagePath, ...); // Filter out Experience Fragments List<String> pathsToReplicate = references.stream() .map(Reference::getTargetPath) .filter(path -> !path.startsWith("/content/experience-fragments")) .collect(Collectors.toList()); // Add the page path itself pathsToReplicate.add(pagePath); // Replicate only the filtered paths for (String path : pathsToReplicate) { replicator.replicate( session, ReplicationActionType.ACTIVATE, path ); } -
追加の検証が必要な場合は、各参照ターゲットを解決し、そのリソースタイプを確認するか、AEM バージョンで使用可能なエクスペリエンスフラグメント APIを使用して、エクスペリエンスフラグメントであることを確認します。
-
更新されたワークフローをデプロイし、テストページを公開します。
-
ページが正常に公開され、参照されたエクスペリエンスフラグメントが個別に公開されない限りレプリケートされないことを確認します。