Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Outlook List Contacts

See more Outlook Contact Examples

List Outlook Contacts

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.Http,
  Chilkat.StringBuilder,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  jsonToken: TJsonObject;
  sbJson: TStringBuilder;
  statusCode: Integer;
  jResp: TJsonObject;
  odata_etag: string;
  id: string;
  createdDateTime: string;
  lastModifiedDateTime: string;
  changeKey: string;
  parentFolderId: string;
  birthday: string;
  fileAs: string;
  displayName: string;
  givenName: string;
  initials: string;
  middleName: string;
  nickName: string;
  surname: string;
  title: string;
  yomiGivenName: string;
  yomiSurname: string;
  yomiCompanyName: string;
  generation: string;
  jobTitle: string;
  companyName: string;
  department: string;
  officeLocation: string;
  profession: string;
  businessHomePage: string;
  assistantName: string;
  manager: string;
  mobilePhone: string;
  spouseName: string;
  personalNotes: string;
  j: Integer;
  count_j: Integer;
  strVal: string;
  name: string;
  address: string;
  odata_context: string;
  i: Integer;
  count_i: Integer;

begin
  success := False;

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

  http := THttp.Create;

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

  jsonToken := TJsonObject.Create;
  success := jsonToken.LoadFile('qa_data/tokens/outlookContacts.json');
  if (success = False) then
    begin
      WriteLn(jsonToken.LastErrorText);
      Exit;
    end;
  http.AuthToken := jsonToken.StringOf('access_token');

  //  Send the following GET:

  //  GET https://graph.microsoft.com/v1.0/me/contacts
  sbJson := TStringBuilder.Create;
  success := http.QuickGetSb('https://graph.microsoft.com/v1.0/me/contacts',sbJson);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  statusCode := http.LastStatus;
  WriteLn('Response status code = ' + statusCode);

  if (statusCode <> 200) then
    begin
      WriteLn(sbJson.GetAsString());
      WriteLn('Failed.');
      Exit;
    end;

  jResp := TJsonObject.Create;
  jResp.LoadSb(sbJson);
  jResp.EmitCompact := False;
  WriteLn(jResp.Emit());

  //  Sample output:

  //  Use this online tool to generate parsing code from sample JSON: 
  //  Generate Parsing Code from JSON

  //  {
  //    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('4ee732c3-322e-4a6b-b729-2fd1eb5c6004')/contacts",
  //    "value": [
  //      {
  //        "@odata.etag": "W/\"EQAAABYAAABUcG0qWqkmQYqWLHQataQxAAD0iYfT\"",
  //        "id": "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQBGAAAAAAAu7cUXL5YOTrdsUIw7-v8FBwBUcG0qWqkmQYqWLHQataQxAAAAAAEOAABUcG0qWqkmQYqWLHQataQxAAD0sxexAAA=",
  //        "createdDateTime": "2021-06-29T16:32:05Z",
  //        "lastModifiedDateTime": "2021-06-29T16:32:06Z",
  //        "changeKey": "EQAAABYAAABUcG0qWqkmQYqWLHQataQxAAD0iYfT",
  //        "categories": [
  //        ],
  //        "parentFolderId": "AAMkADYzZWE3YmZmLWU0YzgtNGNkZC04MGE1LWFiYTFlNTRlY2QwYQAuAAAAAAAu7cUXL5YOTrdsUIw7-v8FAQBUcG0qWqkmQYqWLHQataQxAAAAAAEOAAA=",
  //        "birthday": null,
  //        "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": {},
  //        "businessAddress": {},
  //        "otherAddress": {}
  //      },
  //  ...
  //    ]
  //  }

  odata_context := jResp.StringOf('"@odata.context"');
  i := 0;
  count_i := jResp.SizeOfArray('value');
  while i < count_i do
    begin
      jResp.I := i;
      odata_etag := jResp.StringOf('value[i]."@odata.etag"');
      id := jResp.StringOf('value[i].id');
      createdDateTime := jResp.StringOf('value[i].createdDateTime');
      lastModifiedDateTime := jResp.StringOf('value[i].lastModifiedDateTime');
      changeKey := jResp.StringOf('value[i].changeKey');
      parentFolderId := jResp.StringOf('value[i].parentFolderId');
      birthday := jResp.StringOf('value[i].birthday');
      fileAs := jResp.StringOf('value[i].fileAs');
      displayName := jResp.StringOf('value[i].displayName');
      givenName := jResp.StringOf('value[i].givenName');
      initials := jResp.StringOf('value[i].initials');
      middleName := jResp.StringOf('value[i].middleName');
      nickName := jResp.StringOf('value[i].nickName');
      surname := jResp.StringOf('value[i].surname');
      title := jResp.StringOf('value[i].title');
      yomiGivenName := jResp.StringOf('value[i].yomiGivenName');
      yomiSurname := jResp.StringOf('value[i].yomiSurname');
      yomiCompanyName := jResp.StringOf('value[i].yomiCompanyName');
      generation := jResp.StringOf('value[i].generation');
      jobTitle := jResp.StringOf('value[i].jobTitle');
      companyName := jResp.StringOf('value[i].companyName');
      department := jResp.StringOf('value[i].department');
      officeLocation := jResp.StringOf('value[i].officeLocation');
      profession := jResp.StringOf('value[i].profession');
      businessHomePage := jResp.StringOf('value[i].businessHomePage');
      assistantName := jResp.StringOf('value[i].assistantName');
      manager := jResp.StringOf('value[i].manager');
      mobilePhone := jResp.StringOf('value[i].mobilePhone');
      spouseName := jResp.StringOf('value[i].spouseName');
      personalNotes := jResp.StringOf('value[i].personalNotes');
      j := 0;
      count_j := jResp.SizeOfArray('value[i].categories');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('value[i].imAddresses');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('value[i].homePhones');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('value[i].businessPhones');
      while j < count_j do
        begin
          jResp.J := j;
          strVal := jResp.StringOf('value[i].businessPhones[j]');
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('value[i].children');
      while j < count_j do
        begin
          jResp.J := j;
          j := j + 1;
        end;

      j := 0;
      count_j := jResp.SizeOfArray('value[i].emailAddresses');
      while j < count_j do
        begin
          jResp.J := j;
          name := jResp.StringOf('value[i].emailAddresses[j].name');
          address := jResp.StringOf('value[i].emailAddresses[j].address');
          j := j + 1;
        end;

      i := i + 1;
    end;



  http.Free;
  jsonToken.Free;
  sbJson.Free;
  jResp.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.