2014-06-16 129 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

你能分享关于你的开发环境如何配置的任何信息吗?如果是这样,我可能会进一步提供帮助。 –

相关问题