From 2d80c0f6ce7895ded82dd1ccf0a8ad36100e07ac Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Sun, 20 Mar 2022 22:34:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=BC=95=E6=93=8E=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E5=B1=9E=E6=80=A7=E8=B0=83=E6=95=B4=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=BC=80=E5=A7=8B=E8=8A=82=E7=82=B9=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/oa/NodeFieldController.java | 56 +- .../route/oa/NodeFieldRouteController.java | 33 + .../module/activiti/dao/oa/INodeFieldDao.java | 31 + .../activiti/pojo/dtos/oa/NodeFieldDTO.java | 85 + .../pojo/vos/oa/UpdateEditableVO.java | 27 + .../activiti/pojo/vos/oa/UpdateVisibleVO.java | 27 + .../service/oa/INodeFieldService.java | 36 + .../oa/impl/NodeFieldFieldServiceImpl.java | 32 + .../mybatis/mapper/oa/node-field-mapper.xml | 82 + .../properties-assignment-controller.js | 143 +- .../properties-form-select-controller.js | 76 + .../editor-app/configuration/properties.js | 4 + .../form-select-display-template.html | 2 + .../properties/form-select-template.html | 22 + .../form-select-write-template.html | 1 + .../resources/static/editor-app/editor.html | 15 +- .../static/editor-app/stencil-controller.js | 4 - .../src/main/resources/static/stencilset.json | 11 +- .../main/resources/static/stencilset.json.bak | 2412 +++++++++++++++++ .../resources/templates/activiti/list.html | 19 +- .../templates/activiti/procdef/list.html | 39 +- .../resources/templates/activiti/update.html | 1 + .../templates/oa/list-node-field.html | 115 + .../resources/templates/oa/list-node.html | 90 + 24 files changed, 3223 insertions(+), 140 deletions(-) create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/NodeFieldRouteController.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/NodeFieldDTO.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateEditableVO.java create mode 100644 module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateVisibleVO.java create mode 100644 module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js create mode 100644 module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-display-template.html create mode 100644 module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-template.html create mode 100644 module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-write-template.html create mode 100644 module-activiti/src/main/resources/static/stencilset.json.bak create mode 100644 module-activiti/src/main/resources/templates/oa/list-node-field.html create mode 100644 module-activiti/src/main/resources/templates/oa/list-node.html diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/NodeFieldController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/NodeFieldController.java index 4e81c7ca..c7c4234c 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/NodeFieldController.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/api/oa/NodeFieldController.java @@ -1,12 +1,19 @@ package ink.wgink.module.activiti.controller.api.oa; +import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; +import ink.wgink.module.activiti.pojo.vos.oa.UpdateEditableVO; +import ink.wgink.module.activiti.pojo.vos.oa.UpdateVisibleVO; import ink.wgink.module.activiti.service.oa.INodeFieldService; -import io.swagger.annotations.Api; +import ink.wgink.pojo.result.ErrorResult; +import ink.wgink.pojo.result.SuccessResult; +import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * @Description: 表单字段与流程节点 @@ -22,4 +29,47 @@ public class NodeFieldController extends DefaultBaseController { @Autowired private INodeFieldService nodeFieldService; + @ApiOperation(value = "更新显示状态", notes = "更新显示状态接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "nodeFieldId", value = "节点字段ID", paramType = "path") + }) + @PutMapping("update-visible/{nodeFieldId}") + @CheckRequestBodyAnnotation + public SuccessResult updateVisible(@PathVariable("nodeFieldId") String nodeFieldId, @RequestBody UpdateVisibleVO updateVisibleVO) { + nodeFieldService.updateVisible(nodeFieldId, updateVisibleVO.getIsVisible()); + return new SuccessResult(); + } + + @ApiOperation(value = "更新编辑状态", notes = "更新编辑状态接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "nodeFieldId", value = "节点字段ID", paramType = "path") + }) + @PutMapping("update-editable/{nodeFieldId}") + @CheckRequestBodyAnnotation + public SuccessResult updateEditable(@PathVariable("nodeFieldId") String nodeFieldId, @RequestBody UpdateEditableVO updateEditableVO) { + nodeFieldService.updateEditable(nodeFieldId, updateEditableVO.getIsEditable()); + return new SuccessResult(); + } + + @ApiOperation(value = "节点列表", notes = "节点列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "deploymentId", value = "部署ID", paramType = "path") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-node/deployment-id/{deploymentId}") + public List listNodeByDeploymentId(@PathVariable("deploymentId") String deploymentId) { + return nodeFieldService.listNodeByDeploymentId(deploymentId); + } + + @ApiOperation(value = "节点字段列表", notes = "节点字段列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "deploymentId", value = "部署ID", paramType = "path"), + @ApiImplicitParam(name = "flowNodeId", value = "节点ID", paramType = "path"), + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list/deployment-id/{deploymentId}/flow-node-id/{flowNodeId}") + public List listByDeploymentIdAndFlowNodeId(@PathVariable("deploymentId") String deploymentId, @PathVariable("flowNodeId") String flowNodeId) { + return nodeFieldService.listByDeploymentIdAndFlowNodeId(deploymentId, flowNodeId); + } + } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/NodeFieldRouteController.java b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/NodeFieldRouteController.java new file mode 100644 index 00000000..02503b1f --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/controller/route/oa/NodeFieldRouteController.java @@ -0,0 +1,33 @@ +package ink.wgink.module.activiti.controller.route.oa; + +import ink.wgink.interfaces.consts.ISystemConstant; +import io.swagger.annotations.Api; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +/** + * @Description: 节点字段 + * @Author: WenG + * @Date: 2022/3/19 10:19 + * @Version: 1.0 + **/ +@Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "节点字段路由") +@Controller +@RequestMapping(ISystemConstant.ROUTE_PREFIX + "/oa/node-field") +public class NodeFieldRouteController { + + @GetMapping("list-node") + public ModelAndView listNode() { + ModelAndView mv = new ModelAndView("oa/list-node"); + return mv; + } + + @GetMapping("list-node-field") + public ModelAndView listNodeField() { + ModelAndView mv = new ModelAndView("oa/list-node-field"); + return mv; + } + +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeFieldDao.java b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeFieldDao.java index b61ef714..21639aa6 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeFieldDao.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/dao/oa/INodeFieldDao.java @@ -2,9 +2,13 @@ package ink.wgink.module.activiti.dao.oa; import ink.wgink.exceptions.RemoveException; import ink.wgink.exceptions.SaveException; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.UpdateException; import ink.wgink.interfaces.init.IInitBaseTable; +import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Map; /** @@ -31,4 +35,31 @@ public interface INodeFieldDao extends IInitBaseTable { * @throws RemoveException */ void delete(Map params) throws RemoveException; + + /** + * 更新 + * + * @param params + * @throws UpdateException + */ + void update(Map params) throws UpdateException; + + /** + * 节点列表 + * + * @param params + * @return + * @throws SearchException + */ + List listNode(Map params) throws SearchException; + + /** + * 列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/NodeFieldDTO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/NodeFieldDTO.java new file mode 100644 index 00000000..e4342962 --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/dtos/oa/NodeFieldDTO.java @@ -0,0 +1,85 @@ +package ink.wgink.module.activiti.pojo.dtos.oa; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 节点字段 + * @Author: WenG + * @Date: 2022/3/19 11:05 + * @Version: 1.0 + **/ +@ApiModel +public class NodeFieldDTO { + + @ApiModelProperty(name = "nodeFieldId", value = "主键") + private String nodeFieldId; + @ApiModelProperty(name = "formId", value = "表单ID") + private String formId; + @ApiModelProperty(name = "deploymentId", value = "部署ID") + private String deploymentId; + @ApiModelProperty(name = "flowNodeId", value = "节点") + private String flowNodeId; + @ApiModelProperty(name = "fieldName", value = "字段名") + private String fieldName; + @ApiModelProperty(name = "isVisible", value = "是否可见") + private Integer isVisible; + @ApiModelProperty(name = "isEditable", value = "是否可编辑") + private Integer isEditable; + + public String getNodeFieldId() { + return nodeFieldId; + } + + public void setNodeFieldId(String nodeFieldId) { + this.nodeFieldId = nodeFieldId; + } + + public String getFormId() { + return formId; + } + + public void setFormId(String formId) { + this.formId = formId; + } + + public String getDeploymentId() { + return deploymentId; + } + + public void setDeploymentId(String deploymentId) { + this.deploymentId = deploymentId; + } + + public String getFlowNodeId() { + return flowNodeId; + } + + public void setFlowNodeId(String flowNodeId) { + this.flowNodeId = flowNodeId; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public Integer getIsVisible() { + return isVisible; + } + + public void setIsVisible(Integer isVisible) { + this.isVisible = isVisible; + } + + public Integer getIsEditable() { + return isEditable; + } + + public void setIsEditable(Integer isEditable) { + this.isEditable = isEditable; + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateEditableVO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateEditableVO.java new file mode 100644 index 00000000..c1b4354b --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateEditableVO.java @@ -0,0 +1,27 @@ +package ink.wgink.module.activiti.pojo.vos.oa; + +import ink.wgink.annotation.CheckNumberAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 显示状态 + * @Author: WenG + * @Date: 2022/3/19 15:49 + * @Version: 1.0 + **/ +@ApiModel +public class UpdateEditableVO { + + @ApiModelProperty(name = "isEditable", value = "是否可编辑") + @CheckNumberAnnotation(name = "是否可编辑", types = {"0", "1"}) + private Integer isEditable; + + public Integer getIsEditable() { + return isEditable == null ? 0 : isEditable; + } + + public void setIsEditable(Integer isEditable) { + this.isEditable = isEditable; + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateVisibleVO.java b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateVisibleVO.java new file mode 100644 index 00000000..ea73a210 --- /dev/null +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/pojo/vos/oa/UpdateVisibleVO.java @@ -0,0 +1,27 @@ +package ink.wgink.module.activiti.pojo.vos.oa; + +import ink.wgink.annotation.CheckNumberAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description: 显示状态 + * @Author: WenG + * @Date: 2022/3/19 15:49 + * @Version: 1.0 + **/ +@ApiModel +public class UpdateVisibleVO { + + @ApiModelProperty(name = "isVisible", value = "是否可见") + @CheckNumberAnnotation(name = "是否可见", types = {"0", "1"}) + private Integer isVisible; + + public Integer getIsVisible() { + return isVisible == null ? 0 : isVisible; + } + + public void setIsVisible(Integer isVisible) { + this.isVisible = isVisible; + } +} diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/INodeFieldService.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/INodeFieldService.java index 79bc685a..e27d799d 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/INodeFieldService.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/INodeFieldService.java @@ -1,7 +1,10 @@ package ink.wgink.module.activiti.service.oa; +import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO; +import java.util.List; + /** * @Description: 表单字段与流程节点 * @Author: WenG @@ -17,4 +20,37 @@ public interface INodeFieldService { */ void save(NodeFieldUpdateVO nodeFieldUpdateVO); + /** + * 更新显示状态 + * + * @param nodeFieldId + * @param isVisible + */ + void updateVisible(String nodeFieldId, Integer isVisible); + + /** + * 更新编辑状态 + * + * @param nodeFieldId + * @param isEditable + */ + void updateEditable(String nodeFieldId, Integer isEditable); + + /** + * 节点列表 + * + * @param deploymentId + * @return + */ + List listNodeByDeploymentId(String deploymentId); + + /** + * 节点字段列表 + * + * @param deploymentId + * @param flowNodeId + * @return + */ + List listByDeploymentIdAndFlowNodeId(String deploymentId, String flowNodeId); + } diff --git a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/NodeFieldFieldServiceImpl.java b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/NodeFieldFieldServiceImpl.java index 01094455..b37b1d02 100644 --- a/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/NodeFieldFieldServiceImpl.java +++ b/module-activiti/src/main/java/ink/wgink/module/activiti/service/oa/impl/NodeFieldFieldServiceImpl.java @@ -2,6 +2,7 @@ package ink.wgink.module.activiti.service.oa.impl; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.module.activiti.dao.oa.INodeFieldDao; +import ink.wgink.module.activiti.pojo.dtos.oa.NodeFieldDTO; import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldUpdateVO; import ink.wgink.module.activiti.pojo.vos.oa.NodeFieldVO; import ink.wgink.module.activiti.service.oa.INodeFieldService; @@ -33,6 +34,37 @@ public class NodeFieldFieldServiceImpl extends DefaultBaseService implements INo save(nodeFieldUpdateVO.getDeploymentId(), nodeFieldUpdateVO.getFormId(), nodeFieldUpdateVO.getFlowNodeId(), nodeFieldUpdateVO.getFormFields()); } + @Override + public void updateVisible(String nodeFieldId, Integer isVisible) { + Map params = getHashMap(4); + params.put("nodeFieldId", nodeFieldId); + params.put("isVisible", isVisible); + nodeFieldDao.update(params); + } + + @Override + public void updateEditable(String nodeFieldId, Integer isEditable) { + Map params = getHashMap(4); + params.put("nodeFieldId", nodeFieldId); + params.put("isEditable", isEditable); + nodeFieldDao.update(params); + } + + @Override + public List listNodeByDeploymentId(String deploymentId) { + Map params = getHashMap(2); + params.put("deploymentId", deploymentId); + return nodeFieldDao.listNode(params); + } + + @Override + public List listByDeploymentIdAndFlowNodeId(String deploymentId, String flowNodeId) { + Map params = getHashMap(2); + params.put("deploymentId", deploymentId); + params.put("flowNodeId", flowNodeId); + return nodeFieldDao.list(params); + } + /** * 保存 * diff --git a/module-activiti/src/main/resources/mybatis/mapper/oa/node-field-mapper.xml b/module-activiti/src/main/resources/mybatis/mapper/oa/node-field-mapper.xml index 8c2fc734..1e13902d 100644 --- a/module-activiti/src/main/resources/mybatis/mapper/oa/node-field-mapper.xml +++ b/module-activiti/src/main/resources/mybatis/mapper/oa/node-field-mapper.xml @@ -2,6 +2,16 @@ + + + + + + + + + + CREATE TABLE IF NOT EXISTS `oa_node_field` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, @@ -53,4 +63,76 @@ + + + UPDATE + oa_node_field + SET + + is_visible = #{isVisible}, + + + is_editable = #{isEditable}, + + node_field_id = #{nodeFieldId} + WHERE + node_field_id = #{nodeFieldId} + + + + + + + + \ No newline at end of file diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js index 6fbfc20a..cd5b82cb 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties-assignment-controller.js @@ -20,11 +20,11 @@ /* * Assignment */ -var KisBpmAssignmentCtrl = [ '$scope', '$modal', function($scope, $modal) { +var KisBpmAssignmentCtrl = ['$scope', '$modal', function ($scope, $modal) { // Config for the modal window var opts = { - template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(), + template: 'editor-app/configuration/properties/assignment-popup.html?version=' + Date.now(), scope: $scope }; @@ -32,119 +32,102 @@ var KisBpmAssignmentCtrl = [ '$scope', '$modal', function($scope, $modal) { $modal(opts); }]; -var KisBpmAssignmentPopupCtrl = [ '$scope', function($scope) { - +var KisBpmAssignmentPopupCtrl = ['$scope', function ($scope) { + // Put json representing assignment on scope if ($scope.property.value !== undefined && $scope.property.value !== null && $scope.property.value.assignment !== undefined - && $scope.property.value.assignment !== null) - { + && $scope.property.value.assignment !== null) { $scope.assignment = $scope.property.value.assignment; } else { $scope.assignment = {}; } - if ($scope.assignment.candidateUsers == undefined || $scope.assignment.candidateUsers.length == 0) - { - $scope.assignment.candidateUsers = [{value: ''}]; + if ($scope.assignment.candidateUsers == undefined || $scope.assignment.candidateUsers.length == 0) { + $scope.assignment.candidateUsers = [{value: ''}]; } - + // Click handler for + button after enum value var userValueIndex = 1; - $scope.addCandidateUserValue = function(index) { + $scope.addCandidateUserValue = function (index) { $scope.assignment.candidateUsers.splice(index + 1, 0, {value: 'value ' + userValueIndex++}); }; // Click handler for - button after enum value - $scope.removeCandidateUserValue = function(index) { + $scope.removeCandidateUserValue = function (index) { $scope.assignment.candidateUsers.splice(index, 1); }; - - if ($scope.assignment.candidateGroups == undefined || $scope.assignment.candidateGroups.length == 0) - { - $scope.assignment.candidateGroups = [{value: ''}]; + + if ($scope.assignment.candidateGroups == undefined || $scope.assignment.candidateGroups.length == 0) { + $scope.assignment.candidateGroups = [{value: ''}]; } - + var groupValueIndex = 1; - $scope.addCandidateGroupValue = function(index) { + $scope.addCandidateGroupValue = function (index) { $scope.assignment.candidateGroups.splice(index + 1, 0, {value: 'value ' + groupValueIndex++}); }; // Click handler for - button after enum value - $scope.removeCandidateGroupValue = function(index) { + $scope.removeCandidateGroupValue = function (index) { $scope.assignment.candidateGroups.splice(index, 1); }; - $scope.save = function() { + $scope.save = function () { $scope.property.value = {}; handleAssignmentInput($scope); $scope.property.value.assignment = $scope.assignment; - + $scope.updatePropertyInModel($scope.property); $scope.close(); }; // Close button handler - $scope.close = function() { - handleAssignmentInput($scope); - $scope.property.mode = 'read'; - $scope.$hide(); + $scope.close = function () { + handleAssignmentInput($scope); + $scope.property.mode = 'read'; + $scope.$hide(); }; - - var handleAssignmentInput = function($scope) { - if ($scope.assignment.candidateUsers) - { - var emptyUsers = true; - var toRemoveIndexes = []; - for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) - { - if ($scope.assignment.candidateUsers[i].value != '') - { - emptyUsers = false; - } - else - { - toRemoveIndexes[toRemoveIndexes.length] = i; - } - } - - for (var i = 0; i < toRemoveIndexes.length; i++) - { - $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1); - } - - if (emptyUsers) - { - $scope.assignment.candidateUsers = undefined; - } - } - - if ($scope.assignment.candidateGroups) - { - var emptyGroups = true; - var toRemoveIndexes = []; - for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) - { - if ($scope.assignment.candidateGroups[i].value != '') - { - emptyGroups = false; - } - else - { - toRemoveIndexes[toRemoveIndexes.length] = i; - } - } - - for (var i = 0; i < toRemoveIndexes.length; i++) - { - $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1); - } - - if (emptyGroups) - { - $scope.assignment.candidateGroups = undefined; - } - } + + var handleAssignmentInput = function ($scope) { + if ($scope.assignment.candidateUsers) { + var emptyUsers = true; + var toRemoveIndexes = []; + for (var i = 0; i < $scope.assignment.candidateUsers.length; i++) { + if ($scope.assignment.candidateUsers[i].value != '') { + emptyUsers = false; + } else { + toRemoveIndexes[toRemoveIndexes.length] = i; + } + } + + for (var i = 0; i < toRemoveIndexes.length; i++) { + $scope.assignment.candidateUsers.splice(toRemoveIndexes[i], 1); + } + + if (emptyUsers) { + $scope.assignment.candidateUsers = undefined; + } + } + + if ($scope.assignment.candidateGroups) { + var emptyGroups = true; + var toRemoveIndexes = []; + for (var i = 0; i < $scope.assignment.candidateGroups.length; i++) { + if ($scope.assignment.candidateGroups[i].value != '') { + emptyGroups = false; + } else { + toRemoveIndexes[toRemoveIndexes.length] = i; + } + } + + for (var i = 0; i < toRemoveIndexes.length; i++) { + $scope.assignment.candidateGroups.splice(toRemoveIndexes[i], 1); + } + + if (emptyGroups) { + $scope.assignment.candidateGroups = undefined; + } + } }; }]; \ No newline at end of file diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js new file mode 100644 index 00000000..62193594 --- /dev/null +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties-form-select-controller.js @@ -0,0 +1,76 @@ +/* + * Activiti Modeler component part of the Activiti project + * Copyright 2005-2014 Alfresco Software, Ltd. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * form-select + */ +var FormSelectWriteController = ['$scope', '$modal', function($scope, $modal) { + $modal({ + template: 'editor-app/configuration/properties/form-select-template.html?version=' + Date.now(), + scope: $scope + }); +}]; + +var FormSelectController = ['$scope', function($scope) { + + $scope.form = {}; + + if($scope.property.value) { + $scope.form.formId = $scope.property.value; + } + + $scope.selectFormId = function() { + top.dialog.dialogData.oldSelectedFormList = [{formId: $scope.form.formId}]; + top.dialog.open({ + url: 'route/form/list-select', + title: '选择表单', + width: '1000px', + height: '500px', + onClose: function() { + var newSelectedFormList = top.dialog.dialogData.newSelectedFormList; + if(newSelectedFormList.length != 0) { + $scope.form.formId = newSelectedFormList[0].formId; + } else { + $scope.form.formId = ''; + } + document.getElementById('formId').value = $scope.form.formId; + top.dialog.dialogData.oldSelectedFormList = []; + } + }); + } + + $scope.save = function() { + $scope.property.value = ''; + $scope.property.value = $scope.form.formId; + $scope.updatePropertyInModel($scope.property); + $scope.$hide(); + $scope.close(); + }; + + $scope.cancel = function() { + $scope.$hide(); + $scope.property.mode = 'read'; + }; + + // Close button handler + $scope.close = function() { + $scope.$hide(); + $scope.property.mode = 'read'; + }; +}]; \ No newline at end of file diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties.js b/module-activiti/src/main/resources/static/editor-app/configuration/properties.js index 55727c68..f74535e6 100644 --- a/module-activiti/src/main/resources/static/editor-app/configuration/properties.js +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties.js @@ -95,5 +95,9 @@ KISBPM.PROPERTY_CONFIG = "oryx-messageref-string" : { "readModeTemplateUrl": "editor-app/configuration/properties/default-value-display-template.html", "writeModeTemplateUrl": "editor-app/configuration/properties/message-property-write-template.html" + }, + "formkeydefinition": { + "readModeTemplateUrl": "editor-app/configuration/properties/form-select-display-template.html", + "writeModeTemplateUrl": "editor-app/configuration/properties/form-select-write-template.html" } }; diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-display-template.html b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-display-template.html new file mode 100644 index 00000000..7da78311 --- /dev/null +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-display-template.html @@ -0,0 +1,2 @@ +{{property.value}} +No form selected diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-template.html b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-template.html new file mode 100644 index 00000000..b2120912 --- /dev/null +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-template.html @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-write-template.html b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-write-template.html new file mode 100644 index 00000000..2d94cd4c --- /dev/null +++ b/module-activiti/src/main/resources/static/editor-app/configuration/properties/form-select-write-template.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/module-activiti/src/main/resources/static/editor-app/editor.html b/module-activiti/src/main/resources/static/editor-app/editor.html index ed0d2cae..0d0eb0dc 100644 --- a/module-activiti/src/main/resources/static/editor-app/editor.html +++ b/module-activiti/src/main/resources/static/editor-app/editor.html @@ -113,17 +113,16 @@
-
+
{{ property.title }} : {{ property.title }} ({{'PROPERTY.REMOVED' | translate}}) : - - - + + +
diff --git a/module-activiti/src/main/resources/static/editor-app/stencil-controller.js b/module-activiti/src/main/resources/static/editor-app/stencil-controller.js index 4cf8721f..4e33c61c 100644 --- a/module-activiti/src/main/resources/static/editor-app/stencil-controller.js +++ b/module-activiti/src/main/resources/static/editor-app/stencil-controller.js @@ -257,14 +257,12 @@ angular.module('activitiModeler') 'createDate': $scope.modelData.createDate }; } - // Gather properties of selected item var properties = stencil.properties(); for (var i = 0; i < properties.length; i++) { var property = properties[i]; if (property.popular() == false) continue; var key = property.prefix() + "-" + property.id(); - if (key === 'oryx-name') { selectedItem.title = selectedShape.properties[key]; } @@ -570,7 +568,6 @@ angular.module('activitiModeler') /* Method available to all sub controllers (for property controllers) to update the internal Oryx model */ $scope.updatePropertyInModel = function (property, shapeId) { - var shape = $scope.selectedShape; // Some updates may happen when selected shape is already changed, so when an additional // shapeId is supplied, we need to make sure the correct shape is updated (current or previous) @@ -590,7 +587,6 @@ angular.module('activitiModeler') var key = property.key; var newValue = property.value; var oldValue = shape.properties[key]; - if (newValue != oldValue) { var commandClass = ORYX.Core.Command.extend({ construct: function () { diff --git a/module-activiti/src/main/resources/static/stencilset.json b/module-activiti/src/main/resources/static/stencilset.json index e0ab436f..42cfe4bd 100644 --- a/module-activiti/src/main/resources/static/stencilset.json +++ b/module-activiti/src/main/resources/static/stencilset.json @@ -89,7 +89,7 @@ "id": "process_namespace", "type": "String", "title": "目标命名空间", - "value": "http://www.activiti.org/processdef", + "value": "www.wgink.ink", "description": "工作流目标命名空间", "popular": true } @@ -166,7 +166,7 @@ { "id": "usertaskassignment", "type": "Complex", - "title": "代理", + "title": "用户代理", "value": "", "description": "Assignment definition for the user task", "popular": true @@ -191,7 +191,7 @@ "properties": [ { "id": "formkeydefinition", - "type": "String", + "type": "formkeydefinition", "title": "自定义表单", "value": "", "description": "用户任务表单编号", @@ -955,8 +955,7 @@ "documentationpackage", "executionlistenerspackage", "initiatorpackage", - "formkeydefinitionpackage", - "formpropertiespackage" + "formkeydefinitionpackage" ], "hiddenPropertyPackages": [], "roles": [ @@ -1092,10 +1091,8 @@ "multiinstance_conditionpackage", "isforcompensationpackage", "usertaskassignmentpackage", - "formkeydefinitionpackage", "duedatedefinitionpackage", "prioritydefinitionpackage", - "formpropertiespackage", "tasklistenerspackage" ], "hiddenPropertyPackages": [], diff --git a/module-activiti/src/main/resources/static/stencilset.json.bak b/module-activiti/src/main/resources/static/stencilset.json.bak new file mode 100644 index 00000000..e0ab436f --- /dev/null +++ b/module-activiti/src/main/resources/static/stencilset.json.bak @@ -0,0 +1,2412 @@ +{ + "title": "BPMN 2.0标准工具", + "namespace": "http://b3mn.org/stencilset/bpmn2.0#", + "description": "BPMN process editor", + "propertyPackages": [ + { + "name": "process_idpackage", + "properties": [ + { + "id": "process_id", + "type": "String", + "title": "流程ID", + "value": "", + "description": "流程的特殊唯一的名称标识", + "popular": true + } + ] + }, + { + "name": "overrideidpackage", + "properties": [ + { + "id": "overrideid", + "type": "String", + "title": "Id", + "value": "", + "description": "Unique identifier of the element.", + "popular": true + } + ] + }, + { + "name": "namepackage", + "properties": [ + { + "id": "name", + "type": "String", + "title": "元素名称", + "value": "", + "description": "元素名称", + "popular": true, + "refToView": "text_name" + } + ] + }, + { + "name": "documentationpackage", + "properties": [ + { + "id": "documentation", + "type": "Text", + "title": "描述", + "value": "", + "description": "元素描述", + "popular": true + } + ] + }, + { + "name": "process_authorpackage", + "properties": [ + { + "id": "process_author", + "type": "String", + "title": "流程作者", + "value": "", + "description": "流程定义者姓名", + "popular": true + } + ] + }, + { + "name": "process_versionpackage", + "properties": [ + { + "id": "process_version", + "type": "String", + "title": "流程版本", + "value": "", + "description": "标识文档版本", + "popular": true + } + ] + }, + { + "name": "process_namespacepackage", + "properties": [ + { + "id": "process_namespace", + "type": "String", + "title": "目标命名空间", + "value": "http://www.activiti.org/processdef", + "description": "工作流目标命名空间", + "popular": true + } + ] + }, + { + "name": "asynchronousdefinitionpackage", + "properties": [ + { + "id": "asynchronousdefinition", + "type": "Boolean", + "title": "异步", + "value": "false", + "description": "Define the activity as asynchronous.", + "popular": true + } + ] + }, + { + "name": "exclusivedefinitionpackage", + "properties": [ + { + "id": "exclusivedefinition", + "type": "Boolean", + "title": "单独", + "value": "false", + "description": "Define the activity as exclusive.", + "popular": true + } + ] + }, + { + "name": "executionlistenerspackage", + "properties": [ + { + "id": "executionlisteners", + "type": "multiplecomplex", + "title": "执行监听器", + "value": "", + "description": "Listeners for an activity, process, sequence flow, start and end event.", + "popular": true + } + ] + }, + { + "name": "tasklistenerspackage", + "properties": [ + { + "id": "tasklisteners", + "type": "multiplecomplex", + "title": "任务监听器", + "value": "", + "description": "Listeners for a user task", + "popular": true + } + ] + }, + { + "name": "eventlistenerspackage", + "properties": [ + { + "id": "eventlisteners", + "type": "multiplecomplex", + "title": "事件监听器", + "value": "", + "description": "Listeners for any event happening in the Activiti Engine. It's also possible to rethrow the event as a signal, message or error event", + "popular": true + } + ] + }, + { + "name": "usertaskassignmentpackage", + "properties": [ + { + "id": "usertaskassignment", + "type": "Complex", + "title": "代理", + "value": "", + "description": "Assignment definition for the user task", + "popular": true + } + ] + }, + { + "name": "formpropertiespackage", + "properties": [ + { + "id": "formproperties", + "type": "Complex", + "title": "动态表单属性", + "value": "", + "description": "Definition of the form with a list of form properties", + "popular": true + } + ] + }, + { + "name": "formkeydefinitionpackage", + "properties": [ + { + "id": "formkeydefinition", + "type": "String", + "title": "自定义表单", + "value": "", + "description": "用户任务表单编号", + "popular": true + } + ] + }, + { + "name": "duedatedefinitionpackage", + "properties": [ + { + "id": "duedatedefinition", + "type": "String", + "title": "到期日期", + "value": "", + "description": "用户任务到期时间", + "popular": true + } + ] + }, + { + "name": "prioritydefinitionpackage", + "properties": [ + { + "id": "prioritydefinition", + "type": "String", + "title": "优先级", + "value": "", + "description": "用户任务优先级", + "popular": true + } + ] + }, + { + "name": "duedatedefinitionpackage", + "properties": [ + { + "id": "duedatedefinition", + "type": "String", + "title": "到期日期", + "value": "", + "description": "Due date of the user task.", + "popular": true + } + ] + }, + { + "name": "servicetaskclasspackage", + "properties": [ + { + "id": "servicetaskclass", + "type": "String", + "title": "监听类", + "value": "", + "description": "Class that implements the service task logic.", + "popular": true + } + ] + }, + { + "name": "servicetaskexpressionpackage", + "properties": [ + { + "id": "servicetaskexpression", + "type": "String", + "title": "表达式", + "value": "", + "description": "Service task logic defined with an expression.", + "popular": true + } + ] + }, + { + "name": "servicetaskdelegateexpressionpackage", + "properties": [ + { + "id": "servicetaskdelegateexpression", + "type": "String", + "title": "委托表达式", + "value": "", + "description": "Service task logic defined with a delegate expression.", + "popular": true + } + ] + }, + { + "name": "servicetaskfieldspackage", + "properties": [ + { + "id": "servicetaskfields", + "type": "Complex", + "title": "字段", + "value": "", + "description": "Field extensions", + "popular": true + } + ] + }, + { + "name": "servicetaskresultvariablepackage", + "properties": [ + { + "id": "servicetaskresultvariable", + "type": "String", + "title": "Result variable name", + "value": "", + "description": "Process variable name to store the service task result.", + "popular": true + } + ] + }, + { + "name": "scriptformatpackage", + "properties": [ + { + "id": "scriptformat", + "type": "String", + "title": "脚本格式", + "value": "", + "description": "Script format of the script task.", + "popular": true + } + ] + }, + { + "name": "scripttextpackage", + "properties": [ + { + "id": "scripttext", + "type": "Text", + "title": "脚本", + "value": "", + "description": "Script text of the script task.", + "popular": true + } + ] + }, + { + "name": "ruletask_rulespackage", + "properties": [ + { + "id": "ruletask_rules", + "type": "String", + "title": "规则", + "value": "", + "description": "Rules of the rule task.", + "popular": true + } + ] + }, + { + "name": "ruletask_variables_inputpackage", + "properties": [ + { + "id": "ruletask_variables_input", + "type": "String", + "title": "输入变量", + "value": "", + "description": "Input variables of the rule task.", + "popular": true + } + ] + }, + { + "name": "ruletask_excludepackage", + "properties": [ + { + "id": "ruletask_exclude", + "type": "Boolean", + "title": "除外", + "value": "false", + "description": "Use the rules property as exclusion.", + "popular": true + } + ] + }, + { + "name": "ruletask_resultpackage", + "properties": [ + { + "id": "ruletask_result", + "type": "String", + "title": "返回变量", + "value": "", + "description": "Result variable of the rule task.", + "popular": true + } + ] + }, + { + "name": "mailtasktopackage", + "properties": [ + { + "id": "mailtaskto", + "type": "Text", + "title": "接收人", + "value": "", + "description": "The recipients if the e-mail. Multiple recipients are defined in a comma-separated list.", + "popular": true + } + ] + }, + { + "name": "mailtaskfrompackage", + "properties": [ + { + "id": "mailtaskfrom", + "type": "Text", + "title": "发件人", + "value": "", + "description": "The sender e-mail address. If not provided, the default configured from address is used.", + "popular": true + } + ] + }, + { + "name": "mailtasksubjectpackage", + "properties": [ + { + "id": "mailtasksubject", + "type": "Text", + "title": "主题", + "value": "", + "description": "The subject of the e-mail.", + "popular": true + } + ] + }, + { + "name": "mailtaskccpackage", + "properties": [ + { + "id": "mailtaskcc", + "type": "Text", + "title": "转发", + "value": "", + "description": "The cc's of the e-mail. Multiple recipients are defined in a comma-separated list", + "popular": true + } + ] + }, + { + "name": "mailtaskbccpackage", + "properties": [ + { + "id": "mailtaskbcc", + "type": "Text", + "title": "密送", + "value": "", + "description": "The bcc's of the e-mail. Multiple recipients are defined in a comma-separated list", + "popular": true + } + ] + }, + { + "name": "mailtasktextpackage", + "properties": [ + { + "id": "mailtasktext", + "type": "Text", + "title": "内容", + "value": "", + "description": "The content of the e-mail, in case one needs to send plain none-rich e-mails. Can be used in combination with html, for e-mail clients that don't support rich content. The client will then fall back to this text-only alternative.", + "popular": true + } + ] + }, + { + "name": "mailtaskhtmlpackage", + "properties": [ + { + "id": "mailtaskhtml", + "type": "Text", + "title": "Html", + "value": "", + "description": "A piece of HTML that is the content of the e-mail.", + "popular": true + } + ] + }, + { + "name": "mailtaskcharsetpackage", + "properties": [ + { + "id": "mailtaskcharset", + "type": "String", + "title": "Charset", + "value": "", + "description": "Allows to change the charset of the email, which is necessary for many non-English languages. ", + "popular": true + } + ] + }, + { + "name": "callactivitycalledelementpackage", + "properties": [ + { + "id": "callactivitycalledelement", + "type": "String", + "title": "被调用元素", + "value": "", + "description": "Process reference.", + "popular": true + } + ] + }, + { + "name": "callactivityinparameterspackage", + "properties": [ + { + "id": "callactivityinparameters", + "type": "Complex", + "title": "输入参数", + "value": "", + "description": "Definition of the input parameters", + "popular": true + } + ] + }, + { + "name": "callactivityoutparameterspackage", + "properties": [ + { + "id": "callactivityoutparameters", + "type": "Complex", + "title": "输出参数", + "value": "", + "description": "Definition of the output parameters", + "popular": true + } + ] + }, + { + "name": "cameltaskcamelcontextpackage", + "properties": [ + { + "id": "cameltaskcamelcontext", + "type": "String", + "title": "Camel内容", + "value": "", + "description": "An optional camel context definition, if left empty the default is used.", + "popular": true + } + ] + }, + { + "name": "muletaskendpointurlpackage", + "properties": [ + { + "id": "muletaskendpointurl", + "type": "String", + "title": "终端url", + "value": "", + "description": "A required endpoint url to sent the message to Mule.", + "popular": true + } + ] + }, + { + "name": "muletasklanguagepackage", + "properties": [ + { + "id": "muletasklanguage", + "type": "String", + "title": "语言", + "value": "", + "description": "A required definition for the language to resolve the payload expression, like juel.", + "popular": true + } + ] + }, + { + "name": "muletaskpayloadexpressionpackage", + "properties": [ + { + "id": "muletaskpayloadexpression", + "type": "String", + "title": "有效载荷表达式", + "value": "", + "description": "A required definition for the payload of the message sent to Mule.", + "popular": true + } + ] + }, + { + "name": "muletaskresultvariablepackage", + "properties": [ + { + "id": "muletaskresultvariable", + "type": "String", + "title": "返回变量", + "value": "", + "description": "An optional result variable for the payload returned.", + "popular": true + } + ] + }, + { + "name": "conditionsequenceflowpackage", + "properties": [ + { + "id": "conditionsequenceflow", + "type": "Complex", + "title": "流转条件", + "value": "", + "description": "The condition of the sequence flow", + "popular": true + } + ] + }, + { + "name": "defaultflowpackage", + "properties": [ + { + "id": "defaultflow", + "type": "Boolean", + "title": "默认流转", + "value": "false", + "description": "Define the sequence flow as default", + "popular": true, + "refToView": "default" + } + ] + }, + { + "name": "conditionalflowpackage", + "properties": [ + { + "id": "conditionalflow", + "type": "Boolean", + "title": "Conditional flow", + "value": "false", + "description": "Define the sequence flow with a condition", + "popular": true + } + ] + }, + { + "name": "timercycledefinitionpackage", + "properties": [ + { + "id": "timercycledefinition", + "type": "String", + "title": "循环时间(例:R3/PT10H)", + "value": "", + "description": "Define the timer with a ISO-8601 cycle.", + "popular": true + } + ] + }, + { + "name": "timerdatedefinitionpackage", + "properties": [ + { + "id": "timerdatedefinition", + "type": "String", + "title": "开始时间(ISO-8601)", + "value": "", + "description": "Define the timer with a ISO-8601 date definition.", + "popular": true + } + ] + }, + { + "name": "timerdurationdefinitionpackage", + "properties": [ + { + "id": "timerdurationdefinition", + "type": "String", + "title": "持续时间(例:PT5M)", + "value": "", + "description": "Define the timer with a ISO-8601 duration.", + "popular": true + } + ] + }, + { + "name": "timerenddatedefinitionpackage", + "properties": [ + { + "id": "timerenddatedefinition", + "type": "String", + "title": "结束时间(ISO-8601)", + "value": "", + "description": "Define the timer with a ISO-8601 duration.", + "popular": true + } + ] + }, + { + "name": "messagerefpackage", + "properties": [ + { + "id": "messageref", + "type": "String", + "title": "消息引用", + "value": "", + "description": "Define the message name.", + "popular": true + } + ] + }, + { + "name": "signalrefpackage", + "properties": [ + { + "id": "signalref", + "type": "String", + "title": "信号引用", + "value": "", + "description": "Define the signal name.", + "popular": true + } + ] + }, + { + "name": "errorrefpackage", + "properties": [ + { + "id": "errorref", + "type": "String", + "title": "错误引用", + "value": "", + "description": "Define the error name.", + "popular": true + } + ] + }, + { + "name": "cancelactivitypackage", + "properties": [ + { + "id": "cancelactivity", + "type": "Boolean", + "title": "取消活动", + "value": "true", + "description": "Should the activity be cancelled", + "popular": true, + "refToView": [ + "frame", + "frame2" + ] + } + ] + }, + { + "name": "initiatorpackage", + "properties": [ + { + "id": "initiator", + "type": "String", + "title": "发起人", + "value": "", + "description": "Initiator of the process.", + "popular": true + } + ] + }, + { + "name": "textpackage", + "properties": [ + { + "id": "text", + "type": "String", + "title": "Text", + "value": "", + "description": "The text of the text annotation.", + "popular": true, + "refToView": "text" + } + ] + }, + { + "name": "multiinstance_typepackage", + "properties": [ + { + "id": "multiinstance_type", + "type": "kisbpm-multiinstance", + "title": "多实例类型", + "value": "None", + "description": "Repeated activity execution (parallel or sequential) can be displayed through different loop types", + "popular": true, + "refToView": "multiinstance" + } + ] + }, + { + "name": "multiinstance_cardinalitypackage", + "properties": [ + { + "id": "multiinstance_cardinality", + "type": "String", + "title": "基数(多实例)", + "value": "", + "description": "Define the cardinality of multi instance.", + "popular": true + } + ] + }, + { + "name": "multiinstance_collectionpackage", + "properties": [ + { + "id": "multiinstance_collection", + "type": "String", + "title": "集合(多实例)", + "value": "", + "description": "Define the collection for the multi instance.", + "popular": true + } + ] + }, + { + "name": "multiinstance_variablepackage", + "properties": [ + { + "id": "multiinstance_variable", + "type": "String", + "title": "元素变量(多实例)", + "value": "", + "description": "Define the element variable for the multi instance.", + "popular": true + } + ] + }, + { + "name": "multiinstance_conditionpackage", + "properties": [ + { + "id": "multiinstance_condition", + "type": "String", + "title": "完成条件(多实例)", + "value": "", + "description": "Define the completion condition for the multi instance.", + "popular": true + } + ] + }, + { + "name": "isforcompensationpackage", + "properties": [ + { + "id": "isforcompensation", + "type": "Boolean", + "title": "是否为补偿", + "value": "false", + "description": "一个标志,标识是否这个活动的目的是为了补偿.", + "popular": true, + "refToView": "compensation" + } + ] + }, + { + "name": "sequencefloworderpackage", + "properties": [ + { + "id": "sequencefloworder", + "type": "Complex", + "title": "流动顺序", + "value": "", + "description": "Order outgoing sequence flows.", + "popular": true + } + ] + }, + { + "name": "signaldefinitionspackage", + "properties": [ + { + "id": "signaldefinitions", + "type": "multiplecomplex", + "title": "信号定义", + "value": "", + "description": "Signal definitions", + "popular": true + } + ] + }, + { + "name": "messagedefinitionspackage", + "properties": [ + { + "id": "messagedefinitions", + "type": "multiplecomplex", + "title": "消息定义", + "value": "", + "description": "Message definitions", + "popular": true + } + ] + }, + { + "name": "istransactionpackage", + "properties": [ + { + "id": "istransaction", + "type": "Boolean", + "title": "是否事务处理子过程", + "value": "false", + "description": "A flag that identifies whether this sub process is of type transaction.", + "popular": true, + "refToView": "border" + } + ] + }, + { + "name": "terminateAllpackage", + "properties": [ + { + "id": "terminateAll", + "type": "Boolean", + "title": "终止全部", + "value": "false", + "description": "Enable to terminate the process instance", + "popular": true + } + ] + } + ], + "stencils": [ + { + "type": "node", + "id": "BPMNDiagram", + "title": "BPMN-Diagram", + "description": "A BPMN 2.0 diagram.", + "view": "\n\n \n \n \n \n \t\n \n", + "icon": "diagram.png", + "groups": [ + "Diagram" + ], + "mayBeRoot": true, + "hide": true, + "propertyPackages": [ + "process_idpackage", + "namepackage", + "documentationpackage", + "process_authorpackage", + "process_versionpackage", + "process_namespacepackage", + "executionlistenerspackage", + "eventlistenerspackage", + "signaldefinitionspackage", + "messagedefinitionspackage" + ], + "hiddenPropertyPackages": [], + "roles": [] + }, + { + "type": "node", + "id": "StartNoneEvent", + "title": "开始", + "description": "A start event without a specific trigger", + "view": "\n\n \n \n \t\n \n \n \n\t\n \n", + "icon": "startevent/none.png", + "groups": [ + "启动事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "initiatorpackage", + "formkeydefinitionpackage", + "formpropertiespackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "Startevents_all", + "StartEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "StartTimerEvent", + "title": "定时事件", + "description": "A start event with a timer trigger", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n \n\t\n \n", + "icon": "startevent/timer.png", + "groups": [ + "启动事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "timercycledefinitionpackage", + "timerdatedefinitionpackage", + "timerdurationdefinitionpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "Startevents_all", + "StartEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "StartSignalEvent", + "title": "信号事件", + "description": "A start event with a signal trigger", + "view": "\n\n \n \n \t\n \n \n\n \n \n \n\t\n \n", + "icon": "startevent/signal.png", + "groups": [ + "启动事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "signalrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "Startevents_all", + "StartEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "StartMessageEvent", + "title": "消息事件", + "description": "A start event with a message trigger", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n \n\t\n \n", + "icon": "startevent/message.png", + "groups": [ + "启动事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "messagerefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "Startevents_all", + "StartEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "StartErrorEvent", + "title": "异常事件", + "description": "A start event that catches a thrown BPMN error", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n\t\n \n", + "icon": "startevent/error.png", + "groups": [ + "启动事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "errorrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "Startevents_all", + "StartEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "UserTask", + "title": "用户活动", + "description": "分配给特定人的任务 ", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\n \n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.user.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "usertaskassignmentpackage", + "formkeydefinitionpackage", + "duedatedefinitionpackage", + "prioritydefinitionpackage", + "formpropertiespackage", + "tasklistenerspackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "ServiceTask", + "title": "服务任务", + "description": "An automatic task with service logic", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\n\t\n \n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.service.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "servicetaskclasspackage", + "servicetaskexpressionpackage", + "servicetaskdelegateexpressionpackage", + "servicetaskfieldspackage", + "servicetaskresultvariablepackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "ScriptTask", + "title": "脚本任务", + "description": "An automatic task with script logic", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\n \n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.script.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "scriptformatpackage", + "scripttextpackage", + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "BusinessRule", + "title": "规则任务", + "description": "An automatic task with rule logic", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n \t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n \n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.business.rule.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "ruletask_rulespackage", + "ruletask_variables_inputpackage", + "ruletask_excludepackage", + "ruletask_resultpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "ReceiveTask", + "title": "接受任务", + "description": "An task that waits for a signal", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n \n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.receive.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "ManualTask", + "title": "手工任务", + "description": "An automatic task with no logic", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n \n \t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.manual.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "MailTask", + "title": "邮件任务", + "description": "An mail task", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n \n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.send.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "mailtasktopackage", + "mailtaskfrompackage", + "mailtasksubjectpackage", + "mailtaskccpackage", + "mailtaskbccpackage", + "mailtasktextpackage", + "mailtaskhtmlpackage", + "mailtaskcharsetpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "CamelTask", + "title": "Camel任务", + "description": "An task that sends a message to Camel", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\n \n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.camel.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "cameltaskcamelcontextpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "MuleTask", + "title": "Mule任务", + "description": "An task that sends a message to Mule", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\n \n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.mule.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage", + "muletaskendpointurlpackage", + "muletasklanguagepackage", + "muletaskpayloadexpressionpackage", + "muletaskresultvariablepackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "SendTask", + "title": "Send task", + "description": "An task that sends a message", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n\t\t\n\t\t\n \n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/list/type.send.png", + "groups": [ + "活动列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "ActivitiesMorph", + "all" + ] + }, + { + "type": "node", + "id": "SubProcess", + "title": "子流程", + "description": "子流程范围", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n \n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n \n", + "icon": "activity/expanded.subprocess.png", + "groups": [ + "结构列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "istransactionpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EventSubProcess", + "title": "事件子流程", + "description": "一个事件周期的子流程", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \n \n\t\n\t\n \t\n\t\t\n \t\n\t\n\t\n \n", + "icon": "activity/event.subprocess.png", + "groups": [ + "结构列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "all" + ] + }, + { + "type": "node", + "id": "CallActivity", + "title": "调用活动", + "description": "一个调用活动", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \t\n \n \n\t\n \n\t\n\t\t\n\t\t\n \n\t\n\t\t\n\t\n\t\n\t\n\t\t\n\t\n\n\t\n\t\t\n\t\n \n", + "icon": "activity/task.png", + "groups": [ + "结构列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "executionlistenerspackage", + "callactivitycalledelementpackage", + "callactivityinparameterspackage", + "callactivityoutparameterspackage", + "multiinstance_typepackage", + "multiinstance_cardinalitypackage", + "multiinstance_collectionpackage", + "multiinstance_variablepackage", + "multiinstance_conditionpackage", + "isforcompensationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "Activity", + "sequence_start", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "ExclusiveGateway", + "title": "互斥网关", + "description": "一个选择的网关", + "view": "\n\n \n \n \n \t\t\t\t\t\n \n \n \n \n \n \n \n\t\n\t\n\t\n \n\n", + "icon": "gateway/exclusive.databased.png", + "groups": [ + "网关列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "sequencefloworderpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "GatewaysMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "ParallelGateway", + "title": "并行网关", + "description": "一个并行的网关", + "view": "\n\n \n \n \n \n \n \n \n \n\t\n\t\n \n\n", + "icon": "gateway/parallel.png", + "groups": [ + "网关列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "sequencefloworderpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "GatewaysMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "InclusiveGateway", + "title": "包容性网关", + "description": "一个包容性网关", + "view": "\n\n \n \n \n \n\n \n \n \n\t\n\t\n \n\n", + "icon": "gateway/inclusive.png", + "groups": [ + "网关列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "sequencefloworderpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "GatewaysMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EventGateway", + "title": "事件网关", + "description": "一个事件网关", + "view": "\n\n \n \n \n \n \n \t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t\n\t\n\t\n\t\n \t\n\t\n\n", + "icon": "gateway/eventbased.png", + "groups": [ + "网关列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "asynchronousdefinitionpackage", + "exclusivedefinitionpackage", + "sequencefloworderpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "GatewaysMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "BoundaryErrorEvent", + "title": "边界错误事件", + "description": "一个捕捉BPMN异常的边界事件", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n \n\t\n \n", + "icon": "catching/error.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "errorrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary" + ] + }, + { + "type": "node", + "id": "BoundaryTimerEvent", + "title": "定时边界事件", + "description": "一个定时触发的边界事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \n \n \n \n \n \t\n\t\n \n", + "icon": "catching/timer.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "timercycledefinitionpackage", + "timerdatedefinitionpackage", + "timerdurationdefinitionpackage", + "timerenddatedefinitionpackage", + "cancelactivitypackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary" + ] + }, + { + "type": "node", + "id": "BoundarySignalEvent", + "title": "边界信号事件", + "description": "一个信号触发的边界事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \n \n \n\t\n\t\n \n", + "icon": "catching/signal.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "signalrefpackage", + "cancelactivitypackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary" + ] + }, + { + "type": "node", + "id": "BoundaryMessageEvent", + "title": "边界消息事件", + "description": "一个边界消息事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \t\n \n \n \n\t\n\t\t\n\t\n\t\n\t\n \n", + "icon": "catching/message.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "messagerefpackage", + "cancelactivitypackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary" + ] + }, + { + "type": "node", + "id": "BoundaryCancelEvent", + "title": "边界取消事件", + "description": "一个边界取消事件", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n \n \n\t\n \n", + "icon": "catching/cancel.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary" + ] + }, + { + "type": "node", + "id": "BoundaryCompensationEvent", + "title": "边界修正事件", + "description": "一个边界修正事件", + "view": "\n\n \n \n \t\n \n \n \n\t\n \n \n \n \n \n\t\n \n", + "icon": "catching/compensation.png", + "groups": [ + "边界事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "BoundaryEventsMorph", + "IntermediateEventOnActivityBoundary", + "all" + ] + }, + { + "type": "node", + "id": "CatchTimerEvent", + "title": "中间定时器捕获事件", + "description": "定时器触发的中间捕获事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \n \n \n \n \n \t\n\t\n \n", + "icon": "catching/timer.png", + "groups": [ + "中间捕获事件列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "timercycledefinitionpackage", + "timerdatedefinitionpackage", + "timerdurationdefinitionpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "sequence_end", + "CatchEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "CatchSignalEvent", + "title": "中间信号捕获事件", + "description": "信号触发的捕获事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \n \n \n\t\n\t\n \n", + "icon": "catching/signal.png", + "groups": [ + "中间捕获事件列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "signalrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "sequence_end", + "CatchEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "CatchMessageEvent", + "title": "中间消息捕获事件", + "description": "一个消息触发的中间捕获事件", + "view": "\n\n \n \n \t\n \n \n \n \n \t\n \n \t\n \n \n \n\t\n\t\t\n\t\n\t\n\t\n \n", + "icon": "catching/message.png", + "groups": [ + "中间捕获事件列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "messagerefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "sequence_start", + "sequence_end", + "CatchEventsMorph", + "all" + ] + }, + { + "type": "node", + "id": "ThrowNoneEvent", + "title": "中间抛出事件", + "description": "无触发器的中间抛出事件", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n\t\n \n", + "icon": "throwing/none.png", + "groups": [ + "中间抛出事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ThrowEventsMorph", + "sequence_start", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "ThrowSignalEvent", + "title": "信号中间抛出事件", + "description": "一个信号触发的中间抛出事件", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n\t\n \n", + "icon": "throwing/signal.png", + "groups": [ + "中间抛出事件" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "signalrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ThrowEventsMorph", + "sequence_start", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EndNoneEvent", + "title": "结束任务", + "description": "一个无触发器的结束任务", + "view": "\n\n \n \n \t\n \n \n \n\t\n \n", + "icon": "endevent/none.png", + "groups": [ + "结束任务列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "EndEventsMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EndErrorEvent", + "title": "结束错误任务", + "description": "An end event that throws an error event", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n\t\n \n", + "icon": "endevent/error.png", + "groups": [ + "结束任务列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "errorrefpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "EndEventsMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EndCancelEvent", + "title": "结束取消任务", + "description": "A cancel end event", + "view": "\n\n \n \n \t\n \n \n \n \n \n\t\n \n", + "icon": "endevent/cancel.png", + "groups": [ + "结束任务列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "EndEventsMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "EndTerminateEvent", + "title": "终结任务", + "description": "A terminate end event", + "view": "\n\n \n \n \t\n \n \n \n \n \n\t\n \n", + "icon": "endevent/terminate.png", + "groups": [ + "结束任务列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "executionlistenerspackage", + "terminateAllpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "EndEventsMorph", + "sequence_end", + "all" + ] + }, + { + "type": "node", + "id": "Pool", + "title": "池", + "description": "A pool to stucture the process definition", + "view": "\n\n \n \n \t\n \t\n \t\n \t\n \t\n \n \n \n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t \t\n \t\n \n \n\t\n\t\n\t\n\t\n \n \n \n", + "icon": "swimlane/pool.png", + "groups": [ + "泳道列表" + ], + "layout": [ + { + "type": "layout.bpmn2_0.pool" + } + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "process_idpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "canContainArtifacts", + "all" + ] + }, + { + "type": "node", + "id": "Lane", + "title": "泳道", + "description": "A lane to stucture the process definition", + "view": "\n\n \n \n \n \n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n \t\t\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n \n\t\n \n", + "icon": "swimlane/lane.png", + "groups": [ + "泳道列表" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "PoolChild", + "canContainArtifacts", + "all" + ] + }, + { + "type": "edge", + "id": "SequenceFlow", + "title": "顺序流", + "description": "顺序流定义活动的执行顺序", + "view": "\r\n\r\n\t\r\n\t \t\r\n\t \t\t\r\n\t\t\t\r\n\t \t\r\n\t \t\r\n\t \t\t\r\n\t \t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\r\n\t\r\n", + "icon": "connector/sequenceflow.png", + "groups": [ + "连接对象" + ], + "layout": [ + { + "type": "layout.bpmn2_0.sequenceflow" + } + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "conditionsequenceflowpackage", + "executionlistenerspackage", + "defaultflowpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ConnectingObjectsMorph", + "all" + ] + }, + { + "type": "edge", + "id": "MessageFlow", + "title": "消息流", + "description": "Message flow to connect elements in different pools.", + "view": "\r\n\r\n\t\r\n\t\t\r\n\t \t\t\r\n\t \t\t\r\n\t \t\r\n\r\n\t \t\r\n\t \t\t\r\n\t \t\r\n\t\r\n\t\r\n\t \r\n\t\t\r\n\t\r\n", + "icon": "connector/messageflow.png", + "groups": [ + "连接对象" + ], + "layout": [ + { + "type": "layout.bpmn2_0.sequenceflow" + } + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ConnectingObjectsMorph", + "all" + ] + }, + { + "type": "edge", + "id": "Association", + "title": "注释", + "description": "连接一个注释到指定元素", + "view": "\r\n\r\n\t\r\n\t \r\n\t\t\r\n\t\r\n", + "icon": "connector/association.undirected.png", + "groups": [ + "连接对象" + ], + "layout": [ + { + "type": "layout.bpmn2_0.sequenceflow" + } + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ConnectingObjectsMorph", + "all" + ] + }, + { + "type": "edge", + "id": "DataAssociation", + "title": "日期注释", + "description": "连接一个日期注释到指定元素", + "view": "\r\n\r\n\t\r\n\t \t\r\n\t \t\t\r\n\t \t\r\n\t\r\n\t\r\n\t \r\n\t\t\r\n\t\r\n", + "icon": "connector/association.unidirectional.png", + "groups": [ + "连接对象" + ], + "layout": [ + { + "type": "layout.bpmn2_0.sequenceflow" + } + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "ConnectingObjectsMorph", + "all" + ] + }, + { + "type": "node", + "id": "TextAnnotation", + "title": "文本注释", + "description": "连接一个文本注释到指定元素", + "view": "\n\n \n \n \t\n \n \n \n \n \n \n\t\n \n", + "icon": "artifact/text.annotation.png", + "groups": [ + "加工" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage", + "textpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "all" + ] + }, + { + "type": "node", + "id": "DataStore", + "title": "Data store", + "description": "Reference to a data store.", + "view": "\r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\t\r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t \t\r\n\t\t\r\n\t\t\t \r\n\t\r\n\r\n", + "icon": "dataobject/data.store.png", + "groups": [ + "Artifacts" + ], + "propertyPackages": [ + "overrideidpackage", + "namepackage", + "documentationpackage" + ], + "hiddenPropertyPackages": [], + "roles": [ + "all" + ] + } + ], + "rules": { + "cardinalityRules": [ + { + "role": "Startevents_all", + "incomingEdges": [ + { + "role": "SequenceFlow", + "maximum": 0 + } + ] + }, + { + "role": "Endevents_all", + "outgoingEdges": [ + { + "role": "SequenceFlow", + "maximum": 0 + } + ] + } + ], + "connectionRules": [ + { + "role": "SequenceFlow", + "connects": [ + { + "from": "sequence_start", + "to": [ + "sequence_end" + ] + } + ] + }, + { + "role": "Association", + "connects": [ + { + "from": "sequence_start", + "to": [ + "TextAnnotation" + ] + }, + { + "from": "sequence_end", + "to": [ + "TextAnnotation" + ] + }, + { + "from": "TextAnnotation", + "to": [ + "sequence_end" + ] + }, + { + "from": "BoundaryCompensationEvent", + "to": [ + "sequence_end" + ] + }, + { + "from": "TextAnnotation", + "to": [ + "sequence_start" + ] + }, + { + "from": "BoundaryCompensationEvent", + "to": [ + "sequence_start" + ] + } + ] + }, + { + "role": "DataAssociation", + "connects": [ + { + "from": "sequence_start", + "to": [ + "DataStore" + ] + }, + { + "from": "sequence_end", + "to": [ + "DataStore" + ] + }, + { + "from": "DataStore", + "to": [ + "sequence_end" + ] + }, + { + "from": "DataStore", + "to": [ + "sequence_start" + ] + } + ] + }, + { + "role": "IntermediateEventOnActivityBoundary", + "connects": [ + { + "from": "Activity", + "to": [ + "IntermediateEventOnActivityBoundary" + ] + } + ] + } + ], + "containmentRules": [ + { + "role": "BPMNDiagram", + "contains": [ + "all" + ] + }, + { + "role": "SubProcess", + "contains": [ + "sequence_start", + "sequence_end", + "from_task_event", + "to_task_event", + "EventSubProcess", + "TextAnnotation", + "DataStore" + ] + }, + { + "role": "EventSubProcess", + "contains": [ + "sequence_start", + "sequence_end", + "from_task_event", + "to_task_event", + "TextAnnotation", + "DataStore" + ] + }, + { + "role": "Pool", + "contains": [ + "Lane" + ] + }, + { + "role": "Lane", + "contains": [ + "sequence_start", + "sequence_end", + "EventSubProcess", + "TextAnnotation", + "DataStore" + ] + } + ], + "morphingRules": [ + { + "role": "ActivitiesMorph", + "baseMorphs": [ + "UserTask" + ], + "preserveBounds": true + }, + { + "role": "GatewaysMorph", + "baseMorphs": [ + "ExclusiveGateway" + ] + }, + { + "role": "StartEventsMorph", + "baseMorphs": [ + "StartNoneEvent" + ] + }, + { + "role": "EndEventsMorph", + "baseMorphs": [ + "StartNoneEvent" + ] + }, + { + "role": "CatchEventsMorph", + "baseMorphs": [ + "CatchTimerEvent" + ] + }, + { + "role": "ThrowEventsMorph", + "baseMorphs": [ + "ThrowNoneEvent" + ] + }, + { + "role": "BoundaryEventsMorph", + "baseMorphs": [ + "ThrowNoneEvent" + ] + }, + { + "role": "BoundaryCompensationEvent", + "baseMorphs": [ + "BoundaryCompensationEvent" + ] + }, + { + "role": "TextAnnotation", + "baseMorphs": [ + "TextAnnotation" + ] + }, + { + "role": "DataStore", + "baseMorphs": [ + "DataStore" + ] + } + ] + } +} diff --git a/module-activiti/src/main/resources/templates/activiti/list.html b/module-activiti/src/main/resources/templates/activiti/list.html index cdde9e7a..5d908093 100644 --- a/module-activiti/src/main/resources/templates/activiti/list.html +++ b/module-activiti/src/main/resources/templates/activiti/list.html @@ -9,6 +9,7 @@ +
@@ -122,7 +123,11 @@ if(!row.deploymentId) { return '-'; } - return ''; + var flowChatImg = '' + setTimeout(function() { + new Viewer(document.getElementById('flowChat'+ row.id)); + }, 50); + return flowChatImg; } }, {field: 'option2', width: 80, title: '操作', align:'center', fixed: 'right', @@ -248,18 +253,6 @@ top.dialog.close(loadLayerIndex); }); }); - } else if(layEvent === 'flowChatEvent') { - if(!data.deploymentId) { - top.dialog.msg('流程未部署,无法查看流程图'); - return; - } - top.dialog.open({ - url: top.restAjax.path('route/activiti/get-process-image/{deploymentId}', [data.deploymentId]), - title: '流程图', - width: '800px', - height: '400px', - onClose: function() {} - }); } }); }); diff --git a/module-activiti/src/main/resources/templates/activiti/procdef/list.html b/module-activiti/src/main/resources/templates/activiti/procdef/list.html index fd564548..d22bab0c 100644 --- a/module-activiti/src/main/resources/templates/activiti/procdef/list.html +++ b/module-activiti/src/main/resources/templates/activiti/procdef/list.html @@ -9,6 +9,7 @@ +
@@ -110,15 +111,6 @@ return rowData; } }, - {field:'category', width:150, title: '目录名称', align:'center', - templet: function(row) { - var rowData = row[this.field]; - if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { - return '-'; - } - return rowData; - } - }, {field:'resourceName', width:200, title: '流程资源名称', align:'center', templet: function(row) { var rowData = row[this.field]; @@ -128,19 +120,22 @@ return rowData; } }, - {field: 'diagramResourceName', width: 80, title: '流程图', align:'center', fixed: 'right', + {field: 'diagramResourceName', width: 80, title: '流程图', align:'center', templet: function(row) { if(!row.deploymentId) { return '-'; } - return ''; + var flowChatImg = '' + setTimeout(function() { + new Viewer(document.getElementById('flowChat'+ row.id)); + }, 50); + return flowChatImg; } }, - {field: 'form', width: 180, title: '操作', align:'center', fixed: 'right', + {field: 'form', width: 100, title: '操作', align:'center', fixed: 'right', templet: function(row) { return '
' + - ''+ - ''+ + ''+ '
'; } } @@ -185,20 +180,14 @@ table.on('tool(dataTable)', function(obj) { var data = obj.data; var layEvent = obj.event; - if(layEvent === 'flowChatEvent') { - if(!data.deploymentId) { - top.dialog.msg('流程未部署,无法查看流程图'); - return; - } + if(layEvent === 'nodeEvent') { top.dialog.open({ - url: top.restAjax.path('route/activiti/get-process-image/{deploymentId}', [data.deploymentId]), - title: '流程图', - width: '800px', - height: '400px', + url: top.restAjax.path('route/oa/node-field/list-node?deploymentId={deploymentId}', [data.deploymentId]), + title: '节点字段管理', + width: '400px', + height: '500px', onClose: function() {} }); - } else if(layEvent === 'bindFormEvent') { - } }); }); diff --git a/module-activiti/src/main/resources/templates/activiti/update.html b/module-activiti/src/main/resources/templates/activiti/update.html index 6470a763..39eaaa52 100644 --- a/module-activiti/src/main/resources/templates/activiti/update.html +++ b/module-activiti/src/main/resources/templates/activiti/update.html @@ -116,6 +116,7 @@ + diff --git a/module-activiti/src/main/resources/templates/oa/list-node-field.html b/module-activiti/src/main/resources/templates/oa/list-node-field.html new file mode 100644 index 00000000..f832c687 --- /dev/null +++ b/module-activiti/src/main/resources/templates/oa/list-node-field.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + +
序号字段名可见可操作
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/module-activiti/src/main/resources/templates/oa/list-node.html b/module-activiti/src/main/resources/templates/oa/list-node.html new file mode 100644 index 00000000..5aa175fd --- /dev/null +++ b/module-activiti/src/main/resources/templates/oa/list-node.html @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + +
+
+
+
+
+ + + + + + + + + + + + + +
序号节点ID表单管理
+
+
+
+
+
+ + + + + \ No newline at end of file