I have a block of code where I’m trying to disable event firing when editing a file, once the debugger hits the item.SystemUpdate(false) line it throws an exception that states “The file xxxx has been modified by xxxxx”
HandleEventsFiring handle = new HandleEventsFiring();
handle.DisableHandleEventFiring();
try
{
web.AllowUnsafeUpdates = true;
SPFile rptFile = web.GetFile(item.Url); //item is an SPListItem
if (rptFile.Exists)
{
WordDocUtility word = new WordDocUtility();
using (System.IO.Stream stream = rptFile.OpenBinaryStream())
{
word.ReplaceKeys(stream, keys);
rptFile.SaveBinary(stream);
}
}
item.SystemUpdate(false); // the line throwing the exception
}
finally
{
handle.EnableHandleEventFiring();
web.AllowUnsafeUpdates = allowUnsafeUpdates;
}
public class HandleEventsFiring: SPItemEventReceiver
{
public void DisableHandleEventFiring()
{
this.EventFiringEnabled = false;
}
public void EnableHandleEventFiring()
{
this.EventFiringEnabled = true;
}
}
Does anyone know of a way around this or am I doing something wrong?
Any help would be greatly appreciated.
You haven’t really shown enough of the code for us to point you to the exact problem. The error that you’re getting means that after you pulled the list item that is in
itemfrom the content database it was later updated. Chances are, if you get the error every single time, that you’re pulling down the same item more than once and your changes are conflicting with yourself. My guess is thatitemrepresents a file in a document library, and that you’re modifying the file in addition to the splist item. These changes are what are conflicting. You need to fetch the item, update the item, then fetch the file and update the file. If you need to fetch the item and then update the file you will need to fetch the item again so that you don’t end up updating an item when another update occurred between the fetch and update.