Skip to main content

Scala SDK Samples - Attachment Operations

Get Attachments
              
              
package com.zoho.crm.sample.attachments

import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import java.util

import com.zoho.crm.api.ParameterMap
import com.zoho.crm.api.attachments.APIException
import com.zoho.crm.api.attachments.ActionHandler
import com.zoho.crm.api.attachments.ActionResponse
import com.zoho.crm.api.attachments.ActionWrapper
import com.zoho.crm.api.attachments.AttachmentsOperations
import com.zoho.crm.api.attachments.AttachmentsOperations.{DeleteAttachmentsParam, GetAttachmentsParam, UploadLinkAttachmentParam}
import com.zoho.crm.api.attachments.FileBodyWrapper
import com.zoho.crm.api.attachments.ResponseHandler
import com.zoho.crm.api.attachments.ResponseWrapper
import com.zoho.crm.api.attachments.SuccessResponse
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.record.Record
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import com.zoho.crm.api.util.StreamWrapper

import scala.collection.mutable.ArrayBuffer


@SuppressWarnings(Array("unused")) object Attachments {
  /**
   *  Get Attachments
   * This method is used to get a single record's attachments' details with ID and print the response.
   *
   * @throws Exception
   * @param moduleAPIName The API Name of the record's module
   * @param recordId      The ID of the record to get attachments
   */
  @throws[Exception]
  def getAttachments(moduleAPIName: String, recordId: Long): Unit = { //example
    //String moduleAPIName = "Leads"
    //Long recordId = 34770615177002l
    //Get instance of AttachmentsOperations Class that takes recordId and moduleAPIName as parameter
    val attachmentsOperations = new AttachmentsOperations(moduleAPIName,recordId)
    //Call getAttachments method
    val paramInstance = new ParameterMap
    paramInstance.add(new GetAttachmentsParam().page,1)
    val responseOption = attachmentsOperations.getAttachments(Option(paramInstance))
    if (responseOption.isDefined) { //check response
      var response= responseOption.get
      println("Status Code: " + response.getStatusCode)
      if (util.Arrays.asList(204, 304).contains(response.getStatusCode)) {
        println(if (response.getStatusCode == 204) "No Content"
        else "Not Modified")
        return
      }
      //Check if expected response is received
      if (response.isExpected) { //Get object from response
        val responseHandler = response.getObject
        if (responseHandler.isInstanceOf[ResponseWrapper]) { //Get the received ResponseWrapper instance
          val responseWrapper = responseHandler.asInstanceOf[ResponseWrapper]
          //Get the list of obtained Attachment instances
          val attachments = responseWrapper.getData

          for (attachment <- attachments) { //Get the owner User instance of each attachment
            val ownerOption = attachment.getOwner
            //Check if owner is not null
            if (ownerOption.isDefined) { //Get the Name of the Owner
              val owner = ownerOption.get
              println("Attachment Owner User-Name: " + owner.getName)
              //Get the ID of the Owner
              println("Attachment Owner User-ID: " + owner.getId)
              //Get the Email of the Owner
              println("Attachment Owner User-Email: " + owner.getEmail)
            }
            //Get the modified time of each attachment
            println("Attachment Modified Time: " + attachment.getModifiedTime.toString)
            //Get the name of the File
            println("Attachment File Name: " + attachment.getFileName)
            //Get the created time of each attachment
            println("Attachment Created Time: " + attachment.getCreatedTime.toString)
            //Get the Attachment file size
            println("Attachment File Size: " + attachment.getSize.toString)
            //Get the parentId Record instance of each attachment
            val parentIdOption = attachment.getParentId
            //Check if parentId is not null
            if (parentIdOption.isDefined) { //Get the parent record Name of each attachment
              val parentId = parentIdOption.get
              println("Attachment parent record Name: " + parentId.getKeyValue("name"))
              //Get the parent record ID of each attachment
              println("Attachment parent record ID: " + parentId.getId)
            }
            //Get the attachment is Editable
            println("Attachment is Editable: " + attachment.geteditable.toString)
            //Get the file ID of each attachment
            println("Attachment File ID: " + attachment.getfileId())
            //Get the type of each attachment
            println("Attachment File Type: " + attachment.gettype)
            //Get the seModule of each attachment
            println("Attachment seModule: " + attachment.getseModule())
            //Get the modifiedBy User instance of each attachment
            val modifiedByOption  = attachment.getModifiedBy
            //Check if modifiedBy is not null
            if (modifiedByOption.isDefined) { //Get the Name of the modifiedBy User
              val modifiedBy = modifiedByOption.get
              println("Attachment Modified By User-Name: " + modifiedBy.getName)
              //Get the ID of the modifiedBy User
              println("Attachment Modified By User-ID: " + modifiedBy.getId)
              //Get the Email of the modifiedBy User
              println("Attachment Modified By User-Email: " + modifiedBy.getEmail)
            }
            //Get the state of each attachment
            println("Attachment State: " + attachment.getstate)
            //Get the ID of each attachment
            println("Attachment ID: " + attachment.getId)
            //Get the createdBy User instance of each attachment
            val createdByOption = attachment.getCreatedBy
            //Check if createdBy is not null
            if (createdByOption.isDefined) { //Get the name of the createdBy User
              val createdBy = createdByOption.get
              println("Attachment Created By User-Name: " + createdBy.getName)
              //Get the ID of the createdBy User
              println("Attachment Created By User-ID: " + createdBy.getId)
              //Get the Email of the createdBy User
              println("Attachment Created By User-Email: " + createdBy.getEmail)
            }
            //Get the linkUrl of each attachment
            println("Attachment LinkUrl: " + attachment.getlinkUrl())
          }
          //Get the Object obtained Info instance
          val infoOption = responseWrapper.getInfo
          //Check if info is not null
          if (infoOption.isDefined) {
            val info = infoOption.get
            if (info.getPerPage.isDefined) { //Get the PerPage of the Info
              println("Record Info PerPage: " + info.getPerPage.toString)
            }
            if (info.getCount.isDefined) { //Get the Count of the Info
              println("Record Info Count: " + info.getCount.toString)
            }
            if (info.getPage.isDefined) { //Get the Page of the Info
              println("Record Info Page: " + info.getPage.toString)
            }
            if (info.getMoreRecords.isDefined) { //Get the MoreRecords of the Info
              println("Record Info MoreRecords: " + info.getMoreRecords.toString)
            }
          }
        }
        else { //Check if the request returned an exception
          if (responseHandler.isInstanceOf[APIException]) { //Get the received APIException instance
            val exception = responseHandler.asInstanceOf[APIException]
            //Get the Status
            println("Status: " + exception.getStatus.getValue)
            //Get the Code
            println("Code: " + exception.getCode.getValue)
            println("Details: ")
            //Get the details map

            exception.getDetails.foreach(entry=>{
              println(entry._1 + ": " + entry._2)
            })
            //Get the Message
            println("Message: " + exception.getMessage.getValue)
          }
        }
      }
      else { //If response is not as expected
        //Get model object from response
        val responseObject = response.getModel
        //Get the response object's class
        val clas = responseObject.getClass
        //Get all declared fields of the response class
        val fields = clas.getDeclaredFields
        for (field <- fields) { //Get each value
          println(field.getName + ":" + field.get(responseObject))
        }
      }
    }
  }
}
 
Upload Attachments
              
              
package com.zoho.crm.sample.attachments

import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import java.util

import com.zoho.crm.api.ParameterMap
import com.zoho.crm.api.attachments.APIException
import com.zoho.crm.api.attachments.ActionHandler
import com.zoho.crm.api.attachments.ActionResponse
import com.zoho.crm.api.attachments.ActionWrapper
import com.zoho.crm.api.attachments.AttachmentsOperations
import com.zoho.crm.api.attachments.AttachmentsOperations.{DeleteAttachmentsParam, GetAttachmentsParam, UploadLinkAttachmentParam}
import com.zoho.crm.api.attachments.FileBodyWrapper
import com.zoho.crm.api.attachments.ResponseHandler
import com.zoho.crm.api.attachments.ResponseWrapper
import com.zoho.crm.api.attachments.SuccessResponse
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.record.Record
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import com.zoho.crm.api.util.StreamWrapper

import scala.collection.mutable.ArrayBuffer


@SuppressWarnings(Array("unused")) object Attachments {
  /**
   *  Upload Attachments
   * This method is used to upload an attachment to a single record of a module with ID and print the response.
   *
   * @throws Exception
   * @param moduleAPIName    The API Name of the record's module
   * @param recordId         The ID of the record to upload attachment
   * @param absoluteFilePath The absolute file path of the file to be attached
   */
  @throws[Exception]
  def uploadAttachments(moduleAPIName: String, recordId: Long, absoluteFilePath: String): Unit = { //   String moduleAPIName = "Leads"
    //    Long recordId = 34770615177002l
    //    String absoluteFilePath = "/Users/use_name/Desktop/image.png"
    val attachmentsOperations = new AttachmentsOperations(moduleAPIName,recordId)
    //Get instance of FileBodyWrapper class that will contain the request file
    val fileBodyWrapper = new FileBodyWrapper
    //Get instance of StreamWrapper class that takes absolute path of the file to be attached as parameter
    val streamWrapper = new StreamWrapper(absoluteFilePath)
    //Set file to the FileBodyWrapper instance
    fileBodyWrapper.setFile(Option(streamWrapper))
    //Call uploadAttachment method that takes FileBodyWrapper instance as parameter
    val responseOption = attachmentsOperations.uploadAttachment(fileBodyWrapper)
    if (responseOption.isDefined) {
      val response = responseOption.get
      println("Status Code: " + response.getStatusCode)
      if (response.isExpected) {
        val actionHandler = response.getObject
        if (actionHandler.isInstanceOf[ActionWrapper]) { //Get the received ActionWrapper instance
          val actionWrapper = actionHandler.asInstanceOf[ActionWrapper]
          //Get the list of obtained action responses
          val actionResponses = actionWrapper.getData

          for (actionResponse <- actionResponses) { //Check if the request is successful
            if (actionResponse.isInstanceOf[SuccessResponse]) { //Get the received SuccessResponse instance
              val successResponse = actionResponse.asInstanceOf[SuccessResponse]
              println("Status: " + successResponse.getStatus.getValue)
              println("Code: " + successResponse.getCode.getValue)
              println("Details: ")
              if (successResponse.getDetails != null) {

                successResponse.getDetails.foreach(entry=>{
                  println(entry._1 + ": " + entry._2)
                })
              }
              println("Message: " + successResponse.getMessage.getValue)
            }
            else if (actionResponse.isInstanceOf[APIException]) {
              val exception = actionResponse.asInstanceOf[APIException]
              println("Status: " + exception.getStatus.getValue)
              println("Code: " + exception.getCode.getValue)
              println("Details: ")
              if (exception.getDetails != null) {

                exception.getDetails.foreach(entry=>{
                  println(entry._1 + ": " + entry._2)
                })
              }
              println("Message: " + exception.getMessage.getValue)
            }
          }
        }
        else if (actionHandler.isInstanceOf[APIException]) {
          val exception = actionHandler.asInstanceOf[APIException]
          println("Status: " + exception.getStatus.getValue)
          println("Code: " + exception.getCode.getValue)
          println("Details: ")
          if (exception.getDetails != null) {

            exception.getDetails.foreach(entry=>{
              println(entry._1 + ": " + entry._2)
            })
          }
          println("Message: " + exception.getMessage.getValue)
        }
      }
      else {
        val responseObject = response.getModel
        val clas = responseObject.getClass
        val fields = clas.getDeclaredFields
        for (field <- fields) {
          println(field.getName + ":" + field.get(responseObject))
        }
      }
    }
  }
}
 
Delete Attachments
Download an Attachment
              
              
package com.zoho.crm.sample.attachments

import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import java.util

import com.zoho.crm.api.ParameterMap
import com.zoho.crm.api.attachments.APIException
import com.zoho.crm.api.attachments.ActionHandler
import com.zoho.crm.api.attachments.ActionResponse
import com.zoho.crm.api.attachments.ActionWrapper
import com.zoho.crm.api.attachments.AttachmentsOperations
import com.zoho.crm.api.attachments.AttachmentsOperations.{DeleteAttachmentsParam, GetAttachmentsParam, UploadLinkAttachmentParam}
import com.zoho.crm.api.attachments.FileBodyWrapper
import com.zoho.crm.api.attachments.ResponseHandler
import com.zoho.crm.api.attachments.ResponseWrapper
import com.zoho.crm.api.attachments.SuccessResponse
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.record.Record
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import com.zoho.crm.api.util.StreamWrapper

import scala.collection.mutable.ArrayBuffer


@SuppressWarnings(Array("unused")) object Attachments {
  /**
   *  Download Attachment
   * 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.
   *
   * @throws Exception
   * @param moduleAPIName     The API Name of the record's module
   * @param recordId          The ID of the record to download attachment
   * @param attachmentId      The ID of the attachment to be downloaded
   * @param destinationFolder The absolute path of the destination folder to store the attachment
   */
  @throws[Exception]
  def downloadAttachment(moduleAPIName: String, recordId: Long, attachmentId: Long, destinationFolder: String): Unit = { //   Long recordId = "34770615177002"
    //    Long attachmentId = "34770610177023"
    //    String destinationFolder = "/Users/user_name/Desktop"
    val attachmentOperations = new AttachmentsOperations(moduleAPIName,recordId)
    //Call downloadAttachment method that takes attachmentId as parameters
    val responseOption = attachmentOperations.downloadAttachment(attachmentId)
    if (responseOption.isDefined) {
      val response = responseOption.get
      println("Status Code: " + response.getStatusCode)
      if (util.Arrays.asList(204, 304).contains(response.getStatusCode)) {
        println(if (response.getStatusCode == 204) "No Content"
        else "Not Modified")
        return
      }
      if (response.isExpected) {
        val responseHandler = response.getObject
        if (responseHandler.isInstanceOf[FileBodyWrapper]) {
          val fileBodyWrapper = responseHandler.asInstanceOf[FileBodyWrapper]
          //Get StreamWrapper instance from the returned FileBodyWrapper instance
          val streamWrapper = fileBodyWrapper.getFile.get
          //Create a file instance with the absolute_file_path
          val file = new File(destinationFolder + java.io.File.separatorChar + streamWrapper.getName.get)
          //Get InputStream from the response
          val is = streamWrapper.getStream.get
          //Create an OutputStream for the destination file
          val os = new FileOutputStream(file)
          val buffer = new Array[Byte](1024)
          var bytesRead:Integer = 0
          //read the InputStream till the end
          while ( {
            bytesRead = is.read(buffer)
            bytesRead != -1
          }) { //write data to OutputStream
            os.write(buffer, 0, bytesRead)
          }
          //Close the InputStream
          is.close()
          //Flush and close the OutputStream
          os.flush()
          os.close()
        }
        else if (responseHandler.isInstanceOf[APIException]) {
          val exception = responseHandler.asInstanceOf[APIException]
          println("Status: " + exception.getStatus.getValue)
          println("Code: " + exception.getCode.getValue)
          println("Details: ")

          exception.getDetails.foreach(entry=>{
            println(entry._1 + ": " + entry._2)
          })
          println("Message: " + exception.getMessage.getValue)
        }
      }
      else if (response.getStatusCode != 204) {
        val responseObject = response.getModel
        val clas = responseObject.getClass
        val fields = clas.getDeclaredFields
        for (field <- fields) {
          println(field.getName + ":" + field.get(responseObject))
        }
      }
    }
  }
}
 
Delete an Attachment
              
              
package com.zoho.crm.sample.attachments

import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import java.util

import com.zoho.crm.api.ParameterMap
import com.zoho.crm.api.attachments.APIException
import com.zoho.crm.api.attachments.ActionHandler
import com.zoho.crm.api.attachments.ActionResponse
import com.zoho.crm.api.attachments.ActionWrapper
import com.zoho.crm.api.attachments.AttachmentsOperations
import com.zoho.crm.api.attachments.AttachmentsOperations.{DeleteAttachmentsParam, GetAttachmentsParam, UploadLinkAttachmentParam}
import com.zoho.crm.api.attachments.FileBodyWrapper
import com.zoho.crm.api.attachments.ResponseHandler
import com.zoho.crm.api.attachments.ResponseWrapper
import com.zoho.crm.api.attachments.SuccessResponse
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.record.Record
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import com.zoho.crm.api.util.StreamWrapper

import scala.collection.mutable.ArrayBuffer


@SuppressWarnings(Array("unused")) object Attachments {
  /**
   *  Delete Attachment
   * This method is used to delete an attachment to a single record of a module with ID and print the response.
   *
   * @param moduleAPIName The API Name of the record's module
   * @param recordId      The ID of the record to delete attachment
   * @param attachmentId  The ID of the attachment to be deleted
   */
  @throws[Exception]
  def deleteAttachment(moduleAPIName: String, recordId: Long, attachmentId: Long): Unit = { //    Long recordId = 3477065177002
    //    Long attachmentId = "3477061177002"
    val attachmentsOperations = new AttachmentsOperations(moduleAPIName,recordId)
    //Call deleteAttachment method that takes attachmentId as parameter
    val responseOption = attachmentsOperations.deleteAttachment(attachmentId)
    if (responseOption.isDefined) {
      val response = responseOption.get
      println("Status Code: " + response.getStatusCode)
      if (response.isExpected) {
        val actionHandler = response.getObject
        if (actionHandler.isInstanceOf[ActionWrapper]) {
          val actionWrapper = actionHandler.asInstanceOf[ActionWrapper]
          //Get the list of obtained Action Response instances
          val actionResponses = actionWrapper.getData

          for (actionResponse <- actionResponses) {
            if (actionResponse.isInstanceOf[SuccessResponse]) {
              val successResponse = actionResponse.asInstanceOf[SuccessResponse]
              println("Status: " + successResponse.getStatus.getValue)
              println("Code: " + successResponse.getCode.getValue)
              println("Details: ")

              successResponse.getDetails.foreach(entry=>{
                println(entry._1 + ": " + entry._2)
              })
              println("Message: " + successResponse.getMessage.getValue)
            }
            else if (actionResponse.isInstanceOf[APIException]) {
              val exception = actionResponse.asInstanceOf[APIException]
              println("Status: " + exception.getStatus.getValue)
              println("Code: " + exception.getCode.getValue)
              println("Details: ")

              exception.getDetails.foreach(entry=>{
                println(entry._1 + ": " + entry._2)
              })
              println("Message: " + exception.getMessage.getValue)
            }
          }
        }
        else if (actionHandler.isInstanceOf[APIException]) {
          val exception = actionHandler.asInstanceOf[APIException]
          println("Status: " + exception.getStatus.getValue)
          println("Code: " + exception.getCode.getValue)
          println("Details: ")

          exception.getDetails.foreach(entry=>{
            println(entry._1 + ": " + entry._2)
          })
          println("Message: " + exception.getMessage.getValue)
        }
      }
      else {
        val responseObject = response.getModel
        val clas = responseObject.getClass
        val fields = clas.getDeclaredFields
        for (field <- fields) {
          println(field.getName + ":" + field.get(responseObject))
        }
      }
    }
  }
}
 
              
              
package com.zoho.crm.sample.attachments

import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
import java.util

import com.zoho.crm.api.ParameterMap
import com.zoho.crm.api.attachments.APIException
import com.zoho.crm.api.attachments.ActionHandler
import com.zoho.crm.api.attachments.ActionResponse
import com.zoho.crm.api.attachments.ActionWrapper
import com.zoho.crm.api.attachments.AttachmentsOperations
import com.zoho.crm.api.attachments.AttachmentsOperations.{DeleteAttachmentsParam, GetAttachmentsParam, UploadLinkAttachmentParam}
import com.zoho.crm.api.attachments.FileBodyWrapper
import com.zoho.crm.api.attachments.ResponseHandler
import com.zoho.crm.api.attachments.ResponseWrapper
import com.zoho.crm.api.attachments.SuccessResponse
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.record.Record
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import com.zoho.crm.api.util.StreamWrapper

import scala.collection.mutable.ArrayBuffer


@SuppressWarnings(Array("unused")) object Attachments {
  /**
   *  Upload Link Attachments
   * This method is used to upload link attachment to a single record of a module with ID and print the response.
   *
   * @param moduleAPIName The API Name of the record's module
   * @param recordId      The ID of the record to upload Link attachment
   * @param attachmentURL The attachmentURL of the doc or image link to be attached
   */
  @throws[Exception]
  def uploadLinkAttachments(moduleAPIName: String, recordId: Long, attachmentURL: String): Unit = {
    val attachmentsOperations = new AttachmentsOperations(moduleAPIName,recordId)
    val paramInstance = new ParameterMap
    paramInstance.add(new UploadLinkAttachmentParam().attachmentUrl, attachmentURL)
    //Call uploadLinkAttachment method that takes paramInstance as parameter
    val responseOption = attachmentsOperations.uploadLinkAttachment(Option(paramInstance))
    if (responseOption.isDefined) {
      val response = responseOption.get
      println("Status Code: " + response.getStatusCode)
      if (response.isExpected) {
        val actionHandler = response.getObject
        if (actionHandler.isInstanceOf[ActionWrapper]) {
          val actionWrapper = actionHandler.asInstanceOf[ActionWrapper]
          val actionResponses = actionWrapper.getData

          for (actionResponse <- actionResponses) {
            if (actionResponse.isInstanceOf[SuccessResponse]) {
              val successResponse = actionResponse.asInstanceOf[SuccessResponse]
              println("Status: " + successResponse.getStatus.getValue)
              println("Code: " + successResponse.getCode.getValue)
              println("Details: ")

              successResponse.getDetails.foreach(entry=>{
                println(entry._1 + ": " + entry._2)
              })
              println("Message: " + successResponse.getMessage.getValue)
            }
            else if (actionResponse.isInstanceOf[APIException]) {
              val exception = actionResponse.asInstanceOf[APIException]
              println("Status: " + exception.getStatus.getValue)
              println("Code: " + exception.getCode.getValue)
              println("Details: ")

              exception.getDetails.foreach(entry=>{
                println(entry._1 + ": " + entry._2)
              })
              println("Message: " + exception.getMessage.getValue)
            }
          }
        }
        else if (actionHandler.isInstanceOf[APIException]) {
          val exception = actionHandler.asInstanceOf[APIException]
          println("Status: " + exception.getStatus.getValue)
          println("Code: " + exception.getCode.getValue)
          println("Details: ")

          exception.getDetails.foreach(entry=>{
            println(entry._1 + ": " + entry._2)
          })
          println("Message: " + exception.getMessage.getValue)
        }
      }
      else {
        val responseObject = response.getModel
        val clas = responseObject.getClass
        val fields = clas.getDeclaredFields
        for (field <- fields) {
          println(field.getName + ":" + field.get(responseObject))
        }
      }
    }
  }
}