Sample code for 30+ languages & platforms
PureBasic

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