Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
...
Anchor | ||||
---|---|---|---|---|
|
element - Element that this binder is tie to. (org.joget.apps.form.model.Element)
primaryKey - The primary key provided by the element to load data. (java.lang.String)
formData - The data holder of the whole form. (org.joget.apps.form.model.FormData)
...
Code Block |
---|
import org.joget.apps.form.model.Element;
import org.joget.apps.form.model.FormData;
import org.joget.apps.form.model.FormRow;
import org.joget.apps.form.model.FormRowSet;
import org.joget.apps.form.service.FormUtil;
import org.joget.plugin.base.PluginManager;
import org.joget.apps.form.model.FormLoadBinder;
public FormRowSet load(Element element, String primaryKey, FormData formData) {
String defaultFormDefId = "default_grid_entry"; //change this to the form id used to store default grid data
String formDefId = "grid_entry"; //change this to the form id used to store grid data
String foreignKey = "fk"; //change this to the foreign key
FormRowSet f = new FormRowSet();
f.setMultiRow(true);
// Reuse Multi Row Binder to load data
PluginManager pluginManager = (PluginManager) FormUtil.getApplicationContext().getBean("pluginManager");
FormLoadBinder binder = (FormLoadBinder) pluginManager.getPlugin("org.joget.plugin.enterprise.MultirowFormBinder");
//Load from the grid table
binder.setProperty("formDefId", formDefId);
binder.setProperty("foreignKey", foreignKey);
f = binder.load(element, primaryKey, formData);
//if no grid data is retrieved, get from default table
if (f == null || f.isEmpty()) {
binder.setProperty("formDefId", defaultFormDefId);
//set the foreign key value to empty
f = binder.load(element, "", formData);
}
return f;
}
//call load method with injected variable
return load(element, primaryKey, formData); |
...
Code Block | ||
---|---|---|
| ||
import java.util.ArrayList; import java.util.Collection; import org.joget.apps.app.service.AppUtil; import org.joget.directory.model.User; import org.joget.directory.model.service.ExtDirectoryManager; import org.joget.workflow.model.WorkflowActivity; public Collection getAssignees(WorkflowActivity activity) { Collection assignees = new ArrayList(); ExtDirectoryManager directoryManager = (ExtDirectoryManager) pluginManager.getBean("directoryManager"); String deptId = "D-005"; //Get total user in department Long total = directoryManager.getTotalUsers(null, null, deptId, null, null, null, null); //Get random number from 0 to the total number of users in department int random = (int) (Math.random() * total); //Get users using directory manager Collection userList = directoryManager.getUsers(null, null, deptId, null, null, null, null, "firstName", false, random, 1); for(Object u : userList){ User user = (User) u; assignees.add(user.getUsername()); } return assignees; } //call getAssignees method with injected variable return getAssignees(workflowActivity); |
Anchor | ||||
---|---|---|---|---|
|
...
If your script need to reuse for multiple times in an app or can be used by others app in future development, please consider to make your Bean Shell script as a plugin instead of copy and paste it multiple times across your app. Bean Shell script is harder to maintain in this case. Imagine that you want to make a change, you will have to update all the places that are using the same script as well. Beside that, a normal plugin implementation will have better performance than a script running by a Bean Shell interpreter.
If partial of your script can be done by existing plugins in Joget Workflow, you can reuse the plugin in stead of writting it again.
To reuse a plugin, you can retrieve the plugin using PluginManager, then set it properties and execute it.
Example:
Children Display |
---|