7 Replies Latest reply on Dec 19, 2008 3:46 AM by Jan van de klok

    process variable not persisted when changed in sub process

    Jan van de klok Newbie

      Hello.

      We have installed JBPM 3.3.0 for evaluation purposes.

      During testing we ran into some problems when using subprocesses.

      According to the documentation, a variable defined in a subprocess should be saved in the "main"process when the subprocess ended.
      This does not seems to be the case in this version.
      Is there somthing we overlooked or is this a bug?

      After the process-state "Ontvankelijkheidstoets" has ended, the variable "subProcessResult" is on the process instance is null despite the fact that this variable has been set in the sub process, the decision node "Resultaat OT" however does the correct thing !

       public String decide(ExecutionContext arg0) throws Exception
       {
       System.out.println(" Decide which flow to follow depending on process decision node.");
       String result = (String) arg0.getVariable("subProcessResult");
       if (Constants.SUCCESS.equalsIgnoreCase(result))
       {
       System.out.println("////// subProcess exection was succesfull, keep following the yellowbrick road");
       return Constants.SUCCESS;
       } else if (Constants.FAIL.equalsIgnoreCase(result))
       {
       System.out.println("////// subProcess exection was no good, FAIL");
       return Constants.FAIL;
       } else {
       throw new Exception("Unexpected value in subProcessResult variable : " + result);
       }
       }



      Can someone tell me what is wrong? Is it a bug or am I doing something wrong??

      Any help will be greatly appreciated!!
      Jan van de Klok

      By the way: In version 3.2.3 the decision node "Resultaat OT" does not react on changes of the variable at all.



      This is (a part of) the process definition.


      <process-definition xmlns="" name="studentRegistrationUL" >
      
       <start-state name="start-student-registratie">
       <transition to="Invoer registratie gegevens door Student"></transition>
       </start-state>
      
       <task-node name="Invoer registratie gegevens door Student">
       <description>
       Student voert zijn persoons-, adres-, vooropleidinggegevens in en eventuele andere gegevens welke nodig zijn voor de instelling in kwestie.
       </description>
       <task name="Invoer persoonsgegevens">
       <description>
       Voer persoonsgegevens zoals naam, geboorte datum, e.d. in
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <task name="Invoer woonadres">
       <description>
       Voer gegevens van het huidige woonadres in. Het woonadres is je officieel verblijfsplaats (waar je bent ingeschreven).
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <task name="Opsturen paspoort">
       <description>
       Stuur kopie paspoort op of upload kopie van je paspoort
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <task name="Invoer vooropleiding">
       <description>
       Vooropleidingen invoeren en sturen of uploaden van een kopie van het diploma
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <task name="Inschrijfgeld betalen">
       <description>
       Inschrijfgeld overmaken naar de instelling
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <task name="Invoer taalvaardigheid">
       <description>
       Invoeren van de taalvaardigheid
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       </task>
       <transition to="Verstuur registratie gegevens naar instelling"></transition>
       </task-node>
      
       <task-node name="Verstuur registratie gegevens naar instelling">
       <description>
       Student stuurt zijn registratie gegevens naar de instelling en start daarmee het instellings registratie process
       </description>
       <task name="Versturen registratie gegevens">
       <description>
       Verstuur de ingevoerde registratie gegevens naar de instelling #{chosenInstitution}
       </description>
       <assignment actor-id="#{actor.id}"></assignment>
       <controller></controller>
       </task>
       <transition to="Ontvankelijkheidstoets"></transition>
       </task-node>
      
       <process-state name="Ontvankelijkheidstoets">
       <description>
       In deze fase wordt bepaald of de aangeleverde gegevens compleet en bruikbaar zijn. Eventueel wordt er gewacht op documenten die middels de post worden aangeleverd.
       </description>
       <sub-process name="preConditionCheckUL" binding="late"/>
       <variable name="chosenInstitution" access="read" />
       <variable name="chosenEducation" access="read" />
       <variable name="studentId" access="read" />
       <variable name="eduType" access="read" />
       <variable name="regYear" access="read" />
       <variable name="regFirstYear" access="read" />
       <variable name="pasportSendMethod" access="read" />
       <variable name="pooledActors" access="read" />
       <variable name="subProcessResult" access="read,write" />
       <transition to="Resultaat OT" name="success"></transition>
       </process-state>
      
       <process-state name="Diploma waardering">
       <description>
       De aangeleverde vooropleidinggegevens en kopieen van diploma s worden getoetst en beoordeeld of deze volledig en voldoende zijn.
       </description>
       <sub-process name="diplomaCheck" binding="late"></sub-process>
       <variable name="chosenInstitution" access="read" />
       <variable name="chosenEducation" access="read" />
       <variable name="studentId" access="read" />
       <variable name="eduType" access="read" />
       <variable name="regYear" access="read" />
       <variable name="regFirstYear" access="read" />
       <variable name="subProcessResult" access="read,write" />
       <transition to="Resultaat DW"></transition>
       </process-state>
      
       <process-state name="Beoordeling toelatingscommissie">
       <description>
       Een commissie bepaald of de student toelaatbaar is (voor Masters studenten).
       </description>
       <sub-process name="acceptanceCommitee" binding="late"></sub-process>
       <variable name="chosenInstitution" access="read" />
       <variable name="chosenEducation" access="read" />
       <variable name="studentId" access="read" />
       <variable name="eduType" access="read" />
       <variable name="regYear" access="read" />
       <variable name="regFirstYear" access="read" />
       <variable name="subProcessResult" access="read,write" />
       <transition to="Resultaat BT"></transition>
       </process-state>
      
       <process-state name="Toelaten">
       <description>
       Medewerker controleert alle tot dan verzamelde informatie en besluit wel of geen toelating tot het inschrijfproces.
       </description>
       <sub-process name="acceptanceCheck" binding="late"></sub-process>
       <variable name="chosenInstitution" access="read" />
       <variable name="chosenEducation" access="read" />
       <variable name="studentId" access="read" />
       <variable name="eduType" access="read" />
       <variable name="regYear" access="read" />
       <variable name="regFirstYear" access="read" />
       <variable name="subProcessResult" access="read,write" />
       <transition to="Resultaat T"></transition>
       </process-state>
      
       <decision name="Resultaat OT">
       <handler class="nl.chronotech.ibis.task.SubProcessDecision"/>
       <transition to="Niet ontvankelijk" name="fail"></transition>
       <transition to="Diploma waardering" name="success"></transition>
       </decision>
      
       <decision name="Resultaat DW">
       <handler class="nl.chronotech.ibis.task.SubProcessDecision"/>
       <transition to="Beoordeling toelatingscommissie" name="success"></transition>
       <transition to="Diploma voldoet niet" name="fail"></transition>
       </decision>
      
       <decision name="Resultaat BT">
       <handler class="nl.chronotech.ibis.task.SubProcessDecision"/>
       <transition to="Afgewezen" name="fail"></transition>
       <transition to="Toelaten" name="success"></transition>
       </decision>
      
       <decision name="Resultaat T">
       <handler class="nl.chronotech.ibis.task.SubProcessDecision"/>
       <transition to="Afgewezen" name="fail"></transition>
       <transition to="Toegelaten" name="success"></transition>
       </decision>
      
       <end-state name="Toegelaten">
       <description>
       Gefeliciteerd de instelling heeft besloten dat u toelaatbaar bent tot de gekozen opleiding. U kunt nu verder door het indienen van een verzoek tot inschrijven.
      
       </description>
       </end-state>
      
       <end-state name="Afgewezen">
       <description>
       De instelling heeft de registratie gegevens beoordeeld en besloten dat deze geen toegang geven tot de gekozen opleiding.
       </description>
       </end-state>
      
       <end-state name="Niet ontvankelijk">
       <description>
       Een medewerker van de instelling heeft bepaald dat de registratie aanvraag niet ontvankelijk is. Zie de toelichting voor nadere informatie met betrekking tot de reden.
       </description>
       </end-state>
      
       <end-state name="Diploma voldoet niet">
       <description>
       Een medewerker van de instelling heeft de opgestuurde diploma's beoordeeld en besloten dat deze geen toegang geven tot de gekozen opleiding. Voor meer informatie zie mededelingen.
       </description>
       </end-state>
      
      
      </process-definition>



      <process-definition xmlns="" name="preConditionCheckUL">
      
       <start-state name="start-state1">
       <transition to="3fork"></transition>
       </start-state>
      
       <task-node name="Controleer student gegevens">
       <description>
       De verzamelde gegevens van student worden gecontroleerd
       </description>
       <task name="Invoer resultaat controle student gegevens">
       <description>
       Taak voor controle juistheid gegevens en invoer resultaat
       </description>
       <assignment pooled-actors="#{actor.groupActorIds}"></assignment>
       </task>
       <transition to="end-state1"></transition>
       </task-node>
      
       <fork name="3fork">
       <transition to="Registratie ontvangst paspoort" name="to reg Pasport">
       </transition>
       <transition to="Registratie ontvangst diploma" name="to Registratie ontvangst diploma">
       </transition>
       <transition to="Registratie ontvangst inschrijfgeld" name="to Registratie ontvangst inschrijfgeld">
       </transition>
       </fork>
      
       <task-node name="Registratie ontvangst paspoort">
       <description>
       Registratie ontvangst paspoort #{studentStatus.actorId}
       </description>
       <task name="Registreren ontvangst paspoort">
       <description>
       Registreren dat kopie paspoort is ontvangen per post #{studentStatus.actorId}
       </description>
       <assignment pooled-actors="#{contextUtil.processPooledActors}"></assignment>
       </task>
       <transition to="join1"></transition>
       </task-node>
      
       <task-node name="Registratie ontvangst diploma">
       <description>
       Registratie ontvangst diploma
       </description>
       <task name="Registreren ontvangst diploma">
       <description>
       Registreren dat kopie diploma is ontvangen per post voor #{studentStatus.actorId}
       </description>
       <assignment pooled-actors="#{contextUtil.processPooledActors}"></assignment>
       </task>
       <transition to="join1" name="from reg diploma"></transition>
       </task-node>
      
       <task-node name="Registratie ontvangst inschrijfgeld">
       <description>
       Registratie ontvangst inschrijfgeld voor #{studentStatus.actorId}
       </description>
       <task name="Registreren ontvangst inschrijfgeld">
       <description>
       Registreren dat inschrijfgeld is betaald voor #{studentStatus.actorId}
       </description>
       <assignment pooled-actors="#{contextUtil.processPooledActors}"></assignment>
       </task>
       <transition to="join1" name="from inschrijfgeld"></transition>
       </task-node>
      
       <join name="join1">
       <transition to="Controleer student gegevens"></transition>
       </join>
      
       <end-state name="end-state1">
       </end-state>
      
      </process-definition>