2012-07-27 87 views
9

從SDL Tridion 2011中模塊化頁面模板使用的C#TBB,是否可以訪問啓動發佈操作的用戶對象?如何獲得在SDL Tridion C中發起發佈操作的用戶C#TBB

指南望着TOM.NET 6程序員參考,看來我需要的屬性是PublicationTransaction對象的Creator財產,但我不能找到一種方法來訪問從C#TBB,我沒有看到從enginepackage對象中獲得當前PublicationTransaction的明顯方法,我只能找到一種方法來使用PublishEngine對象獲取PublicationTransaction對象的列表。

任何意見將不勝感激。

回答

10

看一看從米哈伊Cadariu這兩個博客文章:

有了這兩個,你應該能夠找到你需要的東西。

你在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將返回不同的東西該代碼正在發佈服務器中運行。要查看BinaryStoragePath中的PublishTransaction URI,必須將Visual Studio TBB Debug項目附加到TcmPublisher.exe進程中,以便實際上存在PublishTransaction對象,否則BinaryStoragePath將只包含像../preview這樣的通用路徑。

+1

很好,我添加了Mihai和Chris的代碼,現在我有了PublishTransaction - 非常感謝 – GourmetCMS 2012-07-27 02:02:42