2012-04-03 64 views
1

我正在處理觸發事件以在用戶創建頁面時自動創建頁面。當用戶在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。

謝謝。

回答

7

錯誤是由於您嘗試創建的新會話。這不應該是必要的。你可以從頁面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 2012-04-03 06:13:43

相關問題