ETL数据转换及企业微信审批数据写入实战

  • 轻易云集成顾问-曹润
### MySQL数据集成到企业微信——发起审批案例分享 在本篇技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现将MySQL数据库中的数据高效、稳定地对接至企业微信的审批流程。本次方案名称为“企业微信-发起审批”。 #### 问题背景及挑战 在实际运作过程中,自动化的数据集成需求往往会面临多种技术性难题,例如: 1. **确保数据不漏单**:如何从MySQL数据库中精准获取需要的数据并保证不遗漏任何一条记录。 2. **大量数据快速写入**:当有大量待处理数据时,如何实现批量写入,同时保证系统性能。 3. **定时抓取和接口调用**:定期从MySQL接口抓取最新的数据,并可靠地调用API进行操作。 #### 技术手段与解决方案 1. **MySQL查询与分页限流处理** 通过标准的`SELECT` API,我们可以精确定义所需查询的数据条件。但简单的查询无法满足大规模、高频率访问情况下对系统资源的有效利用。因此,在此过程中我们引入了分页和限流机制,以避免因单次读取过多而导致系统崩溃或性能下降。 ```sql SELECT * FROM your_table LIMIT offset, page_size; ``` 2. **实时监控与日志记录** 在整个数据处理生命周期内,全程采用可视化界面对各个环节进行实时监控,通过完整且细致的日志记录确保每一次操作都可追溯。例如,每当一个新的任务被触发后,会即时生成对应的日志,以便于后续审核和错误排查。 3. **调用企业微信API** 利用企业微信提供的`/cgi-bin/oa/applyevent` API,将经过筛选和格式转换后的MySQL数据提交到相应审核流程中。这一步骤不仅要求必须准确无误地传递必要信息,还需考虑响应时间以及可能出现的问题,如网络延迟或请求失败等。具体代码示例如下: ```plaintext POST /cgi-bin/oa/applyevent?access_token=ACCESS_TOKEN Content-Type: application/json { "creator_userid": "UserID", "template_id": "TemplateID", // 更多字段... } ``` 4. **异常处理及重试机制** 当遇到网络抖动或其他不可预测因素导致请求异常失败时,平台会根据预设策略自动启动重试机制。这样既能提升成功率,又最大程度上减少人工干预,提高整体效率。 这些技术手段共同作用,使得我们能够顺利完成此次“企业微信-发起审批”的复杂 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用MySQL接口select获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用MySQL接口`select`获取并加工数据。 #### 元数据配置解析 首先,我们来看一下元数据配置的具体内容: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "id", "id": "id", "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "created_at", "label": "创建时间", "type": "datetime", "value": "{{LAST_SYNC_TIME|dateTime}}" }, { "field": "limit", "label": "limit", "type": "string", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "offset", "type": "string", "value": "{PAGINATION_START_ROW}" } ] }, { "field": "extend_params_1", "label": "主表ID", ... } ], ... } ``` #### 数据请求与清洗 在数据请求阶段,我们需要从MySQL数据库中获取所需的数据。元数据配置中的`main_sql`和`extend_sql_1`定义了两个SQL查询语句: - `main_sql`: 用于查询主表中的审批记录。 - `extend_sql_1`: 用于查询与主表记录相关的附加信息。 ##### 主表查询(main_sql) ```sql SELECT id, name, platform_name, effect, platform_id, api_id, approval_name, created_at, event FROM api_approval_view WHERE api_approval_view.`created_at` >= :created_at ORDER BY api_approval_view.`created_at` ASC LIMIT :limit OFFSET :offset ``` 在这个查询中,`:created_at`, `:limit`, 和 `:offset` 是动态参数,由元数据配置中的`main_params`部分提供: - `created_at`: 使用占位符`{{LAST_SYNC_TIME|dateTime}}`,表示上次同步时间。 - `limit`: 使用占位符`{PAGINATION_PAGE_SIZE}`,表示分页大小。 - `offset`: 使用占位符`{PAGINATION_START_ROW}`,表示分页起始行。 ##### 附加信息查询(extend_sql_1) ```sql SELECT id, api_id, title, `describe` FROM dp_api_asset_checklist WHERE api_id = :api_id ``` 这个查询用于获取与主表记录相关的附加信息,其中`:api_id`是动态参数,由主表记录中的字段提供。 #### 数据转换与写入 在获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台中,可以通过定义映射规则和转换逻辑来实现这一过程。 例如,可以将日期格式从数据库中的标准格式转换为目标系统所需的格式,或者根据业务需求对某些字段进行计算和转换。 #### 实际操作案例 假设我们需要从企业微信系统中发起审批,并将审批记录存储到另一个系统中。以下是具体操作步骤: 1. **配置API接口**:在轻易云平台中配置MySQL接口,使用上述元数据配置。 2. **执行主表查询**:通过调用配置好的API接口,执行`main_sql`查询,获取审批记录。 3. **执行附加信息查询**:对于每条审批记录,根据其`api_id`字段,执行`extend_sql_1`查询,获取相关附加信息。 4. **数据清洗与转换**:对获取到的数据进行必要的清洗和转换,例如日期格式转换、字段映射等。 5. **写入目标系统**:将处理好的数据写入目标系统,实现最终的数据集成。 通过以上步骤,我们可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行企业微信审批接口的数据转换与写入 在数据集成生命周期的第二步中,我们重点关注如何将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入到目标平台——企业微信的API接口。本文将详细介绍如何通过轻易云数据集成平台,将数据转换为企业微信API接口所能接收的格式,并发起审批请求。 #### 1. 数据提取与清洗 首先,我们需要从源平台提取相关数据并进行清洗。在这个过程中,元数据配置文件提供了详细的字段映射和转换规则。例如,我们需要从MongoDB中提取申请人userid: ```json { "field": "creator_userid", "label": "申请人userid", "type": "string", "describe": "申请人userid", "value": "_mongoQuery c98a7a2a-2488-3ec1-b171-fd89ef0dc1da findField=content.userid where={\"content.name\" : {\"$eq\":\"{approval_name}\"}}" } ``` 通过上述配置,我们可以根据申请人的名字,从MongoDB中找到对应的userid。 #### 2. 数据转换 在完成数据提取和清洗后,我们需要将这些数据转换为企业微信API能够接收的格式。以下是关键字段及其对应关系: - **模板ID**:固定值,用于指定审批模板。 - **审批人模式**:固定值,表示使用模板中的审批人设置。 - **申请数据**:包含多个子字段,如所属平台、名称、API、接口作用等。 例如,所属平台字段的配置如下: ```json { "field": "apply_data_1", "label": "所属平台", "type": "object", "describe": "审批申请数据", "children": [ { "field": "control", "label": "control", "type": "string", "describe": "control", "value": "Text" }, { "field": "id", "label": "id", "type": "string", "describe": "id", "value": "Text-1684804573310" }, { "field": "value", "label": "value", "type": "string", "describe": "", "value":"{platform_name}" } ] } ``` 这里,“所属平台”字段被定义为一个对象,包含三个子字段:`control`、`id`和`value`。其中,`value`字段会被动态替换为实际的平台名称。 #### 3. 数据写入 最后一步是将转换后的数据通过POST请求写入到企业微信的API接口。以下是完整的API请求配置: ```json { "/cgi-bin/oa/applyevent":{ method: 'POST', body: { creator_userid: "{creator_userid}", template_id: "{template_id}", use_template_approver: "{use_template_approver}", apply_data: [ { apply_data_1 }, { apply_data_2 }, { apply_data_3 }, { apply_data_4 }, { apply_data_5 }, { apply_data_6 } ], summary_list: [ { summary_list_1 }, { summary_list_2 }, { summary_list_3 } ] } } } ``` 在这个配置中,所有动态值都会在实际请求时被替换为具体的数据。例如,`creator_userid`会被替换为从MongoDB中查询到的用户ID。 #### 4. 特殊处理 某些字段可能需要特殊处理,例如“接口作用”字段,它根据不同条件动态生成值: ```json { field: 'apply_data_4', label: '接口作用', type: 'object', children: [ { field: 'control', label: 'control', type: 'string', value: 'Text' }, { field: 'id', label: 'id', type: 'string', value: 'Text-1684804732807' }, { field: 'value', label: 'value', type: 'string', value:"_function case when '{effect}'='QUERY' then '查询' else '写入' end" } ] } ``` 这里使用了一个函数来判断`effect`字段的值,如果是“QUERY”,则设置为“查询”,否则设置为“写入”。 通过以上步骤,我们实现了将源平台的数据经过ETL处理后,成功写入到企业微信API接口,实现了自动化发起审批请求。这不仅提升了业务流程的效率,还确保了数据的一致性和准确性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)