跳转至

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)

适用:审批人长期出差失联,需紧急推进。

// 强制将请求推送到下一节点,无视当前节点权限校验
operatePA.forceToNextNode(requestId, nodeId, operatorId, "特批跳过");
ava // 强制将请求推送到下一节点,无视当前节点权限校验 operatePA.forceToNextNode(requestId, nodeId, operatorId, "特批跳过"); ```#### 🔹 场景 C:动态转交/修改审批人 (Reassign) 适用:原审批人离职/调岗,待办无法处理。
// 将指定节点的待办人替换为新员工
operatePA.changeNodeOperator(requestId, nodeId, oldOperatorId, newOperatorId);

🔹 场景 D:退回至发起人 (Rollback)

适用:关键信息填错,需退回重填。

operatePA.backToStartNode(requestId, operatorId, "数据有误,退回重填");

5. ⚠️ 部署与运维规范

  1. 权限控制:此类接口拥有极高权限,严禁暴露在公网。自定义 JSP/Action 必须添加 IP 白名单或二次鉴权逻辑。
  2. 事务管理:干预操作涉及多表更新,务必在 try-catch 块中执行,失败时回滚,防止产生“半截子”脏数据。
  3. 日志留痕:每次干预必须在备注或理由字段中写明 操作人、时间、原因,方便日后审计追溯。
  4. 版本差异:泛微不同补丁版本(如 V6.x, V8.x)的 API 包路径或方法签名可能微调。建议先在测试环境验证后再用于生产。

常见集成场景

系统 集成内容 推荐方式 备注
EHR 系统 组织架构/人员同步 定时任务 + 数据库视图/API 每日凌晨同步,处理离职/调岗
财务系统 报销/付款审批流对接 REST API / 消息队列 财务系统发起流程,OA 返回审批结果
邮件/短信 流程节点通知推送 SMTP / 第三方短信 API 结合 workflow_requestlog 触发
钉钉/企微 消息推送/单点登录 Webhook + OAuth2.0 移动端免登跳转

🔗 相关实用工具与配置

注意事项

  • 跨系统事务:外部系统调用 OA 接口时,建议采用最终一致性设计(异步重试),避免分布式事务阻塞。
  • 性能瓶颈:高并发发起流程时,注意数据库连接池配置,建议分批提交或引入 MQ 削峰。
  • 接口文档:泛微官方接口文档可通过内部云平台或联系实施获取,二开前务必确认版本兼容性。