扩展Activiti流程定义文件,实现自定义节点属性

为了满足业务需要,流程设计阶段需对设计产物流程定义文件中节点属性进行扩展,譬如:任务是否支持退回、退回方式、退回的节点,任务转派人、任务可跳转的节点范围等属性信息。为了保证扩展后的流程定义文件能够正常解析,我们采用类似元素的方式,模式如下:


	
	
	
		
			
				
				
				
				
				
			
		
	
	
	
	
	

流程定义文件扩展之后,扩展的属性如何存储呢?我们知道在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 operationMap = parseUserTaskOperations(bpmnParse, userTask);
     
            //将扩展属性设置给activity
            activity.setProperty(ExtensionBpmnConstants.PROPERTY_OPERATIONS_DEFINITION, operationMap);
        }
     
        public Map parseUserTaskOperations(BpmnParse bpmnParse, UserTask userTask) {
            Map operationMap = new HashMap();
            //获取扩展属性标签元素
            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;
        }
    }
  • 引擎配置:
  • 
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    		
    			
    		
    	
    
    完成上述设置后,即可通过 activity.getProperty(ExtensionBpmnConstants.PROPERTY_OPERATIONS_DEFINITION);获取扩展的属性值。


原文链接: http://doc.okbase.net/hxlzpnyist/archive/27800.html

你可能感兴趣的:(扩展Activiti流程定义文件,实现自定义节点属性)