Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
...
...
BeanShell is a small, embeddable Java source interpreter with object scripting language features , written in Java. BeanShell dynamically executes standard Java syntax. So, by using BeanShell Plugin, you can type in valid Java codes in plugin configuration , and the statements will be executed when the plugin is triggered. No compilation cycle is needed.
...
Set value to a workflow variable:
Code Block |
---|
import org.joget.workflow.model.service.*; WorkflowManager wm = (WorkflowManager) pluginManager.getBean("workflowManager"); wm.activityVariable(workflowAssignment.getActivityId(), "variableId", "variableValue"); |
Execute SQL statement through JDBC:
Code Block |
---|
import java.sql.*Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.sql.DataSource; import org.joget.apps.app.service.AppUtil; Connection con = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); // retrieve connection from the default datasource DataSource ds = (DataSource)AppUtil.getApplicationContext().getBean("setupDataSource"); con = DriverManagerds.getConnection("jdbc:mysql://localhost/wflowdb?useUnicode=true&characterEncoding=UTF-8", "root", "root"); ); // execute SQL query if(!con.isClosed()) { { System.out.println("Successfully connected to MySQL server using TCP/IP..."); PreparedStatement stmt = con.createStatement(); stmt.executeUpdate(prepareStatement("UPDATE formdata_simpleflowtable1 setSET c_statuscolumn1='#assignment.activityId#' WHERE processId='#assignment.processId#'"); } value1'"); stmt.executeUpdate(); } } catch(Exception e) { { System.err.println("Exception: " + e.getMessage()); } } finally { try { try { if(con != null) { con.close(); } } catch(SQLException e) { } } |
Anchor | ||||
---|---|---|---|---|
|
A participant type plugin should return a collection of usernames. In the participant plugin, there are two context variables available for the script to use :
A Beanshell Participant Type Plugin participant type plugin returning one Participantparticipant:
Code Block |
---|
import java.util.ArrayList;
a = new ArrayList();
a.add("jack"); // one username
return a;
|
Get all users from the DirectoryManager and assigning them:
Code Block |
---|
import java.util.Collection; import java.util.ArrayList; import org.joget.apps.app.service.AppUtil; import org.joget.directory.model.service.ExtDirectoryManager; import org.joget.directory.model.User; import org.springframework.context.ApplicationContext; ApplicationContext ac = AppUtil.getApplicationContext(); ExtDirectoryManager directoryManager = (ExtDirectoryManager) ac.getBean("directoryManager"); Collection results = new ArrayList(); Collection userList = directoryManager.getUserList(); for (User u : userList) { results.add(u.getUsername()); } return results; |
Activity tool type plugin Tool Type Plugin is a plugin that will be executed when the workflow reached reaches a System Tool activity. System Tool activities must be placed in the workflow diagram , and then the Beanshell plugin configured in the Process's Activity Mapping for this to work. In this plugin there , there are two context variables available for the script to use :
...
Code Block |
---|
import java.util.ArrayListHashMap; import java.util.logging.LoggerMap; import org.joget.apps.app.model.AppDefinition; import org.joget.pluginapps.app.baseservice.PluginManagerAppService; import java.util.logging.FileHandlerorg.joget.apps.app.service.AppUtil; import org.joget.apps.workflowform.model.service.WorkflowManagerFormRow; import org.joget.apps.form.model.FormRowSet; import org.joget.apps.form.service.FormManagerFormUtil; import org.joget.formworkflow.model.Form; FormManager formManagerWorkflowAssignment; import org.joget.workflow.util.WorkflowUtil; //Constant variable String formDefId = "approvalForm"; //Service bean AppService appService = (FormManagerAppService) pluginManagerAppUtil.getApplicationContext().getBean("formManagerappService"); processId //Get primary key String id = appService.getOriginProcessId(workflowAssignment.getProcessId()); Form form = formManager.loadDynamicFormByProcessId("T01", processId); // in this example, form's table is T01 formData = form.getCustomProperties(); formData.put("c_columnname","new value"); // the form data field to be set is columnname form.setCustomProperties(formData); formManager.saveForm(form //Get existing data FormRowSet rowSet = appService.loadFormData(appDef.getAppId(), appDef.getVersion().toString(), formDefId, id); FormRow row = null; if (rowSet == null || rowSet.isEmpty()) { rowSet = new FormRowSet(); row = new FormRow(); row.setId(id); rowSet.add(row); } else { row = rowSet.get(0); } //Set values row.setProperty("field1", "value 1"); row.setProperty("field2", "value 2"); row.setProperty("field3", "value 3"); //Save appService.storeFormData(appDef.getAppId(), appDef.getVersion().toString(), formDefId, rowSet, id); |
Code Block |
---|
import org.joget.workflow.model.service.WorkflowManager; WorkflowManager workflowManager = (WorkflowManager) pluginManager.getBean("workflowManager"); String approvalLvl = workflowManager.getProcessVariable(workflowAssignment.getProcessId(), "ApprovalLevel"); String newApprovalLvl = String.valueOf(Integer.parseInt(approvalLvl)+1); workflowManager.activityVariable(workflowAssignment.getActivityId(), "ApprovalLevel", newApprovalLvl); |
This beanshell script retrieves workflow variable 'ApprovalLevel', convert converts it into to an integer, add adds 1, and stores it back as the same workflow variable.