扩展Activiti流程定义文件,实现自定义节点属性
2016-08-01 13:39
603 查看
为了满足业务需要,流程设计阶段需对设计产物流程定义文件中节点属性进行扩展,譬如:任务是否支持退回、退回方式、退回的节点,任务转派人、任务可跳转的节点范围等属性信息。为了保证扩展后的流程定义文件能够正常解析,我们采用类似<activiti:formProperty>元素的方式,模式如下:
<process id="extensionOperationProcess" name="The process which has extension operations" isExecutable="true">
<startEvent id="start" name="Start"></startEvent>
<sequenceFlow id="flow1" sourceRef="start" targetRef="operationTask"></sequenceFlow>
<userTask id="operationTask" name="User task which has extension operations" activiti:assignee="admin">
<extensionElements>
<activiti:operations>
<!-- 转派: 将当前任务转派给他人. 可配置属性如下:
transferTo 转派任务接收人. 可为具体的人,也可为表达式;
-->
<activiti:transfer transferTo="admin" />
<!-- 退回: 从当前节点退回到前序已执行的节点. 可配置属性如下:
backTo 可退回到的节点范围,可以逗号间隔可选的节点. 为any时,表示可选任意前序的已执行节点. 默认值为与该节点紧邻的上一个节点;
returnBy 返回方式,可选"track"(原路返回),"flow"(重新流转). 默认值为track;
-->
<activiti:turnback backTo="startevent1" returnBy="track" />
<!-- 撤销: 退回的反向操作?. 可配置属性如下:
gotoBy 前进方式,可选"track"(原路返回),"flow"(重新流转). 默认值为track;
-->
</activiti:operations>
</extensionElements>
</userTask>
<sequenceFlow id="flow2" sourceRef="operationTask" targetRef="usertask"></sequenceFlow>
<userTask id="usertask" name="User Task" activiti:assignee="user"></userTask>
<sequenceFlow id="flow3" sourceRef="usertask" targetRef="end"></sequenceFlow>
<endEvent id="end" name="End"></endEvent>
</process>
流程定义文件扩展之后,扩展的属性如何存储呢?我们知道在Activiti中ActivitiImpl对象存储的是活动节点的定义,那么我们即可在流程文件解析时将扩展属性通过setProperty方式存储到 ActivitiImpl对象中。实现过程如下:
自定义用户任务解析控制类,该类实现将流程定义文件中的扩展属性设置给ActivitiImpl
流程引擎配置中将自定义的用户任务解析控制类,覆盖掉默认的用户任务解析控制类
引擎配置:
原文链接:http://doc.okbase.net/hxlzpnyist/archive/27800.html
<process id="extensionOperationProcess" name="The process which has extension operations" isExecutable="true">
<startEvent id="start" name="Start"></startEvent>
<sequenceFlow id="flow1" sourceRef="start" targetRef="operationTask"></sequenceFlow>
<userTask id="operationTask" name="User task which has extension operations" activiti:assignee="admin">
<extensionElements>
<activiti:operations>
<!-- 转派: 将当前任务转派给他人. 可配置属性如下:
transferTo 转派任务接收人. 可为具体的人,也可为表达式;
-->
<activiti:transfer transferTo="admin" />
<!-- 退回: 从当前节点退回到前序已执行的节点. 可配置属性如下:
backTo 可退回到的节点范围,可以逗号间隔可选的节点. 为any时,表示可选任意前序的已执行节点. 默认值为与该节点紧邻的上一个节点;
returnBy 返回方式,可选"track"(原路返回),"flow"(重新流转). 默认值为track;
-->
<activiti:turnback backTo="startevent1" returnBy="track" />
<!-- 撤销: 退回的反向操作?. 可配置属性如下:
gotoBy 前进方式,可选"track"(原路返回),"flow"(重新流转). 默认值为track;
-->
</activiti:operations>
</extensionElements>
</userTask>
<sequenceFlow id="flow2" sourceRef="operationTask" targetRef="usertask"></sequenceFlow>
<userTask id="usertask" name="User Task" activiti:assignee="user"></userTask>
<sequenceFlow id="flow3" sourceRef="usertask" targetRef="end"></sequenceFlow>
<endEvent id="end" name="End"></endEvent>
</process>
流程定义文件扩展之后,扩展的属性如何存储呢?我们知道在Activiti中ActivitiImpl对象存储的是活动节点的定义,那么我们即可在流程文件解析时将扩展属性通过setProperty方式存储到 ActivitiImpl对象中。实现过程如下:
自定义用户任务解析控制类,该类实现将流程定义文件中的扩展属性设置给ActivitiImpl
流程引擎配置中将自定义的用户任务解析控制类,覆盖掉默认的用户任务解析控制类
public class ExtensionUserTaskParseHandler extends UserTaskParseHandler { @Override protected void executeParse(BpmnParse bpmnParse, UserTask userTask) { //调用上层的解析 super.executeParse(bpmnParse, userTask); ActivityImpl activity = bpmnParse.getCurrentScope().findActivity(userTask.getId()); Map<String, ExtensionOperation> operationMap = parseUserTaskOperations(bpmnParse, userTask); //将扩展属性设置给activity activity.setProperty(ExtensionBpmnConstants.PROPERTY_OPERATIONS_DEFINITION, operationMap); } public Map<String, ExtensionOperation> parseUserTaskOperations(BpmnParse bpmnParse, UserTask userTask) { Map<String, ExtensionOperation> operationMap = new HashMap<String, ExtensionOperation>(); //获取扩展属性标签元素 ExtensionElement operationsElement = userTask.getExtensionElements() .get(ExtensionBpmnConstants.EXTENSION_ELEMENT_OPERATIONS); if (operationsElement != null) { for (ExtensionElement operationElement : operationsElement.getChildElements().values()) { ExtensionOperation userTaskOperation = new ExtensionOperation(operationElement.getName()); if (operationElement != null && !operationElement.getAttributes().isEmpty()) { for (ExtensionAttribute attributeElement : operationElement.getAttributes().values()) { userTaskOperation.addProperty(attributeElement.getName(), attributeElement.getValue()); } } operationMap.put(operationElement.getName(), userTaskOperation); } } return operationMap; } }
引擎配置:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"> <property name="processEngineName" value="activitiEngineInMemory" /> <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" /> <property name="jdbcDriver" value="org.h2.Driver" /> <property name="jdbcUsername" value="sa" /> <property name="jdbcPassword" value="" /> <!-- Database configurations --> <property name="databaseSchemaUpdate" value="true" /> <!-- job executor configurations --> <property name="jobExecutorActivate" value="false" /> <!-- mail server configurations --> <property name="mailServerPort" value="5025" /> <property name="customDefaultBpmnParseHandlers"> <list> <bean class="com.cayenne.bpm.engine.kernel.activiti.extension.bpmn.ExtensionUserTaskParseHandler" /> </list> </property> </bean>完成上述设置后,即可通过 activity.getProperty(ExtensionBpmnConstants.PROPERTY_OPERATIONS_DEFINITION);获取扩展的属性值。
原文链接:http://doc.okbase.net/hxlzpnyist/archive/27800.html
相关文章推荐
- 扩展Activiti流程定义文件,实现自定义节点属性
- Activiti UserTask节点扩展 实现自定义节点属性
- Activiti UserTask节点扩展 实现自定义节点属性
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- 扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- 扩展jQuery easyui tabs组件,实现根据id(或者自定义属性)操作tab标签
- Activiti支持直接部署扩展名为bpmn的流程文件
- .Net 配置文件——继承ConfigurationSection实现自定义处理类处理自定义配置节点
- 编译ASP.NET时,提示“请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- Activiti的流程定义文件解析
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
- .Net 配置文件——继承ConfigurationSection实现自己定义处理类处理自己定义配置节点
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自定义节点
- 编译ASP.NET时,提示“请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。”
- 编译时出现:请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- 请确保此代码文件中定义的类与“inherits”属性匹配.并且该类扩展的基类(例如 Page 或 UserControl)是正确
- 如何实现xslt文件中节点属性的自动更新