java编写节点自定义属性,Activiti 任务节点自定义扩展属性

很多时候因为自己的业务需求需要修改节点的属性

例如需要在用户任务节点添加部门与岗位属性

首先修改stencilset.json

在propertyPackages下添加岗位与部门

21488993c72530bf089dc9657ec07ccf.png

{

"name" : "responsiblepostpackage",

"properties" : [{

"id" :"responsiblepost",

"type" : "responsiblepostcomplex",

"title" : "责任岗位",

"value" : "",

"description" : "请选择责任岗位.",

"popular" : true

}]

}, {

"name" : "responsibledepartmentpackage",

"properties" : [{

"id" :"responsibledepartment",

"type" : "responsibledepartmentcomplex",

"title" : "责任部门",

"value" : "",

"description" : "请选择责任部门.",

"popular" : true

}]

},

注意这里我们定义的name,后面我们需要节点下的propertyPackages添加。

1c4f9d78ecaa9639b889fe150c86bb3f.png

stencilset.json修改完成

修改editor-app/configuration/properties.js

添加自定义属性展示页面的路径,即下拉框展示的页面

"responsiblepostcomplex" : {

"readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html",

"writeModeTemplateUrl": "editor-app/configuration/properties/responsible-post-list-template.html"

},

"responsibledepartmentcomplex" : {

"readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html",

"writeModeTemplateUrl": "editor-app/configuration/properties/responsible-department-list-template.html"

},

responsiblepostcomplex 是我们在stencilset.json中定义的type

c8a4532bcc99e75c1fd283752e2cac18.png

在templates/modeler.html里添加js

c452e928b22318c16212768061825833.png

新建editor-app/configuration/responsible-post-controller.js

js内容:

var options = []

var KisBpmMultiInstanceCtrl = [ '$scope','$http', function($scope,$http) {

$http.get("http://10.200.8.21:9010/imcp/business/business-ps-temp/getOrtherList")

.then(function (response) {

$scope.property.option1s = response.data.orgList

options = response.data.jobList

});

$scope.multiInstanceSelectChanged = function(){

$scope.updatePropertyInModel($scope.property);

};

$scope.multiInstanceSelectChanged1 = function(){

$http.get("http://10.200.8.21:9010/imcp/business/business-ps-temp/getJobList?orgId="+$scope.property.value)

.then(function (response) {

//修改scope的值

setTimeout(function(){

$scope.$apply(function(){

options = []

options = response.data.jobList

})

},1000)

});

$scope.updatePropertyInModel($scope.property);

};

}];

var KisBpmMultiInstanceCtr2 = [ '$scope','$http', function($scope,$http) {

if($scope.property.options != options){

setInterval(function () {

$scope.$apply(function(){

$scope.property.options = options

})

})

}

$scope.multiInstanceSelectChanged = function(){

$scope.updatePropertyInModel($scope.property);

};

}];

这里需要我们定义获取数据的接口,我这里是http://10.200.8.21:9010/imcp/business/business-ps-temp/getOrtherList

新建editor-app/configuration/properties/responsible-department-list-template.html

页面内容

ng-options="item.organizationId as item.organizationName for item in property.option1s">

ng-change=“multiInstanceSelectChanged1()” 这里定义onchange方法,选择部门的时候后面显示相应部门的岗位

a6c98f76e5ee1fc0e304f75bcbca4634.png

选择完部门后,通过部门ID去获取该部门的岗位,然后将岗位信息存储到options全局变量中

然后再在岗位页面的controller中写一个定时循环的方法,获取options值,然后强制刷新。实现下拉框联动

737c2f207b48b920265a7076b242c3f8.png

新建editor-app/configuration/properties/responsible-post-list-template.html

页面内容

ng-options="item.jobId as item.jobName for item in property.options">

前端的已经改完了,还需要重写activiti的方法

新建 CustomUserTaskJsonConverter.java

package com.ww.activiti.config;

import com.fasterxml.jackson.databind.JsonNode;

import com.fasterxml.jackson.databind.node.ObjectNode;

import org.activiti.bpmn.model.BaseElement;

import org.activiti.bpmn.model.CustomProperty;

import org.activiti.bpmn.model.FlowElement;

import org.activiti.bpmn.model.UserTask;

import org.activiti.editor.language.json.converter.UserTaskJsonConverter;

import java.util.Map;

public class CustomUserTaskJsonConverter extends UserTaskJsonConverter {

@Override

protected FlowElement convertJsonToElement(JsonNode elementNode, JsonNode modelNode, Map shapeMap) {

FlowElement flowElement = super.convertJsonToElement(elementNode,modelNode,shapeMap);

UserTask userTask = (UserTask)flowElement;

CustomProperty customProperty = new CustomProperty();

//添加扩展属性的名称对应stencilset.json里定义的id

customProperty.setName("responsibledepartment");

customProperty.setSimpleValue(this.getPropertyValueAsString("responsibledepartment",elementNode));

CustomProperty customProperty1 = new CustomProperty();

customProperty1.setName("responsiblepost");

customProperty1.setSimpleValue(this.getPropertyValueAsString("responsiblepost",elementNode ));

CustomProperty customProperty2 = new CustomProperty();

customProperty2.setName("forms");

customProperty2.setSimpleValue(this.getPropertyValueAsString("forms",elementNode ));

userTask.getCustomProperties().add(customProperty);

userTask.getCustomProperties().add(customProperty1);

userTask.getCustomProperties().add(customProperty2);

return userTask;

}

@Override

protected void convertElementToJson(ObjectNode propertiesNode, BaseElement baseElement) {

super.convertElementToJson(propertiesNode,baseElement);

}

}

新建 CustomBpmnJsonConverter.java

package com.ww.activiti.config;

import org.activiti.editor.language.json.converter.BaseBpmnJsonConverter;

import org.activiti.editor.language.json.converter.BpmnJsonConverter;

import java.util.Map;

public class CustomBpmnJsonConverter extends BpmnJsonConverter {

public static Map> getConvertersToBpmnMap(){

return convertersToBpmnMap;

}

}

在部署流程的方法中添加

81a7b2c355537d2afe1ca4d8427bdee9.png

@PostMapping("{id}/deployment")

public Object deploy(@PathVariable("id")String id,HttpServletResponse response) throws Exception {

response.setHeader("Access-Control-Allow-Origin","*");

//获取模型

Model modelData = repositoryService.getModel(id);

byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());

if (bytes == null) {

return ToWeb.buildResult().status(Status.FAIL)

.msg("模型数据为空,请先设计流程并成功保存,再进行发布。");

}

JsonNode modelNode = new ObjectMapper().readTree(bytes);

CustomBpmnJsonConverter.getConvertersToBpmnMap().put("UserTask", CustomUserTaskJsonConverter.class);

BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);

if(model.getProcesses().size()==0){

return ToWeb.buildResult().status(Status.FAIL)

.msg("数据模型不符要求,请至少设计一条主线流程。");

}

byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);

//发布流程

String processName = modelData.getName() + ".bpmn20.xml";

Deployment deployment = repositoryService.createDeployment()

.name(modelData.getName())

.addString(processName, new String(bpmnBytes, "UTF-8"))

.deploy();

modelData.setDeploymentId(deployment.getId());

repositoryService.saveModel(modelData);

return ToWeb.buildResult().msg(deployment.getId());

}

启动程序即可

9e5e2a814b2c1edf63245707066a4bdc.png

b08be7e1239387fc830dce098f98263f.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值