如何让在SDL Tridion C#TBB中启动发布操作的用户

时间:2012-07-27 00:14:44

标签: tridion tridion-2011

从SDL Tridion 2011中的模块化页面模板使用的C#TBB,是否可以访问发起发布操作的用户对象?

查看 TOM.NET 6程序员参考指南,似乎我需要的属性是Creator对象的PublicationTransaction属性,但我不能找到一种从C#TBB访问它的方法,我没有看到从PublicationTransactionengine对象获取当前package的明显方法,我只能找到一种方法使用PublicationTransaction对象获取PublishEngine个对象的列表。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:10)

看看Mihai 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;
}

值得注意的是,与在代码在Publisher中运行时相比,在PreviewMode或Template Builder中呈现编码器时,属性engine.PublishingContext.PublishInstruction.RenderInstruction.BinaryStoragePath将返回不同的内容。要在BinaryStoragePath中查看PublishTransaction URI,必须将Visual Studio TBB调试项目附加到TcmPublisher.exe进程,以便实际存在PublishTransaction对象,否则BinaryStoragePath将只包含一个通用路径,如.. /预览。