关于jbpm中的actionID的问题,很奇怪

huangguan 2007-07-13
下面是我的部分流程设计:
<swimlane name="starter">
      <assignment expression="AAA"></assignment>
</swimlane>

<start-state name="create a new process">
   <task name="input studentID" swimlane="starter">
    <controller>
      <variable name="StudentID" access="read,write,required"></variable>
      <variable name="StudentName" access="read,write,required"></variable>
     </controller>
    </task>
   <transition name="" to="validate notice"></transition>
   </start-state>

个人理解这样就可以把任务input studentID 就交给AAA来处理了,但是新键任务实例的时候,数据库中的task-instance表中的ActionID是空的,这个怎么回事呢?

但是我在创建任务实例的时候,用taskInstance.setActorId("AAA")来设置一下,他在数据库表中ActionID就是AAA。
但是他的websale例子中却不用怎么折腾的?
这是为什么呢?
请大家指教一下。。。。。
wuxufeng8080 2007-07-13
这个表达式不是这么写的
huangguan 2007-07-13
wuxufeng8080,谢谢你的回复哈

那该怎么写呢?
还有,我的流程控制老是有问题也。
我修该之后的流程

<process-definition
  xmlns="urn:jbpm.org:jpdl-3.1"
  name="simple">

   <swimlane name="validator">
      <assignment expression="user(BBB)"></assignment>
   </swimlane>
   <swimlane name="arranger">
      <assignment expression="user(CCC)"></assignment>
   </swimlane>
   <swimlane name="doctor">
      <assignment expression="user(EEE)"></assignment>
   </swimlane>
   <swimlane name="receiver">
      <assignment expression="user(DDD)"></assignment>
   </swimlane>
   <start-state name="create a new process">
     <task name="input studentID">
         <controller>
            <variable name="StudentID" access="read,write,required"></variable>
            <variable name="StudentName" access="read,write,required"></variable>
         </controller>
      </task>
      <transition name="" to="validate notice"></transition>
   </start-state>
   <end-state name="end"></end-state>
   <task-node name="validate notice">
      <task name="validation" swimlane="validator">
         <controller>
            <variable name="StudentID" access="read"></variable>
            <variable name="StudentName" access="read"></variable>
            <variable name="comment" access="read,write,required"></variable>
         </controller>
      </task>
      <transition name="" to="arrange room"></transition>
   </task-node>
   <task-node name="arrange room">
      <task name="arrangement" swimlane="arranger">
         <controller>
            <variable name="StudentID" access="read"></variable>
            <variable name="StudentName" access="read"></variable>
            <variable name="RoomNum" access="read,write,required"></variable>
         </controller>
      </task>
      <transition name="" to="fork1"></transition>
   </task-node>
   <task-node name="money">
      <task name="money receive" swimlane="receiver">
         <controller>
            <variable name="StudentID" access="read"></variable>
            <variable name="StudentName" access="read"></variable>
            <variable name="money" access="read,write,required"></variable>
         </controller>
      </task>
      <transition name="" to="join1"></transition>
   </task-node>
   <fork name="fork1">
      <transition name="" to="money"></transition>
      <transition name="tr2" to="health"></transition>
   </fork>
   <task-node name="health">
      <task name="health" swimlane="doctor">
         <controller>
            <variable name="StudentID" access="read"></variable>
            <variable name="StudentName" access="read"></variable>
            <variable name="comment" access="read,write,required"></variable>
         </controller>
      </task>
      <transition name="" to="join1"></transition>
   </task-node>
   <join name="join1">
      <transition name="" to="end"></transition>
   </join>
</process-definition>

在流程开始状态:
JbpmConfiguration config = JbpmConfiguration.getInstance();
JbpmContext context = config.createJbpmContext();
ProcessDefinition processDefinition =context.getGraphSession().findLatestProcessDefinition("simple");
ProcessInstance processInstance = processDefinition.createProcessInstance();
TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
taskInstance.setVariable("studentID", "001");
taskInstance.setVariable("studentName", "huang");
taskInstance.end();
context.save(taskInstance);
context.close();

只要我加上taskInstance.end就要报错,但是不加的话,它又没办法跑到下一个节点,这个改怎么办呢?

huangguan 2007-07-13
我研究过了websale的例子,他是通过taskInstance.end()来进入下一个节点的,为什么我就不行呢?

郁闷了。。。。。
wuxufeng8080 2007-07-14
你把错误信息贴上来,还有,你可以给transition一个名字,然后调用  taskInstance.end("transitionName");
试下
huangguan 2007-07-15
你说的那个方法,我试过了,没有任何作用!!!!
huangguan 2007-07-15
错误信息如下:
Exception in thread "main" org.jbpm.graph.def.DelegationException
at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:208)
at org.jbpm.taskmgmt.exe.TaskMgmtInstance.getInitializedSwimlaneInstance(TaskMgmtInstance.java:176)
at org.jbpm.taskmgmt.exe.TaskInstance.assign(TaskInstance.java:191)
at org.jbpm.taskmgmt.exe.TaskMgmtInstance.createTaskInstance(TaskMgmtInstance.java:148)
at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:167)
at org.jbpm.graph.def.Node.enter(Node.java:316)
at org.jbpm.graph.def.Node$$FastClassByCGLIB$$d187eeda.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$24e7b758.enter(<generated>)
at org.jbpm.graph.def.Transition.take(Transition.java:119)
at org.jbpm.graph.def.Node.leave(Node.java:383)
at org.jbpm.graph.node.StartState.leave(StartState.java:70)
at org.jbpm.graph.def.Node$$FastClassByCGLIB$$d187eeda.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:161)
at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$24e7b758.leave(<generated>)
at org.jbpm.graph.exe.Token.signal(Token.java:178)
at org.jbpm.graph.exe.Token.signal(Token.java:149)
at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:443)
at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:382)
at com.sample.action.Client.main(Client.java:29)
Caused by: org.jbpm.identity.assignment.ExpressionAssignmentException: couldn't resolve assignment expression 'user(BBB)'
at org.jbpm.identity.assignment.ExpressionAssignmentHandler.assign(ExpressionAssignmentHandler.java:97)
at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignmentDelegation(TaskMgmtInstance.java:217)
at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:193)
... 21 more
Caused by: org.jbpm.identity.assignment.ExpressionAssignmentException: user 'BBB' couldn't be fetched from the user db
at org.jbpm.identity.assignment.ExpressionAssignmentHandler.getUserByName(ExpressionAssignmentHandler.java:209)
at org.jbpm.identity.assignment.ExpressionAssignmentHandler.resolveFirstTerm(ExpressionAssignmentHandler.java:147)
at org.jbpm.identity.assignment.ExpressionAssignmentHandler.assign(ExpressionAssignmentHandler.java:75)
... 23 more
huangguan 2007-07-15
这个错误信息是加了taskInstance.end()之后产生的,但是不加的话,任务无法结束,他就没办法进入到下一个节点。。

这咋回事呢?
huangguan 2007-07-15
wuxufeng8080,有没有什么常用的联系方式啊?

msn或者其他什么的。。

这样有问题才好问你啊
gsccnu 2007-07-15
应该是在下一个TASK ASSIGN时产生的错误。
确认你的USER表中存在那几个用户。如果你使用的是3.2,按以下写法
<assignment actor-id="AAA" />
Global site tag (gtag.js) - Google Analytics