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

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

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

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

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

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

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

附录一:NineData 审批流程配置脚本示例
Token 获取(必填):通过钉钉中创建的应用认证信息,获取 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审核-符合规范 |
