1. アイテムへのアクセス

アイテムを編集モードに配置する

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

アイテムを更新するSitecore APIは、そのアイテムが編集モードでない場合に例外を投げることがあります。 Sitecore.Data.Items.Item.Editingプロパティのメソッドを使うか、Sitecore.Data.Items.EditContextクラスを使うことで、アイテムを編集モードに配置することができます。

!注CDサーバーはマスターデータベースにアクセスできないため、公開して項目を編集するものを書いた場合(実際にはしません)、本番環境では動作しません。

例えば、以下のコードはマスターデータベースの /Sitecore/Content/Home項目をSitecore.Data.Items.Item.Editingクラスのメソッドを用いてセキュリティ無効化装置内の編集モードに配置します。

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");

Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");

using (new Sitecore.SecurityModel.SecurityDisabler()) { home.Editing.BeginEdit();

try { // Edit item home.Editing.EndEdit(); } catch (Exception ex) { home.Editing.CancelEdit(); } }

Sitecore.Data.Items.Item.Editing.CancelEdit()メソッドを呼び出したりSitecore.Data.Items.Item.Editing.EndEdit()メソッドを呼び出さなかったりしても、Sitecoreは変更をコミットしません。

!重要開発者はこの例に示されたようにtry/catchブロックを使うべきです。簡潔にするために、このドキュメントのコード例には必ずしもtry/catchブロックが含まれているわけではありません。

あるいは、Sitecore.Data.Items.EditContextクラスを文で使うC#でアイテムを編集モードに置くこともできます。「using文」のクロージングはSitecore.Data.Items.EditContext.Dispose() メソッドを呼び出し、そのコードセグメント内で行われた変更をコミットします。

例えば、以下のコードではMasterデータベースの編集モードで*/Sitecore/Content/Home*項目を Sitecore.Data.Items.EditContextを用いて配置しています:

Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");

Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");

//TODO: eliminate SecurityDisabler if possible

using (new Sitecore.SecurityModel.SecurityDisabler()) { using (new Sitecore.Data.Items.EditContext(home)) { // Process home } }

!注Sitecore.Data.Items.EditContextクラスを使用する場合、変更を明示的にロールバックすることはできません。usingステートメント内のコードが例外を投げた場合、usingステートメントのクローズは例外以前に行われた変更を自動的にコミットします。

この記事を改善するための提案がある場合は、 お知らせください!