Scripting Java Functions
Table of Contents
Java Functions
You can now script your functions in Java and associate them with workflows, schedules, buttons, blueprints, related lists, widgets, or have them serve as standalone functions.
This feature in CRM gives you the freedom and ease of scripting in the language that you're comfortable with.
How should a main Java file be?
- Main class should always implement ZCFunction interface.
- Implement the method "runner". public void runner(Context context, BasicIO basicIO) - which is the entry point of execution.
There are two ways for you to script functions in Zoho CRM. Each has its own advantages.
You can either
- Script in Zoho CRM's editor or
- Upload a package
Inline Edit
- Go to Setup > Developer Hub > Functions > +New Function. The Create New Function pop up opens.
- Enter the following details.
- The name of your function. Note that this name must be the same as that of the public class in your code, and must not contain spaces or special characters.
- Enter the display name of your function. This name is what you will see under the My Functions tab.
- Enter a description for your function.
- Choose the category as Standalone, Button, Automation, Related List, or Schedules from the list.
- Select Java as the language from the Language drop-down.
- Make sure the Inline Edit radio button is selected (default) and click Next.
- The built-in editor for Zoho CRM opens. This editor lets you write the function code from scratch within the product itself, and takes care of scripting and deployment.
- Click Save & Execute to run your code. When there are no errors in the code, the Input Values dialog box opens.
- Select the input type as Key - Value to enter the values of the arguments as a key-value pair or select Body to enter the input as a JSON object. Click Execute.
- The function executes and renders a response in the console on the right pane.
config.json
Zoho CRM automatically packages your Java function and creates the config.json and library files. Specify the values of the following keys.
- path: The absolute path to your .java file that contains the function code.
- action: The action that your code performs. This is also the name of the main class in your .java file.
- connector: The name of the connection that your function invokes, if any.
Default Parameters
Java Functions in CRM have five default objects/parameters that contain information about an entity, org, variable, user, and request. They are—entity, org, variable, user, and request. Use these parameters in your code as depicted below, to retrieve information easily while performing your business logic.
// Don't remove below imports.
import com.zoho.cloud.function.Context;
import com.zoho.cloud.function.basic.*;
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import com.zoho.cloud.task.crm.CRM;
/*
- The Class which implements ZCFunction will act as the main of the JAVA Package
- Java Execution starts from the method name 'runner'.
*/
public class test implements ZCFunction {
public void runner(Context context, BasicIO basicIO) throws Exception {
/* 1)entity_object 2)user_object 3)organization_object 4)variables_object 5)request_object are the default parameters which contains entity information, user information,
organization information, variables inforamtion and request information in it respectively.
2) For Button Mass action and RL Button, ids list will be available in basicIO object. you can get by basicIO.getParameter("ids") & basicIO.getParameter("related_entity_ids") respectively
*/
JSONParser parser = new JSONParser();
// To get the Entity Information
String entityInfo = basicIO.getParameter("entity_object").toString();
JSONObject entityObject = (JSONObject) parser.parse(entityInfo);
// To get the Organization Information
String organizationInfo = basicIO.getParameter("organization_object").toString();
JSONObject organizationObject = (JSONObject) parser.parse(organizationInfo);
//To get the User Information
String userInfo = basicIO.getParameter("user_object").toString();
JSONObject userObject = (JSONObject) parser.parse(userInfo);
// To get the CRM Variables Information
String variablesInfo = basicIO.getParameter("variables_object").toString();
JSONArray variablesObject = (JSONArray) parser.parse(variablesInfo);
//use basicIO.write() method to write the return value in the response
basicIO.write("Function Executed Successfully");
}
}
- user_object returns the current user details in the response. If the function is configured as a REST API or associated to a schedule, this object returns the details of the primary user of your organization.
- variables_object returns the variables configured for your organization.
- organization_object returns the information about your organization.
- entity_object returns the information about the record whose ID and module name you specify in the input.
- context object is the deluge equivalent of the "info" statement. You can use this to debug the response and access the response logs using "context.logs".
- basicIO object is the Java object that is available by default, and contains the hidden parameter "crmAPIRequest".
Use "basicIO.write()" to display a value in the response. This is equivalent to the "return" statement in Deluge.
When you Save & Execute the above code, the Input Values pop up opens. You can specify the values of your arguments either as a JSON body or as key-value pairs.
Note
- When you specify the input keys in the Input Values pop up, do not use the default keys of the crmAPIRequest object. For example, if you specify the input key-value pair as "variables":"Patricia", instead of returning the variables in your organization, the response will contain the input message that you provided, that is, system overrides the action that the crmAPIRequest obj performs.
- If you want to manipulate the data of a lookup field,
- In Deluge, the values of the lookup fields are already available to be mapped as function arguments.
To pass the arguments of your function in the body, use the below code.
// Don't remove below imports.
import com.zoho.cloud.function.Context;
import com.zoho.cloud.function.basic.*;
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import com.zoho.cloud.task.crm.CRM;
/*
- The Class which implements ZCFunction will act as the main of the JAVA Package
- Java Execution starts from the method name 'runner'.
*/
public class processRequest implements ZCFunction {
public void runner(Context context, BasicIO basicIO) throws Exception {
/* 1)entity_object 2)user_object 3)organization_object 4)variables_object 5)request_object are the default parameters which contains entity information, user information,
organization information, variables inforamtion and request information in it respectively.
*/
JSONParser parser = new JSONParser();
// To get the Request Information
String requestInfo = basicIO.getParameter("request_object").toString();
JSONObject requestObject = new JSONObject(requestInfo);
String body = requestObject.getString("body");
JSONObject bodyJson = new JSONObject(body);
basicIO.write("request:::"+bodyJson.toString());
basicIO.write("Name:::"+bodyJson.getString("Name"));
basicIO.write("Country:::"+bodyJson.getString("Country"));
}
}
The input body must be a JSON object with the values for the arguments used in the code.
The function code executes and displays the response in the console.
To pass the arguments of your function as key-value pairs, use the below code.
// Don't remove below imports.
import com.zoho.cloud.function.Context;
import com.zoho.cloud.function.basic.*;
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;
import com.zoho.cloud.task.crm.CRM;
/*
- The Class which implements ZCFunction will act as the main of the JAVA Package
- Java Execution starts from the method name 'runner'.
*/
public class processRequest_Params implements ZCFunction {
public void runner(Context context, BasicIO basicIO) throws Exception {
/* 1)entity_object 2)user_object 3)organization_object 4)variables_object 5)request_object are the default parameters which contains entity information, user information,
organization information, variables inforamtion and request information in it respectively.
*/
JSONParser parser = new JSONParser();
// To get the Request Information
String requestInfo = basicIO.getParameter("request_object").toString();
JSONObject requestObject = new JSONObject(requestInfo);
//To get the request param
basicIO.write("Name:::"+(String)requestObject.get("Name"));
basicIO.write("Lead_Status:::"+(String)requestObject.get("Lead_Status"));
}
}
The input values to the arguments used in the function must be key-value pairs.
The function code executes and displays the response in the console.
lib
The lib contains inbuilt functions present in Java library classes, to help developers perform tasks easily. You can upload files to the library of a Java function.
- Right click on "lib" and select Upload Files. The File Upload dialog box opens.
- Click Choose File and select the jar files or packages you want to upload.
- Click Upload. The files will get added to the library.
Note
- You can upload only jar files and packages to the library.
- The size of all the files(in total) that you want to upload must not exceed 10MB.
Upload Zip File
You can also script the function in any programming language editor (like Eclipse) and upload the folder to CRM. The file that contains the function code must be in "zip" format. Once the file is uploaded, the in-product editor opens, where you can make modifications to the code.
Prerequisites
- Add config.json in the ROOT path.
Specify the main class name in 'action' param of config.json. Ex : Consider main class name as "CreateLead"
{"router":[{"path":"/","action":"CreateLead"}],"connector":[],"name":"CreateLead","type":0}
Note
- You can upload only one zip file per function.
- The maximum allowed size of the zip file is 10MB.
- While creating a function, the Function Name should be the same as that of the main class name in the uploaded ZIP file.
- The Function name, the ZIP file name and the main JAVA file name should be the same, or the system will throw an error. Please note that naming is case-sensitive.