组织机构实现
业务系统与流程引擎集成时,需要将业务系统的组织机构信息同步到流程引擎,以便流程节点办理人、权限控制等功能正常使用。
完整集成路径可参考 如何与业务系统集成。
概述
流程引擎的组织机构包含部门、用户、群组、岗位及其关联关系。正式集成时,组织机构数据应从业务系统同步,而非使用引擎内置测试数据。
测试与正式环境
- 测试阶段:可直接使用流程引擎内置的组织机构信息进行接口联调;如需修改测试数据,见 如何修改组织机构测试数据。
- 正式集成:必须从业务系统同步组织机构信息,确保用户 ID、部门 ID 与业务系统一致。
1. 组织机构加载说明
加载方式
工作流引擎没有组织机构相关数据库表,在工程启动时读取组织机构信息并加载到内存中使用。
产品默认从 JSON 文件读取组织机构数据,路径如下:
/lib/horizon-workflow-extend.jar!/com/horizon/third/data/dept.json实现方式
组织机构数据可通过以下两种方式获取:
- 通过第三方数据源直接读取业务系统组织机构库(推荐)
- 在工作流中调用业务系统的组织机构接口获取数据
注意
同步的所有ID(用户ID,部门ID,群组ID,岗位ID)均不能包含下划线
2. 配置数据源
若采用「读取第三方数据源」方式,需先配置数据源。配置方法见 如何配置第三方数据源。

3. 开发示例
示例代码
需先完成 本地开发环境部署,下载示例代码并解压,将两个 Java 文件放到 src 目录下:
| 文件 | 说明 |
|---|---|
com/horizon/org/OrgBuilderImpl.java | 组织机构实现类,需根据业务修改 |
com/horizon/org/web/OrgSysController.java | 组织机构重载接口,一般无需修改 |
只需修改 OrgBuilderImpl.java:按文件内注释说明,将 SQL 改为查询业务库的组织机构数据,并返回工作流所需字段。若通过接口实现,接口返回值也需包含工作流所需字段。
示例截图中的组织机构第三方数据源,需修改为已配置的数据源标识:

配置文件修改
在配置文件中增加以下配置后,流程引擎启动时将使用自定义实现类加载组织机构,不再读取产品自带的 JSON 数据。
在 workflow-conf/workflow-context.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 可自定义,其余字段按下方固定值配置,不可缺少,否则使用过程中可能出现关联错误:
{
"users": [],
"id": "dept_root",
"name": "部门导航",
"type": "D"
}对应示例中的:
// 处理根部门
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 | 否 | 排序号 |
OperType | 否 | F:直接部门领导;C:上级主管领导;I:部门接口人;空:一般用户 |
群组(非必需)
群组说明
群组本质是用户的二次分组管理,与业务系统角色一一对应。业务系统中若有角色需参与流程审批、流转,可直接同步至工作流群组。
| 字段 | 是否必须 | 说明 |
|---|---|---|
id | 是 | 群组 ID,不能包含下划线_,否则使用过程中可能出现关联错误 |
Name | 是 | 群组名称 |
ParentId | 是 | 上级群组 ID |
type | 是 | 组织机构类型,固定值 G |
users | — | 群组用户列表,格式:[用户id, 用户姓名] |
根节点示例(name 可自定义):
{
"users": [],
"id": "group_root",
"name": "群组导航",
"type": "G"
}对应 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 可自定义):
{
"users": [],
"id": "position_root",
"name": "岗位导航",
"type": "P"
}5. 重新加载组织机构
重启工作流服务,或调用接口重新加载。
组织机构数据变更后,可调用以下方法重新加载内存中的组织机构信息:
WorkflowAdapterInit.getOrganizationBuilder().init();推荐做法:在业务系统组织机构发生变动时,调用工作流提供的组织机构重载接口(代码位于 OrgSysController 类):
/horizon/workflow/rest/org/sys.wf