Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.0.0+

Outlook Contacts Update (PATCH) a Contact

See more Outlook Contact Examples

Update the properties of an Outlook contact object.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  This example 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

    ;  Use your previously obtained access token here: Get Outlook Contacts OAuth2 Access Token (Azure AD v2.0 Endpoint).

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

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/outlookContacts.json")
    If success = 0
        Debug CkJsonObject::ckLastErrorText(jsonToken)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        ProcedureReturn
    EndIf

    CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))

    ;  Send the following PATCH:

    ;  PATCH https://graph.microsoft.com/v1.0/me/contacts/{id}
    ;  Content-type: application/json
    ;  Content-length: 1977
    ;  
    ;  {
    ;    "homeAddress": {
    ;      "street": "123 Some street",
    ;      "city": "Seattle",
    ;      "state": "WA",
    ;      "postalCode": "98121"
    ;    },
    ;    "birthday": "1974-07-22"
    ;  }

    ;  Build the JSON body of the POST.

    ;  Use this online tool to generate code from sample JSON: 
    ;  Generate Code to Create JSON

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

    CkJsonObject::ckUpdateString(json,"homeAddress.street","123 Some street")
    CkJsonObject::ckUpdateString(json,"homeAddress.city","Seattle")
    CkJsonObject::ckUpdateString(json,"homeAddress.state","WA")
    CkJsonObject::ckUpdateString(json,"homeAddress.postalCode","98121")
    CkJsonObject::ckUpdateString(json,"birthday","1974-07-22")

    ;  We need the ID of the contact to be updated.
    ;  This was available in the response when we created the contact:  Create an Outlook Contact.
    ;  Or you can list contacts to get the ID: List Outlook Contacts).

    id.s = "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQBGAAAAAAAu7cUXL5YOTrdsUIw7-v8FBwBUcG0qWqkmQYqWLHQataQxAAAAAAEOAABUcG0qWqkmQYqWLHQataQxAAD0sxexAAA="
    CkHttp::ckSetUrlVar(http,"id",id)

    ;  Send the HTTP PATCH
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpJson(http,"PATCH","https://graph.microsoft.com/v1.0/me/contacts/{$id}",json,"application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        CkJsonObject::ckDispose(json)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    Debug "Response status code = " + Str(CkHttpResponse::ckStatusCode(resp))

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

    CkJsonObject::ckLoad(jResp,CkHttpResponse::ckBodyStr(resp))
    CkJsonObject::setCkEmitCompact(jResp, 0)
    Debug CkJsonObject::ckEmit(jResp)

    ;  The send succeeded if the response status code = 201.
    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug "Failed"
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(jsonToken)
        CkJsonObject::ckDispose(json)
        CkHttpResponse::ckDispose(resp)
        CkJsonObject::ckDispose(jResp)
        ProcedureReturn
    EndIf

    ;  Sample JSON response:

    ;  {
    ;    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('4ee732c3-322e-4a6b-b729-2fd1eb5c6004')/contacts/$entity",
    ;    "@odata.etag": "W/\"EQAAABYAAABUcG0qWqkmQYqWLHQataQxAAD0iYu5\"",
    ;    "id": "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQBGAAAAAAAu7cUXL5YOTrdsUIw7-v8FBwBUcG0qWqkmQYqWLHQataQxAAAAAAEOAABUcG0qWqkmQYqWLHQataQxAAD0sxexAAA=",
    ;    "createdDateTime": "2021-06-29T16:32:05Z",
    ;    "lastModifiedDateTime": "2021-06-29T16:57:39Z",
    ;    "changeKey": "EQAAABYAAABUcG0qWqkmQYqWLHQataQxAAD0iYu5",
    ;    "categories": [
    ;    ],
    ;    "parentFolderId": "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQAuAAAAAAAu7cUXL5YOTrdsUIw7-v8FAQBUcG0qWqkmQYqWLHQataQxAAAAAAEOAAA=",
    ;    "birthday": "1974-07-22T11:59:00Z",
    ;    "fileAs": "",
    ;    "displayName": "Pavel Bansky",
    ;    "givenName": "Pavel",
    ;    "initials": null,
    ;    "middleName": null,
    ;    "nickName": null,
    ;    "surname": "Bansky",
    ;    "title": null,
    ;    "yomiGivenName": null,
    ;    "yomiSurname": null,
    ;    "yomiCompanyName": null,
    ;    "generation": null,
    ;    "imAddresses": [
    ;    ],
    ;    "jobTitle": null,
    ;    "companyName": null,
    ;    "department": null,
    ;    "officeLocation": null,
    ;    "profession": null,
    ;    "businessHomePage": null,
    ;    "assistantName": null,
    ;    "manager": null,
    ;    "homePhones": [
    ;    ],
    ;    "mobilePhone": null,
    ;    "businessPhones": [
    ;      "+1 732 555 0102"
    ;    ],
    ;    "spouseName": null,
    ;    "personalNotes": "",
    ;    "children": [
    ;    ],
    ;    "emailAddresses": [
    ;      {
    ;        "name": "Pavel Bansky",
    ;        "address": "pavelb@fabrikam.onmicrosoft.com"
    ;      }
    ;    ],
    ;    "homeAddress": {
    ;      "street": "123 Some street",
    ;      "city": "Seattle",
    ;      "state": "WA",
    ;      "postalCode": "98121"
    ;    },
    ;    "businessAddress": {},
    ;    "otherAddress": {}
    ;  }

    Debug "Contact updated."


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(jsonToken)
    CkJsonObject::ckDispose(json)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jResp)


    ProcedureReturn
EndProcedure