A function is a set of statements that is invoked in an application to perform a certain action or yield a desired result based on the logic in the code. Java is a widely used programming language. Introducing Java will equip you to implement the concepts that are native to Java programming in your Creator application.
Create a new function using java
To create a new java function:
-
Click on Workflows
to navigate to your Workflow Dashboard.
-
Click Functions
tab.
-
Click New Function
button. The create page will appear.
-
Enter Function Name. This serves as the identifier using which the function can be invoked. Specify a meaningful name for the function without any empty spaces.
-
Select Java as Language for scripting the function.
-
Specify the Arguments.
-
Click Create Function button. The builder will appear.
-
Now, Add required java code to the function and click Done.
-
The function will get listed under Functions
in the workflow dashboard.
Note
:
-
Namespace
: Namespace for java function will be
Default Namespace
.
-
Return Type
: Return value of a java function will only be of
Collection data type
.
-
Argument
: Java functions accept only
string
values.
-
Java functions cannot be renamed after creation.
Arguments and parameters in java functions
Similar to deluge function, java also requires you to specify arguments based on which your function runs. An argument is the instance that is passed to the method on running a function. At the event of creating a java function, you can specify an argument. If you have the necessity to add more arguments to the same function at a later stage, you can access the
Function
Properties
in the builder (click the
Settings
icon).
To run a program, you need to define parameters in java functions. A parameter is the variable assigned for the value of an argument. It serves as the container in which the argument value passed from deluge is received in a java function.
Sample function
This function is created to calculate each employee's pay in java function and use the values obtained to update records using deluge.
fetchRecords will create a collection data that contains each record in Employee_Details form in {employe_id : working hours } format. After filling the data, we will pass it in string format to "calculateSalary" java function.
The java function receives Employee_Details map, and calculates salary based on working hours, for each Employee ID, and passes those details as another map payDetails in {"employe_id : salary } format.
We have assigned java function return value to "payCalc" collection data in deluge function. By iterating payCalc value, we can update "Weekly_Pay" field with salary detail.
void fetchRecords()
{
recDetails = Map();
for each i in Employee_Details[ID != 0]
{
recDetails.put(i.Emp_ID,i.Weekly_Hours);
}
payCalc = Collection();
payCalc = thisapp.calculateSalary(recDetails.toString());
updateDetails = payCalc.get("output").toMap();
keys = List();
keys = updateDetails.keys();
for each i in keys
{
info i;
x = Employee_Details[Emp_ID == i];
x.Weekly_Pay=updateDetails.get(i);
}
}
import com.zoho.cloud.function.Context;
import com.zoho.cloud.function.basic.*;
import org.json.*;
import org.json.JSONObject;
import com.zohocreator.test.EmployeeSalary;
public class calculateSalary implements ZCFunction
{
public void runner(Context context, BasicIO basicIO) throws Exception
{
try
{
String dataMap = (String)(basicIO.getParameter("recDetails")); // Retrieve arguments
JSONObject dataObject = new JSONObject(dataMap); // Converting string arguments to JSONObject
EmployeeSalary salary = new EmployeeSalary(); // creating object for "EmployeeSalary" class
JSONObject payDetails = salary.calculate(dataObject); //calling calculate method in "EmployeeSalary" class
basicIO.write(payDetails.toString()); // Return data back to deluge script
}
catch(Exception e)
{
context.log(e.getMessage());
}
}
}
Note
:
-
By default, the function and the class name are the same, and should be not be changed.
-
Execution begins with the runner method, and it should not be removed. This means that you need not add a main() after the runner method to write your script logic.
-
If a user wants to write a new class or function, it needs to be written after the runner method and called from the runner method.
To call a java function in a deluge script, you need to use the statement indicated in the image below. In this example, “payCalc = thisapp.calculateSalary(recDetails.toString());” refers to the java function, which contains the value as collection data value.
Collection data type
Java function returns a string value only. If your process is satisfied with the string data returned, you can go ahead with it. If you require any other data type like integer, you can assign collection data type to your return value. It can be used for further processing like updating records with the values derived using the java function. For instance, the pay calculated in java function will return string values. When the assigned collection data value is used in deluge these string values yield integer values that are used to update records in the application.
This collection object allows you to make a loop to execute this function for all the records that are there in the form. The collection object will include the employee ID (key) and the hours (value). If there are 20 records in the form, the 20 together become one collection object enabling the java function to be executed for the 20 records in one function call.
Get Value
Using the basicIO.getParameter statement you will be able to obtain the values that are contained as arguments. The values that you have specified as arguments need to be passed in your java function for you to process the values and get the desired results. In this case, Hours Worked and Salary are the arguments. The values are passed in the java function to calculate the wages using the getParameter statement.
Output
A java function output value will by default be a "Collection Value". This output will have two keys:
-
Output key has value which is the output data
-
Log key has log data which user print using statement
The output key will include the following:
-
context.log: The statement used to print logs. We can get the values added inside "log" key of a java function output map. The information in context.log is used for debugging purpose.
-
basicIO.write: The statement used to send to deluge the return value after calculation to the place in Creator from where this function is called. We can get values added inside "output" key of java function output map.
Config.json and Library
Points to remember