Get the latest checked-in version (document) of a document from SP 2010 doc library

782 views Asked by At

I have a document library with versioning enabled in SharePoint 2010. I want to get the file which is checked-in and for any checked-out file, i need to get its latest checked-in version (document). I am using c# server side object model on SharePoint 2010. Can anyone help me out please?

1

There are 1 answers

2
Lukas Nespor On BEST ANSWER

This could help. It will iterate through all items in the list and if the item is Checked Out it will find latest Published version.

using Microsoft.SharePoint;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        using (SPSite site = new SPSite("https://sharepoint.domain.com"))
        using (SPWeb web = site.OpenWeb())
        {
            SPList list = web.GetList($"{web.ServerRelativeUrl.TrimEnd('/')}/DocumentLibrary");
            SPListItemCollection items = list.GetItems(new SPQuery());

            foreach (SPListItem item in items)
            {
                object checkedOutTo = item[SPBuiltInFieldId.CheckoutUser];
                if (checkedOutTo == null)
                {
                    // Latest version
                    Console.WriteLine($"{item.ID} | {item.Versions[0].VersionLabel}");

                    // Here are bytes of the file itself
                    byte[] bytes = item.File.OpenBinary();
                }
                else
                {
                    // Find latest published version
                    SPFileVersion version = item.File.Versions
                        .Cast<SPFileVersion>()
                        .OrderByDescending(v => v.ID)
                        .Where(v => v.Level == SPFileLevel.Published)
                        .FirstOrDefault();

                    if (version != null)
                    {
                        Console.WriteLine($"{item.ID} | {version.VersionLabel} | {checkedOutTo}");

                        // Here are bytes of the file itself
                        byte[] bytes = version.OpenBinary();
                    }
                    else
                        Console.WriteLine($"{item.ID} | No published version | {checkedOutTo}");
                }
            }
        }
    }
}