Flowable实战(七)用户和组

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Flowable实战(七)用户和组脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

  在流程中,最重要的参与者是用户。流程定义了任务何时需要用户参与,什么用户可以参与。

  组可以理解为我们常说的角色。

  Flowable中内置了一套简单的对用户和组的支持,身份管理(IDM IDentITy Management),但从Flowable V6起,该组件从Flowable引擎模块中抽出。这是因为它不是Flowable引擎的核心内容,而且在很多企业应用中,常常需要结合现有应用系统的用户和组,并不使用或需要Flowable提供的用户和组。

一、BPMN2.0 指派用户和组

  用户和组主要在用户任务(user task)中使用。当流程执行到达用户任务时,会为指派至该任务的用户或组的任务列表添加一个新任务。

1.1 指派用户

  用户任务可以直接指派(assign)给用户。

    <userTask id="theTask" name="重要任务">
        <humanPErformer>
            <resourceAssignmentExPression>
                <formalExPRession>jinyangjie</formalExpression>
            </resourceAssignmentExpression>
        </humanPerformer>
    </userTask>

  只能指定一个用户作为任务的humanPerformer。在Flowable语中,这个用户被称作办理人(assignee)。拥有办理人的任务,在其他人的任务列表中不可见,而只能在该办理人的个人任务列表中看到。

  上面的标准用法比较笨重,使用Flowable自定义扩展以减少复杂度。

	<userTask id="theTask" name="重要任务" flowable:assignee="jinyangjie"/>

  通过TaskService获取指定用户待办理的任务

	List<Task> tasks = taskService.createTaskQuery().taskAssignee("jinyangjie").list();

1.2 指派潜在用户

  有时候,我们并不知道任务的具体办理人是谁,但知道哪些人是潜在的办理者。比如请假申请时,我们可以向部门经理或者项目经理申请,只要他们中的一个办理审批即可。

  在流程中,使用potentialOwner(潜在用户)结构指派用户的候选任务列表。

    <userTask id='theTask' name='重要任务' >
        <potentialOwner>
            <resourceAssignmentExpression>
                <formalExpression>user(jinyangjie)</formalExpression>
            </resourceAssignmentExpression>
        </potentialOwner>
    </userTask>

  Flowable自定义扩展:

	<userTask id="theTask" name="重要任务" flowable:candidateUsers="jinyangjie, zhangsan" />

  获取潜在任务,或者说候选任务列表的方法:

	List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("jinyangjie");

  在候选列表中,当其中一个潜在用户申领(claim)任务后,即代表该任务已经指定由申领人办理。

1.3 指派潜在组

    <userTask id='theTask' name='重要任务' >
        <potentialOwner>
            <resourceAssignmentExpression>
                <formalExpression>group(leader)</formalExpression>
            </resourceAssignmentExpression>
        </potentialOwner>
    </userTask>

  Flowable自定义扩展:

	<userTask id="theTask" name="重要任务" flowable:candidateGroups="leader, manager" />

  获取潜在组任务列表方法:

	List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("leader");

1.4 指派潜在用户和组

    <userTask id='theTask' name='重要任务' >
        <potentialOwner>
            <resourceAssignmentExpression>
                <formalExpression>user(jinyangjie), group(leader)</formalExpression>
            </resourceAssignmentExpression>
        </potentialOwner>
    </userTask>

  如果并未指定给定字符串是用户还是组,引擎默认其为组。

二、IDM

  IDM(身份管理 IDentity Management)是Flowable提供的用户和组的管理组件。

  默认情况下,IDM引擎在Flowable引擎启动时初始化并启动。IDM引擎管理自己的数据库表结构及下列实体:

  • User与UserEntity,用户信息。
  • Group与GroupEntity,组信息。
  • MembershipEntity,组中的用户成员。
  • Privilege与PrivilegeEntity,权限定义(例如在Flowable Modeler与Flowable Task应用中,用于控制应用界面的访问)。
  • PrivilegeMappingEntity,将用户及/或组与权限关联。
  • Token与TokenEntity,应用界面程序使用的认证令牌。

  历史与当前进行中的流程实例都在数据库中保存历史实体,因此可以选择直接查询历史表,以减少对运行时流程实例数据的访问,并提高运行时执行的性能。

三、自定义指派用户和组

  实际应用中,我们需要自定义指派用户和组,下面我们通过任务监听器实现自定义指派。

  在用户任务上添加创建事件(create event)类型的监听器,调用自定义指派逻辑:

    <userTask id="task1" name="我的任务" >
      <extensionElements>
        <flowable:taskListener event="create" class="org.flowable.MyAssignmentHandler" />
      </extensionElements>
    </userTask>

  传递至TaskListener的DelegateTask,可用于设置办理人与候选用户/组:

    public class MyAssignmentHandler implements TaskListener {

      public void notify(DelegateTask delegateTask) {
        // 在这里执行自定义身份查询

        // 然后调用如下命令:
        delegateTask.setAssignee("jinyangjie");
        delegateTask.addCandidateUser("zhangsan");
        delegateTask.addCandidateGroup("leader");
        ...
      }

    }

四、小结

  事实上,Flowable在运行时并不做任何用户检查。例如任务可以分派给任何用户,而引擎并不会验证系统中是否存在该用户。这给我们留下了很大自定义用户和组的空间,这样当我们将Flowable嵌入应用时,可以与应用已有的用户和组结合使用,也可以结合LDAP、Active Directory等服务使用。后续篇章中,我们将会介绍Flowable与LDAP的集成。

脚本宝典总结

以上是脚本宝典为你收集整理的Flowable实战(七)用户和组全部内容,希望文章能够帮你解决Flowable实战(七)用户和组所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。