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

Pat*_*tan 1 tridion

我正在努力在用户创建页面时触发事件以自动创建页面.

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();

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它不是自动创建页面.我认为这段代码需要进行一些修改.

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

有人可以帮助进行所需的修改吗?我正在使用TOM.net API.

谢谢.

Mih*_*riu 7

该错误是由您尝试创建的新会话引起的.这不应该是必要的.你可以从Page获得它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);
Run Code Online (Sandbox Code Playgroud)

你所需要的参数sg,theTitle,pt,ct,component.例如,您可以从文件夹元数据中读取它们.