基于 Java 调用泛微 OA WebService 创建表单流程
基于 Java 调用泛微 OA WebService 创建流程并打包 Maven 项目
1. 背景说明
在企业信息化系统中,常常需要通过外部系统(如 ERP、MES、WMS 等)向泛微 OA 提交流程。
泛微 OA 提供了 WebService 接口(WorkflowService),我们可以基于 WSDL 生成客户端代码,通过 Java 程序完成流程的自动创建与提交。
泛微在线文档:https://e-cloudstore.com/doc.html
为了方便后续复用与集成,这里将整个功能封装为 Maven 项目,并打包成可执行 JAR 包。
2. 准备工作
-
泛微 OA 系统地址:
http://your_api/services/WorkflowService
-
已知流程 ID(workflowId)示例:
200001
-
流程表单:
- 主表:
formtable_main_1
- 明细表:
formtable_main_1_dt1
- 主表:
-
提交流程的用户 ID:
creatorId = 实际ID
3. 项目结构
使用 Maven 进行管理,整体结构如下:
e9-oa-integration/
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── text
│ │ │ ├── App.java
│ │ │ ├── OAWorkflowClient.java
│ │ │ └── ws ← WebService 生成的客户端代码
│ │ └── resources
│ │ └── application.properties
└── target
4. 使用 CXF 生成客户端代码
在 pom.xml
中加入插件:
<build><plugins><plugin><groupId>org.apache.cxf</groupId><artifactId>cxf-codegen-plugin</artifactId><version>3.5.5</version><executions><execution><id>generate-sources</id><phase>generate-sources</phase><configuration><sourceRoot>${project.basedir}/src/main/java</sourceRoot><wsdlOptions><wsdlOption><wsdl>http://your_api/services/WorkflowService?wsdl</wsdl><extraargs><extraarg>-p</extraarg><extraarg>com.text.e9OA.ws</extraarg><extraarg>-frontend</extraarg><extraarg>jaxws21</extraarg><extraarg>-xjc-XautoNameResolution</extraarg></extraargs></wsdlOption></wsdlOptions></configuration><goals><goal>wsdl2java</goal></goals></execution></executions></plugin></plugins>
</build>
执行:
mvn clean compile
会在 com.text.e9OA.ws
包下生成 WorkflowService
客户端代码。
5. 编写调用工具类
在 com.text.OAWorkflowClient.java
中:
package com.text;import com.text.e9OA.ws.*;
import javax.xml.ws.BindingProvider;
import java.util.HashMap;
import java.util.Map;public class OAWorkflowClient {private static final String SERVICE_URL = "http://your_api/services/WorkflowService";public static int createWorkflow(int creatorId, int workflowId, String requestTitle) throws Exception {WorkflowService service = new WorkflowService();WorkflowServicePortType port = service.getWorkflowServiceHttpPort();Map<String, Object> ctx = ((BindingProvider) port).getRequestContext();ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, SERVICE_URL);WorkflowRequestInfo info = new WorkflowRequestInfo();info.setCreatorId(String.valueOf(creatorId));info.setWorkflowBaseInfo(new WorkflowBaseInfo());info.getWorkflowBaseInfo().setWorkflowId(String.valueOf(workflowId));info.setRequestLevel("0");info.setRequestName(requestTitle);// 设置主表数据WorkflowMainTableInfo mainTable = new WorkflowMainTableInfo();WorkflowRequestTableRecord[] records = new WorkflowRequestTableRecord[1];WorkflowRequestTableField[] fields = new WorkflowRequestTableField[1];WorkflowRequestTableField f1 = new WorkflowRequestTableField();f1.setFieldName("orderNo");f1.setFieldValue("PO20250820001");f1.setView(true);f1.setEdit(true);fields[0] = f1;WorkflowRequestTableRecord record = new WorkflowRequestTableRecord();record.setWorkflowRequestTableFields(fields);records[0] = record;mainTable.setRequestRecords(records);info.setWorkflowMainTableInfo(mainTable);int requestId = port.doCreateWorkflowRequest(info, Integer.parseInt(info.getCreatorId()));return requestId;}
}
6. 编写入口类
在 com.text.App.java
:
package com.text;public class App {public static void main(String[] args) throws Exception {int requestId = OAWorkflowClient.createWorkflow(11291,215021,"测试流程-2025-08-20");System.out.println("流程创建成功,RequestId = " + requestId);}
}
7. 打包运行
执行:
mvn clean package
会在 target/
下生成 e9-oa-integration-1.0-SNAPSHOT.jar
。
运行:
java -jar target/e9-oa-integration-1.0-SNAPSHOT.jar
输出示例:
流程创建成功,RequestId = 50321
8. 总结
本文通过以下步骤实现了 Java 调用泛微 OA WebService 创建流程:
- 配置 Maven 项目并引入 CXF 插件
- 基于 WSDL 生成客户端代码
- 封装流程提交工具类
OAWorkflowClient
- 编写入口类
App
测试提交 - 打包成可运行 JAR,便于外部系统集成
这样即可通过命令行或集成在其他系统中,自动提交 OA 流程。