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

Xero Get File Content (Files API)

Demonstrates how to download the content of a Xero file.

Note: This example requires Chilkat v9.5.0.64 or greater.

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.StringBuilder,
  Chilkat.Rest,
  Chilkat.BinData;

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

procedure RunDemo;
var
  success: Boolean;
  rest: TRest;
  fileID: string;
  sbPath: TStringBuilder;
  numReplaced: Integer;
  jpgData: TBinData;
  sbErrorText: TStringBuilder;

begin
  success := False;

  //  Note: Requires Chilkat v9.5.0.64 or greater.

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

  rest := TRest.Create;

  //  Before sending REST API calls, the REST object needs to be
  //  initialized for OAuth1.
  //  See Xero 2-Legged OAuth1 Setup for sample code.

  //  Assuming the REST object's OAuth1 authenticator is setup, and the initial
  //  connection was made, we may now send REST HTTP requests..

  //  ------------------------------------------------------------------------------
  fileID := 'f042e9a3-a31d-4595-b8b3-6030ea6084bb';

  sbPath := TStringBuilder.Create;
  sbPath.Append('/files.xro/1.0/Files/{FileId}/Content');
  numReplaced := sbPath.Replace('{FileId}',fileID);

  jpgData := TBinData.Create;
  success := rest.FullRequestNoBodyBd('GET',sbPath.GetAsString(),jpgData);
  if (success <> True) then
    begin
      WriteLn(rest.LastErrorText);
      Exit;
    end;

  //  A 200 response is expected for actual success.
  //  If we don't get a 200 response, then the response body was not actually
  //  the file data, but it was text containing error information.
  if (rest.ResponseStatusCode <> 200) then
    begin
      sbErrorText := TStringBuilder.Create;
      sbErrorText.AppendBd(jpgData,'utf-8',0,0);
      WriteLn(sbErrorText.GetAsString());
      WriteLn('-- Failed.');
      Exit;
    end;

  //  Save to a local file.
  success := jpgData.WriteFile('qa_output/xero_penguins.jpg');
  if (success <> True) then
    begin
      WriteLn('Failed to save to local file.');
    end;

  WriteLn('Xero Get File was Successful.');


  rest.Free;
  sbPath.Free;
  jpgData.Free;
      sbErrorText.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.