Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式触发Sitecore事件_C#_Sitecore - Fatal编程技术网

C# 以编程方式触发Sitecore事件

C# 以编程方式触发Sitecore事件,c#,sitecore,C#,Sitecore,我的sitecore网站订阅内容更改的OnSave事件。当我登录到content manager并更改任何字段时,该事件将在网站上成功触发。现在,我正在尝试做同样的事情,除了从一个独立的控制台应用程序触发这个事件 下面的代码更改了内容,我可以在网站上看到更改,但不会触发OnSave事件。编辑上下文不是静默的,因此它应该触发事件,但它不是 我还检查了事件引用数据库,新事件正在创建中,但它只是没有在web上触发。有人知道为什么没有触发该事件吗 Pipeline.Start("initialize",

我的sitecore网站订阅内容更改的OnSave事件。当我登录到content manager并更改任何字段时,该事件将在网站上成功触发。现在,我正在尝试做同样的事情,除了从一个独立的控制台应用程序触发这个事件

下面的代码更改了内容,我可以在网站上看到更改,但不会触发OnSave事件。编辑上下文不是静默的,因此它应该触发事件,但它不是

我还检查了事件引用数据库,新事件正在创建中,但它只是没有在web上触发。有人知道为什么没有触发该事件吗

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

不推荐使用EditContext。编辑项目的正确且受支持的方法是使用Item.Editing.BeginEdit()和Item.Editing.EndEdit()。首先要尝试的是切换到那些,看看它是否有不同


同时,;你说这个事件不是“在网络上”触发的。您是否处于多服务器设置中?如果是这样,您需要考虑远程事件,因为“项目:保存”将只在事件触发的实际服务器上触发。

我尝试使用item。我所说的“网上”是指网站。现在我在开发环境中工作,所以我们使用sitecore master(未发布任何内容)。控制台应用程序也在同一台机器上运行。嗯,我想线索是,看起来你并不是在任何“正常”的网络环境中运行Sitecore。我这样说的原因是;您正在执行Console.WriteLine以进行调试。我确实记得读过一些关于如何让Sitecore在传统HttpContext之外运行的帖子(出于测试和模拟目的)——但我看到的所有方法都严重改变了Sitecore的功能。如果在这些方法的上下文中运行,我不希望正常的Sitecore事件像您通常期望的那样触发和运行。您能分享有关如何配置您的开发环境的任何信息吗?如果是这样的话,我也许可以进一步帮助你。谢谢马克的帮助。在我的开发环境中,我让SiteCore以独立模式在IIS中运行。我之所以使用控制台应用程序,是因为我们在网站上缓存了一些数据,我需要清除这些数据。你认为还有其他更好的方法吗?一旦进入prod,我们将有多个web服务器需要刷新缓存。您不能在主机上编写web服务,并从控制台应用程序调用它吗?将所有逻辑都放在那里,这样您就不会对Sitecore上下文产生任何问题。