2 Replies Latest reply on Sep 29, 2008 10:12 AM by roberto roberto

    Problem with transition

    roberto roberto Novice

      I'm rewriting a Web User Interface for JBpm to integrate it on my own application.

      I have some problem using transition API

      I have a definition like this:

       <start-state name="Submit-SalesOrder">
       <description>
       Sales Order General
       </description>
       <task name="SalesOrder" swimlane="DataEntry">
       <description>
       Sales Order task
       </description>
       <controller>
       <variable access="read,write,required" name="Field1" mapped-name="Field1"></variable>
       </controller>
       </task>
       <transition to="Evaluate_Order" name="Start"></transition>
       </start-state>
      
      
       <task-node name="Evaluate_Order">
       <description>
       Evaluate Order General
       </description>
       <task blocking="true" name="Approve" swimlane="CountryManager">
       <description>
       Approve Task
       </description>
       <controller>
       <variable access="read,write" name="AdditionalDiscount" mapped-name="Additional Discount"></variable>
       </controller>
       </task>
       <transition to="Place-Order" name="Yes">
       <description>
       yes! I Approve It
       </description>
       </transition>
       <transition to="WhyNot" name="No">
       <description>
       No! I discart It
       </description>
       </transition>
       </task-node>
      
       <task-node name="WhyNot">
       <task blocking="true" swimlane="CountryManager">
       <controller>
       <variable access="read,write" name="Comment" mapped-name="Comment"></variable>
       </controller>
       </task>
       <transition to="ChangeBlock-CloseOrder" name="CloseOrder"></transition>
       </task-node>
      ...
      



      I my java code i can create successful the process instance
      ...
       JbpmContext vJbpmContext = getJbpmContext();
       try
       {
       ProcessInstance vProcessInstance = vJbpmContext.newProcessInstanceForUpdate(aProcessDefinitionName);
       vProcessInstanceId = vProcessInstance.getId();
       ContextInstance vContextInstance = vProcessInstance.getContextInstance();
       Token vToken = vProcessInstance.getRootToken();
       vToken.signal();
       }
       finally
       {
       closeContext(vJbpmContext);
       }
      ...
      


      I can retrieve transition from task instance... but when I try to "invoke" the transition
      ...
       vTaskInstance = vJbpmContext.getTaskInstance(vTaskId);
       if (vTaskInstance.isBlocking())
       {
       if (vTaskInstance.getStart() == null)
       vTaskInstance.start();
       if (vTaskInstance.getEnd() == null)
       vTaskInstance.end();
       }
       vTaskInstance.getToken().signal("Yes"); // or also ("No")
      ...
      

      The signa is sent to the default transition and I recieve an exception that says "transition doesnt exists on WhyNot task.... "

      I believe I dont' know exactly the correct flow.

      Can someone help me ?
      Or where I can found a simple example how to manage it?
      thanks