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

Outlook Calendar List Calendars

See more Outlook Calendar Examples

Get all the user's calendars.

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.HttpResponse,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  jsonToken: TJsonObject;
  resp: THttpResponse;
  json: TJsonObject;
  id: string;
  name: string;
  color: string;
  hexColor: string;
  isDefaultCalendar: Boolean;
  changeKey: string;
  canShare: Boolean;
  canViewPrivateItems: Boolean;
  canEdit: Boolean;
  defaultOnlineMeetingProvider: string;
  isTallyingResponses: Boolean;
  isRemovable: Boolean;
  ownerName: string;
  ownerAddress: string;
  j: Integer;
  count_j: Integer;
  strVal: 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 Calendar OAuth2 Access Token (Azure AD v2.0 Endpoint).

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

  http.AuthToken := jsonToken.StringOf('access_token');

  resp := THttpResponse.Create;
  success := http.HttpNoBody('GET','https://graph.microsoft.com/v1.0/me/calendars',resp);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  WriteLn('Response status code = ' + resp.StatusCode);

  //  The HTTP request succeeded if the response status code = 200.
  if (resp.StatusCode <> 200) then
    begin
      WriteLn(resp.BodyStr);
      WriteLn('Failed');
      Exit;
    end;

  json := TJsonObject.Create;
  json.Load(resp.BodyStr);
  json.EmitCompact := False;
  WriteLn(json.Emit());

  //  Here is a sample response:

  //  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#me/calendars",
  //      "value": [
  //          {
  //              "@odata.id": "https://graph.microsoft.com/v1.0/users('ddfcd489-628b-40d7-b48b-57002df800e5@1717622f-1d94-4d0c-9d74-709fad664b77')/calendars('AAMkAGI2TGuLAAA=')",
  //              "id": "AAMkAGI2TGuLAAA=",
  //              "name": "Calendar",
  //              "color": "auto",
  //              "changeKey": "nfZyf7VcrEKLNoU37KWlkQAAA0x0+w==",
  //              "canShare":true,
  //              "canViewPrivateItems":true,
  //              "hexColor": "",
  //              "canEdit":true,
  //              "allowedOnlineMeetingProviders": [
  //                  "teamsForBusiness"
  //              ],
  //              "defaultOnlineMeetingProvider": "teamsForBusiness",
  //              "isTallyingResponses": true,
  //              "isRemovable": false,
  //              "owner":{
  //                  "name":"Samantha Booth",
  //                  "address":"samanthab@adatum.onmicrosoft.com"
  //              }
  //          }
  //      ]
  //  }

  odata_context := json.StringOf('"@odata.context"');
  i := 0;
  count_i := json.SizeOfArray('value');
  while i < count_i do
    begin
      json.I := i;
      id := json.StringOf('value[i].id');
      name := json.StringOf('value[i].name');
      color := json.StringOf('value[i].color');
      hexColor := json.StringOf('value[i].hexColor');
      isDefaultCalendar := json.BoolOf('value[i].isDefaultCalendar');
      changeKey := json.StringOf('value[i].changeKey');
      canShare := json.BoolOf('value[i].canShare');
      canViewPrivateItems := json.BoolOf('value[i].canViewPrivateItems');
      canEdit := json.BoolOf('value[i].canEdit');
      defaultOnlineMeetingProvider := json.StringOf('value[i].defaultOnlineMeetingProvider');
      isTallyingResponses := json.BoolOf('value[i].isTallyingResponses');
      isRemovable := json.BoolOf('value[i].isRemovable');
      ownerName := json.StringOf('value[i].owner.name');
      ownerAddress := json.StringOf('value[i].owner.address');
      j := 0;
      count_j := json.SizeOfArray('value[i].allowedOnlineMeetingProviders');
      while j < count_j do
        begin
          json.J := j;
          strVal := json.StringOf('value[i].allowedOnlineMeetingProviders[j]');
          j := j + 1;
        end;

      i := i + 1;
    end;



  http.Free;
  jsonToken.Free;
  resp.Free;
  json.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.