cancel
Showing results for 
Search instead for 
Did you mean: 

workflow error

adhi27
Champ in-the-making
Champ in-the-making
i have problem in my workflow

this is the error
org.activiti.engine.ActivitiException: Exception while invoking TaskListener: Exception while invoking TaskListener: 07040022 Failed to execute supplied script: null


and this is the Bpmn


  <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[// check Assignee
var assignee = task.getVariable('wfCompnetOC_assignee');
logger.log("Your Assignee is "+assignee);

// set assignee
execution.setVariable('assigneeGlobal', assignee);

var assigneeGlobal = execution.getVariable('assigneeGlobal');

// Set Description
execution.setVariable('bpm_workflowDescription', 'Opportunity Create');
//set group psse Manager
execution.setVariable('psseManager','WF_SO_USR_PSSE_MGR');
var groupGlobal = execution.getVariable('psseManager');
logger.log('Group Global '+groupGlobal);
// call workflow
logger.log("Script Triggered");

var nodeRef = companyhome.childByNamePath("Registering Opportunity");
var nodeRefNew = nodeRef.nodeRef;
logger.log("Node Old "+nodeRef);
logger.log("NodeRef "+nodeRefNew);
var wf = actions.create("start-workflow");
wf.parameters.workflowName = "activiti$wfCompnetOA";
wf.parameters["wfCompnetOA:opportunityId"] = execution.getVariable('wfCompnetOC_opportunityId');
wf.parameters["bpm:workflowDescription"] = "Workflow Opportunity Create";
wf.parameters["wfCompnetOA:deskripsiOpportunityId"] = execution.getVariable('wfCompnetOC_deskripsiOpportunityId');
wf.parameters["wfCompnetOA:groupAssignee"] = groupGlobal;
wf.parameters["wfCompnetOA:pathCogsFolder"] = execution.getVariable('cogsFolder');
wf.parameters["wfCompnetOA:pathBoqFolder"] = execution.getVariable('boqFolder');
wf.parameters["wfCompnetOA:pathSowFolder"] = execution.getVariable('sowFolder');
wf.parameters["wfCompnetOA:pathProposalFolder"] = execution.getVariable('proposalFolder');
wf.parameters["wfCompnetOA:assignee"] = assigneeGlobal;
wf.execute(nodeRefNew);
logger.log("Executed Group Already");]]></activiti:string>
          </activiti:field>


can help me please
6 REPLIES 6

muralidharand
Star Contributor
Star Contributor
Hi,
Will you be able to place the complete BPMN file here?

adhi27
Champ in-the-making
Champ in-the-making

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="wfCompnetOC" name="Opportunity Create" isExecutable="true">
    <startEvent id="startevent1" name="Start" activiti:formKey="wfCompnetOC:startTask"></startEvent>
    <endEvent id="endevent1" name="End"></endEvent>
    <userTask id="usertask1" name="ADMIN TASK" activiti:assignee="${initiator.properties.userName}" activiti:formKey="wfCompnetOC:admin">
      <extensionElements>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[// check Assignee
var assignee = task.getVariable('wfCompnetOC_assignee');
logger.log("Your Assignee is "+assignee);

// set assignee
execution.setVariable('assigneeGlobal', assignee);

var assigneeGlobal = execution.getVariable('assigneeGlobal');

// Set Description
execution.setVariable('bpm_workflowDescription', 'Opportunity Create');
//set group psse Manager
execution.setVariable('psseManager','WF_SO_USR_PSSE_MGR');
var groupGlobal = execution.getVariable('psseManager');
logger.log('Group Global '+groupGlobal);
// call workflow
logger.log("Script Triggered");

var nodeRef = companyhome.childByNamePath("Registering Opportunity");
var nodeRefNew = nodeRef.nodeRef;
logger.log("Node Old "+nodeRef);
logger.log("NodeRef "+nodeRefNew);
var wf = actions.create("start-workflow");
wf.parameters.workflowName = "activiti$wfCompnetOA";
wf.parameters["wfCompnetOA:opportunityId"] = execution.getVariable('wfCompnetOC_opportunityId');
wf.parameters["bpm:workflowDescription"] = "Workflow Opportunity Create";
wf.parameters["wfCompnetOA:deskripsiOpportunityId"] = execution.getVariable('wfCompnetOC_deskripsiOpportunityId');
wf.parameters["wfCompnetOA:groupAssignee"] = groupGlobal;
wf.parameters["wfCompnetOA:pathCogsFolder"] = execution.getVariable('cogsFolder');
wf.parameters["wfCompnetOA:pathBoqFolder"] = execution.getVariable('boqFolder');
wf.parameters["wfCompnetOA:pathSowFolder"] = execution.getVariable('sowFolder');
wf.parameters["wfCompnetOA:pathProposalFolder"] = execution.getVariable('proposalFolder');
wf.parameters["wfCompnetOA:assignee"] = assigneeGlobal;
wf.execute(nodeRefNew);
logger.log("Executed Group Already");]]></activiti:string>
          </activiti:field>
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1">
      <extensionElements>
        <activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[logger.log("Logged The Opportunity Create");

// Workflow Description
execution.setVariable('bpm_workflowDescription','Opportunity Create');

// get the opportunity
var opportunityId = execution.getVariable('wfCompnetOC_opportunityId');
//get the assignee
//var assignee = execution.getVariable('wfCompnetOC_assignee');

logger.log("Your Opportunity Number is "+opportunityId);
//logger.log("Your assignee is "+assignee);

// Check Is Folder is Exist
var checkFolderParent = companyhome.childByNamePath("Registering Opportunity");

// result creation folder Opportunity
var resultCreation;

// child folder result creation
var resultCreationOpportunity;
var resultCreationCogs;
var resultCreationBoq;
var resultCreationSoW;
var resultCreationProposal;

// Check the Folder
if(checkFolderParent == null){
   logger.log("Start creating Folder ");
   resultCreation = companyhome.createFolder("Registering Opportunity");
   logger.log("Your Folder Creation is "+resultCreation);
   
   
   
   // create Opportunity
   resultCreationOpportunity = resultCreation.createFolder(opportunityId);
   logger.log("OpportunityId "+resultCreationOpportunity);
   
   var homeFolderAndOpportunity = resultCreation.name+"/"+resultCreationOpportunity.name;
   logger.log("Home Folder Plus Opp —>"+homeFolderAndOpportunity);
   execution.setVariable('homeFolder', homeFolderAndOpportunity);
   // create COGS
   resultCreationCogs = resultCreationOpportunity.createFolder("COGS");
   logger.log("Check COGS Creation Folder "+resultCreationCogs.name);
   
   var cogsPath = homeFolderAndOpportunity+"/"+resultCreationCogs.name;
   logger.log("COGS Folder "+cogsPath);
   execution.setVariable('cogsFolder',cogsPath);
   //logger.log("COGS Has Been SET "+resulCreationCogs);
   
   // Create Boq
   resultCreationBoq = resultCreationOpportunity.createFolder("BOQS");
   logger.log("Check BOQ —–> "+resultCreationBoq);
   
   var boqPath = homeFolderAndOpportunity+"/"+resultCreationBoq.name;
   execution.setVariable('boqFolder',boqPath);
   
   //Create SOW
   resultCreationSoW = resultCreationOpportunity.createFolder("Scope of Work");
   
   var sowPath = homeFolderAndOpportunity+"/"+resultCreationSoW.name;
   execution.setVariable('sowFolder',sowPath);
   logger.log("Check SOW —-> "+resultCreationSoW);
   
   // Create Proposal
   resultCreationProposal = resultCreationOpportunity.createFolder("Proposal");
   
   var proposalPath = homeFolderAndOpportunity+"/"+resultCreationProposal.name;
   execution.setVariable("proposalFolder", proposalPath);
   logger.log("Check Proposal —-> "+resultCreationProposal);
}else{
   logger.log("Start creating Folder ");
   //resultCreation = companyhome.createFolder("Registering Opportunity");
   logger.log("Your Folder Creation is "+checkFolderParent);
   
   
   
   // create Opportunity
   resultCreationOpportunity = checkFolderParent.createFolder(opportunityId);
   logger.log("OpportunityId "+resultCreationOpportunity);
   
   var homeFolderAndOpportunity = checkFolderParent.name+"/"+resultCreationOpportunity.name;
   logger.log("Home Folder Plus Opp —>"+homeFolderAndOpportunity);
   execution.setVariable('homeFolder', homeFolderAndOpportunity);
   // create COGS
   resultCreationCogs = resultCreationOpportunity.createFolder("COGS");
   logger.log("Check COGS Creation Folder "+resultCreationCogs.name);
   
   var cogsPath = homeFolderAndOpportunity+"/"+resultCreationCogs.name;
   logger.log("COGS Folder "+cogsPath);
   execution.setVariable('cogsFolder',cogsPath);
   //logger.log("COGS Has Been SET "+resulCreationCogs);
   
   // Create Boq
   resultCreationBoq = resultCreationOpportunity.createFolder("BOQS");
   logger.log("Check BOQ —–> "+resultCreationBoq);
   
   var boqPath = homeFolderAndOpportunity+"/"+resultCreationBoq.name;
   execution.setVariable('boqFolder',boqPath);
   
   //Create SOW
   resultCreationSoW = resultCreationOpportunity.createFolder("Scope of Work");
   
   var sowPath = homeFolderAndOpportunity+"/"+resultCreationSoW.name;
   execution.setVariable('sowFolder',sowPath);
   logger.log("Check SOW —-> "+resultCreationSoW);
   
   // Create Proposal
   resultCreationProposal = resultCreationOpportunity.createFolder("Proposal");
   
   var proposalPath = homeFolderAndOpportunity+"/"+resultCreationProposal.name;
   execution.setVariable("proposalFolder", proposalPath);
   logger.log("Check Proposal —-> "+resultCreationProposal);
}]]></activiti:string>
          </activiti:field>
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
        </activiti:executionListener>
      </extensionElements>
    </sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_wfCompnetOC">
    <bpmndi:BPMNPlane bpmnElement="wfCompnetOC" id="BPMNPlane_wfCompnetOC">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="480.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="280.0" y="153.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="165.0" y="180.0"></omgdi:waypoint>
        <omgdi:waypoint x="280.0" y="180.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="385.0" y="180.0"></omgdi:waypoint>
        <omgdi:waypoint x="480.0" y="180.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

darkredd
Star Contributor
Star Contributor
Firstly, your asking an awe-full lot for a sequence flow to do there; some things in my experience turn to yield run-time errors just because they are in a sequence flow. Avoid putting logic in you sequence flow.
Secondly, a sequence flow only has two states name: 1.<Strong>"take"</strong> and 2.<strong>"end"</strong>. That might be what is causing your error. Try putting as little code as possible to debug where the issue could be. But the sequence flow state is my main suspect.

adhi27
Champ in-the-making
Champ in-the-making

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="wfCompnetOC" name="Opportunity Create" isExecutable="true">
    <startEvent id="startevent1" name="Start" activiti:formKey="wfCompnetOC:startTask"></startEvent>
    <endEvent id="endevent1" name="End"></endEvent>
    <userTask id="usertask1" name="ADMIN TASK" activiti:assignee="${initiator.properties.userName}" activiti:formKey="wfCompnetOC:admin">
      <extensionElements>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[// check Assignee
var assignee = task.getVariable('wfCompnetOC_assignee');
logger.log("Your Assignee is "+assignee);

// set assignee
execution.setVariable('assigneeGlobal', assignee);

var assigneeGlobal = execution.getVariable('assigneeGlobal');

// Set Description
execution.setVariable('bpm_workflowDescription', 'Opportunity Create');
//set group psse Manager
execution.setVariable('psseManager','WF_SO_USR_PSSE_MGR');
var groupGlobal = execution.getVariable('psseManager');
logger.log('Group Global '+groupGlobal);
// call workflow
logger.log("Script Triggered");

var nodeRef = companyhome.childByNamePath("Registering Opportunity");
var nodeRefNew = nodeRef.nodeRef;
logger.log("Node Old "+nodeRef);
logger.log("NodeRef "+nodeRefNew);
var wf = actions.create("start-workflow");
wf.parameters.workflowName = "activiti$wfCompnetOA";
wf.parameters["wfCompnetOA:opportunityId"] = execution.getVariable('wfCompnetOC_opportunityId');
wf.parameters["bpm:workflowDescription"] = "Workflow Opportunity Create";
wf.parameters["wfCompnetOA:deskripsiOpportunityId"] = execution.getVariable('wfCompnetOC_deskripsiOpportunityId');
wf.parameters["wfCompnetOA:groupAssignee"] = groupGlobal;
wf.parameters["wfCompnetOA:pathCogsFolder"] = execution.getVariable('cogsFolder');
wf.parameters["wfCompnetOA:pathBoqFolder"] = execution.getVariable('boqFolder');
wf.parameters["wfCompnetOA:pathSowFolder"] = execution.getVariable('sowFolder');
wf.parameters["wfCompnetOA:pathProposalFolder"] = execution.getVariable('proposalFolder');
wf.parameters["wfCompnetOA:assignee"] = assigneeGlobal;
wf.execute(nodeRefNew);
logger.log("Executed Group Already");]]></activiti:string>
          </activiti:field>
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1">
      <extensionElements>
        <activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[logger.log("Logged The Opportunity Create");

// Workflow Description
execution.setVariable('bpm_workflowDescription','Opportunity Create');

// get the opportunity
var opportunityId = execution.getVariable('wfCompnetOC_opportunityId');
//get the assignee
//var assignee = execution.getVariable('wfCompnetOC_assignee');

logger.log("Your Opportunity Number is "+opportunityId);
//logger.log("Your assignee is "+assignee);

// Check Is Folder is Exist
var checkFolderParent = companyhome.childByNamePath("Registering Opportunity");

// result creation folder Opportunity
var resultCreation;

// child folder result creation
var resultCreationOpportunity;
var resultCreationCogs;
var resultCreationBoq;
var resultCreationSoW;
var resultCreationProposal;

// Check the Folder
if(checkFolderParent == null){
   logger.log("Start creating Folder ");
   resultCreation = companyhome.createFolder("Registering Opportunity");
   logger.log("Your Folder Creation is "+resultCreation);
   
   
   
   // create Opportunity
   resultCreationOpportunity = resultCreation.createFolder(opportunityId);
   logger.log("OpportunityId "+resultCreationOpportunity);
   
   var homeFolderAndOpportunity = resultCreation.name+"/"+resultCreationOpportunity.name;
   logger.log("Home Folder Plus Opp —>"+homeFolderAndOpportunity);
   execution.setVariable('homeFolder', homeFolderAndOpportunity);
   // create COGS
   resultCreationCogs = resultCreationOpportunity.createFolder("COGS");
   logger.log("Check COGS Creation Folder "+resultCreationCogs.name);
   
   var cogsPath = homeFolderAndOpportunity+"/"+resultCreationCogs.name;
   logger.log("COGS Folder "+cogsPath);
   execution.setVariable('cogsFolder',cogsPath);
   //logger.log("COGS Has Been SET "+resulCreationCogs);
   
   // Create Boq
   resultCreationBoq = resultCreationOpportunity.createFolder("BOQS");
   logger.log("Check BOQ —–> "+resultCreationBoq);
   
   var boqPath = homeFolderAndOpportunity+"/"+resultCreationBoq.name;
   execution.setVariable('boqFolder',boqPath);
   
   //Create SOW
   resultCreationSoW = resultCreationOpportunity.createFolder("Scope of Work");
   
   var sowPath = homeFolderAndOpportunity+"/"+resultCreationSoW.name;
   execution.setVariable('sowFolder',sowPath);
   logger.log("Check SOW —-> "+resultCreationSoW);
   
   // Create Proposal
   resultCreationProposal = resultCreationOpportunity.createFolder("Proposal");
   
   var proposalPath = homeFolderAndOpportunity+"/"+resultCreationProposal.name;
   execution.setVariable("proposalFolder", proposalPath);
   logger.log("Check Proposal —-> "+resultCreationProposal);
}else{
   logger.log("Start creating Folder ");
   //resultCreation = companyhome.createFolder("Registering Opportunity");
   logger.log("Your Folder Creation is "+checkFolderParent);
   
   
   
   // create Opportunity
   resultCreationOpportunity = checkFolderParent.createFolder(opportunityId);
   logger.log("OpportunityId "+resultCreationOpportunity);
   
   var homeFolderAndOpportunity = checkFolderParent.name+"/"+resultCreationOpportunity.name;
   logger.log("Home Folder Plus Opp —>"+homeFolderAndOpportunity);
   execution.setVariable('homeFolder', homeFolderAndOpportunity);
   // create COGS
   resultCreationCogs = resultCreationOpportunity.createFolder("COGS");
   logger.log("Check COGS Creation Folder "+resultCreationCogs.name);
   
   var cogsPath = homeFolderAndOpportunity+"/"+resultCreationCogs.name;
   logger.log("COGS Folder "+cogsPath);
   execution.setVariable('cogsFolder',cogsPath);
   //logger.log("COGS Has Been SET "+resulCreationCogs);
   
   // Create Boq
   resultCreationBoq = resultCreationOpportunity.createFolder("BOQS");
   logger.log("Check BOQ —–> "+resultCreationBoq);
   
   var boqPath = homeFolderAndOpportunity+"/"+resultCreationBoq.name;
   execution.setVariable('boqFolder',boqPath);
   
   //Create SOW
   resultCreationSoW = resultCreationOpportunity.createFolder("Scope of Work");
   
   var sowPath = homeFolderAndOpportunity+"/"+resultCreationSoW.name;
   execution.setVariable('sowFolder',sowPath);
   logger.log("Check SOW —-> "+resultCreationSoW);
   
   // Create Proposal
   resultCreationProposal = resultCreationOpportunity.createFolder("Proposal");
   
   var proposalPath = homeFolderAndOpportunity+"/"+resultCreationProposal.name;
   execution.setVariable("proposalFolder", proposalPath);
   logger.log("Check Proposal —-> "+resultCreationProposal);
}]]></activiti:string>
          </activiti:field>
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
        </activiti:executionListener>
      </extensionElements>
    </sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_wfCompnetOC">
    <bpmndi:BPMNPlane bpmnElement="wfCompnetOC" id="BPMNPlane_wfCompnetOC">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="130.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="480.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="280.0" y="153.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="165.0" y="180.0"></omgdi:waypoint>
        <omgdi:waypoint x="280.0" y="180.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="385.0" y="180.0"></omgdi:waypoint>
        <omgdi:waypoint x="480.0" y="180.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

voula_11
Champ in-the-making
Champ in-the-making
Hello.

Context: I have 2 workflows: changeRequest and reviewAndApprove. At the end of my changeRequest workflow, I start a reviewAndApprove workflow using javascript. When I start a reviewAndApprove workflow on its own, everything works perfectly and it ends properly. However, when I start it from my  changeRequest workflow, everything works great until the very last task, where I get this error.
"org.activiti.engine.ActivitiException: Exception while invoking TaskListener: Exception while invoking TaskListener: 07040022 Failed to execute supplied script: null"

Workflow Definitions:

Review and Approve

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://activiti.org/bpmn20" id="review-definitions">
  <signal id="cancelReviewTasks" name="cancelReviewTasks"></signal>
  <process id="reviewAndApprove" name="Review And Approve" isExecutable="true">
    <extensionElements>
      <activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
        <activiti:field name="runAs">
           <activiti:string><![CDATA[admin]]></activiti:string>
        </activiti:field>
        <activiti:field name="script">
          <activiti:string><![CDATA[// check if document is valid for R&A workflow
                      if (bpm_package.children.length > 0) {
                             if (!bpm_package.children[0].hasAspect("uc:reviewApprove")){
                                bpm_package.removeNode(bpm_package.children[0]);
                                bpm_package.save();
                                throw new Error("\n\nThe selected document is not valid for a Review and Approve workflow.\nWorkflow is being cancelled.");
                                workflow.cancel();
                                workflow['delete']();
                             }
                          }
                      // set workflow properties
                      if (typeof ucwf_reviewersList !== 'undefined') {
                         execution.setVariable('wf_reviewerCount', ucwf_reviewersList.size());
                      }
                          else execution.setVariable('wf_reviewerCount', 0);
                          execution.setVariable('ucwf_workflowDueDate', bpm_workflowDueDate);
                          execution.setVariable('ucwf_workflowPriority', bpm_workflowPriority);
                          execution.setVariable('docOwner', bpm_package.children[0].getOwner());]]></activiti:string>
        </activiti:field>
      </activiti:executionListener>
    </extensionElements>
    <startEvent id="startevent1" name="Start" activiti:formKey="ucwf:startReviewAndApproveTask"></startEvent>
    <serviceTask id="alfrescoScripttask1" name="Alfresco Script Task" activiti:class="org.alfresco.repo.workflow.activiti.script.AlfrescoScriptDelegate">
     <extensionElements>
       <activiti:field name="script">
         <activiti:string><![CDATA[
                execution.setVariable('wf_documentApproved', false);
                // set doc permissions: only read for everyone except reviewers
               var docNode = bpm_package.children[0];
               var perms = docNode.getPermissions();
               docNode.setInheritsPermissions(false);
               if (!docNode.properties["uc:isOriginal"]) {
                  for each (perm in perms) {
                     var tokens = perm.split(";");
                     docNode.removePermission(tokens[2], tokens[1]);
                     if (tokens[0].equals("ALLOWED")) docNode.setPermission("Read", tokens[1]);
                  }
               }
               docNode.setPermission("Collaborator", docOwner);
               docNode.setPermission("Collaborator", ucwf_approverAssignee.properties.userName);
               for (i = 0; i != wf_reviewerCount; i++) {
                  docNode.setPermission("Collaborator", ucwf_reviewersList.get(i).properties.userName);
               }
               docNode.save();
         ]]></activiti:string>
       </activiti:field>
     </extensionElements>
   </serviceTask>
    <subProcess id="subprocess2" name="Approve Process">
      <startEvent id="startevent3" name="Start"></startEvent>
      <endEvent id="endevent8" name="End"></endEvent>
      <userTask id="alfrescoUsertask12" name="Approver for Document Review" activiti:assignee="${ucwf_approverAssignee.properties.userName}" activiti:formKey="ucwf:ucReviewAndApproveTask">
        <extensionElements>
          <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="script">
              <activiti:string><![CDATA[task.description = "Review Document";
                          if (typeof execution.getVariable('ucwf_workflowDueDate') != 'undefined') task.dueDate = execution.getVariable('ucwf_workflowDueDate');
                           if (typeof execution.getVariable('ucwf_workflowPriority') != 'undefined') task.priority = execution.getVariable('ucwf_workflowPriority');]]></activiti:string>
            </activiti:field>
          </activiti:taskListener>
          <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="runAs">
              <activiti:string><![CDATA[admin]]></activiti:string>
            </activiti:field>
            <activiti:field name="script">
              <activiti:string><![CDATA[var mail = actions.create("mail");
                           mail.parameters.to = initiator.properties.email;
                           mail.parameters.from = ucwf_approverAssignee.properties.email;
                           mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/wf-email-reviewOutcome.html.ftl");
                           
                           var templateArgs = new Array();
                           templateArgs['task'] = "Approval";
                           templateArgs['role'] = "Approver";
                           templateArgs['firstName'] = ucwf_approverAssignee.properties.firstName;
                           if (ucwf_approverAssignee.properties.lastName != 'undefined' && ucwf_approverAssignee.properties.lastName != null) templateArgs['lastName'] = ucwf_approverAssignee.properties.lastName;
                           else templateArgs['lastName'] = "";
                           templateArgs['docName'] = bpm_package.children[0].properties["cm:name"];
                           
                          if(task.getVariableLocal('wf_reviewOutcome') == 'Approve') {
                               execution.setVariable('wf_documentApproved', true);
                               mail.parameters.subject = "Document Approved";
                              templateArgs['outcome'] = "Approved";
                           } else {
                              execution.setVariable('wf_documentApproved', false);
                              mail.parameters.subject = "Document Rejected";
                              templateArgs['outcome'] = "Rejected";
                           }
                          
                           var templateModel = new Array();
                        templateModel['args'] = templateArgs;
                        mail.parameters.template_model = templateModel;
                           mail.execute(bpm_package);]]></activiti:string>
            </activiti:field>
          </activiti:taskListener>
        </extensionElements>
      </userTask>
      <sequenceFlow id="flow116" sourceRef="startevent3" targetRef="alfrescoUsertask12"></sequenceFlow>
      <sequenceFlow id="flow117" sourceRef="alfrescoUsertask12" targetRef="endevent8"></sequenceFlow>
    </subProcess>
    <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
    <sequenceFlow id="flow33" sourceRef="exclusivegateway1" targetRef="subprocess1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wf_reviewerCount > 0}]]></conditionExpression>
    </sequenceFlow>
    <subProcess id="subprocess1" name="Review Process">
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="ucwf_reviewersList" activiti:elementVariable="reviewer"></multiInstanceLoopCharacteristics>
      <startEvent id="startevent2" name="Start"></startEvent>
      <endEvent id="endevent5" name="End"></endEvent>
      <userTask id="alfrescoUsertask11" name="Reviewer for Document Review" activiti:assignee="${reviewer.properties.userName}" activiti:formKey="ucwf:ucReviewAndApproveTask">
        <extensionElements>
          <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="script">
              <activiti:string><![CDATA[task.description = "Review Document";
                          if (typeof execution.getVariable('ucwf_workflowDueDate') != 'undefined') task.dueDate = execution.getVariable('ucwf_workflowDueDate');
                           if (typeof execution.getVariable('ucwf_workflowPriority') != 'undefined') task.priority = execution.getVariable('ucwf_workflowPriority');]]></activiti:string>
            </activiti:field>
          </activiti:taskListener>
          <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
            <activiti:field name="runAs">
              <activiti:string><![CDATA[admin]]></activiti:string>
            </activiti:field>
            <activiti:field name="script">
              <activiti:string><![CDATA[var mail = actions.create("mail");
                           mail.parameters.to = initiator.properties.email;
                           mail.parameters.from = reviewer.properties.email;
                           mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/wf-email-reviewOutcome.html.ftl");
                           
                           var templateArgs = new Array();
                           templateArgs['task'] = "Review";
                           templateArgs['role'] = "Reviewer";
                           templateArgs['firstName'] = reviewer.properties.firstName;
                           if (reviewer.properties.lastName != 'undefined' && reviewer.properties.lastName != null) templateArgs['lastName'] = reviewer.properties.lastName;
                           else templateArgs['lastName'] = "";
                           templateArgs['docName'] = bpm_package.children[0].properties["cm:name"];
                           
                          if(task.getVariableLocal('wf_reviewOutcome') == 'Approve') {
                               mail.parameters.subject = "Document Reviewed and Approved";
                              templateArgs['outcome'] = "Approved";
                           } else {
                              mail.parameters.subject = "Document Reviewed and Rejected";
                              templateArgs['outcome'] = "Rejected";
                           }
                          
                           var templateModel = new Array();
                        templateModel['args'] = templateArgs;
                        mail.parameters.template_model = templateModel;
                           mail.execute(bpm_package);]]></activiti:string>
            </activiti:field>
          </activiti:taskListener>
        </extensionElements>
      </userTask>
      <sequenceFlow id="flow114" sourceRef="startevent2" targetRef="alfrescoUsertask11"></sequenceFlow>
      <sequenceFlow id="flow115" sourceRef="alfrescoUsertask11" targetRef="endevent5"></sequenceFlow>
    </subProcess>
    <boundaryEvent id="boundarysignal1" name="Signal" attachedToRef="subprocess1" cancelActivity="true">
      <signalEventDefinition signalRef="cancelReviewTasks"></signalEventDefinition>
    </boundaryEvent>
    <sequenceFlow id="flow34" sourceRef="exclusivegateway1" targetRef="endevent3">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wf_reviewerCount == 0}]]></conditionExpression>
    </sequenceFlow>
    <endEvent id="endevent3" name="End"></endEvent>
    <sequenceFlow id="flow107" sourceRef="subprocess1" targetRef="inclusivegateway1"></sequenceFlow>
    <inclusiveGateway id="inclusivegateway1" name="Inclusive Gateway"></inclusiveGateway>
    <sequenceFlow id="flow106" sourceRef="inclusivegateway1" targetRef="usertask2"></sequenceFlow>
    <userTask id="usertask2" name="Document Rejected: Revise Document" activiti:assignee="${docOwner}" activiti:formKey="ucwf:reviseDocument">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[task.description = "Document Rejected: Revise Document";
                              task.setVariableLocal('ucwf_reviewersList', execution.getVariable('ucwf_reviewersList'));
                                task.setVariableLocal('ucwf_approverAssignee', execution.getVariable('ucwf_approverAssignee'));]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
          <activiti:field name="script">
            <activiti:string><![CDATA[
                  // remove previous R&A's permissions
               var docNode = bpm_package.children[0];
               docNode.setInheritsPermissions(false);
               docNode.removePermission("Collaborator", execution.getVariable('ucwf_approverAssignee').properties.userName);
               for (i = 0; i != wf_reviewerCount; i++) {
                  docNode.removePermission("Collaborator", execution.getVariable('ucwf_reviewersList').get(i).properties.userName);
               }
               // update assignees and properties
                  execution.setVariable('ucwf_approverAssignee', task.getVariableLocal('ucwf_approverAssignee'));
               execution.setVariable('ucwf_reviewersList', task.getVariableLocal('ucwf_reviewersList'));
                  if (typeof task.getVariableLocal('ucwf_reviewersList') != 'undefined' && task.getVariableLocal('ucwf_reviewersList') != null)
                     execution.setVariable('wf_reviewerCount', task.getVariableLocal('ucwf_reviewersList').size());
                  else execution.setVariable('wf_reviewerCount', 0);
                  execution.setVariable('bpm_workflowDueDate', task.getVariableLocal('bpm_dueDate'));
                  execution.setVariable('bpm_workflowPriority', task.getVariableLocal('bpm_priority'));
                  ]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <sequenceFlow id="flow80" sourceRef="subprocess2" targetRef="exclusivegateway4"></sequenceFlow>
    <exclusiveGateway id="exclusivegateway4" name="Exclusive Gateway"></exclusiveGateway>
    <sequenceFlow id="flow50" sourceRef="exclusivegateway4" targetRef="inclusivegateway1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wf_documentApproved == false}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="flow83" sourceRef="exclusivegateway4" targetRef="signalintermediatethrowevent1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${wf_documentApproved == true}]]></conditionExpression>
    </sequenceFlow>
    <intermediateThrowEvent id="signalintermediatethrowevent1" name="SignalThrowEvent">
      <signalEventDefinition signalRef="cancelReviewTasks"></signalEventDefinition>
    </intermediateThrowEvent>
    <sequenceFlow id="flow118" sourceRef="signalintermediatethrowevent1" targetRef="alfrescoUsertask10"></sequenceFlow>
    <userTask id="alfrescoUsertask10" name="Release Document" activiti:assignee="iageeva" activiti:formKey="ucwf:releaseDocument">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[task.description = "Upload Signed PDF";
                        if (typeof execution.getVariable('ucwf_workflowDueDate') != 'undefined') task.dueDate = execution.getVariable('ucwf_workflowDueDate');
                           if (typeof execution.getVariable('ucwf_workflowPriority') != 'undefined') task.priority = execution.getVariable('ucwf_workflowPriority');]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
          <activiti:field name="script">
            <activiti:string><![CDATA[if (bpm_package.children.length < 2) {
                           throw new Error("\n\nYou must attach a signed PDF file before ending the task.");
                              } else if ((new String(bpm_package.children[0].name)).indexOf('.pdf') == -1 && (new String(bpm_package.children[1].name)).indexOf('.pdf') == -1) {
                                 throw new Error("\n\nYou must attach an Adbode PDF Document.");
                              }
                              else {
                                 var docNode = bpm_package.children[1];                           
                           var pdfNode = bpm_package.children[0];
                           
                           if ((new String(docNode.name)).indexOf('.doc') == -1 && (new String(pdfNode.name)).indexOf('.pdf') == -1) {
                               docNode =  bpm_package.children[0];
                               pdfNode = bpm_package.children[1];
                               if ((new String(docNode.name)).indexOf('.doc') == -1 && (new String(pdfNode.name)).indexOf('.pdf') == -1) throw new Error("\n\nCannot read workflow items.");
                           }
                           
                           // set pdf name to same as doc
                           pdfNode.name = docNode.name.substr(0, docNode.name.lastIndexOf('.')) + ".pdf";
                           
                           // VERSIONS
                           // If already released, increment major version
                           if (pdfNode.properties["uc:isReleased"]) {
                              pdfNode.createVersion("", true);
                              docNode.createVersion("", true);
                           } else { // if unreleased, set version to 1.0
                              pdfNode.removeAspect("cm:versionable");
                              pdfNode.addAspect("cm:versionable");
                              pdfNode.createVersion("1.0", true);
                              docNode.removeAspect("cm:versionable");
                              docNode.addAspect("cm:versionable");
                              docNode.createVersion("1.0", true);
                           }
                           
                           // create association between PDF and original
                           var assoc = pdfNode.createAssociation(docNode, "uc:originalDocument");
                           
                           // ASPECTS
                           // PDF: isReleased = true, add CR aspect
                           pdfNode.addAspect("uc:released", {"uc:isReleased" : true, "uc:approver" : ucwf_approverAssignee.properties.userName});
                           pdfNode.addAspect("uc:changeRequest"); //released pdf can now have changeRequest
                           // DOC: isOriginal = true, remove reviewApprove aspect
                           docNode.addAspect("uc:released", {"uc:isOriginal" : true, "uc:approver" : ucwf_approverAssignee.properties.userName});
                           docNode.removeAspect("uc:reviewApprove"); //can no longer be used in R&A workflow
                           
                           // PDF PERMISSIONS
                           // set all permissions to read
                           var pdfPerms = pdfNode.getPermissions();
                           pdfNode.setInheritsPermissions(false);
                           for each (perm in pdfPerms) {
                              var tokens = perm.split(";");
                              pdfNode.removePermission(tokens[2], tokens[1]);
                              if (tokens[0].equals("ALLOWED")) pdfNode.setPermission("Read", tokens[1]);
                           }
                           
                           // DOC PERMSSIONS
                           // remove all permissions
                           var docPerms = docNode.getPermissions();
                           docNode.setInheritsPermissions(false);
                           for each (perm in docPerms) {
                              var tokens = perm.split(";");
                              docNode.removePermission(tokens[2], tokens[1]);
                           }
                           // only allow admins to view
                           docNode.setPermission("Read", "GROUP_ALFRESCO_ADMINISTRATORS");
                           
                           // save both
                           pdfNode.save();
                           docNode.save();
                           
                           // prepare email
                           var toMany = [];
                              toMany.push(initiator.properties.userName);
                              toMany.push(ucwf_approverAssignee.properties.userName);
                              toMany.push("iageeva");
                              if (typeof ucwf_reviewersList !== 'undefined' && ucwf_reviewersList !== null) {
                                 for (i = 0; i < ucwf_reviewersList.size(); i++) {
                                    toMany.push(ucwf_reviewersList.get(i).properties.userName);
                                 }
                              }
                              toMany = toMany.filter(function(item, pos) {
                               return toMany.indexOf(item) == pos;
                           });
                              
                              var mail = actions.create("mail");
                                 mail.parameters.to_many = toMany;
                                 mail.parameters.subject = "Document Signed and Released!";
                                 mail.parameters.template = companyhome.childByNamePath("Data Dictionary/Email Templates/wf-email-docReleased.html.ftl");
   
                                 var templateArgs = new Array();
                                 templateArgs['docName'] = pdfNode.name;
                                 templateArgs['docUrl'] = pdfNode.url;
                                 var templateModel = new Array();
                              templateModel['args'] = templateArgs;
                              mail.parameters.template_model = templateModel;
                                 mail.execute(bpm_package);
                                 purposefulError;
                              }]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <parallelGateway id="parallelgateway1" name="Parallel Gateway"></parallelGateway>
    <sequenceFlow id="flow121" sourceRef="parallelgateway1" targetRef="subprocess2"></sequenceFlow>
    <sequenceFlow id="flow122" sourceRef="parallelgateway1" targetRef="exclusivegateway1"></sequenceFlow>
    <endEvent id="terminateendevent2" name="TerminateEndEvent">
      <terminateEventDefinition></terminateEventDefinition>
    </endEvent>
    <sequenceFlow id="flow124" sourceRef="alfrescoUsertask10" targetRef="terminateendevent2"></sequenceFlow>
    <sequenceFlow id="flow125" sourceRef="startevent1" targetRef="alfrescoScripttask1"></sequenceFlow>
    <sequenceFlow id="flow126" sourceRef="alfrescoScripttask1" targetRef="parallelgateway1"></sequenceFlow>
    <sequenceFlow id="flow127" sourceRef="usertask2" targetRef="alfrescoScripttask1"></sequenceFlow>
  </process>


Change Request:


<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="changeRequest" name="Change Request" isExecutable="true">
    <extensionElements>
      <activiti:executionListener event="start" class="org.alfresco.repo.workflow.activiti.listener.ScriptExecutionListener">
        <activiti:field name="runAs">
          <activiti:string><![CDATA[admin]]></activiti:string>
        </activiti:field>
        <activiti:field name="script">
          <activiti:string><![CDATA[execution.setVariable('ucwf_workflowDueDate', bpm_workflowDueDate);
                                execution.setVariable('ucwf_workflowPriority', bpm_workflowPriority);
                              if (bpm_package.children.length > 0) {
                                   if (!bpm_package.children[0].hasAspect("uc:changeRequest")){
                                      bpm_package.removeNode(bpm_package.children[0]);
                                      bpm_package.save();
                                      throw new Error("\n\nThe selected document is not valid for a Change Request.\nWorkflow is being cancelled.");
                                      workflow.cancel();
                                      workflow['delete']();
                                   } //else {
                                      //execution.setVariable('ucwf_assignee', bpm_package.children[0].getOwner());
                                      //execution.setVariable('ucwf_approver', bpm_package.children[0].properties["uc:approver"]);
                                   //}
                                }]]></activiti:string>
        </activiti:field>
      </activiti:executionListener>
    </extensionElements>
    <startEvent id="startevent1" name="Start" activiti:formKey="ucwf:startChangeRequestTask"></startEvent>
    <userTask id="usertask3" name="Choose Approver and Changer" activiti:assignee="iageeva" activiti:formKey="ucwf:selectChangeRequestAssignees">
       <extensionElements>
        <!– <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[ //auto-fill assignees?
            ]]></activiti:string>
          </activiti:field>
        </activiti:taskListener> –>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[
                  execution.setVariable('ucwf_crApproverAssignee', task.getVariable('ucwf_crApproverAssignee'));
                  execution.setVariable('ucwf_crChangerAssignee', task.getVariable('ucwf_crChangerAssignee'));
               ]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <sequenceFlow id="flow12" sourceRef="usertask3" targetRef="usertask2"></sequenceFlow>
    <userTask id="usertask2" name="Approve Change Request" activiti:assignee="${ucwf_crApproverAssignee.properties.userName}" activiti:formKey="ucwf:approveChangeRequest">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[task.description = "Change Request Approval";
                           if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate;
                              if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;
                              execution.setVariable('ucwf_requestOutcome', '');
            ]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[execution.setVariable('ucwf_requestOutcome', task.getVariableLocal('wf_reviewOutcome'));]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"></exclusiveGateway>
    <sequenceFlow id="flow7" sourceRef="exclusivegateway1" targetRef="endevent1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${ucwf_requestOutcome == 'Reject'}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="flow6" sourceRef="exclusivegateway1" targetRef="usertask1">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${ucwf_requestOutcome == 'Approve'}]]></conditionExpression>
    </sequenceFlow>
    <userTask id="usertask1" name="Make Changes" activiti:assignee="${ucwf_crChangerAssignee.properties.userName}" activiti:formKey="ucwf:changeRequestTask">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="runAs">
            <activiti:string><![CDATA[admin]]></activiti:string>
          </activiti:field>
          <activiti:field name="script">
            <activiti:string><![CDATA[task.description = "Change Request";
                           if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate;
                              if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;
                             
                              // remove write permissions from pdf
                              var pdfNode = bpm_package.children[0];
                              pdfNode.removeAspect("uc:changeRequest");
                             
                              // get original doc and give write permissions to assignee
                              var docNode = pdfNode.assocs["uc:originalDocument"][0];
                              docNode.setPermission("Collaborator", ucwf_crChangerAssignee.properties.userName);                             
                             
                              // replace pdf in package items with original
                              bpm_package.removeNode(pdfNode);
                              bpm_package.addNode(docNode);
                              bpm_package.save();]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
        <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[bpm_package.children[0].addAspect("uc:reviewApprove");
                     
                     // start R&A workflow
                        /*var wfdef = workflow.getDefinitionByName("activiti$reviewAndApprove");
                  var wfparams = new Object();
                  wfparams["bpm:workflowDescription"] = "Review and Approve";
                  wfparams["bpm:workflowDueDate"] = bpm_workflowDueDate;
                  wfparams["bpm:workflowPriority"] = bpm_workflowPriority;
                  var reviewers = [];
                  if (typeof task.getVariable('ucwf_reviewersList') !== 'undefined') {
                     for (i = 0; i != task.getVariable('ucwf_reviewersList').size(); i++) {
                        var reviewer = task.getVariable('ucwf_reviewersList').get(i);
                        reviewers.push(reviewer.nodeRef);
                     }
                  }
                  wfparams["ucwf:reviewersList"] = reviewers;
                  wfparams["ucwf:approverAssignee"] = task.getVariable('ucwf_approverAssignee');
                  var wfpackage = workflow.createPackage();
                  wfpackage.addNode(bpm_package.children[0]);
                        var wfPath = wfdef.startWorkflow(wfpackage, wfparams);
                        var startTask = wfPath.getTasks()[0];
                  var transitions = startTask.getTransitions();
                  var transition;
                  for each (trans in transitions) {
                     transition = transitions[trans];
                  }
                        startTask.endTask(transition);*/
                       
                        var wf = actions.create("start-workflow");
                  wf.parameters.workflowName = "activiti$reviewAndApprove";
                  var reviewers = [];
                  if (typeof task.getVariable('ucwf_reviewersList') !== 'undefined') {
                     for (i = 0; i != task.getVariable('ucwf_reviewersList').size(); i++) {
                        var reviewer = task.getVariable('ucwf_reviewersList').get(i);
                        reviewers.push(reviewer.nodeRef);
                     }
                  }
                  wf.parameters["ucwf:reviewersList"] = reviewers;
                  wf.parameters["ucwf:approverAssignee"] = task.getVariable('ucwf_approverAssignee');
                  wf.parameters["bpm:workflowDescription"] = "Review and Approve";
                  wf.parameters["bpm:workflowDueDate"] = bpm_workflowDueDate;
                  wf.parameters["bpm:workflowPriority"] = bpm_workflowPriority;
                  wf.execute(bpm_package.children[0]);
         ]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
    </userTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow8" sourceRef="startevent1" targetRef="usertask3"></sequenceFlow>
    <sequenceFlow id="flow9" sourceRef="usertask2" targetRef="exclusivegateway1"></sequenceFlow>
    <sequenceFlow id="flow11" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>



I don't think there is a problem with my reviewAndApprove workflow, since it works fine on its own. The problem might be with the way Im initiating it from the changeRequest workflow.
However it might be important to note that my reviewAndApprove workflow did not end properly until I changed the "None End Event" to a "Terminate End Event". With the "None End Event", all the tasks ended but the workflow was still "In Progress" without any active tasks anywhere. I'm not sure what the "Terminate End Event" does exactly, but I'm assuming it just kills any instances of tasks/processes/transitions/whatever left in the workflow.
So maybe this error is being caused because the "Terminate End Event" tries to kill something that doesn't exist, i.e. is null?

Any help would be appreciated.

voula_11
Champ in-the-making
Champ in-the-making
I figured it out.