活动不起作用

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配置文件中注册其路径.但它没有用.请帮助

And*_*huk 8

好的,首先删除所有TDSE代码,你应该使用TOM.NET.你可以得到会话subject.Session

然后确保您已注册此扩展程序Tridion.ContentManager.config并重新启动系统

最后-如果有什么不工作,只是添加简单的代码将在你创建一个文件HandlerForCommitted,每当事件发生时,这样你就可以看到,如果你的扩展得到执行.


rob*_*rtc 6

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)