Sample code for 30+ languages & platforms
PureBasic

SharePoint -- Check Out a File (or Undo a Checkout)

In SharePoint, you can check out a file to make sure nobody can change it before you update it. After updating, you can check in the file. This example shows how to check out a SharePoint file.

Note: To undo a checkout, replace the string "checkout" with "undocheckout" in the line of code that sets the request's path.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkHttpRequest.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; If SharePoint Windows classic authentication is used, then set the 
    ; Login, Password, LoginDomain, and NtlmAuth properties.
    CkHttp::setCkLogin(http, "SHAREPOINT_USERNAME")
    CkHttp::setCkPassword(http, "SHAREPOINT_PASSWORD")
    CkHttp::setCkLoginDomain(http, "SHAREPOINT_NTLM_DOMAIN")
    CkHttp::setCkNtlmAuth(http, 1)

    ; The more common case is to use SharePoint Online authentication (via the SPOIDCRL cookie).
    ; If so, do not set Login, Password, LoginDomain, and NtlmAuth, and instead
    ; establish the cookie as shown at SharePoint Online Authentication

    ; The more common case is to use SharePoint Online authentication (via the SPOIDCRL cookie).
    ; If so, do not set Login, Password, LoginDomain, and NtlmAuth, and instead
    ; establish the cookie as shown at SharePoint Online Authentication

    ; This example will check out the file named "penguins2.jpg" 
    ; which is located in the "/Documents" folder.

    req.i = CkHttpRequest::ckCreate()
    If req.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpRequest::setCkHttpVerb(req, "POST")
    ; Note that our path uses GetFileByServerRelativeUrl and not GetFolderByServerRelativeUrl
    ; Also, if your Sharepoint site is within a site collection, the URL is formatted like this (where "teamA" is the name of the site)
    ; /sites/teamA/_api/web/GetFileByServerRelativeUrl('/sites/teamA/Documents/penguins2.jpg')/checkout

    ; Note: To undo a checkout, replace "checkout" with "undocheckout" in the following line of code.
    CkHttpRequest::setCkPath(req, "/_api/web/GetFileByServerRelativeUrl('/Documents/penguins2.jpg')/checkout")

    ; We need to add a form digest value in the X-RequestDigest header field.
    ; See this example for details on
    ; how to get (and cache) a form digest value
    CkHttpRequest::ckAddHeader(req,"X-RequestDigest","SHAREPOINT_FORM_DIGEST")

    ; Send the POST using HTTPS (TLS). Port 443 is the default port for https.
    bUseTls.i = 1
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpSReq(http,"SHAREPOINT_HTTPS_DOMAIN",443,bUseTls,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    ; The response body contains XML.
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::ckLoadXml(xml,CkHttpResponse::ckBodyStr(resp))

    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug "Response status code = " + Str(CkHttpResponse::ckStatusCode(resp))
        Debug CkXml::ckGetXml(xml)
        Debug "Failed"
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkHttpResponse::ckDispose(resp)
        CkXml::ckDispose(xml)
        ProcedureReturn
    EndIf

    ; Show the successful XML response.
    Debug CkXml::ckGetXml(xml)
    Debug "Success."

    ; A successful XML response looks like this:
    ; <?xml version="1.0" encoding="utf-8" ?>
    ; <d:CheckOut xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
    ; 	xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
    ; 	xmlns:georss="http://www.georss.org/georss" 
    ; 	xmlns:gml="http://www.opengis.net/gml" m:null="true" />
    ; 
    ; 


    CkHttp::ckDispose(http)
    CkHttpRequest::ckDispose(req)
    CkHttpResponse::ckDispose(resp)
    CkXml::ckDispose(xml)


    ProcedureReturn
EndProcedure