关于npm:Flowable实战七用户和组

64次阅读

共计 3148 个字符,预计需要花费 8 分钟才能阅读完成。

  在流程中,最重要的参与者是用户。流程定义了工作何时须要用户参加,什么用户能够参加。

  组能够了解为咱们常说的角色。

  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 的集成。

正文完
 0