2012-04-03 4 views
1

私は、ユーザがページを作成したときに自動的にページを作成するためにイベントをトリガしています。ユーザがSDL Tridion 2011 SP1で1ページを作成したときにページを作成するイベント

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を使用しています。

ありがとうございます。

答えて

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

必要なパラメータがsgtheTitleptctcomponentです。たとえば、フォルダメタデータからそれらを読み取ることができます。

+0

ありがとうございました – Patan

関連する問題