【发布时间】:2016-05-25 09:08:38
【问题描述】:
我一直在尝试通过 Sitecore 编辑器中已更改的代码发布项目。如果我以编程方式更新字段值并发布这些更改,那么它可以正常工作。
我们的内容管理编辑器会定期在编辑器中进行更改,而不必发布它们。我们希望为他们提供一种功能,即单击一个按钮即可发布所有相关更改并清除 Sitecore 缓存。
我不想发布整个网站,只发布几个预定义的项目。
我们目前使用的是 Sitecore.NET 6.4.1(修订版 110720)。我无法更新 Sitecore。
我尝试了以下选项:
选项 1:实例化一个新的发布者对象
Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Database web = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Publishing.PublishOptions publishOptions = new Sitecore.Publishing.PublishOptions(master,
web,
Sitecore.Publishing.PublishMode.SingleItem,
item.Language,
System.DateTime.Now);
Sitecore.Publishing.Publisher publisher = new Sitecore.Publishing.Publisher(publishOptions);
publisher.Options.RootItem = item;
publisher.Options.Deep = true;
publisher.Publish();
选项 2:使用静态发布管理器
Database db = Sitecore.Configuration.Factory.GetDatabase("web");
Database[] databases = new Database[1] { db };
Sitecore.Handle publishHandle = Sitecore.Publishing.PublishManager.PublishItem(item, databases, db.Languages, true, false);
这两种方法都包含在 using 语句中,以使用内容管理编辑器使用的同一帐户。
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))
{
// publish code ...
}
}
据我所知,日志没有显示任何值得注意的内容
ManagedPoolThread #7 13:41:46 INFO Job started: Publish to 'web'
ManagedPoolThread #7 13:41:46 INFO HtmlCacheClearer clearing HTML caches for all sites (5).
ManagedPoolThread #7 13:41:46 INFO HtmlCacheClearer done.
ManagedPoolThread #7 13:41:46 INFO Job ended: Publish to 'web' (units processed: 2)
ManagedPoolThread #5 13:41:46 INFO Job ended: Publish (units processed: )
这绝对不是缓存问题,因为在以编程方式清除缓存之前在编辑器中手动发布时,更改在代码中可见。
所以我正在寻找一种以编程方式发布更新项目的预定义列表的方法,而不管编辑的方式。
【问题讨论】:
-
在您的选项 2 (publishmanager) 中,您将发布到主数据库。您可以尝试以 Web 数据库为目标的那个吗?另外,请确保您使用的是正确的数据库上下文(也可以使用数据库切换器来主数据库)。
-
似乎也不起作用。我添加了一个 DatabaseSwitcher 并将数据库更改为 web,也尝试了另一种方式。
-
我使用选项2,你能用网络更新问题中的代码吗?,其他发布目标并不总是“网络”,最好不要使用这个硬编码,2)如果父不存在在网络数据库中,该项目不会被发布
-
已更新为“web”,这不是问题,因为我尝试了两者来确定,但我想我想通了,稍后会发布答案
标签: c# .net sitecore sitecore6