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

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

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

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

メモ

CDサーバーはmasterデータベースにアクセスできないため、アイテムを編集する公開用のものを作成した場合 (これは絶対に行いません)、運用環境では機能しないことに注意してください。

たとえば、次のコードでは、Sitecore.Data.Items.Item.Editingクラスのメソッドを使用して、Masterデータベース内の /Sitecore/Content/Home項目をセキュリティ ディセーブル内の編集モードに配置します。

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ブロックが含まれているわけではありません。

または、ステートメントを使用してC# でSitecore.Data.Items.EditContextクラスを使用し、項目を編集モードにすることもできます。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ステートメントを閉じると、例外の前に行われた変更が自動的にコミットされます。

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