基于 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
中加入插件:
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>
执行:
bash
mvn clean compile
会在 com.text.e9OA.ws
包下生成 WorkflowService
客户端代码。
5. 编写调用工具类
在 com.text.OAWorkflowClient.java
中:
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
:
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. 打包运行
执行:
bash
mvn clean package
会在 target/
下生成 e9-oa-integration-1.0-SNAPSHOT.jar
。
运行:
bash
java -jar target/e9-oa-integration-1.0-SNAPSHOT.jar
输出示例:
流程创建成功,RequestId = 50321
8. 总结
本文通过以下步骤实现了 Java 调用泛微 OA WebService 创建流程:
- 配置 Maven 项目并引入 CXF 插件
- 基于 WSDL 生成客户端代码
- 封装流程提交工具类
OAWorkflowClient
- 编写入口类
App
测试提交 - 打包成可运行 JAR,便于外部系统集成
这样即可通过命令行或集成在其他系统中,自动提交 OA 流程。