Joget DX 8 Stable Released
The stable release for Joget DX 8 is now available, with a focus on UX and Governance.
Lets say we want to change workflow variables directly inside a system tool activity without creating complex beanshell script. This Process Tool Plugin assigns a simple expression into a workflow variable. The expression is evaluated using beanshell interpreter, and the resulting value is converted into string. The workflow variable is assigned to this string value. All workflow variables are directly accessible inside the expression, but note that all joget workflow variables are of String type.
Create an empty project folder. Inside this folder, create subdirectory src\main\java\myplugin.
Create the following text files :
src\main\java\myplugin\AssignVariablePlugin.java
package myplugin; import org.joget.plugin.base.ApplicationPlugin; import org.joget.plugin.base.DefaultPlugin; import org.joget.plugin.base.PluginManager; import org.joget.plugin.base.PluginProperty; import org.joget.workflow.model.WorkflowAssignment; import org.joget.workflow.model.WorkflowVariable; import org.joget.workflow.model.service.WorkflowManager; import java.util.logging.Level; import java.util.logging.Logger; import java.util.List; import java.util.Map; public class AssignVariablePlugin extends DefaultPlugin implements ApplicationPlugin { public String getName() { return "AssignVariablePlugin"; } public String getDescription() { return "Store Simple Expressions into a Workflow Variable "; } @Override public void stop(org.osgi.framework.BundleContext context) { super.stop(context); }; public String getVersion() { return "1.0.0"; } public PluginProperty[] getPluginProperties() { PluginProperty[] properties = new PluginProperty[]{ new PluginProperty("variableName", "Workflow Variable Name", PluginProperty.TYPE_TEXTFIELD, null, ""), new PluginProperty("expr", "Expression (note: all joget workflow variables are of type String)", PluginProperty.TYPE_TEXTFIELD, null, "1"), }; return properties; } String currentUrl; public Object execute(Map properties) { Object result = null; try { PluginManager pluginManager = (PluginManager) properties.get("pluginManager"); WorkflowAssignment wfAssignment = (WorkflowAssignment) properties.get("workflowAssignment"); WorkflowManager workflowManager = (WorkflowManager) pluginManager.getBean("workflowManager"); String newValue = ""; String script = (String)properties.get("expr"); List<WorkflowVariable> vars = wfAssignment.getProcessVariableList(); Object scriptResult = executeScript(script,vars); if (scriptResult!=null) newValue = scriptResult.toString(); String varName; varName = (String)properties.get("variableName"); workflowManager.activityVariable(wfAssignment.getActivityId(), varName, newValue); Logger.getLogger(getClass().getName()).log(Level.WARNING, "Setting variable "+ varName + " to "+ newValue); return null; } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.WARNING, "Error executing report plugin", e); return null; } } protected Object executeScript(String script, List<WorkflowVariable> props) { Object result = null; try { bsh.Interpreter interpreter = new bsh.Interpreter(); interpreter.setClassLoader(getClass().getClassLoader()); for (WorkflowVariable v : props) { if (v.getName() != null) { interpreter.set(v.getName(), v.getVal()); } else if (v.getId()!=null) { interpreter.set(v.getId(), v.getVal()); } } Logger.getLogger(getClass().getName()).log(Level.FINE, "Executing script " + script); result = interpreter.eval(script); Logger.getLogger(getClass().getName()).log(Level.WARNING, "result is " + (result==null?"NULL": result.getClass().toString())); return result; } catch (Exception e) { Logger.getLogger(getClass().getName()).log(Level.WARNING, "Error executing script", e); return null; } } }
pom.xml :
<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>myplugin</groupId> <artifactId>AssignVariablePlugin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>bundle</packaging> <name>AssignVariablePlugin</name> <url>http://inventorsparadox.blogspot.com</url> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <id>integration-test</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skipTests>false</skipTests> </configuration> </execution> </executions> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package>myplugin</Export-Package> <Private-Package>myplugin.*</Private-Package> <Bundle-Activator>myplugin.AssignVariablePlugin</Bundle-Activator> <Import-Package>!*,org.joget.report.dao,org.joget.report.model,org.joget.report.service,org.joget.commons.util,org.joget.plugin.base,org.joget.plugin.property.model,org.joget.plugin.property.service,org.joget.directory.model,org.joget.directory.model.service,org.joget.directory.dao,org.joget.workflow.model,org.joget.workflow.model.dao,org.joget.workflow.model.service,org.joget.workflow.util,org.joget.apps.app.dao,org.joget.apps.app.lib,org.joget.apps.app.model,org.joget.apps.app.service,org.joget.apps.datalist.lib,org.joget.apps.datalist.model,org.joget.apps.datalist.service,org.joget.apps.form.lib,org.joget.apps.form.dao,org.joget.apps.form.model,org.joget.apps.form.service,org.joget.apps.list.service,org.joget.apps.userview.lib,org.joget.apps.userview.model,org.joget.apps.userview.service,org.joget.apps.workflow.lib,javax.servlet,javax.servlet.http,org.osgi.framework;version="1.3.0"</Import-Package> <Embed-Dependency>scope=compile|runtime;inline=false;artifactId=!commons-logging</Embed-Dependency> <Embed-Transitive>true</Embed-Transitive> <Embed-Directory>dependency</Embed-Directory> <Embed-StripGroup>true</Embed-StripGroup> <DynamicImport-Package>*</DynamicImport-Package> </instructions> </configuration> </plugin> </plugins> </build> <distributionManagement> <repository> <id>internal</id> <url>http://dev.joget.org/archiva/repository/internal</url> </repository> <snapshotRepository> <id>snapshots</id> <url>http://dev.joget.org/archiva/repository/snapshots</url> </snapshotRepository> </distributionManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>2.5.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.beanshell</groupId> <artifactId>bsh</artifactId> <version>2.0b4</version> </dependency> <dependency> <groupId>org.joget</groupId> <artifactId>wflow-core</artifactId> <version>3.0-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies> </project>
mvn install
Login to joget workflow as admin, choose System Settings, Manage Plugins, Upload Plugin, then browse to the target directory of the project folder. Upload the project snapshot jar that is being generated by previous maven execution.