当用户在SDL Tridion 2011 SP1中创建一个页面时,用于创建页面的事件



当用户创建页面时,我正在处理触发事件以自动创建页面的问题。

namespace TestEventHandler
{
    [TcmExtension("MyEventHandlerExtension")]
    public class MyEventHandler : TcmExtension
    {
        public MyEventHandler()
        {
            Subscribe();
        }
        public void Subscribe()
        {
            EventSystem.Subscribe<Page, SaveEventArgs>(HandlerForProcessed, EventPhases.Processed);
            //EventSystem.Subscribe<Page, PublishEventArgs>(HandlerForInitiated, EventPhases.Initiated);
        }
        private void HandlerForProcessed(Page subject, SaveEventArgs args, EventPhases phase)
        {
            //create page.
            Tridion.ContentManager.Session mySession = new Tridion.ContentManager.Session(@"user");
            XmlElement XmlElement = null;
            Page newPage = new Page(XmlElement, mySession);
            newPage.Title = subject.Title + "_auto";
            newPage.FileName = subject.FileName + "_auto";
            newPage.PageTemplate = subject.PageTemplate;
            newPage.Save(true);
            newPage.CheckOut();
        }
    }
}

它不是自动创建页面。我认为需要对此代码进行一些修改。

我收到错误"此用户的模拟需要将Machinename\MTSUser帐户配置为模拟用户"。

有人能帮忙修改吗?我使用的是TOM.net API。

谢谢。

错误是由于您试图创建的新会话造成的。这不应该是必要的。您可以从subject.Session页获取。

此外,您为页面使用了错误的构造函数。查看文档。

样本代码:

Page page = page = new Page(session, new TcmUri(sg));
page.Title = theTitle;
page.FileName = new Regex("\W").Replace(theTitle, "");
page.PageTemplate = session.GetObject(pt) as PageTemplate;
ComponentTemplate componentTemplate = session.GetObject(ct) as ComponentTemplate;
page.ComponentPresentations.Add(
        new ComponentPresentation(component, componentTemplate));
page.Save(true);

您需要的参数是sgtheTitleptctcomponent。例如,您可以从文件夹元数据中读取它们。

最新更新