SharePoint 2007 - Changing Content Without Creating a New Version

Tuesday, 10 June 2008 23:37 by RanjanBanerji

SharePoint offers a neat feature that creates a version of any content the moment you edit it.  This way you maintain a history of all changes, you know who changed information and of course you can revert back to a prior version.  Clearly a great feature.  But what happens if you want to make a certain change without creating a version.  No, I am not talking about turning version feature off.  What if I want to keep versions but not for this one change.

Let me explain. 

  • Imagine a document library or an image library with large numbers (1000s) of large (file size) documents/images. 
  • Imagine that these files (documents/images) add up to 10 GB. 
  • In addition to the files these libraries store properties associated with the file.  Let's suppose one of the property is the state in which the document was created and was represented by the 2 letter symbol of the state (yep, I am talking about states in the US). 
  • Now suppose the customer comes to you and says "I don't want 2 letter state codes, I want the full state name listed"

 

So what are you going to do?  You can assign the task to some poor person to make the data changes (Apparently a path chosen by many SharePoint experts) or you can write some code to do so.  Either way you are going to encounter one large problem.  You are about to experience a huge increase in the size of your database.  Based on my example the increase will be 10 GB.  You see as you make this trivial edit SharePoint will make a new version of not just this edit but of the entire object which will include the entire file (image or document) in question.  So if you had files adding up to 10 GB you will now have 20 GB worth of files.  But is this specific change worth creating a version for?

Also, if you attempt to make this change to all such files as mentioned in my example, irrespective of the approach you took you can make changes only to items that are not checked out to others.

So you have two problems:

  • Database bloat
  • Inability to complete the task due to certain items checked out by others

 

Now if you took the path to update each item via writing code you probably did it as follows (pseudo code included):

public void UpdateItem() { 
        SPListItem listItem = web.GetListItem( fileNameAndPath ); //web is an SPWeb 
        //Get the file
        SPFile file = null;
        file = listItem.File;
        file.CheckOut();

        listItem[ "STATE" ] = stateLookup[ listItem[ "STATE" ] ];

        listItem.Update();

        file.CheckIn( "Metadata Update" );
        file.Publish( "Metadata Update" );
        file.Approve( "Metadata Update" );

}

 

But this approach will create a version and will therefore result in database bloat.  An alternative approach would be to use the system update feature as follows:

public void UpdateItem() {
    SPListItem listItem = web.GetListItem( imageNameAndPath ); //web is an SPWeb
    listItem[ "STATE" ] = stateLookup[ listItem[ "STATE" ] ];  //Lookup the full state name based on the two letter code and assign it to the property
    listItem.SystemUpdate( true );
}

Now with this approach you have the following advantages:

  • No need to check out.
  • It does not matter if the item is checked out by another user.
  • No version is created so no database bloat.

I must add that this approach must be used with extreme caution.  It is not a good practice to change items that others have checked out and if someone has versioning turned on on a list there is probably a reason for it.  Having said that now you know you have a way to get around certain problems if needed.

 

Tags:  
Categories:   SharePoint
Actions:   E-mail | Permalink | Comments (4) | Comment RSSRSS comment feed

Comments

August 15. 2008 06:31

Kuldeep kadyan

Thanks you saved my life.....exactly what i needed.

Kuldeep kadyan

August 17. 2008 01:20

RanjanBanerji

Kuldeep,

You are welcome.

Thanks,

Ranjan

RanjanBanerji

November 1. 2008 09:35

Lordi001

Great Manual, helped me with a automatic update of a list

Lordi001

July 5. 2011 10:48

Harish

Hi Ranjan,

I have a question here. Is it possible to stop creating a new version when there is no update to the list item. That when a save is made to the list item without any modifications to any of the columns, then the version history shows a blank entry. I do not want this. I want a history only if there is a genuine updation. Is there a way to achieve this?

Thank you,
Harish

Harish

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading