# 组织机构接口(IWFOMService)

# 接口功能描述

从BPS 6.0版本开始提供该接口,本套组织机构增强了通用性,不再硬性规定有什么类型的参与者。

一个公司的组织模型中,参与者是可以区分出类型的,所有参与者可以按照类型分成若干类。如:机构类型、员工类型等。并且,参与者之间存在"父子"关系。每一个参与者可以包含多个不同类型的子参与者,同时也可以从属于多个不同类型的父参与者。比如:员工类型的参与者就是机构类型参与者的子参与者。在多种参与者中,必定存在一个叶子参与者(基本参与者),叶子参与者不再包含其他的子参与者。

BPS的组织机构支持参与者交集计算。对于集合类型的参与者,可以进行交集计算。比如:机构A和角色B的交集参与者,就是在机构A内属于角色B的参与者的集合。

通过实现该组织模型接口,可以根据需要实现树状的、网状的、矩阵类型等等多种组织模型。

注意

  • 参与者ID中只能出现字母、数字、减号(-)、下划线(_)。不能出现除此之外的其他字符;
  • 可以通过BPS管理监控->配置管理->组织机构,配置用户自己实现的接口类;
  • 实现组织机构时,所有返回List的方法不允许返回null值 ,List里面也不允许有null值,否则运行时会出现空指针异常;

# getParticipantTypes:获取参与者类型列表

# 【功能说明】

获取所有参与者类型的列表。用户通过该方法描述自己的组织机构里有哪些类型的参与者,以及这些参与者类型之间的关系。

BPS引擎调用该方法的频度很高,建议将返回的List缓存起来以提高性能。

# 【实现说明】

  • 参数说明 无。

  • 返回值说明

    java.util.List < com.primeton.workflow.api.ParticipantType>:每个参与者类型对应一个ParticipantType,封装到List中返回出来。

    ParticipantType中需要定义的属性如下:

属性名 类型 描述
prefix char 前缀,如:P-个人;R-角色;O-机构;Z-岗位
code String 类型编码
displayName String 显示名称
description String 描述
showAtRootArea boolean 是否在参与者选择的根区域显示
priority int 显示优先级
leafParticipant boolean 是否叶子参与者。叶子参与者可以作为工作项的最终执行者
juniorParticipantTypeCodes List<String> 查询所有下级参与者类型
jointParticipantType boolean 是否是组合类型(虚参与者)
jointTypeCodeList List<String> 组合类型的组合id列表

# getParticipantType:获取指定参与者类型

# 【功能说明】

获取指定参与者类型。该方法描述了某个参与者类型的详细信息。比如一个机构类型的参与者,是否有子参与者,是否是最终执行者。

BPS引擎调用该方法的频度很高,建议将返回的List缓存起来以提高性能。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数 typeCode String 参与者类型ParticipantType的code属性值
  • 返回值说明 com.primeton.workflow.api.ParticipantType:每个参与者类型对应一个ParticipantType,封装到List中返回出来。

# findRootParticipants:获取某类型参与者的根参与者

# 【功能说明】

获取某个类型的根参与者。该方法描述了某个类型相应的根参与者。比如输入一个机构的typeCode,该方法应该返回根机构的列表。

注意

实现时:

  • 如果该类型的showAtRootArea属性为false,应该返回null。否则,返回的值也无法在刷新组织机构树时刷新出来。
  • 根可能有多个。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数 typeCode String 参与者类型ParticipantType的code属性值
  • 返回值说明 java.util.List<com.eos.workflow.omservice.WFParticipant>:根参与者列表。

# getParticipants:获取某类型的所有参与者

# 【功能说明】

获取某个类型的所有参与者。该方法描述了某个类型的所有参与者。比如输入一个机构的typeCode,该方法应该返回所有机构的列表。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数 typeCode String 参与者类型ParticipantType的code属性值
  • 返回值说明 java.util.List<com.eos.workflow.omservice.WFParticipant>:参与者对象列表。

# findParticipantByID:根据ID获取某个类型的参与者信息

# 【功能说明】

根据ID获取某个类型的参与者信息。比如输入一个机构的typeCode和一个机构ID,该方法应该返回指定机构类型的参与者信息。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
  • 返回值说明 com.eos.workflow.omservice.WFParticipant:查询出来的参与者对象。

# getAllChildParticipants:查询所有下级参与者

# 【功能说明】

查询所有下级参与者。对于指定的参与者,该方法需要返回该参与者的各种不同类型的子参与者。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象列表。

# getChildParticipants:查询某个参与者的指定类型的子参与者

# 【功能说明】

查询某个参与者的指定类型的子参与者。比如输入一个机构的typeCode、一个机构ID和一个机构类型的typeCode,该方法应该返回指定机构的子机构的信息。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
参数3 childCode String 即需要返回的子参与者的参与者类型ParticipantType的code属性值
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象列表。

# getAllParentParticipants:查询所有的上级参与者

# 【功能说明】

查询所有的上级参与者。在实现的时候,应该将指定参与者的所有父参与者查询出来,并返回。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象列表。

# getParentParticipants:查询某个参与者的指定类型的父参与者

# 【功能说明】

查询某个参与者的指定类型的父参与者。比如输入一个机构的typeCode、一个机构ID和一个机构类型的parentCode,该方法应该返回指定机构的父机构的详细信息。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
参数3 parentCode String 即需要返回的父参与者的参与者类型ParticipantType的code属性值
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象列表。

# getJointChildParticipant:查询交集类型参与者的所有下属参与者

# 【功能说明】

查询交集类型参与者的所有下属参与者。查询到的参与者不一定全是叶子参与者。比如:机构+角色,可能查询到一系列岗位。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 jointParticipantType String 即参与者类型ParticipantType的code属性值,其类型为交集参与者类型(例如:position)。
参数2 participantIDList List<String> 即交集的参与者ID列表(例如:rolea和depta)。
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象。

# getParticipantScope:获取某个参与者的参与范围

# 【功能说明】

获取某个参与者的参与范围。某个参与者可以有一定的参与范围,该参与范围决定了该参与者对直接属于哪些参与者的任务有权限。比如:tiger属于角色a,tiger对分给参与者"tiger"和参与者"角色a"的任务都有权限。该参与者对所有参与范围内的参与者的直接工作项有权限。只需要对叶子参与者类型实现该方法。

在调用getParticipantScope的时候,如果需要包括复杂类型参与者,拼出来的ID请与getJointParticipantID拼出来的结构一致。

注意

实现时: 该方法返回的列表中至少要包含参与者自己。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 typeCode String 即参与者类型ParticipantType的code属性值
参数2 participantID String 即要查询参与者的ID
  • 返回值说明 List<com.eos.workflow.omservice.WFParticipant>:查询出来的参与者对象列表。

# 工作日历接口(ITimeLimitCalculator

# 接口功能描述

每个任务都有自己的时限,过了这个时限而未完成就是超时任务,BPS提供了一套默认的这类日历时间的简单算法,如果用户需要按照自己的方式计算超时和超时提醒的时间,也可以自己扩展。BPS提供了工作日历的接口用以扩展用户自定义的工作日历。如果需要自定义工作日历,需要做以下操作:

  1. 实现该工作日历的接口;
  2. 修改具体应用目录下的\work\system\com.primeton.workflow.core\META-INF\contribution.eosinf文件,在"timelimit_calculator_provider"中配置第一步实现类的路径。

相关联的功能包括,流程(或工作项)超时触发事件,提醒触发事件和邮件提醒功能。

# getFinalTime:计算流程或者工作项的最终期限

# 【功能说明】

计算流程或者工作项的最终期限。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 startTime long 流程(或者活动)开始时间
参数2 limitNumber long 设置的时间限制
参数3 context TimeLimitContext 工作日历的上下文
  • 返回值说明 返回计算后的最终期限。

# 【参考案例】

缺省实现为:finalTime = startTime + limitnum。如下:

public long getFinalTime(long startTime,long limitnum, TimeLimitContext context)
{
    return startTime +limitnum;
}

# 【其他说明】

关于TimeLimitContext: 如果需要针对不同的实例计算方式不同的时候,用户可以通过该对象获取到当前流程等相关信息,具体有下列方法:

  • getTimeLimitType() 获取时间限制的类型,返回枚举类型的{ PROCINST,WORKITEM }
  • getCurrentProcessInst() 获取当前的流程实例
  • getCurrentWFActivityInst() 获取当前的活动实例
  • getCurrentWFWorkItem() 获取当前的工作项

# getRemindTime:计算超时预警的时间

# 【功能说明】

计算超时预警的时间。

# 【实现说明】

  • 参数说明
类型 名称 数据类型 参数描述
参数1 finalTime long 流程(或者活动)最终时限
参数2 preNumber long 需要提前提醒的时间数
参数3 context TimeLimitContext 工作日历的上下文
  • 返回值说明 返回long类型的超时预警时间。

# 【参考案例】

缺省实现为:remindTime = finalTime - preTime。如下:

public long getRemindTime(long finalTime, long preNumber, TimeLimitContext context)
{
    return finalTime - preNumber;
}

# 【其他说明】

关于TimeLimitContext参见getFinalTime:计算流程或者工作项的最终期限 (opens new window)

# 业务权限控制接口(IWFPermissionService)

BPS运行环境提供两个UI应用组件,分别是"BPS Workspace"、"BPS Work Client"。为了给这两个应用组件提供相应的权限控制能力,BPS提供接口com.eos.workflow.omservice.IWFPermissionService。该接口可以由用户实现,接口提供验证用户密码以及判断用户权限的功能。

IWFPermissionService.java

package com.eos.workflow.omservice;
 
import java.util.List;
import java.util.Map;
 
public interface IWFPermissionService {
 
    /**
     * 验证用户密码
     * @param userID 用户id
     * @param pwd    密码,可能是加密过的数据
     * @param attributes  验证时需要传递的其他扩展属性
     */
    public boolean validate(String userID,String pwd,Map attributes);
    /**
     * 判断用户是否具有某权限
     * @param permType 权限类型。目前可以是 bpsclient 或者 bpsmanager
     * @return 如有具有该权限,则返回true,否则返回false
     */
    public boolean hasPermission(String userID,String permType);
    /**
     * 获取用户具有的权限列表
     * @param userID
     * @return  返回指定用户所具有的权限列表,包含所有角色(比如默认是6个)中的0个、1个或多个
     */
    public List<String> getPermissionList(String userID);//获取用户权限列表
 
}

BPS Workspace和BPS Work Client的登录功能调用这些方法来实现。具体如下:

  • BPS Work Client登录,先调用validate验证密码正确,再调用hasPermission(传入用户ID和客户端的权限常量bpsclient)判断当前用户是否具有访问客户端的权限。
  • BPS Workspace登录,先调用validate验证密码正确,再调用hasPermission(传入用户ID和管理监控的权限常量bpsmanager)判断当前用户是否具有访问BPS管理监控的权限。

用户实现IWFPermissionService接口的方法:

  • 用户可以自己实现该接口重新实现权限分配模型。权限实现类可以通过 BPS管理监控->配置管理->扩展配置 界面来配置。
  • BPS 提供了默认的权限接口实现,可以通过配置文件来绑定用户和权限类型,用户如果只实现组织机构接口,不实现权限接口,也可以通过修改默认的权限配置文件来达到权限控制的目的。

默认的权限配置支持简单的"人------权限"绑定,配置文件内容如下:

bps-users.xml

<?xml version='1.0' encoding='UTF-8'?>
<bps-users>
<sysrole name="bpsclient"/>
<sysrole name="bpsadmin"/>
<sysrole name="bpsmanager"/>
<sysrole name="bpscustom"/>
<sysrole name="bpsconfig"/>
<sysrole name="bpsbizcat"/>
 
<user id="tiger" password="000000" sysroles="bpsclient|bpsmanager|bpscustom|bpsconfig|bpsbizcat"/>
<user id="goose" password="000000" sysroles="bpsclient|bpsmanager"/>
<user id="fish" password="000000" sysroles="bpsclient|bpscustom|bpsconfig"/>
<user id="snoppy" password="000000" sysroles="bpsclient|bpsconfig|bpsbizcat"/>
<user id="micky" password="000000" sysroles="bpsclient"/>
<user id="kitty" password="000000" sysroles="bpsclient"/>
</bps-users>
上次更新: 2023/3/24下午2:58:17