基于 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 中加入插件:

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 创建流程

  1. 配置 Maven 项目并引入 CXF 插件
  2. 基于 WSDL 生成客户端代码
  3. 封装流程提交工具类 OAWorkflowClient
  4. 编写入口类 App 测试提交
  5. 打包成可运行 JAR,便于外部系统集成

这样即可通过命令行或集成在其他系统中,自动提交 OA 流程。