Use process instance objects between tasks exercise

The purpose of this exercise is for an user to put some number value at starting workflow in next form will be showed the introduced number multiplied by 3.

In order to perform this exercise, you should do the following:

  • Create two forms with inputs value, one to put the value and other to show the value multiplied by 3.
  • Create a node where to get the value introduced, multiply it by 3 and store in new object.
  • Create a task where to show the number.
  • Assign task to actor okmAdmin.

To store an object in workflow variable map, you should use:

executionContext.getContextInstance().setVariable("modified", modified);

Remember that objects used in forms should extend com.openkm.bean.form.FormElement.

Diagram

Resources

File forms.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow-forms PUBLIC "-//OpenKM//DTD Workflow Forms 2.1//EN"
                                "http://www.openkm.com/dtd/workflow-forms-2.1.dtd">
<workflow-forms>
  <workflow-form task="run_config">
    <input label="number" name="number" />
    <button name="submit" label="Submit" />
  </workflow-form>
  <workflow-form task="task">
  	<input label="number" name="number" data="modified" />
    <button name="submit" label="Submit" />
  </workflow-form>
</workflow-forms>

Class NodeAction.java

package com.openkm.workflow.exercise.exercise4;
 
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import com.openkm.bean.form.Input;
 
public class NodeAction implements ActionHandler {
    private static final long serialVersionUID = 1L;
    private static Logger log = LoggerFactory.getLogger(NodeAction.class);
 
    @Override
    public void execute(ExecutionContext executionContext) throws Exception {
        log.info("Executing action");
        Input number = (Input) executionContext.getContextInstance().getVariable("number");
        int value = 0;
 
        if (number != null) {
            value = Integer.valueOf(number.getValue());
        } else {
            value = 0;
        }
 
        value = value * 3;
        Input modified = new Input();
        modified.setName("modified");
        modified.setLabel("modified");
        modified.setValue(String.valueOf(value * 3));
        executionContext.getContextInstance().setVariable("modified", modified);
    }
}