Scala SDK Samples - Query (COQL) Operations
Get Records through a COQL Query
package com.zoho.crm.sample.query
import java.lang.reflect.Field
import java.util
import com.zoho.crm.api.query.ResponseHandler
import com.zoho.crm.api.query.ResponseWrapper
import com.zoho.crm.api.record.Info
import com.zoho.crm.api.query.APIException
import com.zoho.crm.api.query.BodyWrapper
import com.zoho.crm.api.query.QueryOperations
import com.zoho.crm.api.util.APIResponse
import com.zoho.crm.api.util.Model
import scala.collection.mutable.ArrayBuffer
object Queries {
/**
* Get Records
* This method is used to get records from the module through a COQL query.
*
* @throws Exception
*/
@SuppressWarnings(Array("unchecked"))
@throws[Exception]
def getRecords(): Unit = { //Get instance of QueryOperations Class
val queryOperations = new QueryOperations
//Get instance of BodyWrapper Class that will contain the request body
val bodyWrapper = new BodyWrapper
val selectQuery = "select Last_Name from Leads where Last_Name is not null limit 10"
bodyWrapper.setSelectQuery(Option(selectQuery))
//Call getRecords method that takes BodyWrapper instance as parameter
val responseOption = queryOperations.getRecords(bodyWrapper)
if (responseOption.isDefined) { //check response
var response= responseOption.get
println("Status Code: " + response.getStatusCode)
//Check if expected response is received
if (response.isExpected) { //Get the object from response
val responseHandler = response.getObject
if (responseHandler.isInstanceOf[ResponseWrapper]) { //Get the received ResponseWrapper instance
val responseWrapper = responseHandler.asInstanceOf[ResponseWrapper]
//Get the obtained Record instances
val records = responseWrapper.getData
for (record <- records) { //Get the ID of each Record
println("Record ID: " + record.getId)
//Get the createdBy User instance of each Record
val createdByOption = record.getCreatedBy
if (createdByOption.isDefined) {
val createdBy = createdByOption.get
println("Record Created By User-ID: " + createdBy.getId)
//Get the name of the createdBy User
println("Record Created By User-Name: " + createdBy.getName)
//Get the Email of the createdBy User
println("Record Created By User-Email: " + createdBy.getEmail)
}
//Get the CreatedTime of each Record
println("Record CreatedTime: " + record.getCreatedTime)
//Get the modifiedBy User instance of each Record
val modifiedByOption = record.getModifiedBy()
if (modifiedByOption.isDefined) {
val modifiedBy = modifiedByOption.get
println("Record Modified By User-ID: " + modifiedBy.getId)
//Get the name of the modifiedBy User
println("Record Modified By User-Name: " + modifiedBy.getName)
//Get the Email of the modifiedBy User
println("Record Modified By User-Email: " + modifiedBy.getEmail)
}
//Get the ModifiedTime of each Record
println("Record ModifiedTime: " + record.getModifiedTime)
//To get particular field value
println("Record Field Value: " + record.getKeyValue("Last_Name")) // FieldApiName
println("Record KeyValues: ")
//Get the KeyValue map
record.getKeyValues.foreach(entry=>{
val keyName = entry._1
val value = entry._2
if (value.isInstanceOf[ArrayBuffer[Any]]) {
println("Record KeyName : " + keyName)
val dataList = value.asInstanceOf[ArrayBuffer[Any]]
for (data <- dataList) {
if (data.isInstanceOf[collection.Map[String,Any]]) {
println("Record KeyName : " + keyName + " - Value : ")
data.asInstanceOf[collection.Map[String,Any]].foreach(entry=>{
println(entry._1 + ": " + entry._2)
})
}
else println(data)
}
}
else if (value.isInstanceOf[util.Map[_, _]]) {
println("Record KeyName : " + keyName + " - Value : ")
value.asInstanceOf[collection.Map[String,Any]].foreach(entry=>{
println(entry._1 + ": " + entry._2)
})
}
else println("Record KeyName : " + keyName + " - Value : " + value)
})
}
//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.getCount != null) { //Get the Count of the Info
println("Record Info Count: " + info.getCount.toString)
}
if (info.getMoreRecords != null) { //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))
}
}
}
}
}
class Queries {}