公開時にカスタムユーザー設定を有効にするには、解決方法のステップ(カスタムリゾルバ内)で公開ユーザーを確認しますパブリッシュ・サービスを開始したユーザーであるパブリッシャー・サービス)。カスタムリゾルバでユーザー/アクセスエンジンを公開する方法を確認する方法
元の公開ユーザーを見つけるには、PublishTransactionオブジェクト(特にCreatorプロパティ)にアクセスする必要があります。このセッションはPublisherサービスによって作成され(サービスアカウントを提供するため)、カスタムリゾルバ内のSessionからUserプロパティを使用することはできません。
現在のPublishTransaction Mihai has provided us with an excellent hackを検索してください。本質的には です。 Engineオブジェクトに手を差し伸べることができれば、コンテキスト公開トランザクションを判断できます。 Resolveメソッドリゾルバ私たちのカスタムで
は四つのパラメータで呼び出されます。
public void Resolve(
IdentifiableObject item,
ResolveInstruction instruction,
PublishContext context,
ISet<ResolvedItem> resolvedItems
) { }
- 項目がIdentifiableObjectもセッションでもないが、Sessionオブジェクトを私たちに提供するために使用することができますへの参照を保持しますエンジン。
- 解決命令は、解決のための単なるデータプロパティのセットです。
- パブリッシュコンテキスト(残念なことに、パブリケーションコンテキストではない)は、パブリケーションとパブリケーションのターゲットのみを保持します。
- ResolvedItemを使用すると、セッションに再度アクセスできますが、エンジンにはアクセスできません。
私の質問(最終的に)2倍になります:
1.私は、コンテキストのユーザーアカウントが(PublishTransaction以外)から求めることができる任意の潜在的なポイントを見逃していますか?
2. IResolver.Resolve()メソッドが呼び出されているパラメータからエンジンを判別できる潜在的なポイントがありませんでしたか?
編集:私は、私たちはそれは長い物語のビットであるため、(ユーザー設定)から余分なメタデータを公開する活動をカスタマイズしたい理由のより広範な絵を残し実現。
私が最終的に必要とするのは、コンポーネントテンプレート内の特定のバージョンのコンポーネントをアクティブにすることです(バージョンリストを見て、専用のマーカーコンポーネントにリンクされたバージョンを見つけることによって)マーカーコンポーネントが何であるかを知る。このため、マーカーコンポーネント(すべてのリンクされたコンポーネントと最終的にページを解決する)を発行し、カスタムリゾルバでマーカーコンポーネントのTCMURIをセッションキャッシュにプッシュすることができました。
ユーザーレベルで特定のマーカーコンポーネントの「設定」を設定して、(マーカーにリンクされたすべてを一度に公開するのではなく)このマーカーコンテキスト内に小さなバッチのアセットを公開できるようにします。
CT内で実行されているTBBには実際にEngineオブジェクトが用意されているため、Mihaiの方法を使用してパブリッシングユーザーを決定できます(リゾルバからマーカコンテキストをプッシュするのではなく)問題は完全に。
解決とレンダリング操作の間に情報の可用性に違いがあるのはなぜかと思いました。両方とも同じ出版コンテキストの後の部分である。私は助けることはできませんが、私は非常に基本的なものを見落としていると感じていますが、おそらく私はそうではなく、リゾルバからパブリッシング・コンテキストやエンジンにアクセスすることは不可能です。
編集:Dominicによって推定され、Nunoによって確認された場合、解決時にはエンジンは存在しません。このように私の質問の半分は答えられました。 そのままにしておきます
私は、コンテキストユーザーアカウントを(PublishTransaction以外の)どこから判断できるのか分かりませんでしたか?
ところで、レンダリング前にリゾルブが実行され、エンジンレンダリングエンジンによってエンジンオブジェクトがインスタンス化されるため、エンジンへのアクセスは機能しません。 –
私はそれを理解しています。私が言っているのは、この場合、PublishTransactionが完全な解決レンダリングチェーンを開始していることを明確に示しているため、PublishTransactionが本来Resolverには利用できないということが本質的に奇妙なことです。 –