发起人自选-钉钉审批

文章讨论了钉钉审批流程中发起人指定后续审批人的设计,指出这可能导致培训成本增加和潜在问题。作者提倡业务规则应驱动流程,并质疑在自由选择审批人设置下的灵活性与流程目的之间的平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景描述

  • 配置一个审批流程,在某些审批节点,不能确定谁具体来审批,所以需要手工选择一个人或者多个人保证流程能得以顺利通过。
  • 有些审批流程的做法是,上一个节点来选择指定的人,而钉钉的做法是发起人来指定。

钉钉设置规则

  • 在某个节点指定发起人自选选项。可以 自选一个人 或者自选多个人,默认选项如下,自选一个人,范围是全公司。

  • 第二个选项是指定人员,然后可以选多个人,让发起人选一个(未测试只有一个人是否还要在发起人设置)

  • 第三个选项角色,在指定的角色(就是分组标签)里面选一个人

  • 第二种情况是 自选多个人,同样分为三类情况,全公司,指定人员,角色,多人时如果选择一个人,或者角色未包含多个人,并未测试,多人审批规则有三种,依次审批,会签,或签(单人抢批)

探讨

  1. 流程让发起人指定后面节点的审批人,流程本身设计是否有问题,特别会带来流程的培训成本,以及如果发起人指错审批人,都会带来一系列的问题。
  2. 如果业务场景有这种需要,更应该制定对应的业务规则,应该让业务规则驱动流程。
  3. 作为流程设计者,这种流程设计考虑到灵活性,可是流程出发点不是为了灵活,应该如何灵活的让流程不灵活。
  4. 另外一个值得探讨就是审批过程中,发送审批到下一节点的选人设置,特别是可以自由选择,这个我们会专门找一个章节探讨。
在 Flowable 中,可以使用自定义的 Java 类来实现自选人节点,以便在流程中动态选择任务的执行人。 以下是实现自选人节点的一般步骤: 1. 创建自定义的 Java 类,继承 `org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior` 类,并重写 `execute` 方法。 2. 在 `execute` 方法中,通过 `delegateTask.getTaskDefinition()` 方法获取任务定义,再通过 `taskDefinition.getTaskFormHandler()` 方法获取表单处理器。 3. 在表单处理器中,可以设置自定义的表单属性,以便在表单中显示自定义的控件。 4. 在表单中,可以使用自定义的控件来选择任务执行人,例如下拉列表、多选框、文本输入框等。 5. 在流程中,当执行到自选人节点时,系统会调用自定义的 Java 类,弹出自定义的表单界面,以便选择任务执行人。 6. 在表单提交后,系统将从自定义表单控件中获取任务的执行人,并将其设置为任务的候选人或者直接分配给执行人。 以下是一个示例代码: ```java public class CustomUserTaskActivityBehavior extends UserTaskActivityBehavior { @Override public void execute(final DelegateExecution execution) { final TaskDefinition taskDefinition = this.taskDefinition; final TaskFormHandler taskFormHandler = taskDefinition.getTaskFormHandler(); // 设置自定义表单属性 final FormPropertyImpl customFormProperty = new FormPropertyImpl(); customFormProperty.setId("customProperty"); customFormProperty.setName("Custom Property"); customFormProperty.setType(new StringFormType()); customFormProperty.setWritable(true); customFormProperty.setReadable(true); customFormProperty.setRequired(false); taskFormHandler.getFormProperties().add(customFormProperty); // 打开自定义表单界面 final String formKey = taskFormHandler.getFormKey(execution); final FormService formService = Context.getProcessEngineConfiguration().getFormService(); final Object customFormValue = formService.getRenderedTaskForm(taskDefinition.getKey(), formKey, "en", execution); // 处理表单提交 final String customProperty = (String) execution.getVariable("customProperty"); taskService.setVariable(taskId, "customProperty", customProperty); // 将任务分配给执行人 final String assignee = (String) execution.getVariable("assignee"); if (StringUtils.isNotBlank(assignee)) { taskService.setAssignee(taskId, assignee); } else { final List<String> candidateUsers = new ArrayList<>(); candidateUsers.add("user1"); candidateUsers.add("user2"); taskService.addCandidateUsers(taskId, candidateUsers); } } } ``` 在这个示例代码中,我们继承了 `UserTaskActivityBehavior` 类,并重写了 `execute` 方法。在 `execute` 方法中,我们设置了一个自定义的表单属性,并打开了自定义的表单界面。在表单提交后,我们将任务分配给任务执行人。需要注意的是,在实际应用中,我们需要根据具体的场景进行修改和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值