2012-07-27 8 views
9

SDL Tridion 2011のモジュラーページテンプレートで使用されるC#TBBから、公開アクションを開始したユーザーオブジェクトにアクセスできますか?SDL Tridionで公開アクションを開始したユーザーを取得する方法C#TBB

TOM.NET 6プログラマリファレンスガイドを見ると、私が必要なプロパティがPublicationTransactionオブジェクトのCreatorプロパティですが、私はC#TBBからそれにアクセスするための方法を見つけることができない、私と思われます現在のPublicationTransactionengineまたはpackageオブジェクトから取得する明白な方法はありません。PublishEngineオブジェクトを使用してPublicationTransactionオブジェクトのリストを取得する方法しか見つけられません。

アドバイスをいただければ幸いです。

答えて

10

はミハイCadariuからこれら二つのブログの記事を見てください:次のことができるようにする必要があり、これらの2つと

あなたが必要とするものを見つける。

あなたのTBBに必要な基本的な機能はこれです:

public PublishTransaction GetPublishTransaction(Engine engine) 
{ 
    String binaryPath = engine.PublishingContext.PublishInstruction. 
             RenderInstruction.BinaryStoragePath; 
    Regex tcmRegex = new Regex(@"tcm_\d+-\d+-66560"); 
    Match match = tcmRegex.Match(binaryPath); 

    if (match.Success) 
    { 
     String transactionId = match.Value.Replace('_', ':'); 
     TcmUri transactionUri = new TcmUri(transactionId); 
     return new PublishTransaction(transactionUri, engine.GetSession()); 
    } 

    return null; 
} 

また、ときに比べPreviewModeまたはテンプレートビルダからコーダをレンダリングするときに、プロパティengine.PublishingContext.PublishInstruction.RenderInstruction.BinaryStoragePathは別の何かを返すことは注目に値するかもしれませんコードはパブリッシャで実行されています。実際にPublishTransactionオブジェクトが存在するためには、BinaryStoragePathのPublishTransaction URIを確認するには、Visual Studio TBBデバッグプロジェクトをTcmPublisher.exeプロセスに添付する必要があります。そうしないと、BinaryStoragePathには../previewのような汎用パスが含まれます。

+1

私はMihaiとChrisのコードを追加して素晴らしいです。今はPublishTransactionを持っています - ありがとうございます – GourmetCMS