Sitecore will throw exception when editing an item if the item is not in editing mode.
There are two ways where you can put an item in editing mode.
1. Sitecore.Data.Items.ItemEditing
2. Sitecore.Data.Items.EditContext
Scenario
|
Sitecore.Data.Items.ItemEditing
|
Sitecore.Data.Items.EditContext
|
To begin editing
|
Item.Editing.BeginEdit()
|
Using(new Sitecore.Data.Items.EditContext(item))
|
To Commit/End Changes
|
Item.Editing.EndEdit()
|
If previous statement passes, automatically item changes will be committed.
|
To Cancel Edit
|
Item.Editing.CancelEdit()
|
If previous statement fails, automatically item changes will be rolled back.
|
1. Sitecore.Data.Items.ItemEditing
Unless and until, we call EndEdit() or CancelEdit(), Sitecore does not commit the changes.
//Getting Master Database
Sitecore.Data.Database masterDB = Sitecore.Configuration.Factory.GetDatabase("master");
//Getting a Sitecore Item
Sitecore.Data.Items.Item home = masterDB.GetItem("/sitecore/content/Home");
//Begin Editing Sitecore Item
home.Editing.BeginEdit();
try
{
home["Title"] = "Title from Code";
//Commit the changes
home.Editing.EndEdit();
}
catch (Exception)
{
//Revert the Changes
home.Editing.CancelEdit();
}
2. Sitecore.Data.Items.EditContext
Closure of Using in EditContext will implicitly commit any changes within that segment of code and also calls dispose().
//Getting Master Database
Sitecore.Data.Database masterDB = Sitecore.Configuration.Factory.GetDatabase("master");
//Getting a Sitecore Item
Sitecore.Data.Items.Item home = masterDB.GetItem("/sitecore/content/Home");
//Using EditContext to edit an Item
using (new Sitecore.Data.Items.EditContext(home))
{
home["Text"] = "Modified Text from Code";
}
Very concise and clear. Thank you.
ReplyDelete