Событие для создания страницы, когда пользователь создает одну страницу в SDL Tridion 2011 SP1 - PullRequest
1 голос
/ 03 апреля 2012

Я работаю над тем, чтобы инициировать событие для автоматического создания страницы, когда пользователь создает страницу.

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 была настроена как пользователь персонификации".

Может кто-нибудь помочь с необходимыми изменениями? Я использую API TOM.net для этого.

Спасибо.

1 Ответ

7 голосов
/ 03 апреля 2012

Ошибка из-за нового сеанса, который вы пытаетесь создать. Это не должно быть необходимым. Вы можете получить его со страницы 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);

Необходимые параметры: sg, theTitle, pt, ct, component. Вы можете прочитать их из метаданных Папки, например.

...