Search code examples
c#microsoft-graph-apionedrive

OneDrive SDK (Graph API) Determine if file has been checked out


I am looking for the best way to check if a file has been checked out by a user using the OneDrive SDK. This is just a layer on the Graph API. I wish to prevent downloads in my application if the file is checked out.

I am getting the contents of a folder using this

var results = await graphClient.Drives[driveId].Items[folderId].Children.Request().GetAsync();

However there does not appear to be any properties in this response around if the item is checked out?

From my testing I can attempt to checkout the file anyway and handle an exception is returned if the file is already checked out, but this is not something I would want to do for multiple items for obvious performance reasons.

await graphClient.Drives[driveId].Items[documentId].Checkout().Request().PostAsync();

Is anyone aware of a more efficient way to determine if files are checked out?


Solution

  • You need to read publication property of publicationFacet type. It provides details on the published status of a driveItem resource.

    publicationFacet type has property level which describes the state of publication for this document. Either published or checkout.

    publication property is not returned by default and must be specified in Select method.

    var results = await graphClient.Drives[driveId].Items[folderId].Children
                         .Request()
                         .Select("id,...,publication")
                         .GetAsync();
    

    Documentation

    publicationFacet