Thursday, August 6, 2009

How to display all versions in a SharePoint list view page

This is a small article about several undocumented query parameters that can be used on SharePoint list view pages to extract and display additional list data, e.g. the previous versions of the displayed list items.
The parameter that forces the display of all versions of the list items is “IncludeVersions”, it can be used like this:

http://someserver/sites/1/docs/Forms/AllItems.aspx?IncludeVersions=TRUE

A big note here – when you click the context menu commands for the list items they will be applied on the latest version of the item, and for document libraries always the latest version of the document will be opened. So the net value here is only the possibility to see the differences between the values of the displayed fields in the different item versions.
[UPDATE: check this posting for a possible work-around]
Another parameter is the “RootFolder” one, especially when the value that is provided for it is the asterisk character – then it forces a flat view of the list items, analogous to the “RecursiveAll” view scope option:

http://someserver/sites/1/docs/Forms/AllItems.aspx?IncludeVersions=TRUE&RootFolder=*

And here is how using the “IncludeVersions” parameter in conjunction with the well known “FilterFieldN” and “FilerValueN” parameters you can display all latest approved versions of your list (as if you are a user with reader rights who can’t see the pending or draft versions, but sees the latest approved versions of the items that are now pending):

http://someserver/sites/1/docs/Forms/AllItems.aspx?IncludeVersions=TRUE&RootFolder=*&FilterField1=_ModerationStatus&FilterValue1=0&FilterField2=_IsCurrentVersion&FilterValue2=1

Note the fields used to filter all versions – the _ModerationStatus and _IsCurrentVersion, the value 0 for the moderation status field corresponds to the approval status “Approved”.

25 comments:

  1. All nice but when used on a library, opening any document from such a "filtered" view will still open the last (draft) version. Very confusing for users. The very fundamentals of document control and document management seem to be completely overlooked by Microsoft's developers.
    Mr. Stanev's solution, unfortunately, does not solve the issue either...

    ReplyDelete
  2. Hello anonymous,
    you are right about that but there is actually a solution to that which is not that difficult - I was thinking about it when I wrote the posting but had never the time to implement it. So the idea is to use a custom computed column - actually a copy of the standard LinkFileName one adding an extra FieldRef for the system _UIVersion column in it and changing the rendering of the link to the document: the link should navigate instead to a custom _layouts page which will receive as url parameters the document's server relative url (FileRef field) and the document's version (_UIVersion field). The custom page will check the document with the object model (plus the provided version) and will either redirect to the current(latest) version of the document (this may be different for users with different permissions though) or an older version using the _vti_history url pattern.

    ReplyDelete
  3. Could you please provide us with more details about the proposed solution to open up the major version of the document. What would the custom page to check the document with the object model look like and could this be achieved using the designer?

    ReplyDelete
  4. Hello,
    I demonstrated a similar solution in a separate posting - http://stefan-stanev-sharepoint-blog.blogspot.com/2010/05/how-to-display-all-versions-in.html
    the difference is that it opens the exact version of the selected document, but you can easily modify the application page used there to force the opening of the last major version.

    ReplyDelete
  5. Hello,

    How is it possible to get the XML of the "?IncludeVersions=TRUE" view.
    The User should be able to pull the data to Excel (VBA).
    Thanks a lot

    ReplyDelete
  6. you can use a URL like this one to get the list data in XML format:
    http://myserver/myseite/_vti_bin/owssvr.dll?Cmd=Display&List={8de2bd36-e998-4a53-9351-c496f4d361a6}&XMLDATA=TRUE&IncludeVersions=TRUE

    in the List parameter you should provide the ID of your list

    ReplyDelete
  7. thank you for your post,

    There is any solution, to open with link the old version of document ?

    Actually, i use http://hostname/Open/EDR-OF-Document. to open the last version, but i don't know, how to open old version (major or minor) of this document.

    Thank you in advance

    ReplyDelete
  8. Hi anonymous,

    you can check this posting http://stefan-stanev-sharepoint-blog.blogspot.com/2010/05/how-to-display-all-versions-in.html

    ReplyDelete
  9. Hi
    Wonderful post, i tried your method of displaying list data in XML format.It worked well with all types except Task list type and iam using SharePoint 2010.

    http://myserver/myseite/_vti_bin/owssvr.dll?Cmd=Display&List={8de2bd36-e998-4a53-9351-c496f4d361a6}&XMLDATA=TRUE&IncludeVersions=TRUE

    ReplyDelete
  10. Hi anonymous,
    it doesn't work for me either (I checked it on SP 2010 too). And it doesn't work even without the IncludeVersions and XMLDATA parameters. I don't have a clue what it might be and the problem is that even Microsoft most probably won't support this since the RPC protocol (the funny URL-s with the owssvr.dll) has been deprecated since the times of MOSS 2007.

    ReplyDelete
  11. Hi Stefan,
    Thnks 4 u r reply.

    The reason y task list type was unable to provide XML result, is due to multi value lookup column. By default, Task list type has field named Predecessors which is a multivalued lookup column. So i think thts the reason. But i could able to get the current task list items as XML but only the versions of the task list items are not coming.

    ReplyDelete
  12. Hi,
    yes, that seems to be the problem indeed. I knew that when the list view contains a multiple lookup column the view doesn't render the items' versions (when you navigate .../AllItems.aspx?IncludeVersions=TRUE), but it didn't occur to me that it is the same problem here. Still, if you specify a list of fields in the "Query" parameter and there are no multiple lookup columns in the list, it will return a correct XML:
    http://myserver/mysite/_vti_bin/owssvr.dll?Cmd=Display&List={ef55d4bd-02f1-4156-884b-ae889fdbf88c}&XMLDATA=TRUE&Query=ID Title

    ReplyDelete
  13. Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain knowledge, would you mind updating your blog with extra information? It is extremely helpful for me.

    ReplyDelete
  14. Is there some other option that must be enabled in order for the IncludeVersions=TRUE to work? I've tried adding ?IncludeVersions=TRUE and ?IncludeVersions=TRUE&RootFolder=* to the URL of my document library to no avail. The document library only displays the lastest version. Am I missing something else?

    Thanks

    ReplyDelete
  15. Hi Anonymous,

    it won't work for sure in SharePoint 2010 which uses the XLV web part instead of the 2007's ListView web part. Also on SharePoint 2007 it doesn't work for views which contain multiple lookup columns (a lookup column with multiple selection enabled). Let me know if your case is one of the above mentioned.

    Greets
    Stefan

    ReplyDelete
  16. Stefan, great info! I did notice when using IncludeVersions=TRUE in the url it shows versions but it only shows the latest version of the check-in comment and another comment field we are using for status change. Why is that and can it be worked around?

    Thanks

    Dave

    ReplyDelete
  17. Hi Anonymous,

    Sorry for the late reply. I also saw that the Checkin comment field always shows its latest version.Probably this has something to do with the fact that this field is an internal lookup field referencing the internal "Doc" list (which is backed by a separate table in the content database). Unfortunately I don't see any work-around for this behavour/feature or at least an elegant and quick one. Possibly a list item receiver can be used to copy the value of the comment field to a hidden note field after every "check in" operation (the update operation should be performed using SPListItem.SystemUpdate(false) so that you don't create a new version with the "copying" update).

    Greets
    Stefan

    ReplyDelete
    Replies
    1. Stefan, Is there anyway that file version information can be displayed for MOSS 2003?

      Delete
    2. Hi Anonymous,
      I don't have any idea about this in SharePoint 2003, I haven't used it for several years now. Sorry for not being able to help you with that.

      Greets
      Stefan

      Delete
  18. Our given information related Sharepoint Consulting is very helpful for Sharepoint Consulting. For More Information Sharepoint Consulting.

    SharePoint consultants are experienced teams of professionals who expedite SharePoint programming develop robust, business oriented, and highly efficient SharePoint solutions that are Flexible, Modular, Efficient, and User friendly and scalable.

    ReplyDelete
  19. Hi! perfect soltuion in SharePoint 2007!
    But in SharePoint 2010it is not running :-(
    any idea?

    ReplyDelete
  20. Hi Anonymous,
    I noticed this as well - I think that it is because of the new XsltListViewWebPart web part, it just doesn't respond to these query parameters.

    Greets
    Stefan

    ReplyDelete
  21. Is there a way to have "IncludeVersions=True" on a data view webpart ?

    ReplyDelete
  22. Hi Eli,
    I am not sure about this - I haven't played with the data view wp trying to achieve the versioning trick.

    Greetings
    Stefan

    ReplyDelete
  23. Hi all,
    In the command text box on the data connections property box in Xl I’ve got the following which at the moment only gives a list of latest version files
    {524E0187-B111-4EFG-12RT-E9777CF12A93}{590AD018-88B1-411A-B3AB-537603353A6E}http://xxx.com/sites/Fl/_vti_bin/sites/Fl/Shared Documents/Consolidation Report/
    This is the best blog I’ve come across so far in terms of possibly providing a solution – can anyone give me an idea of how to change the command text so it gives a list of all file versions?
    thanks
    James

    ReplyDelete