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
(Visual Basic 6.0) Xero Get Attachment (Download a Xero Attachment)Demonstrates how to get the content of an attachment in Xero. Note: This example requires Chilkat v9.5.0.64 or greater.
' 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. Dim rest As New ChilkatRest Dim success As Long ' 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.. ' -------------------------------------------------------------- ' First get a list of attachments for a given document (in this case a Receipt). Dim endPoint As String endPoint = "Receipts" Dim receiptID As String receiptID = "c4f40e59-c390-0001-caff-ce731c707d00" Dim sbPath As New ChilkatStringBuilder success = sbPath.Append("/api.xro/2.0/{Endpoint}/{Guid}/Attachments/") Dim numReplaced As Long numReplaced = sbPath.Replace("{Endpoint}",endPoint) numReplaced = sbPath.Replace("{Guid}",receiptID) Dim responseXml As String responseXml = rest.FullRequestNoBody("GET",sbPath.GetAsString()) If (rest.LastMethodSuccess <> 1) Then Debug.Print rest.LastErrorText Exit Sub End If ' A 200 response is expected for actual success. If (rest.ResponseStatusCode <> 200) Then Debug.Print responseXml Exit Sub End If ' Examine the response. Debug.Print responseXml ' A sample response looks like this: ' <Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ' <Id>b235646f-34ac-4b15-90ce-d63267f7cd33</Id> ' <Status>OK</Status> ' <ProviderName>ChilkatPrivate</ProviderName> ' <DateTimeUTC>2016-11-11T14:32:17.0908971Z</DateTimeUTC> ' <Attachments> ' <Attachment> ' <AttachmentID>0edcddc8-325f-40c7-b950-8c71f14afc7c</AttachmentID> ' <FileName>penguins.jpg</FileName> ' <Url>http://api.xero.com/api.xro/2.0/Receipts/c4f40e59-c390-0001-caff-ce731c707d00/Attachments/penguins.jpg</Url> ' <MimeType>image/jpg</MimeType> ' <ContentLength>777835</ContentLength> ' </Attachment> ' <Attachment> ' <AttachmentID>0adffdc8-325f-65c7-b950-4391f14af908</AttachmentID> ' <FileName>starfish.jpg</FileName> ' <Url>http://api.xero.com/api.xro/2.0/Receipts/c4f40e59-c390-0001-caff-ce731c707d00/Attachments/starfish.jpg</Url> ' <MimeType>image/jpg</MimeType> ' <ContentLength>24537</ContentLength> ' </Attachment> ' </Attachments> ' </Response> Dim xml As New ChilkatXml success = xml.LoadXml(responseXml) ' Iterate over the attachments and download each. Dim numRecords As Long numRecords = xml.NumChildrenAt("Attachments") Debug.Print "Number of Attachments = " & numRecords Dim sbSaveFilePath As New ChilkatStringBuilder Dim sbAttachmentPath As New ChilkatStringBuilder Dim attachmentData As New ChilkatBinData Dim i As Long i = 0 Do While i < numRecords xml.I = i Dim attachmentID As String attachmentID = xml.GetChildContent("Attachments|Attachment[i]|AttachmentID") Dim filename As String filename = xml.GetChildContent("Attachments|Attachment[i]|FileName") Debug.Print "AttachmentID: " & attachmentID Debug.Print "Filename: " & filename Debug.Print "----" ' Download this attachment. ' First build the path for this particular attachment by appending the FileName to the path used to get the list of attachments. sbAttachmentPath.Clear success = sbAttachmentPath.AppendSb(sbPath) success = sbAttachmentPath.Append(filename) ' Send the GET request in one call, and then get the response in the next two. success = rest.SendReqNoBody("GET",sbAttachmentPath.GetAsString()) If (success <> 1) Then Debug.Print rest.LastErrorText Exit Sub End If ' Get the response header. If it's not a 200 success status code, then the response body does NOT contain ' the attachment data. Dim statusCode As Long statusCode = rest.ReadResponseHeader() If (statusCode = -1) Then ' We didn't get any response.. Debug.Print rest.LastErrorText Exit Sub End If If (statusCode <> 200) Then Debug.Print "Response Status: " & statusCode Dim responseBody As String responseBody = rest.ReadRespBodyString() If (rest.LastMethodSuccess <> 1) Then Debug.Print "Failed to read the response body." Else Debug.Print responseBody End If Debug.Print "Failed." Exit Sub End If ' OK, the response header indicates the attachment content is forthcoming... ' There are a few ways to get the response body. If it is a very large attachment, it can be streamed directly ' to a file. We'll assume it's not, so we'll get the response into a BinData object, and then save it to a file. success = attachmentData.Clear() success = rest.ReadRespBd(attachmentData) If (success <> 1) Then Debug.Print rest.LastErrorText Exit Sub End If ' Save the data to the file. success = sbSaveFilePath.SetString("qa_output/") success = sbSaveFilePath.Append(filename) success = attachmentData.WriteFile(sbSaveFilePath.GetAsString()) If (success <> 1) Then Debug.Print "Failed to save to output file." Else Debug.Print "Saved to " & sbSaveFilePath.GetAsString() End If i = i + 1 Loop |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.