Skip to main content

对接钉钉审批流程

NineData 平台与钉钉审批系统深度集成,支持通过钉钉发起、审批、撤销数据管理类任务流程,确保审计合规性与流程自动化。

前提条件

  • 已创建或加入组织,并且该组织已开通,同时请确保您的包年包月订阅未过期。
  • 当前账号已切换到目标组织。更多信息,请参见切换到组织
  • 已通过企业管理员账号登录钉钉开放平台
  • 已在 NineData 平台具有系统管理员权限。
  • 钉钉企业已配置组织架构、通讯录、员工手机号等基础信息。

步骤一:在钉钉开放平台创建自建应用

  1. 使用企业管理员账号登录钉钉开放平台

  2. 单击页面右上角的【创建应用】。

  3. 在创建界面填写以下内容,单击【保存】,自动跳转至应用详情页。

    • 【应用名称】:例如 NineData-审批集成
    • 【应用描述】:例如 用于 NineData 任务审批流程对接
    • 【应用图标】(可选):上传对应的图标。
  4. 在左侧导航栏单击【基础信息】 > 【凭证与基础信息】,记录 Client ID、Client Secret 字段的值。

    image-20251030095453514

  5. 在左侧导航栏单击【开发配置】>【权限管理】,找到并选中如下各项权限,单击页面右侧的【批量申请】。

    • 工作流实例写权限
    • 工作流模版读权限
    • 工作流实例读权限
    • 根据手机号获取成员基本信息权限
    • 审批流数据管理权限

步骤二:在钉钉管理后台创建审批模板

  1. 通过企业管理员账号登录钉钉管理后台

  2. 在左侧导航栏,单击【工作台】>【应用管理】。

    tip

    导航栏较长,如果没有找到【工作台】,请向下滚动页面。

  3. 在【应用名称】列表中,找到【OA 审批】,单击其右侧【操作】列下的【进入】。

    image-20251030110527041

  4. 在页面右上角,单击【创建审批表单】,在弹出的窗口中,配置下列各项参数,然后单击页面上方的【表单设计】。详细信息,请参见钉钉官方文档

    image-20251030113142131

    • 【表单名称】:例如 NineData 审批流
    • 【所在分组】:选择当前流程所在的分组,可新建或选择已有分组。
    • 【谁可以发起】:选择哪些部门或成员可发起本流程。
    • 【表单管理员】:指定一名或多名成员作为当前流程的管理员。
  5. 在【表单设计】页面,根据实际需求设计表单样式,然后单击页面上方的【流程设计】。

    image-20251030143432171

    • 左侧拖拽控件(如文本、单选、附件等)至表单区域。
    • 配置每个控件的标题、字段名、必填与否、提示信息等。
    • NineData 的详细任务类型与子类型,请参见附录三
  6. 在【流程设计】页面,根据企业的组织架构设计审批流程。

    image-20251030151907215

  7. 单击右上角的【发布】,然后在弹出的小窗口中单击【完成】,浏览器将自动跳转至【表单管理】页面。找到刚创建的表单,记录生成的表单ID。

    image-20251030170927558

步骤三:在 NineData 平台绑定钉钉应用

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击>

  3. 单击页签,然后单击页面右侧的

  4. 单击,在弹出的窗口中,输入如下几项参数,单击完成应用绑定。

    参数说明
    自定义审批渠道的名称,用于在 NineData 平台中区分不同的外部审批系统。示例:钉钉审批流程
    选择外部审批渠道的类别,此处选择。NineData 会根据该类型调用对应的 API 接口逻辑。
    AppID应用在钉钉开放平台的唯一标识。对应步骤一中获取的 Client ID
    image-20251103150614440
    AppSecret应用的密钥,用于验证 NineData 与钉钉开放平台通信时的身份合法性。对应步骤一中获取的 Client Secret
    image-20251103150702301
    暂时留空,后续在钉钉开放平台配置事件订阅时生成。
    AesKey暂时留空,后续在钉钉开放平台配置事件订阅时生成。
  5. 单击新绑定的应用 ID,记录页面底部的(稍后在钉钉端配置事件订阅时使用,必须为公网可以访问的 URL 地址)。

  6. 单击审批流程映射定义页签,然后单击,根据下表配置参数。

    参数说明
    选择刚绑定的应用。
    自定义审批流程映射名称。
    钉钉管理后台中创建的审批模版的 ID。对应步骤二中获取的表单 ID
    image-20251103150806127
    本配置可根据实际业务详细定义审批流程中的每一个节点,并通过测试功能实际测试流程是否能走通。各流程的配置示例,请参见本文附录一
  7. 单击完成配置。

步骤四(可选):在钉钉开放平台配置事件订阅

  1. 返回钉钉开放平台,进入之前创建的应用。

  2. 页面左侧导航栏单击【开发配置】 > 【事件订阅】,根据下表进行配置。

    参数说明
    推送方式选择 HTTP 推送
    加密 aes_key单击右侧的refresh_dingtalk图标,生成加密 aes_key。将生成的 aes_key 粘贴到 NineData 平台绑定应用的 aes_key 中。
    签名 token单击右侧的refresh_dingtalk图标,生成签名 token。将生成的 aes_key 粘贴到 NineData 平台绑定应用的中。
    请求网址输入 NineData 平台中提供的回调地址
  3. 点击保存,至此已完成事件订阅配置。

步骤五:绑定审批流程

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击>

  3. 单击页签,找到目标需要启用钉钉审批的审批流程,单击流程名称,进入页面。

  4. 单击需配置的任务类型页签,然后单击目标流程右侧的。勾选页面下方的,在下方左侧选框中选择钉钉应用,然后在右侧选择对应的钉钉流程 ID,单击即可。

    image-20251104171032071

附录一:NineData 审批流程配置脚本示例

  • (必填):通过钉钉中创建的应用认证信息,获取 accessToken。仅需将 reqBody.put("appKey",APP_ID)reqBody.put("appSecret",APP_SECRET) 替换成真实的钉钉开放平台凭证(appKey 对应 ClientID,appSecret 对应 ClientSecret)。

    image-20251103111214917

    示例:

    reqBody.put("appKey","dingxxxxxxxxxxxxxxx")
    reqBody.put("appSecret","In4cWXZedWRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
  • (必填):NineData 使用该接口把任务数据提交到钉钉,钉钉在指定审批模板上创建实例并进入审批流。仅需要在脚本中定义表单格式部分,将 NineData 平台内部任务字段(如任务名称、数据库名、审批理由等)与外部审批模板字段(前面创建的钉钉审批表单)进行字段映射即可。

    image-20251103112240073

    说明
    • 字段映射fluentPut 中的 name 必须严格对应钉钉模板表单项名称

    • 变量参数fluentPut 中的 value 请参考附录二

    • 保留 InstanceID:成功完成当前流程的测试后,可以保留返回的 approvalInstanceId,以继续测试

      iShot_2025-11-04_11.14.26

    示例:

    fromField.add(new JSONObject().fluentPut("name","任务ID").fluentPut("value",TASK_ID))
    fromField.add(new JSONObject().fluentPut("name","任务名称").fluentPut("value",TASK_NAME))
    fromField.add(new JSONObject().fluentPut("name","任务类型").fluentPut("value",TASK_TYPE))
    fromField.add(new JSONObject().fluentPut("name","子类型").fluentPut("value",TASK_SUBTYPE))
    fromField.add(new JSONObject().fluentPut("name","数据源名称").fluentPut("value",DATASOURCE_NAME))
    fromField.add(new JSONObject().fluentPut("name","数据库").fluentPut("value",DATABASE))
    fromField.add(new JSONObject().fluentPut("name","环境").fluentPut("value",ENV_NAME))
    fromField.add(new JSONObject().fluentPut("name","原因").fluentPut("value",REASON))
    fromField.add(new JSONObject().fluentPut("name","权限申请类型").fluentPut("value",AUTH_APPLY_TYPE))
    fromField.add(new JSONObject().fluentPut("name","SQL文本").fluentPut("value",SQL_CONTENT))
    String multiValue = String.format("%s、%s、%s",TASK_URL,AUTH_SENSITIVE,EXPORT_OBJECT)
    fromField.add(new JSONObject().fluentPut("name","综合").fluentPut("value",multiValue))
    fromField.add(new JSONObject().fluentPut("name","备注").fluentPut("value",COMMENT))
  • (必填):在审批尚未结束时,可以通过审批流程的实例 ID(approvalInstanceId)撤销已发起的审批流程实例。

    本流程无需更改脚本,测试仅需传入 accessToken 和目标审批流程的 approvalInstanceId 即可。

    image-20251103144909099

  • (选填):钉钉在审批流程发生关键状态变更(通过、拒绝、终止、转交、抄送等)时,会主动向 NineData 提供的 callback URL 发送事件通知,NineData 需解析并映射回内部任务状态。

    本流程无需更改脚本及测试,保持默认即可。

  • (必填):当需要主动确认审批进度或获取更详细信息(表单、操作记录、审批人等)时,使用本流程。

    本流程无需更改脚本,测试仅需传入 accessToken 和目标审批流程的 approvalInstanceId 即可。

    image-20251103145536721

附录二:表单项参数列表

变量编码
变量含义
TASK_NAME任务名称
TASK_ID任务 ID
TASK_TYPE任务类型
TASK_SUBTYPE子类型
COMMENT备注
ENV_NAME环境
DATASOURCE_NAME数据源名称
DATASOURCE_URL数据源链接地址
DATABASE数据库名称
EXPORT_METHOD导出方式
EXPORT_CONTENT导出内容
REASON原因
AUTH_TYPE申请类型
SUBMITTER提交人
SQL_CONTENTSQL 文本
TASK_URL任务申请地址
FILE_TYPE导出/导入 文件类型
AUTH_SENSITIVE敏感列
AUTH_EXPIRATION_TIME权限有效期
AUTH_APPLY_TYPE权限类型
CREATE_TIME提交时间
EST_AFFECTED_ROWS预估影响行数
AUTH_APPLY_OBJECT_DB申请库
AUTH_APPLY_OBJECT_TB申请表
DATASOURCE_ID数据源 ID
EXECUTOR执行人
EXPORT_OBJECT导出对象
TASK_DETAILS任务详情
SUBMITER_PHONE提交人手机号
APPROVAL_CODE外部审批模板编码

附录三:NineData 任务类型与子类型

任务类型子类型
SQL任务(含结构设计与发布)必须改进
建议改进
符合规范
权限申请数据源
敏感等级S1
敏感等级S2
敏感等级S3
敏感等级S4
敏感等级S5
数据导出SQL导出
导出库
导出表
数据导入极速模式
数据生成数据生成
数据追踪与回滚数据追踪与回滚
数据归档与清理清理
归档
清理+归档
SQL代码审核SQL审核-推荐索引
SQL审核-必须改进
SQL审核-建议改进
SQL审核-符合规范