/// <summary> /// This method is used to download an attachment of a single record of a module with ID and attachment ID and write the file in the specified destination. /// </summary> /// <param name="moduleAPIName">The API Name of the record's module</param> /// <param name="recordId">The ID of the record to download attachment</param> /// <param name="attachmentId">The ID of the attachment to be downloaded</param> /// <param name="destinationFolder">The absolute path of the destination folder to store the attachment</param> public static void DownloadAttachment(string moduleAPIName, long recordId, long attachmentId, string destinationFolder) { //example //string moduleAPIName = "Leads"; //long recordId = 3477002; //long attachmentId = 3477023; //string destinationFolder = "/Users/user_name/Desktop"; //Get instance of AttachmentsOperations Class that takes moduleAPIName and recordId as parameter AttachmentsOperations attachmentsOperations = new AttachmentsOperations(moduleAPIName, recordId); //Call DownloadAttachment method that takes attachmentId as parameters APIResponse <API.Attachments.ResponseHandler> response = attachmentsOperations.DownloadAttachment(attachmentId); if (response != null) { //Get the status code from response Console.WriteLine("Status Code : " + response.StatusCode); if (response.StatusCode == 204) { Console.WriteLine("No Content"); return; } //Check if expected response is received if (response.IsExpected) { //Get object from response API.Attachments.ResponseHandler responseHandler = response.Object; if (responseHandler is API.Attachments.FileBodyWrapper) { //Get the received FileBodyWrapper instance API.Attachments.FileBodyWrapper fileBodyWrapper = (API.Attachments.FileBodyWrapper)responseHandler; //Get StreamWrapper instance from the returned FileBodyWrapper instance StreamWrapper streamWrapper = fileBodyWrapper.File; //Get Stream from the response Stream file = streamWrapper.Stream; string fullFilePath = Path.Combine(destinationFolder, streamWrapper.Name); using (FileStream outputFileStream = new FileStream(fullFilePath, FileMode.Create)) { file.CopyTo(outputFileStream); } } //Check if the request returned an exception else if (responseHandler is API.Attachments.APIException) { //Get the received APIException instance API.Attachments.APIException exception = (API.Attachments.APIException)responseHandler; //Get the Status Console.WriteLine("Status: " + exception.Status.Value); //Get the Code Console.WriteLine("Code: " + exception.Code.Value); Console.WriteLine("Details: "); //Get the details map foreach (KeyValuePair <string, object> entry in exception.Details) { //Get each value in the map Console.WriteLine(entry.Key + ": " + JsonConvert.SerializeObject(entry.Value)); } //Get the Message Console.WriteLine("Message: " + exception.Message.Value); } } else { //If response is not as expected //Get model object from response Model responseObject = response.Model; //Get the response object's class Type type = responseObject.GetType(); //Get all declared fields of the response class Console.WriteLine("Type is: {0}", type.Name); PropertyInfo[] props = type.GetProperties(); Console.WriteLine("Properties (N = {0}):", props.Length); foreach (var prop in props) { if (prop.GetIndexParameters().Length == 0) { Console.WriteLine("{0} ({1}) : {2}", prop.Name, prop.PropertyType.Name, prop.GetValue(responseObject)); } else { Console.WriteLine("{0} ({1}) : <Indexed>", prop.Name, prop.PropertyType.Name); } } } } }
/// <summary> /// This method is used to upload an attachment to a single record of a module with ID and print the response. /// </summary> /// <param name="moduleAPIName">The API Name of the record's module</param> /// <param name="recordId">The ID of the record to upload attachment</param> /// <param name="absoluteFilePath">The absolute file path of the file to be attached</param> public static void UploadAttachments(string moduleAPIName, long recordId, string absoluteFilePath) { //example //string moduleAPIName = "Leads"; //long recordId = 3477002; //string absoluteFilePath = "/Users/use_name/Desktop/image.png"; //Get instance of AttachmentsOperations Class that takes moduleAPIName and recordId as parameter AttachmentsOperations attachmentsOperations = new AttachmentsOperations(moduleAPIName, recordId); //Get instance of FileBodyWrapper class that will contain the request file API.Attachments.FileBodyWrapper fileBodyWrapper = new API.Attachments.FileBodyWrapper(); //Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter StreamWrapper streamWrapper = new StreamWrapper(absoluteFilePath); //Set file to the FileBodyWrapper instance fileBodyWrapper.File = streamWrapper; //Call UploadAttachment method that takes FileBodyWrapper instance as parameter APIResponse <API.Attachments.ActionHandler> response = attachmentsOperations.UploadAttachment(fileBodyWrapper); if (response != null) { //Get the status code from response Console.WriteLine("Status Code: " + response.StatusCode); //Check if expected response is received if (response.IsExpected) { //Get object from response API.Attachments.ActionHandler actionHandler = response.Object; if (actionHandler is API.Attachments.ActionWrapper) { //Get the received ActionWrapper instance API.Attachments.ActionWrapper actionWrapper = (API.Attachments.ActionWrapper)actionHandler; //Get the list of obtained action responses List <API.Attachments.ActionResponse> actionResponses = actionWrapper.Data; foreach (API.Attachments.ActionResponse actionResponse in actionResponses) { //Check if the request is successful if (actionResponse is API.Attachments.SuccessResponse) { //Get the received SuccessResponse instance API.Attachments.SuccessResponse successResponse = (API.Attachments.SuccessResponse)actionResponse; //Get the Status Console.WriteLine("Status: " + successResponse.Status.Value); //Get the Code Console.WriteLine("Code: " + successResponse.Code.Value); Console.WriteLine("Details: "); if (successResponse.Details != null) { //Get the details map foreach (KeyValuePair <string, object> entry in successResponse.Details) { //Get each value in the map Console.WriteLine(entry.Key + " : " + JsonConvert.SerializeObject(entry.Value)); } } //Get the Message Console.WriteLine("Message: " + successResponse.Message.Value); } //Check if the request returned an exception else if (actionResponse is API.Attachments.APIException) { //Get the received APIException instance API.Attachments.APIException exception = (API.Attachments.APIException)actionResponse; //Get the Status Console.WriteLine("Status: " + exception.Status.Value); //Get the Code Console.WriteLine("Code: " + exception.Code.Value); Console.WriteLine("Details: "); if (exception.Details != null) { //Get the details map foreach (KeyValuePair <string, object> entry in exception.Details) { //Get each value in the map Console.WriteLine(entry.Key + " : " + JsonConvert.SerializeObject(entry.Value)); } } //Get the Message Console.WriteLine("Message: " + exception.Message.Value); } } } //Check if the request returned an exception else if (actionHandler is API.Attachments.APIException) { //Get the received APIException instance API.Attachments.APIException exception = (API.Attachments.APIException)actionHandler; //Get the Status Console.WriteLine("Status: " + exception.Status.Value); //Get the Code Console.WriteLine("Code: " + exception.Code.Value); Console.WriteLine("Details: "); if (exception.Details != null) { //Get the details map foreach (KeyValuePair <string, object> entry in exception.Details) { //Get each value in the map Console.WriteLine(entry.Key + ": " + JsonConvert.SerializeObject(entry.Value)); } } //Get the Message Console.WriteLine("Message: " + exception.Message.Value); } } else { //If response is not as expected //Get model object from response Model responseObject = response.Model; //Get the response object's class Type type = responseObject.GetType(); //Get all declared fields of the response class Console.WriteLine("Type is: {0}", type.Name); PropertyInfo[] props = type.GetProperties(); Console.WriteLine("Properties (N = {0}):", props.Length); foreach (var prop in props) { if (prop.GetIndexParameters().Length == 0) { Console.WriteLine("{0} ({1}) : {2}", prop.Name, prop.PropertyType.Name, prop.GetValue(responseObject)); } else { Console.WriteLine("{0} ({1}) : <Indexed>", prop.Name, prop.PropertyType.Name); } } } } }