---
title: "アイテムを編集モードに配置する"
slug: "place-an-item-in-editing-mode"
abstract: "Sitecoreを使ってアイテムを編集モードに配置する方法。Data.Items.Item.EditingプロパティまたはSitecore。Data.Items.EditContextクラス。"
---
# アイテムを編集モードに配置する

アイテムを更新する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ステートメントのクローズは例外以前に行われた変更を自動的にコミットします。