Skip to content

组织机构实现

业务系统与流程引擎集成时,需要将业务系统的组织机构信息同步到流程引擎,以便流程节点办理人、权限控制等功能正常使用。

完整集成路径可参考 如何与业务系统集成

概述

流程引擎的组织机构包含部门、用户、群组、岗位及其关联关系。正式集成时,组织机构数据应从业务系统同步,而非使用引擎内置测试数据。

测试与正式环境

  • 测试阶段:可直接使用流程引擎内置的组织机构信息进行接口联调;如需修改测试数据,见 如何修改组织机构测试数据
  • 正式集成:必须从业务系统同步组织机构信息,确保用户 ID、部门 ID 与业务系统一致。

1. 组织机构加载说明

加载方式

工作流引擎没有组织机构相关数据库表,在工程启动时读取组织机构信息并加载到内存中使用。

产品默认从 JSON 文件读取组织机构数据,路径如下:

/lib/horizon-workflow-extend.jar!/com/horizon/third/data/dept.json

实现方式

组织机构数据可通过以下两种方式获取:

  1. 通过第三方数据源直接读取业务系统组织机构库(推荐)
  2. 在工作流中调用业务系统的组织机构接口获取数据

注意

同步的所有ID(用户ID,部门ID,群组ID,岗位ID)均不能包含下划线

2. 配置数据源

若采用「读取第三方数据源」方式,需先配置数据源。配置方法见 如何配置第三方数据源

配置数据源

3. 开发示例

示例代码

需先完成 本地开发环境部署,下载示例代码并解压,将两个 Java 文件放到 src 目录下:

下载:组织机构实现示例代码.zip

文件说明
com/horizon/org/OrgBuilderImpl.java组织机构实现类,需根据业务修改
com/horizon/org/web/OrgSysController.java组织机构重载接口,一般无需修改

只需修改 OrgBuilderImpl.java:按文件内注释说明,将 SQL 改为查询业务库的组织机构数据,并返回工作流所需字段。若通过接口实现,接口返回值也需包含工作流所需字段。

示例截图中的组织机构第三方数据源,需修改为已配置的数据源标识:

修改数据源标识

配置文件修改

在配置文件中增加以下配置后,流程引擎启动时将使用自定义实现类加载组织机构,不再读取产品自带的 JSON 数据。

workflow-conf/workflow-context.xml 中参考截图位置增加配置:

workflow-context.xml 配置

xml
<!-- 组织机构实现-->
<bean id="workflowAdapterFactory" class="com.horizon.third.init.WorkflowAdapterFactory">
   <property name="organizationBuilder" value="com.horizon.org.OrgBuilderImpl"/>
</bean>

4. 组织机构数据说明

部门(必须)

字段是否必须说明
id部门 ID,不能包含下划线_,否则使用过程中可能出现关联错误
name部门名称
ParentId上级部门 ID,不能包含下划线_,否则使用过程中可能出现关联错误
OrderNo显示排序
Code部门编码,没有时可以使用部门 ID
users部门用户列表,格式:[用户id, 用户姓名]
type组织机构类型,固定值 D

需建立一个根节点,name 可自定义,其余字段按下方固定值配置,不可缺少,否则使用过程中可能出现关联错误:

json
{
  "users": [],
  "id": "dept_root",
  "name": "部门导航",
  "type": "D"
}

对应示例中的:

java
// 处理根部门
OrgData data_r = new OrgData();
data_r.setId("dept_root");
data_r.setName("部门导航");
data_r.setParentId(null);
data_r.setType("D");
datas.add(data_r);

用户(必须)

用户说明

用户需归属有效部门,且对应部门数据必须存在,方可判定为正常用户;不满足该条件则无法正常登录系统。

字段是否必须说明
id用户 ID,不能包含下划线_,否则使用过程中可能出现关联错误
UserName用户姓名
LoginName登录名
Passwd登录密码
Department部门 ID 列表,需与部门信息中的 users 字段对应
OrderNo排序号
OperTypeF:直接部门领导;C:上级主管领导;I:部门接口人;空:一般用户

群组(非必需)

群组说明

群组本质是用户的二次分组管理,与业务系统角色一一对应。业务系统中若有角色需参与流程审批、流转,可直接同步至工作流群组。

字段是否必须说明
id群组 ID,不能包含下划线_,否则使用过程中可能出现关联错误
Name群组名称
ParentId上级群组 ID
type组织机构类型,固定值 G
users群组用户列表,格式:[用户id, 用户姓名]

根节点示例(name 可自定义):

json
{
  "users": [],
  "id": "group_root",
  "name": "群组导航",
  "type": "G"
}

对应 Java 示例:

java
OrgData data_r = new OrgData(); // 群组根数据,根数据的 parentId 需要为 null
data_r.setId("group_root");
data_r.setName("角色导航");
data_r.setParentId(null);
data_r.setType("G");
datas.add(data_r);

岗位(非必需)

字段是否必须说明
id岗位 ID,不能包含下划线_,否则使用过程中可能出现关联错误
Name岗位名称
ParentId上级岗位标识
type组织机构类型,固定值 P
users岗位用户列表,格式:[用户id, 用户姓名]

根节点示例(name 可自定义):

json
{
  "users": [],
  "id": "position_root",
  "name": "岗位导航",
  "type": "P"
}

5. 重新加载组织机构

重启工作流服务,或调用接口重新加载。

组织机构数据变更后,可调用以下方法重新加载内存中的组织机构信息:

java
WorkflowAdapterInit.getOrganizationBuilder().init();

推荐做法:在业务系统组织机构发生变动时,调用工作流提供的组织机构重载接口(代码位于 OrgSysController 类):

/horizon/workflow/rest/org/sys.wf

6. 流程办理人-相对关系

相关文档