[jboss-user] [JBoss Seam] - Seam JBPM Variable Instance and taskInstanceListForType

heitmanm do-not-reply at jboss.com
Tue Feb 13 20:04:38 EST 2007


Hi, I'm manipulated the DVD-Sample a lot and have the problem that when  I return to the admin-area from a page that begins and finishes a task.  
The #{task.variables['creditId'] is now 0 and musst be 1 in the admin.xhtml....the firsttime before the first task is executed the variable is shon correctly. When the process is created the credit has business-scope and is also visible in the jbpm-database-table under jbpm_variableinstance.....

ordermanagement3.jpdl.xml

  | <?xml version="1.0"?>
  | 
  | <process-definition name="OrderManagement">
  | 
  |     <start-state name="start">
  |         <transition to="docChecking"/>
  |     </start-state>
  |     
  |       <task-node name="docChecking" end-tasks="true">
  |         <task name="docChecking" description="Dokumente prüfen">
  |            <assignment pooled-actors="#{shipperAssignment.pooledActors}"/>
  |         </task>
  |         <transition name="cancel"  to="cancelled"/>
  |         <transition name="approve" to="creditDecision"/>        
  |     </task-node>
  |     
  |     <task-node name="creditDecision" end-tasks="true">
  |         <task name="creditDecision" description="Kreditentscheidung">
  |            <assignment pooled-actors="#{shipperAssignment.pooledActors}" />
  |         </task>
  |         <transition name="approvedCredit" to="shipping"/>                   
  |         <transition name="cancel"  to="cancelled"/>
  |     </task-node>
  |     
  |     <task-node name="shipping" description="Vertrag versenden" end-tasks="true">
  | 	    <task name="shipping" description="Vertragsversand">
  | 	           <assignment actor-id="#{actor.id}" pooled-actors="#{shipperAssignment.pooledActors}" />
  | 	    </task>
  |         <transition name="cancel"  to="cancelled"/>
  |         <transition name="shipped" to="timeLimitChecking"/>        
  |     </task-node>
  |     
  |     <task-node name="timeLimitChecking" description="Frist pruefen" end-tasks="true">
  | 		<task name="timeLimitChecking" description="Fristpruefung">
  |            <assignment actor-id="#{actor.id}" pooled-actors="#{shipperAssignment.pooledActors}" />
  |         </task>
  |         <transition name="cancel"  to="cancelled"/>
  |         <transition name="approvedTimeLimit" to="account"/>        
  |     </task-node>
  |     
  |     <task-node name="account" description="Gutschrift ausloesen" end-tasks="true">
  |     <task name="account" description="Ueberweisung">
  |            <assignment actor-id="#{actor.id}" pooled-actors="#{shipperAssignment.pooledActors}" />
  |      </task>
  |         <transition name="cancel"  to="cancelled"/>
  |         <transition name="sendedMoney" to="complete"/>        
  |     </task-node>
  |    
  |     
  |     <end-state name="complete"/>
  |     <end-state name="cancelled"/>
  |    
  |     
  | </process-definition>
  | 
  | 

docchecking.xhtml

  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  |                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <html xmlns="http://www.w3.org/1999/xhtml"
  |       xmlns:ui="http://java.sun.com/jsf/facelets"
  |       xmlns:f="http://java.sun.com/jsf/core"
  |       xmlns:h="http://java.sun.com/jsf/html"
  |       xmlns:s="http://jboss.com/products/seam/taglib">
  | <body>
  |     <ui:composition template="/WEB-INF/template.xhtml">
  |         <ui:define name="topnav">
  |             <ui:include src="/WEB-INF/incl/admin_nav.xhtml" />
  |         </ui:define>
  | 
  |         <ui:define name="sidebar">
  |             <ui:include src="/WEB-INF/incl/login.xhtml" />
  |         </ui:define>
  |         
  |          <ui:define name="body">
  |             <h1>Dokumente prfen</h1>
  | 
  |             <p>Bitte überprüfen Sie Daten und fällen Sie eine Entscheidung</p>
  |             <p>Dokumente</p>
  |             <table width="410" height="60">
  |             <tr>
  |             <td>Dokument<br /></td><td>Vertrag.xls</td><td><input type="button" value="anzeigen" name="button3" /></td>
  |             </tr>
  |             <tr>
  |             <td>Dokument<br /></td><td>Präse.ppt</td><td><input type="button" value="anzeigen" name="button3" /></td>
  |             </tr>
  |             </table>
  | 
  |        		<p>Kundendaten</p>
  |        		<table bgcolor="#c0c0c0">
  |        		<tr>
  |        			<td>
  |        			<h:outputText value="Kundennr: " /><h:outputText value="#{credit.customer.id}" />
  |        			</td>
  |        			<td>
  |        			<h:outputText value="Name: " /><h:outputText value="#{credit.customer.lastname}" /> <h:outputText value="#{credit.customer.lastname}" />			
  |        			<br /></td>
  |        		</tr>
  |        		
  | 
  |             </table>
  |             
  | 
  |             <p>Kreditinformationen</p>
  |             <table bgcolor="#c0c0c0" border="0.5">
  |             <tr>
  |             	<td> 
  | 					¦<h:outputText value="CreditId: "></h:outputText> 
  | 				</td>
  | 				<td>					
  | 				<h:outputText value="#{credit.id}"></h:outputText>
  | 				</td>
  | 			</tr>
  | 			<tr>
  |             	<td>
  | 				<h:outputText value="Automodell: " />	
  | 				</td>
  | 				<td>
  | 	     		<h:outputText value="#{credit.car}" />
  | 				</td>
  | 			</tr>
  | 			<tr>
  |             	<td>
  | 				<h:outputText value="Preis " />
  | 				</td>
  | 				<td>
  | 	     		<h:outputText value="#{credit.price}" />
  | 				</td>
  | 			</tr>
  | 			<tr>
  |             	<td>
  | 				<h:outputText value="Anzahlung: " />
  | 				</td>
  | 				<td>
  | 	     		<h:outputText value="#{credit.downPayment}" />
  | 				</td>
  | 			</tr>
  | 			<tr>
  |             	<td>
  | 				<h:outputText value="Laufzeit: " />
  | 				</td>
  | 				<td>
  | 	     		<h:outputText value="#{credit.term}" />
  | 				</td>
  | 			</tr>
  | 			<tr>
  |             	<td>
  | 				<h:outputText value="Rate monatlich: " />
  | 				</td>
  | 				<td>
  | 	     		<h:outputText value="#{createCreditRequest.calculation}">
  | 	     		<f:convertNumber maxFractionDigits="2"
  | 		                         groupingUsed="true"
  | 		                         currencySymbol="Euro"
  | 		                         maxIntegerDigits="7"
  | 		                         type="currency"/>
  | 		        </h:outputText>
  | 				</td>
  | 			</tr>
  | 			
  | 			</table>
  |     		
  |           
  |            <p></p>
  |            <h:form>
  |    
  |            <h:commandLink action="#{accept.acceptDocuments}"> 
  |              <h:commandButton value="Antrag in Ordnung"/>
  |              
  |            </h:commandLink>        		
  |            <h:commandLink action="#{accept.reject}"> 
  |              <h:commandButton value="Antrag ablehnen"/>
  |                         </h:commandLink>        		          
  |            </h:form>
  |            
  |  
  |        </ui:define>
  |     </ui:composition>
  | </body>
  | </html>
  | 


AcceptAction.java

  | @Stateful
  | @Name("accept")
  | public class AcceptAction  
  |     implements Accept,
  |                Serializable
  | {
  |     @In(value="currentUser")
  |     Admin admin;
  | 
  |     @PersistenceContext(type=PersistenceContextType.EXTENDED)
  |     EntityManager em;
  | 
  |     @Out(scope=ScopeType.CONVERSATION)
  |     Credit credit;
  |     
  |     @In
  |     Long creditId;
  | 
  |     
  |     //------------------------------
  |     
  |     @BeginTask
  |     public String startDocChecking() {
  |     	System.err.println("startDocChecking");
  |         credit = (Credit) em.createQuery("from Credit o where o.id = :creditId")
  |         .setParameter("creditId", creditId)
  |         .getSingleResult();
  |       return "docChecking";
  |     }
  | 
  |     @EndTask(transition="approve")
  |     public String acceptDocuments() {
  |         System.out.println("Answered");
  |       return "admin";
  |     }
  |     
  |     @EndTask(transition="cancel")
  |     public String reject() {
  |         System.out.println("rejected");
  |       return "admin";
  |     }
  |     
  |     //---------------------------------
  |     
  |     @BeginTask
  |     public String startCreditDecision() {
  |     	System.err.println("startCreditDecision");
  |         credit = (Credit) em.createQuery("from Credit o where o.id = :creditId")
  |         .setParameter("creditId", creditId)
  |         .getSingleResult();
  |       return "creditDecision";
  |     }
  |     
  |     @EndTask(transition="approvedCredit")
  |     public String acceptCreditDecision() {
  |         System.out.println("approvedcredit");
  |       return "admin";
  |     }
  |     
  |     //----------------------------------
  |     
  |     @BeginTask
  |     public String startShipping() {
  |     	System.err.println("startShipping");
  |         credit = (Credit) em.createQuery("from Credit o where o.id = :creditId")
  |         .setParameter("creditId", creditId)
  |         .getSingleResult();
  |       return "shipping";
  |     }
  |     
  |     @EndTask(transition="shipped")
  |     public String acceptShipping() {
  |         System.out.println("acceptShipping");
  |       return "admin";
  |     }
  |     
  |     //----------------------------------
  |     
  |     @BeginTask
  |     public String startTimeLimitChecking() {
  |     	System.err.println("startTimeLimitChecking");
  |         credit = (Credit) em.createQuery("from Credit o where o.id = :creditId")
  |         .setParameter("creditId", creditId)
  |         .getSingleResult();
  |       return "timeLimitChecking";
  |     }
  |     
  |     @EndTask(transition="approvedTimeLimit")
  |     public String acceptTimeLimitChecking() {
  |         System.out.println("acceptShipping");
  |       return "admin";
  |     }
  |     
  |    //----------------------------------
  |     
  |     @BeginTask
  |     public String startAccount() {
  |     	System.err.println("startAccount");
  |         credit = (Credit) em.createQuery("from Credit o where o.id = :creditId")
  |         .setParameter("creditId", creditId)
  |         .getSingleResult();
  |       return "account";
  |     }
  |     
  |     @EndTask(transition="sendedMoney")
  |     public String acceptAccount() {
  |         System.out.println("acceptShipping");
  |       return "admin";
  |     }
  |     
  |     @Destroy 
  |     @Remove
  |     public void destroy() {}
  | 
  | }
  | 

admin.xhtml

  | <<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  |                       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  | <html xmlns="http://www.w3.org/1999/xhtml"
  |       xmlns:ui="http://java.sun.com/jsf/facelets"
  |       xmlns:f="http://java.sun.com/jsf/core"
  |       xmlns:h="http://java.sun.com/jsf/html"
  |       xmlns:s="http://jboss.com/products/seam/taglib"
  |       xmlns:c="http://java.sun.com/jstl/core">
  | <body>
  |     <ui:composition template="/WEB-INF/template.xhtml">
  |         <ui:define name="topnav">
  |             <ui:include src="/WEB-INF/incl/admin_nav.xhtml" />
  |        ui:define>
  | 
  |         <ui:define name="sidebar">
  |             <ui:include src="/WEB-INF/incl/login.xhtml" />
  |         </ui:define>
  |         
  |         <ui:define name="body">
  |             <f:subview rendered="#{!login.admin}">
  |                 The admin screen is only administrative users.  Please
  |                 login to continue.  If you are looking for the store,
  |                 try <s:link view="/browse.xhtml" value="here" />.
  |             </f:subview>
  | 
  |             <f:subview rendered="#{login.admin}">
  |             <h1>Kredit Management</h1>
  |             
  |             <p>Hier läuft die Bearbeitung eines Kreditantrags ab. Diese Ansicht wird nur einem Benutzer mit entsprechenden Rechten angezeigt.<br /></p><h2>Aufgaben - unzugewiesen</h2>
  | 			<div class="rvgActions">
  |          	</div>
  |             <c:choose>
  |                 <c:when test="#{empty pooledTaskInstanceList}">
  |                     <p>Keine unzugewiesenen Aufgaben vorhanden<br /></p>
  |                 </c:when>
  |                 <c:otherwise>
  |                     <h:dataTable value="#{pooledTaskInstanceList}"
  |                                  var="task" 
  |                                  styleClass="table" 
  |                                  headerClass="tablehead"
  |                                  rowClasses="tableodd,dvdtableeven"
  |                                  columnClasses="tablecol">
  |                         <h:column>
  |                           
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             <h:outputText value="#{task.description}" />
  |                         </h:column>
  |                        
  |                         <h:column>
  |                             <s:link action="#{pooledTask.assignToCurrentActor}" taskInstance="#{task}"
  |                                 value="zuweisen"/>
  |                         </h:column>
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>
  |             
  |             <h2>Dokumenteprüfen</h2>
  |             <c:choose>
  |                 <c:when test="#{empty taskInstanceListForType['docChecking']}">
  |                     <p>Keine Dokumente zu prüfen.<br /></p>
  |                 </c:when>
  |                 <c:otherwise> 
  |                     <h:dataTable value="#{taskInstanceListForType['docChecking']}"
  |                                  var="task" 
  |                                  styleClass="dvdtable" 
  |                                  headerClass="dvdtablehead"
  |                                  rowClasses="dvdtableodd,dvdtableeven"
  |                                  columnClasses="dvdtablecol">
  |                         <h:column>
  |                             <f:facet name="header">Kreditnr</f:facet> #{task.variables['creditId']} 
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             #{task.description}
  |                         </h:column>
  |                      
  |                         <h:column>
  |                                                 
  | 			            <h:commandLink action="#{accept.startDocChecking}"> 
  | 			              <h:commandButton value="start"/>
  | 			              <f:param name="taskId" value="#{task.id}"/>
  | 			            </h:commandLink>                        
  |                                                              
  |                         </h:column>
  | 
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>
  | 
  |             <h2>Kreditenscheidung</h2>
  |             <c:choose>
  |                 <c:when test="#{empty taskInstanceListForType['creditDecision']}">
  |                     <p>Keine Anträge zu prüfen.<br /></p>
  |                 </c:when>
  |                 <c:otherwise> 
  |                     <h:dataTable value="#{taskInstanceListForType['creditDecision']}"
  |                                  var="task" 
  |                                  styleClass="dvdtable" 
  |                                  headerClass="dvdtablehead"
  |                                  rowClasses="dvdtableodd,dvdtableeven"
  |                                  columnClasses="dvdtablecol">
  |                         <h:column>
  |                             <f:facet name="header">Kreditnr</f:facet> #{task.variables['creditId']} 
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             #{task.description}
  |                         </h:column>
  |                      
  |                         <h:column>
  |                                                 
  | 			            <h:commandLink action="#{accept.startCreditDecision}"> 
  | 			              <h:commandButton value="start"/>
  | 			              <f:param name="taskId" value="#{task.id}"/>
  | 			            </h:commandLink>                        
  |                                                              
  |                         </h:column>
  | 
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>
  | 			
  | 			<h2>Versand</h2>
  |             <c:choose>
  |                 <c:when test="#{empty taskInstanceListForType['shipping']}">
  |                     <p>Keine Vertrge zu versenden.<br /></p>
  |                 </c:when>
  |                 <c:otherwise> 
  |                     <h:dataTable value="#{taskInstanceListForType['shipping']}"
  |                                  var="task" 
  |                                  styleClass="dvdtable" 
  |                                  headerClass="dvdtablehead"
  |                                  rowClasses="dvdtableodd,dvdtableeven"
  |                                  columnClasses="dvdtablecol">
  |                         <h:column>
  |                             <f:facet name="header">Kreditnr</f:facet> #{task.variables['creditId']} 
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             #{task.description}
  |                         </h:column>
  |                      
  |                         <h:column>
  |                                                 
  | 			            <h:commandLink action="#{accept.startShipping}"> 
  | 			              <h:commandButton value="start"/>
  | 			              <f:param name="taskId" value="#{task.id}"/>
  | 			            </h:commandLink>                        
  |                                                              
  |                         </h:column>
  | 
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>
  | 
  | 			<h2>Fristen</h2>
  |             <c:choose>
  |                 <c:when test="#{empty taskInstanceListForType['timeLimitChecking']}">
  |                     <p>Keine Vertrge zu eingegangen.<br /></p>
  |                 </c:when>
  |                 <c:otherwise> 
  |                     <h:dataTable value="#{taskInstanceListForType['timeLimitChecking']}"
  |                                  var="task" 
  |                                  styleClass="dvdtable" 
  |                                  headerClass="dvdtablehead"
  |                                  rowClasses="dvdtableodd,dvdtableeven"
  |                                  columnClasses="dvdtablecol">
  |                         <h:column>
  |                             <f:facet name="header">Kreditnr</f:facet> #{task.variables['creditId']} 
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             #{task.description}
  |                         </h:column>
  |                      
  |                         <h:column>
  |                                                 
  | 			            <h:commandLink action="#{accept.startTimeLimitChecking}"> 
  | 			              <h:commandButton value="start"/>
  | 			              <f:param name="taskId" value="#{task.id}"/>
  | 			            </h:commandLink>                        
  |                                                              
  |                         </h:column>
  | 
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>           
  |             
  |             <h2>Ueberweisungen</h2>
  |             <c:choose>
  |                 <c:when test="#{empty taskInstanceListForType['account']}">
  |                     <p>Keine Ueberweisungen.<br /></p>
  |                 </c:when>
  |                 <c:otherwise> 
  |                     <h:dataTable value="#{taskInstanceListForType['account']}"
  |                                  var="task" 
  |                                  styleClass="dvdtable" 
  |                                  headerClass="dvdtablehead"
  |                                  rowClasses="dvdtableodd,dvdtableeven"
  |                                  columnClasses="dvdtablecol">
  |                         <h:column>
  |                             <f:facet name="header">Kreditnr</f:facet> #{task.variables['creditId']} 
  |                         </h:column>
  |                         <h:column>
  |                             <f:facet name="header">Taskbeschreibung</f:facet>
  |                             #{task.description}
  |                         </h:column>
  |                      
  |                         <h:column>
  |                                                 
  | 			            <h:commandLink action="#{accept.startAccount}"> 
  | 			              <h:commandButton value="start"/>
  | 			              <f:param name="taskId" value="#{task.id}"/>
  | 			            </h:commandLink>                        
  |                                                              
  |                         </h:column>
  | 
  |                     </h:dataTable>
  |                 </c:otherwise>
  |             </c:choose>
  | 
  |         </f:subview>            
  |         </ui:define>
  |     </ui:composition>
  | </body>
  | </html>
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4016131#4016131

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4016131




More information about the jboss-user mailing list