Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Xero Upload File (Files API)Demonstrates how to upload a file to a Xero folder. Note: This example requires Chilkat v9.5.0.64 or greater.
// Important: See this note about string length limitations for strings returned by sp_OAMethod calls. // CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int DECLARE @iTmp1 int DECLARE @sTmp0 nvarchar(4000) -- 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. DECLARE @rest int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Rest', @rest OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @success int -- 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.. -- -------------------------------------------------------------- -- This example will upload a file to a folder using the Xero FILES API DECLARE @folderID nvarchar(4000) SELECT @folderID = '0ffca059-f2f1-4271-8de9-4b87c8c2c638' -- This JPG image can be downloaded from https://www.chilkatsoft.com/syncedImages/penguins.jpg DECLARE @filename nvarchar(4000) SELECT @filename = 'penguins.jpg' DECLARE @sbPath int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.StringBuilder', @sbPath OUT EXEC sp_OAMethod @sbPath, 'Append', @success OUT, '/files.xro/1.0/Files/{FolderId}' DECLARE @numReplaced int EXEC sp_OAMethod @sbPath, 'Replace', @numReplaced OUT, '{FolderId}', @folderID EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Content-Type', 'image/jpeg' -- Load the JPG image from a file. DECLARE @jpgData int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.BinData', @jpgData OUT EXEC sp_OAMethod @jpgData, 'LoadFile', @success OUT, 'qa_data/jpg/penguins.jpg' -- We could alternatively get it from a URL like this: DECLARE @jpgDataFromWeb int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.BinData', @jpgDataFromWeb OUT DECLARE @http int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.Http', @http OUT EXEC sp_OAMethod @http, 'QuickGetBd', @success OUT, 'https://www.chilkatsoft.com/syncedImages/penguins.jpg', @jpgDataFromWeb IF @success <> 1 BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @rest EXEC @hr = sp_OADestroy @sbPath EXEC @hr = sp_OADestroy @jpgData EXEC @hr = sp_OADestroy @jpgDataFromWeb EXEC @hr = sp_OADestroy @http RETURN END -- -- Put the file data in the 1st sub-part in the multipart/form-data request we'll be sending. EXEC sp_OASetProperty @rest, 'PartSelector', '1' EXEC sp_OAMethod @rest, 'SetMultipartBodyBd', @success OUT, @jpgData -- Set request headers in the 1st subpart (as indicated by the PartSelector) EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Content-Type', 'image/jpeg' EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Content-Disposition', 'multipart/form-data; name=Xero; filename=penguins.jpg' -- Restore the PartSelector to an empty string. EXEC sp_OASetProperty @rest, 'PartSelector', '' EXEC sp_OAMethod @rest, 'AddHeader', @success OUT, 'Content-Type', 'multipart/form-data' -- Upload with a multipart/form-data POST DECLARE @responseJson nvarchar(4000) EXEC sp_OAMethod @sbPath, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @rest, 'FullRequestMultipart', @responseJson OUT, 'POST', @sTmp0 EXEC sp_OAGetProperty @rest, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN EXEC sp_OAGetProperty @rest, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @rest EXEC @hr = sp_OADestroy @sbPath EXEC @hr = sp_OADestroy @jpgData EXEC @hr = sp_OADestroy @jpgDataFromWeb EXEC @hr = sp_OADestroy @http RETURN END DECLARE @json int EXEC @hr = sp_OACreate 'Chilkat_9_5_0.JsonObject', @json OUT EXEC sp_OAMethod @json, 'Load', @success OUT, @responseJson EXEC sp_OASetProperty @json, 'EmitCompact', 0 -- A 201 response is expected for actual success. -- The Xero documentation doesn't explicitly state it, but that's what we've found in testing. -- To be safe, we'll check for either 200 or 201. EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @iTmp0 OUT EXEC sp_OAGetProperty @rest, 'ResponseStatusCode', @iTmp1 OUT IF (@iTmp0 <> 200) and (@iTmp1 <> 201) BEGIN EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @rest EXEC @hr = sp_OADestroy @sbPath EXEC @hr = sp_OADestroy @jpgData EXEC @hr = sp_OADestroy @jpgDataFromWeb EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @json RETURN END -- Examine the JSON response EXEC sp_OAMethod @json, 'Emit', @sTmp0 OUT PRINT @sTmp0 -- A successful response looks like this: -- { -- "Name": "penguins.jpg", -- "MimeType": "image/jpeg", -- "Size": 777835, -- "CreatedDateUtc": "2016-11-12T15:31:53.4230000", -- "UpdatedDateUtc": "2016-11-12T15:31:53.4230000", -- "User": { -- "Name": "admin@chilkatsoft.com", -- "FirstName": "Matthew", -- "LastName": "Smith", -- "FullName": "Matthew Smith", -- "Id": "c362fe42-cb12-461f-b84a-c281c1a74841" -- }, -- "FolderId": "0ffca059-f2f1-4271-8de9-4b87c8c2c638", -- "Id": "f042e9a3-a31d-4595-b8b3-6030ea6084bb" -- } EXEC @hr = sp_OADestroy @rest EXEC @hr = sp_OADestroy @sbPath EXEC @hr = sp_OADestroy @jpgData EXEC @hr = sp_OADestroy @jpgDataFromWeb EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @json END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.