title: OA 集成对接 created: 2026-04-18 updated: 2026-04-18 type: reference tags: [weaver]
OA 集成对接
泛微 OA 与外部系统对接、内部 API 调用及高级运维集成方案。
集成方式概览
| 方式 | 适用场景 | 说明 |
|---|---|---|
| REST API / E-Builder | 外部系统对接 (EHR, 财务, CRM) | 标准 HTTP JSON 接口,支持跨平台调用 |
| 数据库直连 | 报表统计、只读数据同步 | 仅建议 SELECT,严禁直接 UPDATE/INSERT 核心表 |
| 消息队列 (MQ) | 高并发异步通知、日志收集 | 适用于解耦架构,如钉钉/企微消息推送 |
| 后端 Java API | 系统内深度集成、流程自动化干预 | 直接调用 OA 引擎 Class,性能最高,数据最安全 |
🚀 流程干预与后端 API 调用指南 (Java)
1. 为什么使用 API 而非直接改数据库?
在日常运维中,遇到“流程卡死”、“审批人离职”、“节点死锁”时,很多运维人员习惯直接 UPDATE 数据库。但这存在极大风险:
| 方式 | 数据一致性 | 审计日志 | 触发器/通知 | 风险等级 |
|---|---|---|---|---|
| 直接改表 (SQL) | ❌ 极易导致主从表状态不一致 | ❌ 无操作记录,审计黑盒 | ❌ 不触发消息、不流转后续节点 | 🔴 极高 |
| 后端 API 调用 | ✅ 引擎自动维护所有关联表 | ✅ 自动生成 workflow_requestlog 记录 |
✅ 完整触发后续动作与通知 | 🟢 安全合规 |
2. 核心 API 类库说明
泛微 E9 流程引擎的核心操作类主要位于 com.engine.workflow 相关包下。以下为运维高频使用的类:
| 类路径 | 核心用途 |
|---|---|
com.engine.workflow.publicApi.impl.WorkflowRequestOperatePAImpl |
流程创建/提交:最基础的发起流程接口 |
com.engine.workflow.api.WorkflowRequestApi (或同类 Manager) |
流程干预:归档、退回、强制流转、转交 |
weaver.hrm.User |
身份模拟:构造操作人上下文,决定流程归属 |
com.alibaba.fastjson.JSONObject |
数据封装:处理主表/明细表 JSON 参数 |
| User` | 身份模拟:构造操作人上下文,决定流程归属 |
com.alibaba.fastjson.JSONObject |
数据封装:处理主表/明细表 JSON 参数 |
以下模板可用于创建自定义 JSP 页面或后端 Action,直接放入 ecology/custom/ 目录下即可访问。 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="weaver.general.BaseBean" %>
<%@ page import="weaver.hrm.User" %>
<%@ page import="com.engine.workflow.publicApi.impl.WorkflowRequestOperatePAImpl" %>
<%
// 1. 构造操作用户 (模拟指定身份,如系统管理员 ID=1)
User user = new User();
user.setId(1);
user.setUsertype(0); // 0:正式员工
// 2. 实例化核心操作类
WorkflowRequestOperatePAImpl operatePA = new WorkflowRequestOperatePAImpl();
try {
// 3. 准备请求数据 (此处以 JSON 实体为例,实际需根据版本封装 ReqOperateRequestEntity)
// operatePA.createRequest(requestEntity, user);
out.println("✅ API 调用成功!");
} catch (Exception e) {
out.println("❌ 调用失败: " + e.getMessage());
e.printStackTrace();
}
%>
4. 常见流程干预场景
🔹 场景 A:强制归档流程 (Force End)
适用:业务取消、测试数据清理、死流程清理。
// 伪代码示例 (具体方法名视版本而定)
String requestId = "123456";
String operatorId = "1"; // 执行人ID
String reason = "运维手动干预:业务已取消,强制归档";
// 调用引擎归档方法,会自动更新 requestbase 状态、清理 currentoperator、写入日志
operatePA.forceEndRequest(requestId, Integer.parseInt(operatorId), reason);
🔹 场景 B:强制流转/跳过当前节点 (Skip Node)
适用:审批人长期出差失联,需紧急推进。
ava // 强制将请求推送到下一节点,无视当前节点权限校验 operatePA.forceToNextNode(requestId, nodeId, operatorId, "特批跳过"); ```#### 🔹 场景 C:动态转交/修改审批人 (Reassign) 适用:原审批人离职/调岗,待办无法处理。🔹 场景 D:退回至发起人 (Rollback)
适用:关键信息填错,需退回重填。
5. ⚠️ 部署与运维规范
- 权限控制:此类接口拥有极高权限,严禁暴露在公网。自定义 JSP/Action 必须添加 IP 白名单或二次鉴权逻辑。
- 事务管理:干预操作涉及多表更新,务必在
try-catch块中执行,失败时回滚,防止产生“半截子”脏数据。 - 日志留痕:每次干预必须在备注或理由字段中写明 操作人、时间、原因,方便日后审计追溯。
- 版本差异:泛微不同补丁版本(如 V6.x, V8.x)的 API 包路径或方法签名可能微调。建议先在测试环境验证后再用于生产。
常见集成场景
| 系统 | 集成内容 | 推荐方式 | 备注 |
|---|---|---|---|
| EHR 系统 | 组织架构/人员同步 | 定时任务 + 数据库视图/API | 每日凌晨同步,处理离职/调岗 |
| 财务系统 | 报销/付款审批流对接 | REST API / 消息队列 | 财务系统发起流程,OA 返回审批结果 |
| 邮件/短信 | 流程节点通知推送 | SMTP / 第三方短信 API | 结合 workflow_requestlog 触发 |
| 钉钉/企微 | 消息推送/单点登录 | Webhook + OAuth2.0 | 移动端免登跳转 |
🔗 相关实用工具与配置
- 流程穿透配置:查看权限免检白名单配置
- 明细表粘贴增强:查看 Excel 一键粘贴实现方案
- 流程干预 API:见上方 Java 内部调用指南
注意事项
- 跨系统事务:外部系统调用 OA 接口时,建议采用最终一致性设计(异步重试),避免分布式事务阻塞。
- 性能瓶颈:高并发发起流程时,注意数据库连接池配置,建议分批提交或引入 MQ 削峰。
- 接口文档:泛微官方接口文档可通过内部云平台或联系实施获取,二开前务必确认版本兼容性。