一、注册应用

根据目标环境,登录到专有钉钉开放平台:

1.1 创建应用

每个使用者需要自己注册一个新的应用来获取ak和sk信息,按照下图的步骤进行操作即可。

首先,通过左侧边栏切换到【应用管理】Tab页,点击快捷链接【开发者后台】,前往开发者中心创建应用。
image.png

点击【创建应用】按钮,即可开始创建应用。
备注:后面的【创建零代码应用】按钮是前往宜搭平台创建宜搭应用的,这里注意不要点。
image.png

下面是一组新建应用的填写示例,注意这里的应用标识需要唯一且保持良好的可读性。
image.png

1.2 订阅接口

新创建出来的应用,默认会置于列表的顶部,点击应用操作中的【详情】,将跳转到到应用详情页
image.png

在默认的【凭证与基础信息】面板,可以查看 AppKey 和 AppSecret :

image.png

切换左侧边栏到【应用权限】面板,在【服务端】-【高级权限】下找到宜搭相关的接口文件夹,包括:宜搭表单、宜搭流程、宜搭任务中心、宜搭其他,将其勾选上,然后点击右上角的授权按钮执行批量授权操作。
image.png

如果切换到应用发布状态下,发现高级权限列表中的栏目无法勾选,则是因为当前应用处于上架状态,无法在上架状态下执行应用的修改操作。
image.png

此时,需要将应用切换到【应用发布】面板,先将应用【下架】,之后再回到【应用权限】面板执行订阅操作,但是不要忘记执行完订阅操作之后回到【应用发布】面板,再次执行一下上架操作,免得工作台上的应用被移除后没有及时恢复。
image.png

特别说明:

  1. 一方应用之间的接口使用可以无需授权。
  2. 三方应用使用一方应用的接口,需要获得对应的接口的使用授权,否则会发生如下的报错:
    1. {
    2. "_RequestId": "643e01f015907487376843282d0014",
    3. "Message": "User not authorized to operate on the specified resource.",
    4. "success": false,
    5. "errorCode": "100",
    6. "HostId": "openplatform-pro.ding.zj.gov.cn",
    7. "Code": "Forbidden",
    8. "errorMsg": "User not authorized to operate on the specified resource.",
    9. "errorLevel": "error"
    10. }

    二、获取参数

    参数一:domainName参数根据环境的不同需要填写不同的值,各环境的配置值如下:
  • 孤岛环境:zwopenplatform.10e.alibaba-inc.com
  • SAAS云预发:openplatform.gov.alibaba-inc.com
  • SAAS云生产:openplatform.dg-work.cn
  • 浙政钉预发:openplatform-zzd.alibaba-inc.com
  • 浙政钉生产:openplatform-pro.ding.zj.gov.cn
  • 浙大生产:openplatform.zju.edu.cn
  • 郑政钉生产:openplatform-dingding.zhengzhou.gov.cn

参数二:accessKey对应新建应用的AppKey
参数三:secretKey对应新建应用的AppSecret

三、使用接口

下面以Java使用的方式介绍如何使用网关接口:

  1. 【下载示例代码】下载示例工程代码:call-yidaapi-demo.zip,解压缩之后使用Inteilj IDEA打开该工程的示例代码。
  2. 【依赖包替换】非阿里的同学可能无法下载到xxpt.gateway.shared.client这个依赖包,可以使用xxpt.gateway.shared.client.zip下面的压缩包里面的文件。
  3. 【修改配置文件】修改gateway.properties文件,具体的参考数据参考本文档的第二小结。

image.png

  1. xxpt.gateway.protocal=https
  2. xxpt.gateway.domainName=指定环境的domainName
  3. xxpt.gateway.accessKey=自己的accessKey
  4. xxpt.gateway.secretKey=自己的secretKey
  1. 打开YidaController.java文件,该文件中已经提供了发起流程和查询表单数据两个接口调用的Demo,可以启动该功能,使用postman等Http测试工具触发接口调用请求,并使用断点跟踪测试。

image.png

  1. 根据实际的业务场景根据本文档中的提示,调用相关的开放接口,实现自己的业务场景需求。

四、网关接口文档

4.1 说明

4.1.1 特别关注

特别关注1:网关有两个服务域名,需要加以区分,其中有portal后缀的是注册应用订阅接口的地址,没有porta后缀的是写在domainName参数里面的。
特别关注2:请求参数中的api参数务必填写相对地址,无需手动拼接请求域名+相对地址形式的绝对地址。下面是一个典型的错误示例:
image.png

4.1.2 重要参数获取

下面以截图的方式,展示调动宜搭开放接口过程中频繁使用到的一些核心参数的获取位置。
首先,打开待操作的应用的后台编辑页面,找到顶部的【应用设置】按钮,点开后切换到【应用数据】的Tab页,如下图所示:
image.png

关于应用编码(应用ID):appType
image.png

关于应用秘钥:systemToken
image.png
关于表单ID:formUuid
image.png

关于用户id:userid:
会根据userid判断是否有访问接口的权限,当userId传yida_pub_account时,则不进行权限校验,默认通过

4.2 流程实例

1. 发起流程

  • 接口:/yida/process/startInstance.json
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的员工工号 会校验userId是否有流程发起权限
language 语言环境 zh_CN 可选值:zh_CN/en_US
processCode 流程code TPROC—EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ4 请看附录6
formUuid 表单ID FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 请看附录6
formDataJson 表单数据 参考:附录1保存/更新 表单数据格式说明
deptId 发起人所在部门号 18295 不填,默认发起人主职部门
  • 返回字段说明:
    • result : 新创建的流程实例ID
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回值结果示例:
    1. {
    2. "result": "f30233fb-72e1-4af4-8cb8-c7e0ea9ee530",
    3. "success": true
    4. }
    常见错误:
    image.png
    排查过程:success为false,说明流程发起失败,但是无明确报错提示,通过宜搭数据管理页发现流程确实没有发起。建议仔细排查填写的参数对应关系,本案为填写了另外一个目标应用到appType和systemToken导致的流程发起失败。

2. 根据条件搜索流程实例ID

  • 接口:/yida/process/getInstanceIds.json
  • 说明:只有应用管理员才能使用这个接口
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 该接口只有应用管理员能使用。会校验userId是否应用管理员
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formUuid 表单ID FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 请看附录6
searchFieldJson 根据表单内组件值查询 格式见附录2:根据组件值进行条件搜索,组件值格式说明
taskId 任务ID 2199132092 一般用不到。
instanceStatus 实例状态 RUNNING 可选值为:RUNNING,TERMINATED,COMPLETED,ERROR。
分别代表:运行中,已终止,已完成,异常。
approvedResult 流程审批结果 agree 可选值为:agree, disagree。
分别表示:同意, 拒绝。
currentPage 当前页 1 必须大于0
默认1
pageSize 每页记录数 10 必须大于0
默认10
originatorId 根据流程发起人工号查询
createFrom createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表 2020-01-01 00:00:00 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
createTo createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表。 2020-01-01 23:59:59 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和createFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)创建的数据。
modifiedFrom modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表 2018-01-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
modifiedTo modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表。 2018-02-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和modifiedFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)被修改的数据。 |

  • 返回字段说明:
    • result : 符合搜索条件的实例ID列表
      • data:实例ID列表数组
      • totalCount:符合条件的实例总数
      • currentPage:当前页
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回值结果示例:
    1. {
    2. "result": {
    3. "data": [
    4. "f30233fb-72e1-4af4-8cb8-c7e0ea9ee530",
    5. "bc0950a3-fe1b-459c-b6ba-282be38523ab",
    6. "f540cbd7-43eb-40de-b915-6716578a2802"
    7. ],
    8. "totalCount": 3,
    9. "currentPage": 1
    10. },
    11. "success": true
    12. }

3. 根据搜索条件获取实例详情列表

  • 接口:/yida/process/getInstances.json
  • 说明:只有应用管理员才能使用这个接口
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 该接口只有应用管理员能使用。会校验userId是否应用管理员。
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formUuid 表单ID FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 请看附录6
searchFieldJson 根据表单内组件值查询 格式见附录2:根据组件值进行条件搜索,组件值格式说明
targetFieldJson 想获取的表单组件值 [“textField_jf9a8cqs”,”employeeField_jf9a78un”] [“fieldId”…]
taskId 任务ID 2199132092 一般用不到。
instanceStatus 实例状态 RUNNING 可选值为:RUNNING,TERMINATED,COMPLETED,ERROR。
分别代表:运行中,已终止,已完成,异常。
approvedResult 流程审批结果 agree 可选值为:agree, disagree。
分别表示:同意, 拒绝。
currentPage 当前页 1 必须大于0
默认1
pageSize 每页记录数 10 必须大于0
默认10
originatorId 根据流程发起人工号查询
createFrom createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表 2018-01-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
createTo createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表。 2018-02-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和createFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)创建的数据。
modifiedFrom modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表 2018-01-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
modifiedTo modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表。 2018-02-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和modifiedFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)被修改的数据。 |

  • 返回字段说明:
    • result :
      • currentPage : 当前页
      • totalCount : 符合条件的实例总数
      • data : 实例详情列表数组,单个实例详情格式参见:附录3-流程实例详情对象格式说明
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result": {
    3. "data": [
    4. {
    5. "actioners": [
    6. {
    7. "name": {
    8. "pureEn_US": "xxx",
    9. "en_US": "xxx",
    10. "zh_CN": "xxx",
    11. "type": "i18n"
    12. },
    13. "userId": "xxx"
    14. }
    15. ],
    16. "processInstanceId": "f30233fb-72e1-4af4-8cb8-c7e0ea9ee530",
    17. "formUuid": "FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3",
    18. "data": {
    19. "numberField_jcr0069o": 1,
    20. "multiSelectField_jcr0069s": [
    21. "选项三",
    22. "选项二"
    23. ],
    24. "textareaField_jcr0069n": "duohang",
    25. "employeeField_jcr0069x": [
    26. "119384"
    27. ],
    28. "departmentField_jcr0069z": "信息平台事业部",
    29. "cascadeDate_jcr0069u": [
    30. "1514736000000",
    31. "1517328000000"
    32. ],
    33. "cascadeSelectField_jcr006a0": [
    34. "part",
    35. "part_b"
    36. ],
    37. "tableField_jcr006a1": [
    38. {
    39. "departmentField_jcr006ad": "信息平台事业部",
    40. "cascadeDate_jcr006aa": [
    41. "1514736000000",
    42. "1517328000000"
    43. ],
    44. "selectField_jcr006a6": "选项三",
    45. "citySelectField_jcr006ac": [
    46. "天津",
    47. "天津市",
    48. "河东区"
    49. ],
    50. "radioField_jcr006a5": "选项二",
    51. "employeeField_jcr006ab": [
    52. "079349",
    53. "086172"
    54. ],
    55. "dateField_jcr006a9": 1517328000000,
    56. "textField_jcr006a2": "明细下单行",
    57. "textareaField_jcr006a3": "明细下多行",
    58. "cascadeSelectField_jcr006ae": [
    59. "product",
    60. "product_a"
    61. ],
    62. "numberField_jcr006a4": 2,
    63. "checkboxField_jcr006a7": [
    64. "选项一",
    65. "选项三",
    66. "选项二"
    67. ],
    68. "multiSelectField_jcr006a8": [
    69. "选项一",
    70. "选项三",
    71. "选项二"
    72. ]
    73. }
    74. ],
    75. "selectField_jcr0069q": "选项一",
    76. "citySelectField_jcr0069y": [
    77. "北京",
    78. "北京市",
    79. "东城区"
    80. ],
    81. "checkboxField_jcr0069r": [
    82. "选项三",
    83. "选项二"
    84. ],
    85. "textField_jcr0069m": "danhang",
    86. "radioField_jcr0069p": "选项一",
    87. "dateField_jcr0069t": 1516636800000
    88. },
    89. "processCode": "TPROC--EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ4",
    90. "originator": {
    91. "name": {
    92. "pureEn_US": "xxx",
    93. "en_US": "xxxx",
    94. "zh_CN": "xxx",
    95. "type": "i18n"
    96. },
    97. "userId": "xxxx"
    98. },
    99. "title": "xxx发起的流程",
    100. "instanceStatus": "RUNNING"
    101. }
    102. ],
    103. "totalCount": 1,
    104. "currentPage": 1
    105. },
    106. "success": true
    107. }

4. 根据实例ID获取流程实例详情

  • 接口:/yida/process/getInstanceById.json
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 会校验userId是否有访问实例的权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
processInstanceId 流程实例ID f30233fb-72e1-4af4-8cb8-c7e0ea9ee530
  • 返回字段说明:
    • result : 实例详情列表,实例详情格式参见:附录3-流程实例详情对象格式说明
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result": {
    3. "actioners": [
    4. {
    5. "name": {
    6. "pureEn_US": "xxx",
    7. "en_US": "xxx",
    8. "zh_CN": "xxx",
    9. "type": "i18n"
    10. },
    11. "userId": "xxx"
    12. }
    13. ],
    14. "processInstanceId": "f30233fb-72e1-4af4-8cb8-c7e0ea9ee530",
    15. "formUuid": "FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3",
    16. "data": {
    17. "numberField_jcr0069o": 1,
    18. "multiSelectField_jcr0069s": [
    19. "选项三",
    20. "选项二"
    21. ],
    22. "textareaField_jcr0069n": "duohang",
    23. "employeeField_jcr0069x": [
    24. "119384"
    25. ],
    26. "departmentField_jcr0069z": "信息平台事业部",
    27. "cascadeDate_jcr0069u": [
    28. "1514736000000",
    29. "1517328000000"
    30. ],
    31. "cascadeSelectField_jcr006a0": [
    32. "part",
    33. "part_b"
    34. ],
    35. "tableField_jcr006a1": [
    36. {
    37. "departmentField_jcr006ad": "信息平台事业部",
    38. "cascadeDate_jcr006aa": [
    39. "1514736000000",
    40. "1517328000000"
    41. ],
    42. "selectField_jcr006a6": "选项三",
    43. "citySelectField_jcr006ac": [
    44. "天津",
    45. "天津市",
    46. "河东区"
    47. ],
    48. "radioField_jcr006a5": "选项二",
    49. "employeeField_jcr006ab": [
    50. "079349",
    51. "086172"
    52. ],
    53. "dateField_jcr006a9": 1517328000000,
    54. "textField_jcr006a2": "明细下单行",
    55. "textareaField_jcr006a3": "明细下多行",
    56. "cascadeSelectField_jcr006ae": [
    57. "product",
    58. "product_a"
    59. ],
    60. "numberField_jcr006a4": 2,
    61. "checkboxField_jcr006a7": [
    62. "选项一",
    63. "选项三",
    64. "选项二"
    65. ],
    66. "multiSelectField_jcr006a8": [
    67. "选项一",
    68. "选项三",
    69. "选项二"
    70. ]
    71. }
    72. ],
    73. "selectField_jcr0069q": "选项一",
    74. "citySelectField_jcr0069y": [
    75. "北京",
    76. "北京市",
    77. "东城区"
    78. ],
    79. "checkboxField_jcr0069r": [
    80. "选项三",
    81. "选项二"
    82. ],
    83. "textField_jcr0069m": "danhang",
    84. "radioField_jcr0069p": "选项一",
    85. "dateField_jcr0069t": 1516636800000
    86. },
    87. "currentActivityInstances": [
    88. {
    89. "activityId": "sid-6470221a-82ec-4bdd-a873-245ee47a5605",
    90. "activityName": "主管审批",
    91. "activityNameEn": "managerApproval",
    92. "id": 31644983
    93. }
    94. ],
    95. "processCode": "TPROC--EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ4",
    96. "originator": {
    97. "name": {
    98. "pureEn_US": "xxx",
    99. "en_US": "xxxx",
    100. "zh_CN": "xxx",
    101. "type": "i18n"
    102. },
    103. "userId": "xxxx"
    104. },
    105. "title": "xxx发起的流程",
    106. "gmtCreate": "2021-01-07 17:07:31",
    107. "gmtModified": "2021-01-07 17:07:30",
    108. "instanceStatus": "RUNNING"
    109. },
    110. "success": true
    111. }

5. 删除流程实例

  • 接口:/yida/process/deleteInstance.json
  • 说明:只有应用管理员才能使用这个接口
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否有删除权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
processInstanceId 流程实例ID f30233fb-72e1-4af4-8cb8-c7e0ea9ee530
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

6. 终止流程实例

  • 接口:/yida/process/terminateInstance.json
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 会校验userId是否应用管理员,不是报错
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
processInstanceId 流程实例ID f30233fb-72e1-4af4-8cb8-c7e0ea9ee530
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

7. 执行审批任务

  • 接口:/yida/task/executeTask.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxyy | | | userId | 登录人的工号 | 是 | | 校验userId是否任务的执行人 | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | taskId | 任务ID | 是 | 12002575 | | | procInstId | 实例ID | 是 | f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 | | | outResult | 审批结果 | 是 | AGREE | AGREE(同意)、DISAGREE(不同意) | | remark | 审批意见 | 是 | 确认同意 | | | formDataJson | 更新的表单值 | 否 | | 参考:附录1保存/更新 表单数据格式说明。
    参数有的组件更新,没有的组件保持不变。
    明细的值只能统一更新,无法只更新明细下某个组件的值 |
  • 返回值字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

8. 执行转交任务

  • 接口: /yida/task/redirectTask.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | | 在应用数据中获取。 | | byManager | 是否应用管理员进行转交 | 是 | y |
    - 可选项 : y/n
    - y,则userId必须传应用管理员工号,或者yida_pub_account
    - n, userId必须传任务的当前执行人
    | | userId | 登录人的工号 | 是 | | | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | processInstanceId | 流程实例ID | 是 | 54a99bc7-3d63-4885-88de-27a9bdbcb3ab | | | taskId | 任务ID | 是 | 9859968 | | | nowActionerId | 转交后新的任务处理人的工号 | 是 | 47072888 | | | remark | 转交备注 | 是 | 帮忙处理下,谢谢 | |
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success":true
    3. }

下面给出两组测试程序:
测试1:转交人为【宜搭平台】
当前审批流到达第一个审批人修俊(userid: 47072721),我们希望将当前审批经由宜搭平台转交给另外一个审批人砚心(userid: 47072888)。

image.png

编写如下的代码,重点关注参数byManager为y,userId参数为公共账号yida_pub_account。

  1. @Test
  2. public void redirectTaskTest() {
  3. String api = "/yida/task/redirectTask.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_XO5***IW5ITX5J4OPS5Y");
  6. postClient.addParameter("systemToken", "I10DRPF***RINFOHEKWR4OZ0Y053Q3320H2SX9K0");
  7. postClient.addParameter("byManager", "y");
  8. postClient.addParameter("userId", "yida_pub_account");
  9. postClient.addParameter("processInstanceId", "54a99bc7-3d63-4885-88de-27a9bdbcb3ab");
  10. postClient.addParameter("nowActionerId", "47072888");
  11. postClient.addParameter("taskId", "9859968");
  12. postClient.addParameter("remark", "帮忙处理下,谢谢");
  13. String apiResult = postClient.post();
  14. Assert.notNull(apiResult);
  15. }

image.png
再去页面查看一下,最新的流程页面,显示当前流程经由公共账号宜搭平台(userid: yida_pub_account)转交给了砚心(userid: 47072888)进行审批。
image.png

测试2:转交人为当前审批人
当前审批流到达第一个审批人修俊(userid: 47072721),我们希望将当前审批经由当前审批人转交给另外一个审批人砚心(userid: 47072888)。

image.png

编写如下的代码,重点关注参数byManager为n,userId参数为当前审批人修俊(userid: 47072721)。

  1. @Test
  2. public void redirectTaskTest() {
  3. String api = "/yida/task/redirectTask.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_XO5CFLIW5ITX5J4OPS5Y");
  6. postClient.addParameter("systemToken", "I10DRPF692RINFOHEKWR4OZ0Y053Q3320H2SX9K0");
  7. postClient.addParameter("byManager", "n");
  8. postClient.addParameter("userId", "47072721");
  9. postClient.addParameter("processInstanceId", "e778917a-3743-41e2-8341-6bab7da10837");
  10. postClient.addParameter("nowActionerId", "47072888");
  11. postClient.addParameter("taskId", "9903391");
  12. postClient.addParameter("remark", "帮忙处理下,谢谢");
  13. String apiResult = postClient.post();
  14. Assert.notNull(apiResult);
  15. }

image.png

再去页面查看一下,最新的流程页面,显示当前流程经由原审批人修俊(userid: 47072721)转交给了砚心(userid: 47072888)进行审批。
image.png

9. 获取审批记录

  • 接口:/yida/process/getOperationRecords.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxyy | | | userId | 登录人的工号 | 是 | | 校验userId是否有访问实例的权限 | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | processInstanceId | 流程实例ID | 是 | f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 | |
  • 返回字段说明:
    • result:审批记录列表
      • id:主键Id
      • processInstanceId:对应流程实例Id
      • taskId:对应任务Id
      • showName:节点名称
      • activityId:节点定义ID
      • operator:操作人
      • operatorNick:操作人花名
      • operatorName:操作人真名
      • operatorDisplayName:操作人国际化显示名
      • operatorStatus:操作人状态
      • operateTime:操作时间
      • action:执行动作
      • remark:备注
      • taskType:任务类型: 普通的任务类型 COMMON 中间插入的任务类型 MIDDLE_IN
      • taskExecuteType:任务执行类型
      • files:附件保存的文件
      • operatorAgentIds:代理人
      • operateType:操作类型
      • activeTime:任务激活时间
      • taskHoldTime:任务滞留时间
      • operatorPhotoUrl:人员头像
      • size:固定值1
      • type:固定值HISTORY
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true,
    3. "result": [
    4. {
    5. "operateTime": "2018-06-22 14:35:40",
    6. "remark": "",
    7. "taskHoldTime": 0,
    8. "type": "HISTORY",
    9. "operatorName": "王许川",
    10. "operator": "WB260752",
    11. "activityId": "sid-restartevent",
    12. "action": "提交申请",
    13. "actionExt": "submit",
    14. "id": 2846866118,
    15. "operatorPhotoUrl": "//work.alibaba-inc.com/photo/WB260752.128x128.jpg",
    16. "processInstanceId": "8c124808-82e7-473b-9a7a-43c29b310837",
    17. "showName": "提交申请",
    18. "operateType": "NEW_PROCESS",
    19. "domains": [],
    20. "operatorStatus": "A",
    21. "operatorAgentIds": [],
    22. "size": 1,
    23. "operatorDisplayName": "王许川",
    24. "taskId": "null"
    25. },
    26. {
    27. "taskHoldTime": 531398377,
    28. "type": "TODO",
    29. "operatorName": "王许川",
    30. "operator": "WB260752",
    31. "activityId": "sidJIOB2P2J1JW3RPMDOS28",
    32. "taskType": "COMMON_ALL_AT_ONCE",
    33. "actionExt": "doing",
    34. "operatorPhotoUrl": "//work.alibaba-inc.com/photo/WB260752.128x128.jpg",
    35. "processInstanceId": "8c124808-82e7-473b-9a7a-43c29b310837",
    36. "showName": "执行人",
    37. "activeTime": "2018-06-22 14:35:41",
    38. "domains": [],
    39. "operatorStatus": "A",
    40. "operatorAgentIds": [],
    41. "size": 1,
    42. "operatorDisplayName": "王许川",
    43. "taskId": "2846866145"
    44. }
    45. ]
    46. }

10. 执行虚拟节点审批任务

  • 接口: /yida/process/executePlatformTask.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxyyddd | | | userId | 登录人的工号 | 是 | yida_pub_account | 写死 yida_pub_account | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | procInstId | 流程实例ID | 是 | f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 | | | outResult | 审批结果 | 是 |
    - agree
    - disagree
    | | | formDataJson | 更新的表单数据 | 否 | | 参考:附录1保存/更新 表单数据格式说明。
    参数有的组件更新,没有的组件保持不变。
    明细的值只能统一更新,无法只更新明细下某个组件的值 | | remark | 审批意见 | 是 | 确认同意 | | | noExecuteExpressions | 是否不执行校验&关联操作 | 否 | y | 本任务节点有绑定校验规则或者关联操作时,
    y -> 不执行校验规则&关联操作
    n -> 执行校验规则&关联操作
    不传默认为n,即会执行校验规则&关联操作 |

  • 返回字段说明:

    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

11. 流程实例更新

  • 接口:/yida/process/updateInstance.json
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的员工工号 会校验userId是否有流程发起权限
language 语言环境 zh_CN 可选值:zh_CN/en_US
processInstanceId 实例ID f30233fb-72e1-4af4-8cb8-c7e0ea9ee530
updateFormDataJson 更新的表单数据 参考:附录1保存/更新 表单数据格式说明
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

12. 获取指定流程节点上可操作功能点列表

  • 接口: /yida/process/getActivityButtonVOs.json
  • 参数
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的员工工号 会校验userId是否有流程发起权限
language 语言环境 zh_CN 可选值:zh_CN/en_US
processCode 流程编码 TPROC—X1G*42ZMGA31OYELIWJ1 可以在数据管理页的流程变量中获取。
activityId 节点ID sidKDYN9BIP*4K06T8G7 可以通过/yida/process/getOperationRecords.json 接口返值中的activityId字段获取
  • 返回值字段说明:
    • result:按钮显示的中英文描述
      • aliasEn:按钮显示英文
      • alias:按钮显示中文
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回值结果示例:
    1. {
    2. "result": [
    3. {
    4. "aliasEn": "Forward",
    5. "alias": "转交",
    6. },
    7. {
    8. "aliasEn": "Append",
    9. "alias": "加签",
    10. },
    11. {
    12. "aliasEn": "Return",
    13. "alias": "退回",
    14. }
    15. ],
    16. "success": true
    17. }

补充说明:
这个接口的主要功能用于查询指定流程节点(使用activityId标识)所支持的处理功能列表,通常的可选值包括:同意、拒绝、转交、撤销、退回、加签等。如下图所示,展示的是流程中的第一个审批节点所对应的处理功能列表的页面展示。
image.png
假如我们希望通过上述接口查询这个列表应该怎么操作呢?下面给出一个完整的示例:

  1. @Test
  2. public void getActivityButton() {
  3. String api = "/yida/process/getActivityButtonVOs.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_GESFHE***1BWRJC4F0JU");
  6. postClient.addParameter("systemToken", "VSHCV32U***MF4ZMX1DBWK4UYXRJS30DP7GW9K0");
  7. postClient.addParameter("userId", "118***32");
  8. postClient.addParameter("processCode","TPROC--VSHCV***23KKHNAXC3YKFH8SHTCMI27SWLYMCK4");
  9. postClient.addParameter("activityId","sidKDYN9B***2O4K06T8G7");
  10. String apiResult = postClient.post();
  11. Assert.notNull(apiResult);
  12. }

image.png

13. 退回/重新发起实例

  • 接口: /yida/task/restartInstance.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hello1234 | | | userId | 登录人的员工工号 | 是 | | 会校验userId是否有流程发起权限 | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | processInstanceId | 流程实例id | 是 | f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 | | | taskId | 任务id | 是 | 9905037 | | | currentActivityId | 当前流程节点的id | 是 | sidKF6MA2JNF20DD4CC4 | | | targetActivityId | 目标流程节点的id | 否 | sidKF6MA2JNF20DD4CC4 | 如果为空则退回到提交人节点 | | remark | 评论 | 否 | | | | files | 附件文件地址列表,JSON数组格式 | 否 | | | | formUuid | 表单编码formuuid | 否 | FORM-NJYJZELV8YZRDEI2N5IQ7L6VEDMR1VE9GMPCJB | 通常不填 |

  • 返回值字段说明:

    • result:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回值结果示例:
    1. {
    2. "success": true
    3. }
    下面以一个实际的案例介绍该接口的具体使用:
    假设当前的审批处理已经到达指定的审批人了,审批人提交的内容不合规,想要将流程退回给流程的发起人:
    image.png
    接口中所需的参数activityId和taskId可以通过 /yida/process/getOperationRecords.json 接口获取。
    image.png

假如我们希望通过上述接口查询这个列表应该怎么操作呢?下面给出一个完整的示例:

  1. @Test
  2. public void restartInstanceTest() {
  3. String api = "/yida/task/restartInstance.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_XO5CFL***ITX5J4OPS5Y");
  6. postClient.addParameter("systemToken", "I10DRPF692RINFOH***R4OZ0Y053Q3320H2SX9K0");
  7. postClient.addParameter("userId", "47072721");
  8. postClient.addParameter("taskId", "9905037");
  9. postClient.addParameter("currentActivityId", "sidKF6M6U6A2JNF20DD4CC4");
  10. String apiResult = postClient.post();
  11. Assert.notNull(apiResult);
  12. }

程序的执行结果如下:
image.png
页面显示如下,可以看到审批流程已经退回到发起人
image.png

14. 执行加签操作

  • 接口: /yida/task/appendTask.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hello1234 | | | userId | 登录人的员工工号 | 是 | | 会校验userId是否有流程发起权限 | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | taskId | 任务id | 是 | 9905037 | | | procInsId | 流程实例id | 是 | f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 | | | actioners | 加签操作人列表 | 是 | [“1234”,”2345”] | | | isBefore | 是否为前加签 | 是 | true | | | remark | 评论 | 否 | 不符合要求,建议修改后重新发起 | |
  • 返回值字段说明:
    • result:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。

示例程序:

  1. @Test
  2. public void appendTaskTest() {
  3. String api = "/yida/task/appendTask.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_XO5CFL***ITX5J4OPS5Y");
  6. postClient.addParameter("systemToken", "I10DRPF692RINFOH***R4OZ0Y053Q3320H2SX9K0");
  7. postClient.addParameter("userId", "47***721");
  8. postClient.addParameter("taskId", "9905037");
  9. postClient.addParameter("procInsId", "64f3e8bc-a28a-4ec0-9b09-5383df8f00b2");
  10. postClient.addParameter("actioners", "[\"47072721\"]");
  11. postClient.addParameter("isBefore", "true");
  12. String apiResult = postClient.post();
  13. Assert.notNull(apiResult);
  14. }
  • 返回值结果示例:
    1. {
    2. "success": true
    3. }

4.3 单据实例

1. 新增单据实例

  • 接口:/yida/form/saveFormData.json
  • 参数:
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否有单据提交权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formUuid 表单ID FORM-NJYJZELV8YZRDEI2N5IQ7L6VEDMR1VE9GMPCJB 请看附录6
formDataJson 表单数据 {“textField_jcpm6agt”: “单行”,”employeeField_jcos0sar”: [“workno”]} 参考:附录1保存/更新 表单数据格式说明
  • 返回字段说明:
    • result:新创建的表单示例ID
    • success: 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result": "FINST-EF6Y93URN2UZ1SBPLIP9NAV6HR2GEO1Z4ZCHSCJ0",
    3. "success": true
    4. }

完整Demo:
新建一个应用,创建一个表单页面,为了演示方便,只包含一个简单的单行文本框的控件,将该应用上线。

特别说明:未上线的应用是无法提交数据的。
image.png
在设计器页面,获取控件的唯一标识备用:textField_kmmsati6

image.png

获取应用相关的授权参数备用,包括appType、systemToken、formUuid。
image.png

参数名 参数值
appType APP_ERF2P6JMM5LJ8S3CYS1G
systemToken YZ14852L21UCNOCY*76O8EZ0634VDSNKMK0
formUUid FORM-YZ14852L2106OOQY5Q2HYJQ50A3U592UTOASMMK1

前往开放平台,确保已经完成该接口“/yida/form/saveFormData.json”的订阅。
此处忽略截图。

接下来,编写如下的测试代码:

  1. @Test
  2. public void saveFormDataTest(){
  3. String api = "/yida/form/saveFormData.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_ERF2P6JMM5LJ8S3CYS1G");
  6. postClient.addParameter("systemToken", "YZ14852L21UCNOCY*****76O8EZ0634VDSNKMK0");
  7. postClient.addParameter("userId", "yida_pub_account");
  8. postClient.addParameter("formUuid", "FORM-YZ14852L2106OOQY5Q2HYJQ50A3U592UTOASMMK1");
  9. Map<String,String> dataMap = new HashMap<>();
  10. dataMap.put("textField_kmmsati6","mytest");
  11. postClient.addParameter("formDataJson", JSON.toJSONString(dataMap));
  12. String apiResult = postClient.post();
  13. Assert.notNull(apiResult);
  14. }

image.png

前往数据管理页,可以看到已经有一条新提交的数据了,且提交人、提交的数据跟代码中的参数一致,验证通过。
image.png

2. 更新单据中指定组件值

  • 接口:/yida/form/updateFormData.json
  • 参数:
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否有更新权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formInstId 要更新的表单数据ID FINST-NJYJZELVVYZRVGJHR7M6FJW3ESJN1P1TCNPCJ9
updateFormDataJson 要更新的表单组件值,必填 {“employeeField_jcpm5gy2”: [“workno”]} 参考:附录1保存/更新 表单数据格式说明。
参数有的组件更新,没有的组件保持不变。
明细的值只能统一更新,无法只更新明细下某个组件的值
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

3. 删除单据实例

  • 接口:/yida/form/deleteFormData.json
  • 参数:
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否有删除权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formInstId 要删除的表单数据ID FINST-NJYJZELVVYZRVGJHR7M6FJW3ESJN1P1TCNPCJ9
  • 返回字段说明:
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "success": true
    3. }

4. 根据单据实例ID查询单据实例详情

  • 接口:/yida/form/getFormDataById.json
  • 参数:
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否有数据查看权限
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formInstId 要查询的实例的实例ID FINST-NJYJZELVVYZRVGJHR7M6FJW3ESJN1P1TCNPCJ9
  • 返回字段说明:
    • result:单据实例详情。详细的字段描述参见:附录5. 单据实例详情对象格式说明
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "gmtModified":"2018-01-24 11:22:01",
    3. "formUuid":"FORM-EF6Y93URN24F1SCX15VA2P918LPEIJ2H3UFORCJ1",
    4. "formInstId":"FINST-EF6Y93URN2F02S745LTMW2D2G4WVDS16O17ISCJ0",
    5. "formData":{
    6. "numberField_jcr0069o":1,
    7. "multiSelectField_jcr0069s":[
    8. "选项三",
    9. "选项二"
    10. ],
    11. "textareaField_jcr0069n":"duohang",
    12. "employeeField_jcr0069x":[
    13. "119384"
    14. ],
    15. "departmentField_jcr0069z":"xxxx",
    16. "cascadeDate_jcr0069u":[
    17. "1514736000000",
    18. "1517328000000"
    19. ],
    20. "cascadeSelectField_jcr006a0":[
    21. "part",
    22. "part_b"
    23. ],
    24. "tableField_jcr006a1":[
    25. {
    26. "departmentField_jcr006ad":"xxxx",
    27. "cascadeDate_jcr006aa":[
    28. "1514736000000",
    29. "1517328000000"
    30. ],
    31. "selectField_jcr006a6":"选项三",
    32. "citySelectField_jcr006ac":[
    33. "天津",
    34. "天津市",
    35. "河东区"
    36. ],
    37. "radioField_jcr006a5":"选项二",
    38. "employeeField_jcr006ab":[
    39. "079349",
    40. "086172"
    41. ],
    42. "dateField_jcr006a9":1517328000000,
    43. "textField_jcr006a2":"明细下单行",
    44. "textareaField_jcr006a3":"明细下多行",
    45. "cascadeSelectField_jcr006ae":[
    46. "product",
    47. "product_a"
    48. ],
    49. "numberField_jcr006a4":2,
    50. "checkboxField_jcr006a7":[
    51. "选项一",
    52. "选项三",
    53. "选项二"
    54. ],
    55. "multiSelectField_jcr006a8":[
    56. "选项一",
    57. "选项三",
    58. "选项二"
    59. ]
    60. }
    61. ],
    62. "selectField_jcr0069q":"选项一",
    63. "citySelectField_jcr0069y":[
    64. "北京",
    65. "北京市",
    66. "东城区"
    67. ],
    68. "checkboxField_jcr0069r":[
    69. "选项三",
    70. "选项二"
    71. ],
    72. "textField_jcr0069m":"danhang",
    73. "radioField_jcr0069p":"选项一",
    74. "dateField_jcr0069t":1516636800000
    75. },
    76. "originator":{
    77. "name":{
    78. "pureEn_US":"userEnglishName",
    79. "en_US":"userEnglishName",
    80. "zh_CN":"userName",
    81. "type":"i18n"
    82. },
    83. "userId":"xxxx"
    84. }
    85. }

5. 根据条件搜索单据实例ID列表

  • 接口:/yida/form/searchFormDataIds.json
  • 只有应用管理员才能使用这个接口
  • 参数:
参数名 描述 是否必填 示例 备注
appType 应用ID APP_PBKT0MFBEBTDO8T7SLVP
systemToken 应用秘钥 hello1234
userId 登录人的工号 校验userId是否应用管理员,不是报错
language 语言 zh_CN 可选值:zh_CN/en_US
默认:zh_CN
formUuid 表单ID FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 请看附录6
searchFieldJson 根据表单内组件值查询 格式见附录2:根据组件值进行条件搜索,组件值格式说明
currentPage 当前页 1 必须大于0
默认1
pageSize 每页记录数 10 必须大于0
默认10
originatorId 根据数据提交人工号查询
createFrom createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表 2018-01-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
createTo createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表。 2018-02-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和createFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)创建的数据。
modifiedFrom modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表 2018-01-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。
modifiedTo modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表。 2018-02-01 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

和modifiedFrom一起,相当于查询在
2018-01-01到2018-01-31之间(包含01和31号)被修改的数据。 |

  • 返回值字段说明:
    • result:
      • data : 实例ID列表
      • totalCount : 符合条件的实例总数
      • currentPage : 当前页
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result": {
    3. "data": [
    4. "FINST-EF6Y93URN2F02S745LTMW2D2G4WVDS16O17ISCJ0"
    5. ],
    6. "totalCount": 1,
    7. "currentPage": 1
    8. },
    9. "success": true,
    10. "errorMsg": null,
    11. "errorCode": null
    12. }

6. 根据条件搜索单据实例详情列表

  • 接口:/yida/form/searchFormDatas.json
  • 说明:只有应用管理员才能使用这个接口
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hello1234 | | | userId | 登录人的工号 | 是 | | 校验userId是否应用管理员,不是报错 | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | formUuid | 表单ID | 是 | FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 | 请看附录6 | | searchFieldJson | 根据表单内组件值查询 | 否 | | 格式见附录2:根据组件值进行条件搜索,组件值格式说明 | | targetFieldJson | 想获取的组件值 | 否 | [“employeeField_jf9a78un”,”textField_jf9a8cqs”] | [“fieldId”..] | | currentPage | 当前页 | 否 | 1 | 必须大于0,默认1 | | pageSize | 每页记录数 | 否 | 10 | 必须大于0
    默认10 | | originatorId | 根据数据提交人工号查询 | 否 | | | | createFrom | createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表 | 否 | 2018-01-01 | 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。 | | createTo | createFrom和createTo两个时间构造一个时间段。查询在该时间段创建的数据列表。 | 否 | 2018-02-01 | 字符串格式,目前支持yyyy-MM-dd和yyyy-MM-dd HH:mm:ss 两种日期格式。

    和createFrom一起,相当于查询在
    2018-01-01到2018-01-31之间(包含01和31号)创建的数据。 | | modifiedFrom | modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表 | 否 | 2018-01-01 | 字符串格式,且为yyyy-MM-DD格式 | | modifiedTo | modifiedFrom和modifiedTo构成一个时间段,查询在该时间段有修改的数据列表。 | 否 | 2018-02-01 | 字符串格式,且为yyyy-MM-DD格式。
    和modifiedFrom一起,相当于查询在
    2018-01-01到2018-01-31之间(包含01和31号)被修改的数据。 |

  • 返回值字段说明:

    • result :
      • data : 实例详情列表数组。单个实例详情格式参见:附录5:单据实例详情对象格式说明
      • currentPage : 当前页
      • totalCount : 符合条件的实例总数
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result":{
    3. "data":[
    4. {
    5. "gmtModified":"2020-06-08 17:14:29",
    6. "formUuid":"FORM-LWCG19P4L2IO5GVBTQXIKWZ3NEJ3QV1NVB3A6BKA",
    7. "originator":{
    8. "name":{
    9. "pureEn_US":"良枼",
    10. "en_US":"良枼",
    11. "zh_CN":"良枼",
    12. "type":"i18n"
    13. },
    14. "userId":"160340"
    15. },
    16. "title":"良枼发起的简单表单",
    17. "gmtCreate":"2020-06-08 17:14:29",
    18. "formInstId":"FINST-00FOFWHSB2Z25GQ8QBYGHGZ2ZF1UCV2J914A6BK7",
    19. "formData":{
    20. "textField_kb6a3g6q":"34"
    21. }
    22. },
    23. {
    24. "gmtModified":"2020-06-08 17:14:35",
    25. "formUuid":"FORM-LWCG19P4L2IO5GVBTQXIKWZ3NEJ3QV1NVB3A6BKA",
    26. "originator":{
    27. "name":{
    28. "pureEn_US":"良枼",
    29. "en_US":"良枼",
    30. "zh_CN":"良枼",
    31. "type":"i18n"
    32. },
    33. "userId":"160340"
    34. },
    35. "title":"良枼发起的简单表单",
    36. "gmtCreate":"2020-06-08 17:14:35",
    37. "formInstId":"FINST-00FOFWHSB2445GVDSJZQFCL2E734FO3JY54A6BKG",
    38. "formData":{
    39. "textField_kb6a3g6q":"56"
    40. }
    41. },
    42. {
    43. "gmtModified":"2020-06-13 11:04:41",
    44. "formUuid":"FORM-LWCG19P4L2IO5GVBTQXIKWZ3NEJ3QV1NVB3A6BKA",
    45. "originator":{
    46. "name":{
    47. "pureEn_US":"良枼",
    48. "en_US":"良枼",
    49. "zh_CN":"良枼",
    50. "type":"i18n"
    51. },
    52. "userId":"160340"
    53. },
    54. "title":"良枼发起的简单表单",
    55. "gmtCreate":"2020-06-13 11:04:41",
    56. "formInstId":"FINST-T1DE78JEE1Y0OGYV9150Q4M68YJIFD3QUP32DBK0",
    57. "formData":{
    58. "textField_kb6a3g6q":"1"
    59. }
    60. }
    61. ],
    62. "totalCount":3,
    63. "currentPage":1
    64. },
    65. "success":true
    66. }
    案例:
    image.png
单行文本框 数字输入框 人员搜索框
唯一标识 textField_kn8ay5aq numberField_kn8ay5ar employeeField_kne1mutg
测试数据1 pp 2 炎光(47072722)
测试数据2 test 3 修俊(47072721),砚心(47072888)
测试数据3 test 1 砚心(47072888)
测试数据4 test 2 修俊(47072721)

示例代码1:根据单行文本框字段值进行数据过滤

  1. @Test
  2. public void searchFormDataTest() {
  3. String api = "/yida/form/searchFormDatas.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_LD3XO46Y8SBMWN94DWWJ");
  6. postClient.addParameter("systemToken", "CE1WPNFFEKL3PB7RK****4LSS6R8P10HL3H7NK0");
  7. postClient.addParameter("userId", "yida_pub_account");
  8. postClient.addParameter("formUuid", "FORM-CE1WPNFFELL3PVXIM2WES6DBR05LV3NLP5H7NK0");
  9. Map<String, Object> dataMap = new HashMap<>();
  10. // 文本框测试验证通过
  11. dataMap.put("textField_kn8ay5aq", "pp");
  12. postClient.addParameter("searchFieldJson", JSON.toJSONString(dataMap));
  13. String apiResult = postClient.post();
  14. JSONObject obj = JSON.parseObject(apiResult);
  15. Assert.notNull(obj);
  16. }

可以看到,筛选出来符合条件的数据只有1条,且当行文本框(textField_kn8ay5aq)的值为pp,符合预期。
image.png

示例代码2:根据人员搜索框字段值进行过滤

  1. @Test
  2. public void searchFormDataTest() {
  3. String api = "/yida/form/searchFormDatas.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_LD3XO46Y8SBMWN94DWWJ");
  6. postClient.addParameter("systemToken", "CE1WPNFFEKL3PB7RK****LSS6R8P10HL3H7NK0");
  7. postClient.addParameter("userId", "yida_pub_account");
  8. postClient.addParameter("formUuid", "FORM-CE1WPNFFELL3PVXIM2WES6DBR05LV3NLP5H7NK0");
  9. Map<String, Object> dataMap = new HashMap<>();
  10. // 人员搜索框
  11. dataMap.put("employeeField_kne1mutg", Arrays.asList("47072888"));
  12. postClient.addParameter("searchFieldJson", JSON.toJSONString(dataMap));
  13. String apiResult = postClient.post();
  14. JSONObject obj = JSON.parseObject(apiResult);
  15. Assert.notNull(obj);
  16. }

可以看到,查询到符合条件的结果值有2条,对应测试数据2和测试数据3,这两条数据的人员搜索框字段均包含有砚心(47072888),数据查询的结果符合预期。
image.png

更多其他控件过滤字段的格式请参考本文的附录2,这里不再展开赘述。

7. 获取表单定义

  • 接口:/yida/formDesign/getFormComponentDefinationList.json
  • 参数: | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxxx | | | userId | 登录人的工号 | 是 | | | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | formUuid | 表单ID | 是 | FORM-NJYJZELV8YZRDEI2N5IQ7L6VEDMR1VE9GMPCJB | |
  • 返回字段说明:
    • result:表单中的控件描述信息列表
      • label:控件的中英文标签信息
      • key:控件的唯一标识
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result":[
    3. {
    4. "label":"{"en_US":"CheckBox Field","zh_CN":"多选","type":"i18n"}",
    5. "key":"checkboxField_jiwvhkdi"
    6. },
    7. {
    8. "label":"{"en_US":"Textarea Field","zh_CN":"多行输入框","type":"i18n"}",
    9. "key":"textareaField_jiwvhkdh"
    10. },
    11. {
    12. "label":"{"en_US":"Select Field","zh_CN":"下拉单选","type":"i18n"}",
    13. "key":"selectField_jiwvhkdg"
    14. }
    15. ],
    16. "success":true
    17. }

4.4 任务中心

1. 查询已提交任务

  • 接口: /yida/process/getMySubmmitInCorp.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | corpId | 企业ID | 是 | | | | page | 当前页 | 是 | 1 | 必须大于0 默认1 | | limit | 每页记录数 | 是 | 10 | 必须大于0 默认10 最大值:100 | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | keyword | 关键词 | 否 | | | | appTypes | 应用标识列表 | 否 | [“APP_xxx”,”APP_xxx”] | | | processCodes | 流程code列表 | 否 | [“xx”,”xxx”] | | | createFrom | 创建开始时间 | 否 | | 13位以毫秒为单位的时间戳 | | createTo | 创建结束时间 | 否 | | 13位以毫秒为单位的时间戳 | | userId | 登录人的工号 | 是 | | | | instanceCreateFrom | 实例创建开始时间 | 否 | | 13位以毫秒为单位的时间戳 | | instanceCreateTo | 实例创建结束时间 | 否 | | 13位以毫秒为单位的时间戳 | | taskFinishFrom | 任务开始时间 | 否 | | | | instanceCreateTo | 任务结束时间 | 否 | | | | token | 验权token | 是 | | md5(corpId + userId + code),每个企业有自己的唯一code

    md5取32位大写值

    特别说明:用于企业级别验权的code参数平台暂未透出,后面优化后会透出,当前阶段可以提供租户编码从宜搭值班同学侧获取。 |
  • 返回字段说明:
    • result : 返回内容
      • data
        • formInstanceId:表单示例id
        • title:标题
        • instValue:表单中的控件描述信息
        • processId:流程实例id
        • appType:应用编码
        • dataMap:数据映射表,key为控件唯一id,value为控件值
        • originatorId:发起人的id
        • formUuid:表单id
        • dataType:类型,其中finst表示流程。
        • originatorAvatar:头像
        • version:版本号
        • createTime:创建时间
        • modifiedTime:修改时间
      • totalCount:符合条件的实例总数
      • currentPage:当前页
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:

1、成功结果返回示例:

  1. {
  2. "result": {
  3. "data": [{
  4. "formInstanceId": "FINST-AJ1L4CJVXL0UIAIPR06ZA52U9HKUXXXXXX",
  5. "title": "单据",
  6. "instValue": [{"componentId":"node_jfwgghbo","componentName":"TextField","fieldId":"textField_jfwggg8e","label":"姓名","validation":[],"fieldData":{"complexType":"custom","dataType":"CHANGED","pass":true,"value":"jack"},"errorMsg":null,"hasError":false}],
  7. "processId": 0,
  8. "appType": "APP_R8MYLKYXXXXXX",
  9. "dataMap": {
  10. "textField_jfXXXXXX": "XXXXXX"
  11. },
  12. "originatorId": "XXXXXX",
  13. "formUuid": "FORM-0G7KPV3WZL0U3AHTOA9BFVXXXXXX",
  14. "dataType": "finst",
  15. "originatorAvatar": "http://static.dingtalk.com/media/lADPBbCc1R7VwSHNXXXXXX.jpg",
  16. "version": 0,
  17. "createTime": "2018-04-12 19:44:14",
  18. "modifiedTime": "2018-04-12 19:44:14"
  19. }],
  20. "totalCount": 1,
  21. "currentPage": 1
  22. },
  23. "success": true
  24. }

备注:instValue返回的是字符串,内容格式是json数组

2、失败结果返回示例:

  1. {
  2. "errorCode": "TIANSHU_000006",
  3. "success": false,
  4. "errorMsg": "没有权限"
  5. }

示例请求代码:

  1. @Test
  2. public void getMySubmmitInCorpTest() {
  3. String api = "/yida/process/getMySubmmitInCorp.json";
  4. String corpId = "ding5d17e3add038d44535c2f4657eb63711";
  5. String userId = "141940523222800011";
  6. String corpCode = "AJ1L4CJVOL0UUQPTQWX8YOTCCS7O1T4CSNJF11";
  7. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  8. postClient.addParameter("page", "1");
  9. postClient.addParameter("limit", "10");
  10. postClient.addParameter("corpId", corpId);
  11. // postClient.addParameter("appTypes", "[\"APP_I3D2FD2ZQB75KLLKL48Y\"]");
  12. postClient.addParameter("userId", userId);
  13. String token = DigestUtils.md5DigestAsHex(String.format("%s%s%s", corpId, userId, corpCode).getBytes()).toUpperCase();
  14. postClient.addParameter("token", token);
  15. String apiResult = postClient.post();
  16. Assert.notNull(apiResult);
  17. }

2. 查询待办任务

  • 接口: /yida/process/getTodoTasksInCorp.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | corpId | 企业ID | 是 | | | | userId | 登录人的工号 | 是 | | | | limit | 每页记录数 | 是 | 10 | 必须大于0 默认10 最大值:100 | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | page | 当前页 | 是 | 1 | 必须大于0 默认1 | | keyword | 关键词 | 否 | | | | appTypes | 应用标识列表 | 否 | [“APP_xxx”,”APP_xxx”] | | | processCodes | 流程code列表 | 否 | [“xx”,”xxx”] | | | createTo | 创建结束时间 | 否 | | 13位以毫秒为单位的时间戳 | | createFrom | 创建开始时间 | 否 | | 13位以毫秒为单位的时间戳 | | token | 验权token | 是 | | md5(corpId + userId + code),每个企业有自己的唯一code

    md5取32位大写值

    特别说明:用于企业级别验权的code参数平台暂未透出,后面优化后会透出,当前阶段可以提供租户编码从宜搭值班同学侧获取。 |
  • 返回字段说明:
    • result : 返回内容
      • data:我提交的流程实例列表
        • processInstanceId:流程实例id
        • originatorName:发起人的中文名
        • title:流程实例的中文标题
        • originatorPhoto:发起人的头像
        • titleEn:流程实例的英文标题
        • createTime:流程实例的发起时间
        • appType:应用编码
        • originatorNameEn:发起人的英文名
        • originatorId:发起人的userid
        • taskId:任务id
        • status:任务状态,其中NEW表示新发起的流程
      • totalCount:符合条件的实例总数
      • currentPage:当前页
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:

1、成功结果返回示例:

  1. {
  2. "result": {
  3. "data": [{
  4. "processInstanceId": "XXXXXX",
  5. "originatorName": "XXX",
  6. "title": "XXX发起的流程",
  7. "originatorPhoto": "http://static.dingtalk.com/media/lADPdfafafsAXXXXXX.jpg",
  8. "titleEn": "XXX发起的流程",
  9. "createTime": "2018-04-13 13:35:58",
  10. "appType": "APP_R8MdfadfXXXXXX",
  11. "originatorNameEn": "XXXXXX",
  12. "originatorId": "XXXXXX",
  13. "taskId": "XXXXXX",
  14. "status": "NEW"
  15. }],
  16. "totalCount": 1,
  17. "currentPage": 1
  18. },
  19. "success": true
  20. }

2、失败结果返回示例:

  1. {
  2. "success": false,
  3. "errorCode": "TIANSHU_000006",
  4. "errorMsg": "没有权限"
  5. }

示例请求代码:

  1. @Test
  2. public void getTodoTasksInCorpTest() {
  3. String api = "/yida/process/getTodoTasksInCorp.json";
  4. String corpId = "ding5d17e3add038d44535c2f4657eb63711";
  5. String userId = "141940523222800011";
  6. String corpCode = "AJ1L4CJVOL0UUQPTQWX8YOTCCS7O1T4CSNJF11";
  7. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  8. postClient.addParameter("page", "1");
  9. postClient.addParameter("limit", "10");
  10. postClient.addParameter("corpId", corpId);
  11. // postClient.addParameter("appTypes", "[\"APP_I3D2FD2ZQB75KLLKL48Y\"]");
  12. postClient.addParameter("userId", userId);
  13. String token = DigestUtils.md5DigestAsHex(String.format("%s%s%s", corpId, userId, corpCode).getBytes()).toUpperCase();
  14. postClient.addParameter("token", token);
  15. String apiResult = postClient.post();
  16. Assert.notNull(apiResult);
  17. }

3. 查询已完成任务

  • 接口: /yida/process/getDoneTasksInCorp.json
  • 参数 | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | corpId | 企业ID | 是 | | | | limit | 每页记录数 | 是 | 10 | 必须大于0 默认10 最大值:100 | | language | 语言环境 | 否 | zh_CN | 可选值:zh_CN/en_US | | page | 当前页 | 是 | 1 | 必须大于0 默认1 | | keyword | 关键词 | 否 | | | | appTypes | 应用标识列表 | 否 | [“APP_xxx”,”APP_xxx”] | | | processCodes | 流程code列表 | 否 | [“xx”,”xxx”] | | | createFrom | 创建开始时间 | 否 | | 13位以毫秒为单位的时间戳 | | createTo | 创建结束时间 | 否 | | 13位以毫秒为单位的时间戳 | | userId | 登录人的工号 | 是 | | | | token | 验权token | 是 | | md5(corpId + userId + code),每个企业有自己的唯一code

    md5取32位大写值

    特别说明:用于企业级别验权的code参数平台暂未透出,后面优化后会透出,当前阶段可以提供租户编码从宜搭值班同学侧获取。 |
  • 返回字段说明:
    • content : 返回内容
      • data:已完成的流程列表
        • processInstanceId:流程实例id
        • finishTime:流程的完成时间
        • originatorName:发起人的中文名
        • title:流程实例的中文标题
        • originatorPhoto:发起人的头像
        • titleEn:流程实例的英文标题
        • createTime:流程实例发起的时间
        • appType:应用编码
        • originatorNameEn:发起人的英文名
        • originatorId:发起人的useerid
        • taskId:任务id
        • status:任务状态,其中COMPLETED表示已完成。
      • totalCount:符合条件的实例总数
      • currentPage:当前页
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:

1、成功结果返回示例:

  1. {
  2. "result": {
  3. "data": [{
  4. "processInstanceId": "abc434rfds23XXXXXX",
  5. "finishTime": "2018-03-28 17:46:14",
  6. "originatorName": "",
  7. "title": "XXX发起的流程页面",
  8. "originatorPhoto": "//img.alicdn.com/tfs/TB1msdfsXXXXXX.jpg",
  9. "titleEn": "XXX发起的流程页面",
  10. "createTime": "2018-03-28 17:45:43",
  11. "appType": "XXXXXX",
  12. "originatorNameEn": "XXXXXX",
  13. "originatorId": "XXXXXX",
  14. "taskId": "XXXXXX",
  15. "status": "COMPLETED"
  16. }],
  17. "totalCount": 1,
  18. "currentPage": 1
  19. },
  20. "success": true
  21. }

2、失败结果返回示例:

  1. {
  2. "errorCode":"TIANSHU_000006",
  3. "success":false,
  4. "errorMsg":"没有权限"
  5. }

示例请求代码:

  1. @Test
  2. public void getDoneTasksInCorpTest() {
  3. String api = "/yida/process/getDoneTasksInCorp.json";
  4. String corpId = "ding5d17e3add038d44535c2f4657eb63711";
  5. String userId = "141940523222800011";
  6. String corpCode = "AJ1L4CJVOL0UUQPTQWX8YOTCCS7O1T4CSNJF11";
  7. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  8. postClient.addParameter("page", "1");
  9. postClient.addParameter("limit", "10");
  10. postClient.addParameter("corpId", corpId);
  11. // postClient.addParameter("appTypes", "[\"APP_I3D2FD2ZQB75KLLKL48Y\"]");
  12. postClient.addParameter("userId", userId);
  13. String token = DigestUtils.md5DigestAsHex(String.format("%s%s%s", corpId, userId, corpCode).getBytes()).toUpperCase();
  14. postClient.addParameter("token", token);
  15. String apiResult = postClient.post();
  16. Assert.notNull(apiResult);
  17. }

4.5 其他

1. 宜搭附件地址转临时免登地址

  • 返回字段说明:
    • result: 免登的附件地址
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result": "免登的附件地址",
    3. "success": true
    4. }

2. 发表评论/反馈

  • 返回字段说明:
    • result:新增评论的ID
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:
    1. {
    2. "result":14,
    3. "success":true
    4. }

示例代码:

  1. @Test
  2. public void saveRemark() {
  3. String api = "/yida/remark/save.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_ZDQQR345LVU8LI8JTZ41");
  6. postClient.addParameter("systemToken", "3PQBMA2R510D6N1C1******2S9OR9Y2ZQZ9YLKKJ");
  7. postClient.addParameter("userId", "47072721");
  8. postClient.addParameter("formInstId", "FINST-1KFBK518FKL3OSZD7ZGSBC024ZOUQ2V4DDQVLK4");
  9. // 添加纯文本的评论内容
  10. postClient.addParameter("content", "测试评论文本内容");
  11. // 添加自定义的图片
  12. FileObject fileObject = new FileObject();
  13. fileObject.setExtName("pdf");
  14. fileObject.setFileName("发起的普通流程1_1616509077397.pdf");
  15. fileObject.setType("OTHER");
  16. fileObject.setDownloadUrl("https://yida.gov.alibaba-inc.com/fileHandle?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=8ba6c5d4-5719-42d4-b57b-03136fe0a3b9.pdf&instId=&type=download");
  17. fileObject.setPreviewUrl("https://yida.gov.alibaba-inc.com/buc/web/APP_ZDQQR345LVU8LI8JTZ41/inst/preview?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=%E4%BF%AE%E4%BF%8A%E5%8F%91%E8%B5%B7%E7%9A%84%E6%99%AE%E9%80%9A%E6%B5%81%E7%A8%8B1_1616509077397.pdf&fileSize=1662814&downloadUrl=8ba6c5d4-5719-42d4-b57b-03136fe0a3b9.pdf");
  18. List<FileObject> fileList = Arrays.asList(fileObject);
  19. ImageObject imageObject = new ImageObject();
  20. imageObject.setExtName("png");
  21. imageObject.setFileName("宜搭 头像(二期).png");
  22. imageObject.setType("IMG");
  23. imageObject.setImageUrl("https://img.alicdn.com/imgextra/i1/O1CN01IG50k41fDDpgzCaDb_!!6000000003972-73-tps-64-64.ico");
  24. imageObject.setThumbnail("https://img.alicdn.com/imgextra/i1/O1CN01IG50k41fDDpgzCaDb_!!6000000003972-73-tps-64-64.ico");
  25. List<ImageObject> imageList = Arrays.asList(imageObject);
  26. postClient.addParameter("files", JSON.toJSONString(fileList));
  27. postClient.addParameter("images", JSON.toJSONString(imageList));
  28. String apiResult = postClient.post();
  29. JSONObject result = JSON.parseObject(apiResult);
  30. }

特别说明:

  • 示例代码中图片对象ImageObject和文件对象FileObject的定义参考附录5附录6

查询实例下的评论列表,可以看到一条新增的评论,内容包含有文本、图片和附件。
image.png

3. 查询评论列表

  • 接口:/yida/remark/list.json
  • 参数: | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxxx | | | userId | 员工工号 | 是 | | 可以传公共账号yida_pub_account或者拥有页面数据访问权限的人员的userid | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | formInstId | 要查询的表单实例ID | 是 | FINST-NJYJZELVVYZRVGJHR7M6FJW3ESJN1P1TCNPCJ9 | |

  • 返回字段说明:

    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • content:评论列表
      • creator:创建人
      • images:图片
      • formInstId:表单实例ID
      • files:附件
      • id:实体id,主键
      • gmtCreate:创建时间
      • atUserId:被AT的用户ID
      • content:评论内容

返回结果示例:

  1. {
  2. "success": true,
  3. "content": [{
  4. "creator": "47072721",
  5. "images": "[]",
  6. "formInstId": "FINST-Y7OESFAM711IYI5JMS5QPGT4NGV6V12FY4OWKEK0",
  7. "files": "[]",
  8. "id": 100073,
  9. "gmtCreate": "2020-09-15 09:07:09",
  10. "atUserId": "",
  11. "content": "评论1"
  12. }, {
  13. "creator": "47072721",
  14. "images": "[]",
  15. "formInstId": "FINST-Y7OESF***11IYI5JMS5QPGT4NGV6V12FY4OWKEK0",
  16. "files": "[]",
  17. "id": 100074,
  18. "gmtCreate": "2020-09-15 09:07:14",
  19. "atUserId": "",
  20. "content": "评论2"
  21. }, {
  22. "creator": "47072721",
  23. "images": "",
  24. "replyUserId": "47072721",
  25. "formInstId": "FINST-Y7OESF***11IYI5JMS5QPGT4NGV6V12FY4OWKEK0",
  26. "replyId": 100074,
  27. "files": "",
  28. "id": 100075,
  29. "gmtCreate": "2020-09-15 09:07:20",
  30. "atUserId": "",
  31. "content": "评论3"
  32. }, {
  33. "creator": "47072721",
  34. "images": "",
  35. "replyUserId": "47072721",
  36. "formInstId": "FINST-Y7OESF***11IYI5JMS5QPGT4NGV6V12FY4OWKEK0",
  37. "replyId": 100073,
  38. "files": "",
  39. "id": 100076,
  40. "gmtCreate": "2020-09-15 09:07:27",
  41. "atUserId": "",
  42. "content": "评论4"
  43. }, {
  44. "creator": "47072721",
  45. "images": "",
  46. "replyUserId": "47072721",
  47. "formInstId": "FINST-Y7OESF***11IYI5JMS5QPGT4NGV6V12FY4OWKEK0",
  48. "replyId": 100076,
  49. "files": "",
  50. "id": 100077,
  51. "gmtCreate": "2020-09-15 09:07:37",
  52. "atUserId": "",
  53. "content": "评论5"
  54. }]
  55. }

页面查询结果示例:
image.png
接口使用示例代码:

  1. @Test
  2. public void getRemarkList() {
  3. String api = "/yida/remark/list.json";
  4. PostClient postClient = ExecutableClient.getInstance().newPostClient(api);
  5. postClient.addParameter("appType", "APP_XO5***IW5ITX5J4OPS5Y");
  6. postClient.addParameter("systemToken", "I10***F692RINFOHEKWR4OZ0Y053Q3320H2SX9K0");
  7. postClient.addParameter("userId", "yida_pub_account");
  8. postClient.addParameter("formInstId","FINST-Y7OESF***11IYI5JMS5QPGT4NGV6V12FY4OWKEK0");
  9. String apiResult = postClient.post();
  10. Assert.notNull(apiResult);
  11. }

4. 获取应用下所有表单页面的列表

  • 接口:/yida/app/listNavigationByFormType.json
  • 参数: | 参数名 | 描述 | 是否必填 | 示例 | 备注 | | —- | —- | —- | —- | —- | | appType | 应用ID | 是 | APP_PBKT0MFBEBTDO8T7SLVP | | | systemToken | 应用秘钥 | 是 | hexxxx | | | userId | 评论人工号 | 是 | | | | language | 语言 | 否 | zh_CN | 可选值:zh_CN/en_US
    默认:zh_CN | | formType | 页面类型 | 是 | | receipt,单据页面process,流程页面
    report,报表页面 |
  • 返回字段说明:
    • result: 表单页面列表
      • formUuid:表单id
      • title:中英文标题信息
      • processCode:流程编码,只有当formType选择process流程页面时返回结果才有该字段
    • success : 请求是否成功。可选值:true:请求成功;false:请求失败
    • errorCode : 错误码。仅发生错误时显示。
    • errorMsg : 错误信息。仅发生错误时显示。
  • 返回结果示例:

1、 查询单据页面:

  1. {
  2. "result":[
  3. {
  4. "formUuid":"FORM-LWCG19P4L2IO5GVBTQXIKWZ3NEJ3QV1NVB3A6BKA",
  5. "title":{
  6. "pureEn_US":"简单表单",
  7. "en_US":"简单表单",
  8. "zh_CN":"简单表单",
  9. "type":"i18n"
  10. }
  11. }
  12. ],
  13. "success":true
  14. }

2、查询流程页面:

  1. {
  2. "result":[
  3. {
  4. "formUuid":"FORM-LWCG19P4L2Z25GSDGB4YECR5ULKAIC3MC5M4CBKF1",
  5. "processCode":"TPROC--LWCG19P4L2Z25GSDGB4YECR5ULKAIC3TC5M4CBKG1",
  6. "title":{
  7. "pureEn_US":"test流程",
  8. "en_US":"test流程",
  9. "zh_CN":"test流程",
  10. "type":"i18n"
  11. }
  12. },
  13. {
  14. "formUuid":"FORM-00FOFWHSB2V25GL9AB57E9B84YW56M3TDI89CBKB1",
  15. "processCode":"TPROC--00FOFWHSB2V25GL9AB57E9B84YW56M30EI89CBKC1",
  16. "title":{
  17. "pureEn_US":"测试流程",
  18. "en_US":"测试流程",
  19. "zh_CN":"测试流程",
  20. "type":"i18n"
  21. }
  22. }
  23. ],
  24. "success":true
  25. }

3、 查询报表页面:

  1. {
  2. "result":[
  3. {
  4. "formUuid":"REPORT-00FOFWHSB2V25GL9AB57E9B84YW56M3P0E4A6BKA",
  5. "title":{
  6. "pureEn_US":"简单报表",
  7. "en_US":"简单报表",
  8. "zh_CN":"简单报表",
  9. "type":"i18n"
  10. }
  11. }
  12. ],
  13. "success":true
  14. }

4.3 附录

1. 保存/更新 表单数据格式说明

  • 表单中每个组件都有唯一ID,每个组件中填写的数据都有自己的固定格式。目前支持的表单组件有:单行,多行,数字,单选,下拉单选,多选,下拉多选,日期,日期区间,人员搜索框,地区选择,部门选择,级联选择,明细组件。
  • 保存/更新 表单数据时,用Map的jsonString格式来作为参数传递表单中的数据。key为组件ID,Object为组件的值。每个组件的值格式如下: | 组件类型 | 数据格式 | demo | 备注 | | —- | —- | —- | —- | | 单行输入框 | 字符串 | “danhang” | | | 多行输入框 | 字符串 | “duohang” | | | 数字输入框 | 数字 | 1 | | | 单选 | 字符串 | “选项一” | | | 下拉单选 | 字符串 | “选项一” | | | 多选 | 字符串数组 | [“选项一”,”选项二”] | | | 下拉多选 | 字符串数组 | [“选项一”,”选项二”] | | | 日期组件 | 时间戳 | 1516204800000 | | | 级联日期 | 字符串数组 | [“1514736000000”,”1517328000000”]。
    假如只有结束时间,[“”,”1517328000000”] | 第一个为开始时间的时间戳字符串,第二给结束时间的时间戳字符串 | | 人员搜索框 | 字符串数组 | [“086172”,”WB344856”] | | | 城市选择 | 字符串数组 | [“110000”,”110100”,”110101”] | 第一个必须为省份ID,第二个为城市ID,第三个为区ID。 | | 部门选择 | 数字 | 18257 | | | 级联选择 | 字符串数据 | [“part”,”part_b”] | 必须按照级联顺序,依次放到数组中 | | 附件上传控件/图片上传控件 | 字符串数组 | [
    {
    “downloadUrl”: “文件下载地址”,
    “name”: “文件名”,
    “previewUrl”: “文件预览地址”,
    “url”: “文件下载地址”,
    “ext”: “docx”
    }
    ] | 文件附件的ext通常为doc/docx/xls/xlsx/ppt/pptx等

    图片附件的ext通常为jpg/png/jpeg/jif等 | | 超链接组件 | 字符串数组 | [
    {
    “link”: “https://yida.alibaba-inc.com“,
    “text”: “宜搭”
    }
    ] | | | 明细 | JSONARRAY | [{“textField_jcr0069m”: “danhang1”},{“textField_jcr0069m”: “danhang2”}]
    (textField_jcr0069m为明细下单行的组件ID) | 由于明细下有多条记录,所以用JSONARRAY。由于每条记录都是很多组件的值,因此用JSONObject来存每个组件对应的值 |

  • 完整的表单数据格式如下:

  1. {
  2. "textField_jcr0069m": "danhang",
  3. "textareaField_jcr0069n": "duohang",
  4. "numberField_jcr0069o": 1,
  5. "radioField_jcr0069p": "选项一",
  6. "selectField_jcr0069q": "选项一",
  7. "checkboxField_jcr0069r": [
  8. "选项二",
  9. "选项三"
  10. ],
  11. "multiSelectField_jcr0069s": [
  12. "选项二",
  13. "选项三"
  14. ],
  15. "dateField_jcr0069t": 1516636800000,
  16. "cascadeDate_jcr0069u": [
  17. "1514736000000",
  18. "1517328000000"
  19. ],
  20. "employeeField_jcr0069x": [
  21. "119384"
  22. ],
  23. "citySelectField_jcr0069y": [
  24. "110000",
  25. "110100",
  26. "110101"
  27. ],
  28. "departmentField_jcr0069z": 18257,
  29. "cascadeSelectField_jcr006a0": [
  30. "part",
  31. "part_b"
  32. ],
  33. "tableField_jcr006a1": [
  34. {
  35. "cascadeDate_jcr006aa": [
  36. "1514736000000",
  37. "1517328000000"
  38. ],
  39. "cascadeSelectField_jcr006ae": [
  40. "product",
  41. "product_a"
  42. ],
  43. "checkboxField_jcr006a7": [
  44. "选项一",
  45. "选项二",
  46. "选项三"
  47. ],
  48. "citySelectField_jcr006ac": [
  49. "120000",
  50. "120100",
  51. "120102"
  52. ],
  53. "dateField_jcr006a9": 1517328000000,
  54. "departmentField_jcr006ad": 18257,
  55. "employeeField_jcr006ab": [
  56. "079349",
  57. "086172"
  58. ],
  59. "multiSelectField_jcr006a8": [
  60. "选项一",
  61. "选项二",
  62. "选项三"
  63. ],
  64. "hyperlinkField_jy707nfx": [
  65. {
  66. "link": "https://yida.alibaba-inc.com",
  67. "text": "宜搭"
  68. }
  69. ],
  70. "numberField_jcr006a4": 2,
  71. "radioField_jcr006a5": "选项二",
  72. "selectField_jcr006a6": "选项三",
  73. "textField_jcr006a2": "明细下单行",
  74. "textareaField_jcr006a3": "明细下多行"
  75. }
  76. ]
  77. }

2. 根据组件值进行条件搜索,组件值格式说明

  • 表单中每个组件都有唯一ID,每个组件的搜索格式不一样。目前支持搜索的表单组件有:单行,多行,数字,单选,下拉单选,多选,下拉多选,日期,日期区间,人员搜索框,地区选择,部门选择,级联选择,明细组件。
  • 搜索时,用Map 格式来表示每个组件的搜索条件。key为组件ID,Object为组件的搜索值。各个组件的搜索类型和值格式如下
组件类型 数据格式 demo 备注
单行输入框 字符串 “danhang” 模糊搜索
多行输入框 字符串 “duohang” 模糊搜索
数字输入框 字符串数组 [“1”,”10”] 范围搜索。第一个为最小值,第二个为最大值
单选 字符串 “选项二” 精确搜索
下拉单选 字符串 “选项二” 精确搜索
多选 字符串数组 [“选项二”] 数组搜索。
搜索值必须是多选值的子集
下拉多选 字符串数组 [“选项二”] 数组搜索。
搜索值必须是多选值的子集
日期组件 字符串数组 [“1514736000000”,”1517414399000”] 范围搜索。第一个为日期开始的时间戳,第二个为日期结束的时间戳。
日期区间 数组 [[“1514736000000”,”1517414399000”],[“1514736000000”,”1517414399000”]] 范围搜索。第一个数组是日期区间开始的搜索范围。第二个数组是日期区间结束的搜索范围。
人员搜索框 字符串数组 [“086172”,”WB344856”] 精确匹配。值必须完全匹配,工号顺序也需要一致。
城市选择 字符串数组 [“110000”,”110100”,”110101”] 数组搜索。
搜索值必须是城市值的子集。
另外,有市ID,就必须有省ID。有区ID,就必须有省ID和市ID。
部门选择 数字 18257 精确匹配
级联选择 字符串数组 [“part”,”part_b”] 数组搜索。和城市选择限制条件一致。
明细组件 字符串 danhang 模糊搜索。
明细下的值为一个大text,搜索用模糊搜索。
  • 完整例子
  1. {
  2. "textField_jcr0069m": "danhang",
  3. "textareaField_jcr0069n": "duohang",
  4. "numberField_jcr0069o": [
  5. "1",
  6. "10"
  7. ],
  8. "radioField_jcr0069p": "选项一",
  9. "selectField_jcr0069q": "选项一",
  10. "checkboxField_jcr0069r": [
  11. "选项二"
  12. ],
  13. "multiSelectField_jcr0069s": [
  14. "选项二",
  15. "选项三"
  16. ],
  17. "dateField_jcr0069t": [
  18. 1514736000000,
  19. 1517414399000
  20. ],
  21. "cascadeDate_jcr0069u":[
  22. [
  23. 1514736000000,
  24. 1517414399000
  25. ],
  26. [
  27. 1514736000000,
  28. 1517414399000
  29. ]
  30. ],
  31. "employeeField_jcr0069x": [
  32. "119384"
  33. ],
  34. "citySelectField_jcr0069y": [
  35. "110000",
  36. "110100",
  37. "110101"
  38. ],
  39. "departmentField_jcr0069z": 18257,
  40. "cascadeSelectField_jcr006a0": [
  41. "part",
  42. "part_b"
  43. ],
  44. "tableField_jcr006a1": "明细数据"
  45. }

3. 流程实例详情对象格式说明

字段 描述 示例 备注
actioners 流程实例当前任务执行人 [
{
“name”: {
“en_US”: “user_en_name”,
“zh_CN”: “user_zh_name”,
“type”: “i18n”
},
“userId”: “workno”
}
]
如果流程已完成,没有执行人时,该字段为空
processInstanceId 实例ID f30233fb-72e1-4af4-8cb8-c7e0ea9ee530 唯一
formUuid 流程表单ID FORM-EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ3 请看附录6
processCode 流程Code TPROC—EF6Y4G8WO2FN0SUB43TDQ3CGC3FMFQ1G9400RCJ4 请看附录6
title 实例标题 xxxx 发起的流程 根据你的语言环境,返回对应的标题
instanceStatus 实例状态 RUNNING
approvedResult 审批结果 agree agree -> 同意
disagree -> 拒绝
originator 发起人信息 [
{
“name”: {
“en_US”: “user_en_name”,
“zh_CN”: “user_zh_name”,
“type”: “i18n”
},
“userId”: “workno”
}
]
data 表单数据 参加附录4- 作为返回值的表单数据的格式说明

4. 作为返回值的表单数据的格式说明

作为返回值的表单数据格式和 “附录1-保存/更新 表单数据格式说明”基本一致。区别在于:

  • 录入时,地区组件值为[“省份ID”, “市ID”, “区ID”]。作为返回值时,是[“省名称”,”城市名称”,”地区名称”]。
  • 单选,下拉单选,多选,下拉多选是有国际化的。返回值时,会根据传的language参数,返回对应的数据值。

5. 单据实例详情对象格式说明

字段 描述 示例 备注
gmtModified 最后修改时间 2018-01-24 11:22:01
formUuid 表单ID FORM-EF6Y93URN24F1SCX15VA2P918LPEIJ2H3UFORCJ1
formInstId 实例ID FINST-EF6Y93URN2F02S745LTMW2D2G4WVDS16O17ISCJ0
originator 发起人详情 [
{
“name”: {
“en_US”: “user_en_name”,
“zh_CN”: “user_zh_name”,
“type”: “i18n”
},
“userId”: “workno”
}
]
formData 表单数据详情 参加附录4- 作为返回值的表单数据的格式说明

5. 图片对象定义ImageObject

  1. public class ImageObject {
  2. /**
  3. * extName : png
  4. * fileName : 宜搭 头像(二期).png
  5. * width :
  6. * height :
  7. * imageUrl : https://yida.gov.alibaba-inc.com/fileHandle?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=17430601-c8d2-4c6f-8385-6f84421d28aa.png&instId=&type=open
  8. * thumbnail : https://yida.gov.alibaba-inc.com/fileHandle?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=17430601-c8d2-4c6f-8385-6f84421d28aa.png&instId=&type=open
  9. * id : null
  10. * type : IMG
  11. * ownedObjType :
  12. */
  13. private String extName;
  14. private String fileName;
  15. private String width;
  16. private String height;
  17. private String imageUrl;
  18. private String thumbnail;
  19. private Object id;
  20. private String type;
  21. private String ownedObjType;
  22. public String getExtName() {
  23. return extName;
  24. }
  25. public void setExtName(String extName) {
  26. this.extName = extName;
  27. }
  28. public String getFileName() {
  29. return fileName;
  30. }
  31. public void setFileName(String fileName) {
  32. this.fileName = fileName;
  33. }
  34. public String getWidth() {
  35. return width;
  36. }
  37. public void setWidth(String width) {
  38. this.width = width;
  39. }
  40. public String getHeight() {
  41. return height;
  42. }
  43. public void setHeight(String height) {
  44. this.height = height;
  45. }
  46. public String getImageUrl() {
  47. return imageUrl;
  48. }
  49. public void setImageUrl(String imageUrl) {
  50. this.imageUrl = imageUrl;
  51. }
  52. public String getThumbnail() {
  53. return thumbnail;
  54. }
  55. public void setThumbnail(String thumbnail) {
  56. this.thumbnail = thumbnail;
  57. }
  58. public Object getId() {
  59. return id;
  60. }
  61. public void setId(Object id) {
  62. this.id = id;
  63. }
  64. public String getType() {
  65. return type;
  66. }
  67. public void setType(String type) {
  68. this.type = type;
  69. }
  70. public String getOwnedObjType() {
  71. return ownedObjType;
  72. }
  73. public void setOwnedObjType(String ownedObjType) {
  74. this.ownedObjType = ownedObjType;
  75. }
  76. }

6. 文件对象定义FileObject

  1. public class FileObject {
  2. /**
  3. * extName : pdf
  4. * fileName : XX的普通流程1_1616509077397.pdf
  5. * downloadUrl : https://yida.gov.alibaba-inc.com/fileHandle?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=8ba6c5d4-5719-42d4-b57b-03136fe0a3b9.pdf&instId=&type=download
  6. * previewUrl : https://yida.gov.alibaba-inc.com/buc/web/APP_ZDQQR345LVU8LI8JTZ41/inst/preview?appType=APP_ZDQQR345LVU8LI8JTZ41&fileName=%E4%BF%AE%E4%BF%8A%E5%8F%91%E8%B5%B7%E7%9A%84%E6%99%AE%E9%80%9A%E6%B5%81%E7%A8%8B1_1616509077397.pdf&fileSize=1662814&downloadUrl=8ba6c5d4-5719-42d4-b57b-03136fe0a3b9.pdf
  7. * type : OTHER
  8. */
  9. private String extName;
  10. private String fileName;
  11. private String downloadUrl;
  12. private String previewUrl;
  13. private String type;
  14. public String getExtName() {
  15. return extName;
  16. }
  17. public void setExtName(String extName) {
  18. this.extName = extName;
  19. }
  20. public String getFileName() {
  21. return fileName;
  22. }
  23. public void setFileName(String fileName) {
  24. this.fileName = fileName;
  25. }
  26. public String getDownloadUrl() {
  27. return downloadUrl;
  28. }
  29. public void setDownloadUrl(String downloadUrl) {
  30. this.downloadUrl = downloadUrl;
  31. }
  32. public String getPreviewUrl() {
  33. return previewUrl;
  34. }
  35. public void setPreviewUrl(String previewUrl) {
  36. this.previewUrl = previewUrl;
  37. }
  38. public String getType() {
  39. return type;
  40. }
  41. public void setType(String type) {
  42. this.type = type;
  43. }
  44. }

五、常见问题

  1. 本文提供的是java语言使用的Demo,其他语言go/php等语言可以参考网关团队提供的官方文档
  2. 依赖包下载不到、专有云没有账号等问题请联系宜搭值班同学 钉钉搜索“宜搭答疑”,钉钉手机号15267012946。
  3. 接口调用产生如下的报错
    1. sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    【原因分析】
    网关服务的https证书配置存在问题。

【解决方案】
一方面可以将 xxpt.gateway.protocal=https 修改为xxpt.gateway.protocal=http 临时解决这个问题,
另一方面,向官方值班人员报错,建议官方尽快修复这个https证书的问题。