对接钉钉审批流程
NineData 平台与钉钉审批系统深度集成,支持通过钉钉发起、审批、撤销数据管理类任务流程,确保审计合规性与流程自动化。
前提条件
- 已创建或加入组织,并且该组织已开通,同时请确保您的包年包月订阅未过期。
- 当前账号已切换到目标组织。更多信息,请参见切换到组织。
- 已通过企业管理员账号登录钉钉开放平台。
- 已在 NineData 平台具有系统管理员权限。
- 钉钉企业已配置组织架构、通讯录、员工手机号等基础信息。
步骤一:在钉钉开放平台创建自建应用
使用企业管理员账号登录钉钉开放平台。
单击页面右上角的【创建应用】。
在创建界面填写以下内容,单击【保存】,自动跳转至应用详情页。
- 【应用名称】:例如
NineData-审批集成。 - 【应用描述】:例如
用于 NineData 任务审批流程对接。 - 【应用图标】(可选):上传对应的图标。
- 【应用名称】:例如
在左侧导航栏单击【基础信息】 > 【凭证与基础信息】,记录 Client ID、Client Secret 字段的值。

在左侧导航栏单击【开发配置】>【权限管理】,找到并选中如下各项权限,单击页面右侧的【批量申请】。
- 工作流实例写权限
- 工作流模版读权限
- 工作流实例读权限
- 根据手机号获取成员基本信息权限
- 审批流数据管理权限
步骤二:在钉钉管理后台创建审批模板
通过企业管理员账号登录钉钉管理后台。
在左侧导航栏,单击【工作台】>【应用管理】。
提示导航栏较长,如果没有找到【工作台】,请向下滚动页面。
在【应用名称】列表中,找到【OA 审批】,单击其右侧【操作】列下的【进入】。

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

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

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

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

步骤三:在 NineData 平台绑定钉钉应用
登录 NineData 控制台。
在左侧导航栏,单击>。
单击页签,然后单击页面右侧的。
单击,在弹出的窗口中,输入如下几项参数,单击完成应用绑定。
参数 说明 自定义审批渠道的名称,用于在 NineData 平台中区分不同的外部审批系统。示例: 钉钉审批流程。选择外部审批渠道的类别,此处选择。NineData 会根据该类型调用对应的 API 接口逻辑。 AppID 应用在钉钉开放平台的唯一标识。对应步骤一中获取的 Client ID。 
AppSecret 应用的密钥,用于验证 NineData 与钉钉开放平台通信时的身份合法性。对应步骤一中获取的 Client Secret。 
暂时留空,后续在钉钉开放平台配置事件订阅时生成。 AesKey 暂时留空,后续在钉钉开放平台配置事件订阅时生成。 单击新绑定的应用 ID,记录页面底部的(稍后在钉钉端配置事件订阅时使用,必须为公网可以访问的 URL 地址)。
单击审批流程映射定义页签,然后单击,根据下表配置参数。
参数 说明 选择刚绑定的应用。 自定义审批流程映射名称。 钉钉管理后台中创建的审批模版的 ID。对应步骤二中获取的表单 ID。 
本配置可根据实际业务详细定义审批流程中的每一个节点,并通过测试功能实际测试流程是否能走通。各流程的配置示例,请参见本文附录一。 单击完成配置。
步骤四(可选):在钉钉开放平台配置事件订阅
返回钉钉开放平台,进入之前创建的应用。
页面左侧导航栏单击【开发配置】 > 【事件订阅】,根据下表进行配置。
参数 说明 推送方式 选择 HTTP 推送。 加密 aes_key 单击右侧的 图标,生成加密 aes_key。将生成的 aes_key 粘贴到 NineData 平台绑定应用的 aes_key 中。
签名 token 单击右侧的 图标,生成签名 token。将生成的 aes_key 粘贴到 NineData 平台绑定应用的中。
请求网址 输入 NineData 平台中提供的回调地址。 点击保存,至此已完成事件订阅配置。
步骤五:绑定审批流程
登录 NineData 控制台。
在左侧导航栏,单击>。
单击页签,找到目标需要启用钉钉审批的审批流程,单击流程名称,进入页面。
单击需配置的任务类型页签,然后单击目标流程右侧的。勾选页面下方的,在下方左侧选框中选择钉钉应用,然后在右侧选择对应的钉钉流程 ID,单击即可。

附录一:NineData 审批流程配置脚本示例
(必填):通过钉钉中创建的应用认证信息,获取 accessToken。仅需将
reqBody.put("appKey",APP_ID)和reqBody.put("appSecret",APP_SECRET)替换成真实的钉钉开放平台凭证(appKey 对应 ClientID,appSecret 对应 ClientSecret)。
示例:
reqBody.put("appKey","dingxxxxxxxxxxxxxxx")
reqBody.put("appSecret","In4cWXZedWRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")(必填):NineData 使用该接口把任务数据提交到钉钉,钉钉在指定审批模板上创建实例并进入审批流。仅需要在脚本中定义表单格式部分,将 NineData 平台内部任务字段(如任务名称、数据库名、审批理由等)与外部审批模板字段(前面创建的钉钉审批表单)进行字段映射即可。
说明示例:
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即可。
(选填):钉钉在审批流程发生关键状态变更(通过、拒绝、终止、转交、抄送等)时,会主动向 NineData 提供的
callback URL发送事件通知,NineData 需解析并映射回内部任务状态。本流程无需更改脚本及测试,保持默认即可。
(必填):当需要主动确认审批进度或获取更详细信息(表单、操作记录、审批人等)时,使用本流程。
本流程无需更改脚本,测试仅需传入
accessToken和目标审批流程的approvalInstanceId即可。
附录二:表单项参数列表
| 变量编码 | 变量含义 |
|---|---|
| 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_CONTENT | SQL 文本 |
| 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审核-符合规范 |
