use*_*378 4 tridion tridion-2011
我是Tridion Event System的新手.我写了一个小代码.
[TcmExtension("MyEventHandlerExtension")]
public class EH : TcmExtension
{
public EH()
{
Subscribe();
}
public void Subscribe()
{
//EventSystem.Subscribe<Component, DeleteEventArgs>(HandlerForInitiated, EventPhases.Initiated);
EventSystem.Subscribe<Tridion.ContentManager.CommunicationManagement.Page, Tridion.ContentManager.Extensibility.Events.PublishOrUnPublishEventArgs>(HandlerForCommitted, EventPhases.All);
}
private void HandlerForCommitted(IdentifiableObject subject, PublishOrUnPublishEventArgs args, EventPhases phase)
{
TDSE obj = new TDSE();
Tridion.ContentManager.Interop.TDS.Publication pub = obj.GetPublication("tcm:0-150-1");
Tridion.ContentManager.Interop.TDS.Page pubPage = obj.GetPage("tcm:150-12374-64", pub);
pubPage.Publish("tcm:0-1-65538", false, true, false, default(DateTime), default(DateTime), default(DateTime));
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码我希望每次发生发布和取消发布事件时都发布一个页面.我构建此代码并在tridion配置文件中注册其路径.但它没有用.请帮助
好的,首先删除所有TDSE代码,你应该使用TOM.NET.你可以得到会话subject.Session
然后确保您已注册此扩展程序Tridion.ContentManager.config
并重新启动系统
最后-如果有什么不工作,只是添加简单的代码将在你创建一个文件HandlerForCommitted
,每当事件发生时,这样你就可以看到,如果你的扩展得到执行.
2011 Event System使用TOM.NET API而不是TOM API.请不要在2011 Event System中创建新的TDSE对象.即使你可以引用旧的Interop库,也没有理由在2011年使用.使用TOM.NET库你应该看到更好的性能,而且代码是面向未来的.
Mihai Cadariu有一个很好的例子,他使用TOM.NET从Tridion模板发布页面.调整代码以检查预览模式或发布模式并设置自己的用户和优先级(而不是从当前事务中读取)应该可以正常工作.
以下代码来自http://yatb.mitza.net/2012/05/publishing-from-template-code-using.html
public void Publish(Engine engine, String tcmUri, User user, PublishPriority priority)
{
Session session = new Session(user.Title);
PublishInstruction publishInstruction = new PublishInstruction(session);
RenderInstruction renderInstruction = new RenderInstruction(session);
renderInstruction.RenderMode = RenderMode.Publish; // work around. needs to be specified for binaries.
publishInstruction.RenderInstruction = renderInstruction;
List<IdentifiableObject> items = new List<IdentifiableObject>() { session.GetObject(tcmUri) };
List<PublicationTarget> targets = new List<PublicationTarget>() { engine.PublishingContext.PublicationTarget };
PublishEngine.Publish(items, publishInstruction, targets, priority);
session.Dispose();
}
// called with
PublishTransaction currentTransaction = TemplateUtils.GetPublishTransaction(engine);
TemplateUtils.Publish(engine, itemUri, currentTransaction.Creator, currentTransaction.Priority);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
333 次 |
最近记录: |