SitecoreパブリッシングAPIを使用してSitecoreマスターDBのスケジュールされたパブリッシングを実行しています。次のコードを実行する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();
上記のコードを実行すると、ワークフローの状態に関係なく、すべての子孫を含むすべてがコンテンツノードに公開されます。ワークフローを完全に無視しているようなものです。これは私たちが求めているものではなく、私たちのライブWebサイトで多くの問題を引き起こしています。
Sitecoreデスクトップ内から同じアクションを実行すると、すべての子孫を含め、公開可能なコンテンツノードのすべてが公開されます(つまり、ワークフローの最終段階にあります)。まだドラフトモードになっているツリー内のアイテムは公開されません。これは必要な動作です。
上記のコードを次の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デスクトップにまったく表示されなかったことです。また、「現在のアイテムには「英語:英語」のバージョンがありません」という警告が表示されていました。