我正在使用 Sitecore 发布 API 运行我的 Sitecore 主数据库的计划发布。我在一天中以预定的时间间隔调用一个 Web 服务,它运行以下代码(为了便于阅读而略微压缩):
// grab the root content node from sitecore
Item contentNode = dbSource.Items[ID.Parse("{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}")];
PublishOptions options = new PublishOptions(sourceDatabase, targetDatabase, PublishMode.Smart, lang, DateTime.Now);
options.RootItem = contentNode;
options.Deep = true;
Publisher p = new Publisher(options);
p.PublishAsync();
当我们运行上面的代码时,它会发布内容节点中的所有内容,包括所有后代,而不管工作流状态如何。就好像它完全忽略了工作流程。这不是我们所追求的,并且在我们的实时网站上造成了很多问题。
如果我们在 Sitecore Desktop 中运行相同的操作,它会发布内容节点中的所有内容,包括所有可发布的后代(即在最终工作流程阶段)。它不会发布树中仍处于草稿模式的任何项目。这是必需的行为。
我尝试通过使用以下 using 语句围绕上述代码以非管理员用户身份实现代码:
string userName = @"sitecore\******";
Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(userName, true);
user.RuntimeSettings.IsAdministrator = false;
using (new Sitecore.Security.Accounts.UserSwitcher(user))
{
...
}
不幸的是,这没有任何效果。
有什么明显的我遗漏了,还是我做得对而 Sitecore 做错了?有人可以帮忙吗?
我还注意到一个奇怪的事情是,当在实时数据库中查看已发布的草稿项目时,在 Sitecore 桌面中完全没有显示任何字段或元数据。他们还显示“当前项目没有“英语:英语”版本的警告。