`

Activiti 开发主意事项

阅读更多

Activiti 5.9

 

runtimeService.signalEventReceived(String signalName)

这里的signalName就是流程定义里的name(not id)

 

<signal id="alertSignal" name="alert" />
 

跟rule(Drools DRL)结合部署时, 需要将rule和流程定义文件一起打成一个BAR(zip包也可以)

Note 部署时, 如果流程文件的扩展名是.bpmn(用eclipse designer默认创建的流程文件就是.bpmn), 需要为deployment的name指定一个.bpmn20.xml的名称, 负责activiti无法识别到你的流程定义

 

Deployment deployment = repositoryService.createDeployment()
				.name("BusMonitorProcess.bpmn20.xml").addZipInputStream(zis)
				.deploy();

 另一种直接的方式就是在BAR包里的.bpmn文件直接改一下扩展名为 .bpmn20.xml

 

 

 

分享到:
评论
6 楼 nanquan 2013-06-20  
jinglai 写道
请问您能详细介绍一下 activiti 和 drools 结合的详细步骤吗?
找不到这方面的学习资料,实在是着急

还有就是pool之间没有message flow 要怎么传递信息呢?

坐等回复
跪谢了!


这个我接触的也不是很多, 你可以参考一下官方的资料 http://www.activiti.org/userguide/index.html#bpmnBusinessRuleTask

5 楼 jinglai 2013-06-13  
请问您能详细介绍一下 activiti 和 drools 结合的详细步骤吗?
找不到这方面的学习资料,实在是着急

还有就是pool之间没有message flow 要怎么传递信息呢?

坐等回复
跪谢了!
4 楼 nanquan 2012-07-20  
zhang3land 写道
我用Grails activiti5.8插件,发现连接Oracle数据库的时候非常的慢,请问有没有解决的办法?

没用activiti连过oracle, 不过应该不会表现这么差, 你可以看一下有没有其他的应用在用数据库, 导致资源争夺
3 楼 zhang3land 2012-07-19  
我用Grails activiti5.8插件,发现连接Oracle数据库的时候非常的慢,请问有没有解决的办法?
2 楼 nanquan 2012-06-07  
不好意思, 刚看到你的问题, 我建议你可以这样试试
<sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail">
      <conditionExpression xsi:type="tFormalExpression">${vacationApproved == 'true'}</conditionExpression>
    </sequenceFlow>
我不确定可不可以这样比, 但是这个思路应该可以.

dashamo 写道
你好,请教你一个问题,我是刚学activiti的
activiti下载包里有一个工程activiti-engine-examples
我拿 VacationRequest.bpmn20.xml 这个请假流程作为一个学习例子。假期申请人A提交一个开始节点的表单(request.form)时没有问题,这时启动一个流程实例,并给相关人员B生成一个代理任务,这也没问题,但当相应人员B处理该代理任务也就是处理A的请假请求时,他提交他的任务表单approve.form  ,后台代码如下

String taskId = request.getParameter("taskId");
String vacationApproved = request.getParameter("vacationApproved");
String managerMotivation = request.getParameter("managerMotivation");

Map<String, String> formProperties = new HashMap<String, String>();
formProperties.put("vacationApproved_type", vacationApproved_type);
formProperties.put("vacationApproved", vacationApproved);
formProperties.put("managerMotivation", managerMotivation);
formService.submitTaskFormData(taskId, formProperties);

这时最后一句话 formService.submitTaskFormData(taskId, formProperties);报错误,错误如下:
严重: Error while closing command context
org.activiti.engine.ActivitiException: condition expression returns non-Boolean: true (java.lang.String)
at org.activiti.engine.impl.el.UelExpressionCondition.evaluate(UelExpressionCondition.java:43)
at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:63)
at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:36)
at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44)
at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:76)
at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:497)

意思是表达式返回的不是布尔值,确实不是布尔值,
在 approve.form 中vacationApproved确实要求是boolean类型的
  <select name="vacationApproved">
    <option value="true">Yes</option>
    <option value="false">No</option>
   </select>
   <input type="hidden" name="vacationApproved_type" value="Boolean" />
我传递到后台的
String vacationApproved = request.getParameter("vacationApproved");
vacationApproved 是字符串 “true”,
可是流程文件中审批请假的这个用户任务后的这个分支节点的输入条件要求的表达式是
${vacationApproved}
流程文件片段如下
    <sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail">
      <conditionExpression xsi:type="tFormalExpression">${vacationApproved}</conditionExpression>
    </sequenceFlow>

看意思是要求vacationApproved是布尔类型的,可这个变量
是请假审批人提交表单的一个数据,这个数据只能是字符串型的,因为
formService 这个服务类提交用户任务表单的方法是
void submitTaskFormData(String taskId, Map<String, String>
properties);

只能传递字符串。


现在的问题就是我传递字符串过去后台报错说 返回值是字符串“true”,不是boolean 类型的,可是我也不能直接传递一个boolean 类型的过去呀,因为api 不允许。

怎么办?
请教了!

1 楼 dashamo 2012-06-04  
你好,请教你一个问题,我是刚学activiti的
activiti下载包里有一个工程activiti-engine-examples
我拿 VacationRequest.bpmn20.xml 这个请假流程作为一个学习例子。假期申请人A提交一个开始节点的表单(request.form)时没有问题,这时启动一个流程实例,并给相关人员B生成一个代理任务,这也没问题,但当相应人员B处理该代理任务也就是处理A的请假请求时,他提交他的任务表单approve.form  ,后台代码如下

String taskId = request.getParameter("taskId");
String vacationApproved = request.getParameter("vacationApproved");
String managerMotivation = request.getParameter("managerMotivation");

Map<String, String> formProperties = new HashMap<String, String>();
formProperties.put("vacationApproved_type", vacationApproved_type);
formProperties.put("vacationApproved", vacationApproved);
formProperties.put("managerMotivation", managerMotivation);
formService.submitTaskFormData(taskId, formProperties);

这时最后一句话 formService.submitTaskFormData(taskId, formProperties);报错误,错误如下:
严重: Error while closing command context
org.activiti.engine.ActivitiException: condition expression returns non-Boolean: true (java.lang.String)
at org.activiti.engine.impl.el.UelExpressionCondition.evaluate(UelExpressionCondition.java:43)
at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:63)
at org.activiti.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:36)
at org.activiti.engine.impl.pvm.runtime.AtomicOperationActivityExecute.execute(AtomicOperationActivityExecute.java:44)
at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:76)
at org.activiti.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:497)

意思是表达式返回的不是布尔值,确实不是布尔值,
在 approve.form 中vacationApproved确实要求是boolean类型的
  <select name="vacationApproved">
    <option value="true">Yes</option>
    <option value="false">No</option>
   </select>
   <input type="hidden" name="vacationApproved_type" value="Boolean" />
我传递到后台的
String vacationApproved = request.getParameter("vacationApproved");
vacationApproved 是字符串 “true”,
可是流程文件中审批请假的这个用户任务后的这个分支节点的输入条件要求的表达式是
${vacationApproved}
流程文件片段如下
    <sequenceFlow id="flow3" sourceRef="requestApprovedDecision" targetRef="sendApprovalMail">
      <conditionExpression xsi:type="tFormalExpression">${vacationApproved}</conditionExpression>
    </sequenceFlow>

看意思是要求vacationApproved是布尔类型的,可这个变量
是请假审批人提交表单的一个数据,这个数据只能是字符串型的,因为
formService 这个服务类提交用户任务表单的方法是
void submitTaskFormData(String taskId, Map<String, String>
properties);

只能传递字符串。


现在的问题就是我传递字符串过去后台报错说 返回值是字符串“true”,不是boolean 类型的,可是我也不能直接传递一个boolean 类型的过去呀,因为api 不允许。

怎么办?
请教了!

相关推荐

Global site tag (gtag.js) - Google Analytics