盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

Activiti任务节点属性扩展

Activiti 分享牛 13994℃

关键词:Activiti任务节点属性扩展,Activiti权威指南
在实际的项目开发中,我们需要大量的使用任务节点也就是UserTask,如何默认的属性名称不够用,我们打算扩展UserTask任务节点的属性?这个时候该怎么做呢?相信这也是很多开发人员所面临的问题。本文的讲解基于MODELER设计器
首先,我们看一下设计器中扩展的属性如下图所示:
由于公司需要使用岗位与角色,所以我们需要扩展一个属性支持岗位的配置以及使用。在项目中我们使用的departmentname属性值。接下来我们看一下如何在后台解析departmentname属性值并使用。
如果使用MODELER设计器,则部署流程资源的时候,需要分为如下几个步骤:
(1)获取前台保存的JSON. (2)调用BpmnJsonConverter将JSON转化为BpmnModel。 (3)部署。
我们使用的时候,仅在第2步骤进行处理即可。因为UserTask中扩展了属性,那么默认的任务节点JSON数据解析类UserTaskJsonConverter是不识别我们定义的departmentname属性,因此我们需要定义一个类替换UserTaskJsonConverter类,以此解析自定义的属性departmentname。
接下来,我们定义任务节点JSON解析类,如下所示:
public class HmUserTaskJsonConverter extends UserTaskJsonConverter {
public void convertToJson(BaseElement baseElement,
ActivityProcessor processor, BpmnModel model,
FlowElementsContainer container, ArrayNode shapesArrayNode,
double subProcessX, double subProcessY) {
super.convertToJson(baseElement, processor, model, container,
shapesArrayNode, subProcessX, subProcessY);
}
/**
* 解析自定义的扩展属性信息
*/
@Override
protected FlowElement convertJsonToElement(JsonNode elementNode,
JsonNode modelNode, MapshapeMap) {
FlowElement flowElement = super.convertJsonToElement(elementNode,
modelNode, shapeMap);
.....//书写解析属性的业务逻辑即可
ShareniuXML.writeXML(flowElement ,elementNode);
return flowElement;

}
public static void fillTypes(
Map> convertersToBpmnMap,
Map<class, Class> convertersToJsonMap) {
fillJsonTypes(convertersToBpmnMap);
fillBpmnTypes(convertersToJsonMap);
}
public static void fillJsonTypes(
Map> convertersToBpmnMap) {
convertersToBpmnMap.put(STENCIL_TASK_USER,
HmUserTaskJsonConverter.class);
}

public static void fillBpmnTypes(
Map<class, Class> convertersToJsonMap) {
convertersToJsonMap.put(UserTask.class, HmUserTaskJsonConverter.class);
}
}
上述类定义完毕之后,我们就需要在流程部署的时候使用该类,如下所示:

public void processModelStart(String modelId) throws Exception {
byte[] bpmnBytes = null;
String filename = null;
JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelId));
BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
HmBpmnJsonConverter.getConvertersToBpmnMap().put("UserTask", HmUserTaskJsonConverter.class);
HmBpmnJsonConverter.getconvertersToJsonMap().put(UserTask.class, HmUserTaskJsonConverter.class);
BpmnModel model = jsonConverter.convertToBpmnModel(editorNode);
//filename = model.getMainProcess().getId() + ".bpmn20.xml";
filename = model.getMainProcess().getName()+new Date().getTime()+".bpmn20.xml";
bpmnBytes = new BpmnXMLConverter().convertToXML(model);
System.out.println(new String(bpmnBytes));
ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
Model model1 = repositoryService.getModel(modelId);
//部署进去后
deploymentBuilder.addInputStream(filename,in);
deploymentBuilder.tenantId(model1.getTenantId());
Deployment deployment = deploymentBuilder.deploy();
model1.setDeploymentId(deployment.getId());
repositoryService.saveModel(model1);
}
部署流程资源,数据库act_ge_bytearray表中新增的数据如下:
  <process id="a3bbe914e-2411-4cca-a2c9-f0d426276539" isExecutable="true">
    <startEvent id="sid-B7988831-5778-413E-AEB7-2C978C0DDFD3" name="ddd"></startEvent>
    <userTask id="sid-2A969313-0772-4C70-942A-BF420DF934BF" name="ddd" xmlns:shareniu="http://www.shareniu.com/" shareniu:departmentname="" shareniu:specialcheckperson=""></userTask>
    <sequenceFlow id="sid-9571398D-4568-44DA-9D27-9DE0A949A17B" sourceRef="sid-B7988831-5778-413E-AEB7-2C978C0DDFD3" targetRef="sid-2A969313-0772-4C70-942A-BF420DF934BF"></sequenceFlow>
    <userTask id="sid-D693DBA8-11C7-4488-A5C8-E888BC090370" name="ddd" xmlns:shareniu="http://www.shareniu.com/" shareniu:departmentname="" shareniu:specialcheckperson=""></userTask>
    <sequenceFlow id="sid-0FA83258-5D75-452E-ACD8-7FCD35050DEC" sourceRef="sid-2A969313-0772-4C70-942A-BF420DF934BF" targetRef="sid-D693DBA8-11C7-4488-A5C8-E888BC090370"></sequenceFlow>
    <endEvent id="sid-64D33C97-B433-41EC-BDF2-8A2EE58B4529"></endEvent>
    <sequenceFlow id="sid-B0999F7A-FACD-4F6F-9ACF-94B28BBDD138" sourceRef="sid-D693DBA8-11C7-4488-A5C8-E888BC090370" targetRef="sid-64D33C97-B433-41EC-BDF2-8A2EE58B4529"></sequenceFlow>
  </process>
任务节点扩展的属性已经被我们成功写入到XML文件中了。

转载请注明:分享牛 » Activiti任务节点属性扩展