从SDL Tridion 2011中的模块化页面模板使用的C#TBB,是否可以访问发起发布操作的用户对象?
查看 TOM.NET 6程序员参考指南,似乎我需要的属性是Creator
对象的PublicationTransaction
属性,但我不能找到一种从C#TBB访问它的方法,我没有看到从PublicationTransaction
或engine
对象获取当前package
的明显方法,我只能找到一种方法使用PublicationTransaction
对象获取PublishEngine
个对象的列表。
非常感谢任何建议。
答案 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将只包含一个通用路径,如.. /预览。