2014-06-16 184 views
0

我的sitecore網站訂閱了內容更改的OnSave事件。當我登錄內容管理器並更改任何字段時,該事件在網站上成功觸發。現在,我試圖做同樣的事情,除了從獨立的控制檯應用程序觸發此事件。以編程方式觸發Sitecore事件

下面的代碼更改了內容,我可以看到網站上的更改,但OnSave事件未觸發。編輯上下文不是無聲的,所以它應該觸發事件,但事實並非如此。

我還檢查了事件引用數據庫,並且正在創建新事件,但它並未在網絡上觸發。有沒有人有關於事件未被觸發的線索?

Pipeline.Start("initialize", new PipelineArgs(), true); 

// get database 
string domainUser = @"sitecore\admin"; 

if (Sitecore.Security.Accounts.User.Exists(domainUser)) 
{ 
    Sitecore.Security.Accounts.User user = 
    Sitecore.Security.Accounts.User.FromName(domainUser, false); 

    using (new Sitecore.Security.Accounts.UserSwitcher(user)) 
    { 
     var db = Factory.GetDatabase("master"); 
     Item ii = db.SelectSingleItem("/sitecore/content/Home"); 

     using (new EditContext(ii, true, false)) 
     { 
      String current = ii.Fields["Breadcrumb Title"].Value; 
      Console.WriteLine("Current value: " + current); 
      current += " e"; 
      Console.WriteLine("Changing to: " + current); 

      ii.Fields["Breadcrumb Title"].Value = current; 

     } 

    } 

} 

回答

1

不推薦使用EditContext。編輯項目的正確和受支持的方法是使用Item.Editing.BeginEdit()和Item.Editing.EndEdit()。首先要嘗試的是切換到那些,看看它是否有所作爲。

同時;你說這個事件並沒有被「觸發」。你在多服務器設置?如果是這樣,您需要考慮遠程事件,因爲「item:saved」只會觸發事件觸發的實際服務器。

+0

我嘗試使用Item.Editing,並沒有有所作爲。通過「在網上」我的意思是網站。現在我正在開發環境中工作,所以我們使用sitecore master(沒有發佈)。並且控制檯應用程序也運行在同一臺機器上 – webber

+0

好的。那麼我猜想線索會是,它看起來並不像你在任何「正常」類型的web上下文中運行Sitecore。我說這個的原因是;您正在爲Console.WriteLine進行調試。我記得閱讀一些關於如何讓Sitecore在傳統HttpContext外部運行的帖子(用於測試和嘲笑的目的) - 但是我看到的所有方法都嚴重地改變了Sitecore的功能。如果在這些方法的上下文中運行,我不希望正常的Sitecore事件觸發和運行,就像您通常所期望的那樣。 –

+0

你能分享關於你的開發環境如何配置的任何信息嗎?如果是這樣,我可能會進一步提供幫助。 –

相關問題