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 {
              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 
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 {
                  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 
Delete 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 {
  /**
   *  Delete Attachments
   * This method is used to Delete attachments 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 attachmentIds The List of attachment IDs to be deleted
   */
  @throws[Exception]
  def deleteAttachments(moduleAPIName: String, recordId: Long, attachmentIds: ArrayBuffer[Long]): Unit = { //   List attachmentIds = new ArrayList(Arrays.asList(3477061000005979001l, 3477061000005968003, 34770615961010l))
    //Get instance of RecordOperations Class that takes recordId and moduleAPIName as parameter
    val attachmentOperations = new AttachmentsOperations(moduleAPIName,recordId)
    //Get instance of ParameterMap Class
    val paramInstance = new ParameterMap

    for (attachmentId {
                  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 
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 = "3477061000005177002"
    //    Long attachmentId = "347706105177023"
    //    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 
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 = 3477061000005177002
    //    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 {
                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 
              
              
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 = { //    String attachmentURL = "https://5.imimg.com/data5/KJ/UP/MY-8655440/zoho-crm-500x500.png"
    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 {
                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