cancel
Showing results for 
Search instead for 
Did you mean: 

'couldn't signal without specifying a leaving transition'

darryl_staflund
Champ in-the-making
Champ in-the-making
Hi there,

I have two process definitions, one of which is called as a sub-process by the other.  The definitions are as follows:


<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="" name="audcmpmerwf:minorExamRevision">
    <swimlane name="initiator" />

    <swimlane name="cldd-administration">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <pooledactors>#{people.getGroup('GROUP_cldd_management')}</pooledactors>
        </assignment>
    </swimlane>

    <swimlane name="cldd-designer">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{audcmpmerwf_assignedDesigner}</actor>
        </assignment>
    </swimlane>

    <swimlane name="cldd-editor">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{audcmpmerwf_assignedEditor}</actor>
        </assignment>
    </swimlane>
   
    <swimlane name="dmtu">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{audcmpmerwf_assignedDmtu}</actor>
        </assignment>
    </swimlane>
   
    <swimlane name="dmtu-management">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <pooledactors>#{people.getGroup('GROUP_cldd_dmtu_manager')}</pooledactors>
        </assignment>
    </swimlane>

    <start-state name="start-mer">
        <task swimlane="initiator" name="bpm:startTask" />
        <transition to="forkRevisionProcess" />
    </start-state>
   
    <fork name="forkRevisionProcess">
        <transition name="DMTU" to="assignShellCreator" />
        <transition name="CLDD" to="defineTeamAndSetPriority" />
    </fork>
   
    <task-node name="assignShellCreator">
        <task swimlane="dmtu-management" name="audcmpmerwf:assignShellCreatorTask" />
        <transition name="Done" to="createMoodleShell" />
    </task-node>
   
    <task-node name="createMoodleShell">
        <task swimlane="dmtu" name="audcmpmerwf:createMoodleShellTask" />
        <transition name="Done" to="joinRevisionProcess" />
    </task-node>
   
    <task-node name="defineTeamAndSetPriority">
        <task swimlane="cldd-administration" name="audcmpmerwf:defineTeamAndSetPriorityTask" />
        <transition name="Editor" to="triageByEditor" />
    </task-node>
   
    <task-node name="triageByEditor">
        <task swimlane="cldd-editor" name="audcmpmerwf:triageByEditorTask" />
        <transition name="Designer" to="assignDesigner" />
        <transition name="Done" to="joinRevisionProcess" />
    </task-node>
   
    <task-node name="assignDesigner">
        <task swimlane="cldd-administration" name="audcmpmerwf:assignDesignerTask" />
        <transition name="Done" to="forkDesignEditProcess" />
    </task-node>
   
    <fork name="forkDesignEditProcess">
        <transition name="Editor" to="continueTriageByEditor" />
        <transition name="Designer" to="triageByDesigner" />
    </fork>
   
    <task-node name="continueTriageByEditor">
        <task swimlane="cldd-editor" name="audcmpmerwf:continueTriageByEditorTask" />
        <transition name="Done" to="joinDesignEditProcess" />
    </task-node>
   
    <task-node name="triageByDesigner">
        <task swimlane="cldd-designer" name="audcmpmerwf:triageByDesignerTask" />
        <transition name="Done" to="joinDesignEditProcess" />
    </task-node>
   
    <join name="joinDesignEditProcess">
        <transition to="joinRevisionProcess" />
    </join>
   
    <join name="joinRevisionProcess">
        <transition to="performFinalAuthorReview" />
    </join>
   
    <process-state name="performFinalAuthorReview">
        <sub-process name="audcmpfarwf:finalAuthorReview" binding="late" />
        <variable name="audcmpmerwf_courseSubjectCode" access="read" mapped-name="audcmpfarwf_courseSubjectCode" />
        <variable name="audcmpmerwf_courseNumber" access="read" mapped-name="audcmpfarwf_courseNumber" />
        <variable name="audcmpmerwf_courseName" access="read" mapped-name="audcmpfarwf_courseName" />
        <variable name="audcmpmerwf_requestDescription" access="read" mapped-name="audcmpfarwf_requestDescription" />
        <variable name="audcmpmerwf_assignedEditor" access="read" mapped-name="audcmpfarwf_assignedEditor" />
        <variable name="bpm_package" access="read,write" mapped-name="bpm_package" />
        <transiton to="makeChangesinDev" />
    </process-state>
   
    <task-node name="makeChangesinDev">
        <task swimlane="dmtu" name="audcmpmerwf:makeChangesInDevTask" />
        <transition name="Done" to="bypassReviewDecision" />
    </task-node>

    <task-node name="makeChangesinProd">
        <task swimlane="dmtu" name="audcmpmerwf:makeChangesInProdTask" />
        <transition name="Done" to="end-mer" />
    </task-node>
       
    <end-state name="end-mer" />

</process-definition>

and


<?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="" name="audcmpfarwf:finalAuthorReview">
    <swimlane name="initiator" />

    <swimlane name="cldd-editor">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{audcmpfarwf_assignedEditor}</actor>
        </assignment>
    </swimlane>
   
    <swimlane name="course-coordinator">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <actor>#{audcmpfarwf_courseCoordinator}</actor>
        </assignment>
    </swimlane>

    <swimlane name="cldd-copyright">
        <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <pooledactors>#{people.getGroup('GROUP_cldd_copyright')}</pooledactors>
        </assignment>
    </swimlane>

    <start-state name="start-far">
        <task swimlane="initiator" name="bpm:startTask" />
        <transition to="editCourse" />
    </start-state>

    <task-node name="editCourse">
        <task swimlane="cldd-editor" name="audcmpfarwf:editCourseTask" />
        <transition name="Done" to="finalAuthorReview" />
    </task-node>

    <task-node name="finalAuthorReview">
        <event type="node-enter">
            <action class=my.package.coursedev.workflow.actions.SetCourseCoordinatorTaskVariableAction" />
        </event>
        <task swimlane="course-coordinator" name="audcmpfarwf:finalAuthorReviewTask" />
        <transition name="Done" to="decideIfContentWasChangedByCC" />
        <event type="node-leave">
            <action class="my.package.coursedev.workflow.actions.SetCourseMaterialsChangedVariableAction">
                <var>courseMaterialChangedByCc</var>
            </action>
        </event>
    </task-node>
   
    <decision name="decideIfContentWasChangedByCC">
        <transition name="Yes" to="reviewContentChangesFromCC">
            <condition>#{courseMaterialChangedByCc}</condition>
        </transition>
        <transition name="No" to="finalCopyrightReview" />
    </decision>
   
    <task-node name="reviewContentChangesFromCC">
        <task swimlane="cldd-editor" name="audcmpfarwf:reviewContentChangesTask" />
        <transition name="Done" to="decideIfContentWasChangedByEditor" />
        <event type="node-leave">
            <action class="my.package.coursedev.workflow.actions.SetCourseMaterialsChangedVariableAction">
                <var>courseMaterialChangedByEditor</var>
            </action>
        </event>
    </task-node>
   
    <decision name="decideIfContentWasChangedByEditor">
        <transition name="Yes" to="finalAuthorReview">
            <condition>#{courseMaterialChangedByEditor}</condition>
        </transition>
        <transition name="No" to="finalCopyrightReview" />
    </decision>
   
    <task-node name="finalCopyrightReview">
        <task swimlane="cldd-copyright" name="audcmpfarwf:finalCopyrightReviewTask" />
        <transition name="Approve" to="end-far" />
        <transition name="Reject" to="editCourse" />
    </task-node>
       
    <end-state name="end-far" />

</process-definition>

Everything works fine, except when I signal the 'Approve' transition in the 'finalCopyrightReview' task.  This event should finish up the Final Author Review sub-process and return control to the main Minor / Exam Revision process.  But instead, I get the following exception:


Caused by: org.jbpm.JbpmException: couldn't signal without specifying  a leaving transition : transition is null
    at org.jbpm.graph.exe.Token.signal(Token.java:200)
    at org.jbpm.graph.exe.Token.signal(Token.java:193)
    …etc…

Can anyone tell me what I am doing wrong?  I have searched high and low for similar discussions on the error, only to find threads without solutions.  Any help is appreciated.

Thanks,
Darryl
4 REPLIES 4

solo8788
Champ in-the-making
Champ in-the-making
try adding to your process-state

<variable name="initiator" access="read"/>

if Thats not enough then replace the initiator swimlane in the subprocess:
<swimlane name="initiator" >
     <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <actor>#{initiator}</actor>
      </assignment>
   </swimlane>

darryl_staflund
Champ in-the-making
Champ in-the-making
Thanks for the suggestion, solo.  Didn't work, though 😞

Darryl

solo8788
Champ in-the-making
Champ in-the-making
I was able to use my workflow with sub-processes.  The only other thing that comes to mind is that I had to update my workflowModel can you post yours please?

darryl_staflund
Champ in-the-making
Champ in-the-making
Hi solo,

I needed to deliver my workflows to meet a deadline so both of them are merged at the present time.  If I am presented with the opportunity to split them out once again and come across the same problem, I will list the models here.

Thanks,
Darryl