2012-10-26 15 views
5

公開時にカスタムユーザー設定を有効にするには、解決方法のステップ(カスタムリゾルバ内)で公開ユーザーを確認しますパブリッシュ・サービスを開始したユーザーであるパブリッシャー・サービス)。カスタムリゾルバでユーザー/アクセスエンジンを公開する方法を確認する方法

元の公開ユーザーを見つけるには、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以外の)どこから判断できるのか分かりませんでしたか?

答えて

5

私はプロジェクトの前にこの道を下りました(Resolver拡張でユーザーを獲得しようとしました)、それは苦痛の世界でした。

私はResolverエクステンションからレンダリングエクステンションに移動し、Transportエクステンションを考慮しても、可能な限り最も単純なアプローチ、つまりTBBに戻りました。

私のユースケースはあなたのものと違っていました。ユーザーに基づいて解決行動を変更したいと思うようです(リンクの伝播が気に入らない人もいますが、コンテンツを変更する必要はありません;-))しかし、私はではなく、そのように実装しました。

私はそこ出版アクションをトリガーするユーザーについての詳細情報を含むように機能拡張要求があったが、それは、製品に実装されている場合、それはあなたが長いことを待つことができるかわからない、Tridionの2013年になります。考えて

+0

ところで、レンダリング前にリゾルブが実行され、エンジンレンダリングエンジンによってエンジンオブジェクトがインスタンス化されるため、エンジンへのアクセスは機能しません。 –

+0

私はそれを理解しています。私が言っているのは、この場合、PublishTransactionが完全な解決レンダリングチェーンを開始していることを明確に示しているため、PublishTransactionが本来Resolverには利用できないということが本質的に奇妙なことです。 –

0

私はあなたがこの時点でエンジンを手に入れることはできないと思います。結局のところ、あなたは解決していてレンダリングしていません。 「ユーザーの設定を有効にしたい」と言いますが、現在行っている調査のラインではなく、実際の問題についてもっと詳しく教えてくれるわけではありません(デッドエンドかもしれません)。

パブリッシュにはどのようなユーザー設定が関係していますか。なぜそれらをリゾルバに入れる必要がありますか?

関連する問題