MENU

[泛微EC9] 丸子喂饭篇: restful 新建流程接口详解(/api/workflow/paService/doCreateRequest)

• 2026 年 05 月 08 日 • 阅读: 127 • 躺过的坑,OA

AI 辅助制作标识

该文章由丸子引导 AI 辅助制作生成,如有改进意见,欢迎评论区留言。

引言

这个接口可以说是泛微 E9 里用得最多的 REST 接口之一了——新建流程实例。

不管是做系统集成、数据迁移、还是定时任务自动发起流程,都绕不开它。但官方文档嘛……懂的都懂,参数一堆,示例不够,踩坑不少。

今天丸子就把这个接口掰开了揉碎了讲一遍,争取让你看完就能用。

一眼看明白:直接上 curl

如果你对泛微接口已经有一定了解,直接看这段就够了。当然,下面有详细解释,需要的话可以继续往下翻~。
curl -X POST 'https://your-oa-domain.com/api/workflow/paService/doCreateRequest' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'token: your_token_here' \
  -H 'appid: your_appid_here' \
  -H 'userid: your_encrypted_userid_here' \
  -d 'workflowId=388024' \
  -d 'requestName=测试流程标题' \
  -d 'remark=测试意见' \
  -d 'requestLevel=2' \
  -d 'mainData=[{"fieldName":"cswb","fieldValue":"2978"}]' \
  -d 'detailData=[{"tableDBName":"formtable_main_1356_dt1","workflowRequestTableRecords":[{"recordOrder":0,"workflowRequestTableFields":[{"fieldName":"dhwb","fieldValue":"第一行"},{"fieldName":"drl","fieldValue":"2978"}]}]}]' \
  -d 'otherParams={"isnextflow":0,"delReqFlowFaild":0}'

返回成功示例:

{
  "code": "SUCCESS",
  "data": {
    "requestid": 1699718
  },
  "errMsg": {},
  "reqFailMsg": {
    "keyParameters": {},
    "msgInfo": {},
    "otherParams": {}
  }
}

拿到 requestid 就说明流程创建成功了,这个 ID 就是流程实例的唯一标识。

小白专区:一步一步来

如果上面的 curl 你看得一头雾水,别慌,丸子下面一个一个讲。

第一步:这个接口是干嘛的?

简单说:通过代码自动新建一条泛微流程。

平时你在 OA 系统里点"新建流程",选流程、填表单、点提交——这个接口就是把这个过程用 HTTP 请求来完成。

第二步:请求地址和方式

POST https://你的 OA 地址/api/workflow/paService/doCreateRequest
  • 请求方式:POST(不是 GET!)
  • Content-Type:必须是 application/x-www-form-urlencoded(不是 JSON!)
这里是个常见坑。很多人习惯用 JSON 格式发请求,但这个接口要求的是表单格式。

第三步:请求头(Header)参数

参数名说明怎么获取
token调用凭证通过泛微许可接口获取
appid许可证号码泛微后台配置
userid加密后的用户 ID用 spk 公钥加密 userid 得到
Content-Type内容类型固定填 application/x-www-form-urlencoded

这三个参数(tokenappiduserid)是泛微 REST 接口的"通行证",没有它们接口直接拒绝。

第四步:请求体(Body)参数详解

这是重点,一共就这几个参数:

  1. workflowId(必填)—— 流程 ID
-d 'workflowId=388024'

这个数字是你要新建的流程模板 ID。怎么找?在 OA 系统里打开流程设计器,URL 里一般就有,或者查数据库 workflow_base 表。

  1. requestName(必填)—— 流程标题
-d 'requestName=测试流程标题'

就是流程发起后显示的标题,随便填。

  1. mainData(必填)—— 主表数据
    这个稍微复杂点,它是一个 JSON 数组,每个元素代表一个字段:
[
  {
    "fieldName": "cswb",
    "fieldValue": "2978"
  },
  {
    "fieldName": "csfjsc",
    "fieldValue": [
      {
        "fileName": "通用测试模板.xls",
        "filePath": "base64:AAA..."
      },
      {
        "fileName": "通用测试 pdf.pdf",
        "filePath": "https://example.com/sample.pdf"
      }
    ]
  }
]
  • fieldName:字段的数据库名称(不是显示名称!)。去表单设计器里看,或者查 workflow_formfield 表。
  • fieldValue:字段值。普通字段直接填字符串,附件字段比较特殊,需要传数组,每个附件包含 fileName(文件名带后缀)和 filePath(base64 编码或 URL)。
怎么找字段的数据库名称?
进入表单设计器 → 点击字段 → 查看属性 → 有个"数据库字段名"就是了。
  1. detailData(可选)—— 明细表数据
    如果你的流程有明细表,就用这个参数:
[
  {
    "tableDBName": "formtable_main_1356_dt1",
    "workflowRequestTableRecords": [
      {
        "recordOrder": 0,
        "workflowRequestTableFields": [
          {
            "fieldName": "dhwb",
            "fieldValue": "第一行"
          },
          {
            "fieldName": "drl",
            "fieldValue": "2978"
          }
        ]
      },
      {
        "recordOrder": 0,
        "workflowRequestTableFields": [
          {
            "fieldName": "dhwb",
            "fieldValue": "第 2 行"
          },
          {
            "fieldName": "drl",
            "fieldValue": "2978"
          }
        ]
      }
    ]
  }
]
  • tableDBName:明细表的数据库名,格式一般是 formtable_main_xxx_dt1
  • workflowRequestTableRecords:每一行明细数据。

    • recordOrder:行序号,从 0 开始。
    • workflowRequestTableFields:和主表一样,fieldName + fieldValue
多个明细表怎么办? 在数组里加另一个 tableDBName 的对象就行。
  1. remark(可选)—— 签字意见
-d 'remark=测试意见'

流程发起时的签字意见,不填就用流程默认的。

  1. requestLevel(可选)—— 紧急程度
-d 'requestLevel=2'

数字越大越紧急,具体取值看你们流程的配置。

  1. otherParams(可选)—— 扩展参数
-d 'otherParams={"isnextflow":0,"delReqFlowFaild":0}'

这是一个 JSON 对象,支持以下参数:

参数名说明可选值
isnextflow新建后是否自动流转到下一节点0:不流转,1:流转(默认)
delReqFlowFaild新建失败是否自动删除流程0:不删除,1:删除(默认)
isVerifyPer是否验证用户创建权限0:不验证,1:验证(默认)
requestSecLevel流程密级需开启密级功能才生效
isnextflow=0 什么意思? 就是流程创建后停留在第一个节点,不自动往下走。有时候你还需要在第一个节点做点操作,就可以设成 0。

第五步:返回值怎么判断?

{
  "code": "SUCCESS",
  "data": {
    "requestid": 1699718
  }
}
  • codeSUCCESS → 成功,data.requestid 就是新建的流程 ID。
  • codePARAM_ERROR → 参数有错,看 errMsg 里的具体提示,当然,一般没有,慢慢调吧~
  • codeNO_PERMISSION → 没有权限,检查 workflowId 对应的流程是否允许当前用户创建。
  • codeSYSTEM_INNER_ERROR → 服务端异常,看 OA 日志。

常见错误排查

错误现象可能原因
workflowId 返回 -1mainData 格式不对,多了 } 或 ]
mainData: 新建流程主表数据不允许为空mainData 没传或者为空
error_param_xxx: '值'某个字段名写错了,或者值不合法
返回 NO_PERMISSION当前用户没有该流程的创建权限
返回 PARAM_ERROR 但 errMsg 为空检查 Content-Type 是不是 application/x-www-form-urlencoded

小结

这个接口其实不难,核心就三个东西:

  1. 请求头:tokenappiduserid(泛微接口三件套)
  2. 主表数据:mainData,字段名一定要和表单里的数据库字段名一致
  3. 明细表数据:detailData,结构比主表多一层"表名"和"行记录"

记住一个原则:字段名写错 = 报错,格式不对 = 报错,权限没有 = 报错。

好了,丸子喂饭完毕,希望你能吃饱~

有问题欢迎评论区留言~


参考资料与致谢

泛微官方文档: 泛微E9后端接口说明(https://e-cloudstore.com/ec/api/applist/index.html#/