5

パブリッシュ中にカスタム ユーザー設定を有効にするには、解決ステップ (カスタム リゾルバー内) でパブリッシュ ユーザーが何であるかを調べたいと考えています (つまり、パブリッシャー サービス用に構成されたユーザー アカウントではなく、パブリッシュ操作を開始したユーザーです)。

元の発行ユーザーを見つけるには、PublishTransaction オブジェクト (具体的には Creator プロパティ) にアクセスできる必要があります。このセッションはパブリッシャー サービスによって作成される (そしてサービス アカウントを提供する) ため、カスタム リゾルバー内のセッションから User プロパティを使用することはできません。

現在の PublishTransaction を見つけるために、Mihai は優れたハックを提供してくれました。本質的に; Engine オブジェクトを手に入れることができれば、コンテキスト パブリッシュ トランザクションを決定できます。

カスタム リゾルバでは、Resolve メソッドが 4 つのパラメータで呼び出されます。

public void Resolve(
    IdentifiableObject item,
    ResolveInstruction instruction, 
    PublishContext context, 
    ISet<ResolvedItem> resolvedItems
) { }
  • このアイテムは、Session オブジェクトを提供するために使用できますが、IdentifiableObject も Session もエンジンへの参照を保持しません。
  • 解決命令は、解決のためのデータ プロパティのセットにすぎません。
  • パブリッシュ コンテキスト (残念ながら PublishingContext ではありません) は、パブリケーションとパブリケーション ターゲットのみを保持します。
  • ResolvedItem はセッションへのアクセスを再度許可しますが、エンジンへのアクセスは許可しません。

私の質問は (最終的に) 2 つ
あります。
2. IResolver.Resolve() メソッドが呼び出されたパラメーターからエンジンを判別できる潜在的なポイントを見落としていませんか?


編集: 少し長い話になるため、追加のメタデータ (ユーザー設定から) を使用して公開アクティビティをカスタマイズする理由について、全体像を省略したことに気付きました。

最終的に必要なのは、コンポーネント テンプレート内の特定のバージョンのコンポーネントを有効にすることです (バージョン リストを調べて、専用のマーカー コンポーネントにリンクされているバージョンを見つけます)。マーカー成分です。このため、マーカー コンポーネントを公開し (リンクされたすべてのコンポーネントと最終的にページを解決します)、カスタム リゾルバーにより、マーカー コンポーネントの TCMURI をセッション キャッシュにプッシュできます (CT でアクセスできるようにします)。

ここで、ユーザー レベルで特定のマーカー コンポーネントの「設定」を設定して、このマーカー コンテキスト内でアセットの小さなバッチを公開できるようにします (マーカーにリンクされたすべてを一度に公開するのではなく)。

CT 内で実行されている TBB には実際に利用可能な Engine オブジェクトがあるため、Mihai の方法を使用して公開ユーザーを決定し (最初に行ったようにリゾルバーからマーカー コンテキストをプッシュするのではなく)、この方法で問題を完全に回避できます。

解決操作とレンダリング操作の間で情報の可用性にこのような違いがあるのはなぜだろうと思っていました。結局のところ、両方とも同じ公開コンテキストの一部です。非常に基本的なことを見落としているように感じずにはいられませんが、おそらくそうではなく、リゾルバーから公開コンテキストまたはエンジンにアクセスすることは単に不可能です。


編集:ドミニクが推定し、ヌノが確認したように、解決時に「エンジン」はありません。そのため、私の質問のこの半分は回答済みです。それは去る

(PublishTransaction 以外で) コンテキスト ユーザー アカウントを特定できる潜在的なポイントを見逃していませんか?

4

2 に答える 2

5

私は以前、プロジェクトでこの道をたどりました (リゾルバー拡張機能でユーザーを取得しようとしました)。それは苦痛の世界でした。

Resolver 拡張機能から Render Extension に移行し、Transport 拡張機能についても検討しましたが、可能な限り最も単純なアプローチである TBB に戻りました。

確かに、ユーザーに基づいて解決動作を変更する必要があるように見えるため、私の使用例はあなたのものとは異なりました (一部のユーザーはリンクの伝播が好きではありませんよね? - コンテンツの変更を恐れている場合は、それを変更すべきではありません;-) )しかし、私はそれをそのように実装しませんでした。

ユーザーが発行アクションをトリガーすることに関する詳細情報を含めるように拡張要求があったと思いますが、それが製品に実装される場合、それは Tridion 2013 用になります。それほど長く待つことができるかどうかはわかりません.

于 2012-10-26T13:10:15.230 に答える
0

この時点でエンジンを手に入れることはできないと思います。結局のところ、レンダリングではなく解決しています。あなたは「ユーザー設定を有効にしたい」と述べていますが、現在フォローしている調査の行ではなく、実際の問題についてはあまり教えてくれません (行き止まりである場合とそうでない場合があります)。

パブリッシングに関連するユーザー設定はどのようなものですか? また、それらをリゾルバーに含める必要があるのはなぜですか?

于 2012-10-26T11:58:45.073 に答える