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

  • 轻易云集成顾问-曹润

MySQL数据集成到企业微信——发起审批案例分享

在本篇技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现将MySQL数据库中的数据高效、稳定地对接至企业微信的审批流程。本次方案名称为“企业微信-发起审批”。

问题背景及挑战

在实际运作过程中,自动化的数据集成需求往往会面临多种技术性难题,例如:

  1. 确保数据不漏单:如何从MySQL数据库中精准获取需要的数据并保证不遗漏任何一条记录。
  2. 大量数据快速写入:当有大量待处理数据时,如何实现批量写入,同时保证系统性能。
  3. 定时抓取和接口调用:定期从MySQL接口抓取最新的数据,并可靠地调用API进行操作。

技术手段与解决方案

  1. MySQL查询与分页限流处理

    通过标准的SELECT API,我们可以精确定义所需查询的数据条件。但简单的查询无法满足大规模、高频率访问情况下对系统资源的有效利用。因此,在此过程中我们引入了分页和限流机制,以避免因单次读取过多而导致系统崩溃或性能下降。

    SELECT * FROM your_table LIMIT offset, page_size;
  2. 实时监控与日志记录

    在整个数据处理生命周期内,全程采用可视化界面对各个环节进行实时监控,通过完整且细致的日志记录确保每一次操作都可追溯。例如,每当一个新的任务被触发后,会即时生成对应的日志,以便于后续审核和错误排查。

  3. 调用企业微信API

    利用企业微信提供的/cgi-bin/oa/applyevent API,将经过筛选和格式转换后的MySQL数据提交到相应审核流程中。这一步骤不仅要求必须准确无误地传递必要信息,还需考虑响应时间以及可能出现的问题,如网络延迟或请求失败等。具体代码示例如下:

    POST /cgi-bin/oa/applyevent?access_token=ACCESS_TOKEN
    Content-Type: application/json
    
    {
      "creator_userid": "UserID",
      "template_id": "TemplateID",
      // 更多字段...
     }
  4. 异常处理及重试机制

    当遇到网络抖动或其他不可预测因素导致请求异常失败时,平台会根据预设策略自动启动重试机制。这样既能提升成功率,又最大程度上减少人工干预,提高整体效率。

这些技术手段共同作用,使得我们能够顺利完成此次“企业微信-发起审批”的复杂 金蝶云星空API接口配置

使用轻易云数据集成平台调用MySQL接口select获取并加工数据

在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用MySQL接口select获取并加工数据。

元数据配置解析

首先,我们来看一下元数据配置的具体内容:

{
  "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_sqlextend_sql_1定义了两个SQL查询语句:

  • main_sql: 用于查询主表中的审批记录。
  • extend_sql_1: 用于查询与主表记录相关的附加信息。
主表查询(main_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)
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. 写入目标系统:将处理好的数据写入目标系统,实现最终的数据集成。

通过以上步骤,我们可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 打通钉钉数据接口

使用轻易云数据集成平台进行企业微信审批接口的数据转换与写入

在数据集成生命周期的第二步中,我们重点关注如何将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入到目标平台——企业微信的API接口。本文将详细介绍如何通过轻易云数据集成平台,将数据转换为企业微信API接口所能接收的格式,并发起审批请求。

1. 数据提取与清洗

首先,我们需要从源平台提取相关数据并进行清洗。在这个过程中,元数据配置文件提供了详细的字段映射和转换规则。例如,我们需要从MongoDB中提取申请人userid:

{
    "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、接口作用等。

例如,所属平台字段的配置如下:

{
    "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}"
        }
    ]
}

这里,“所属平台”字段被定义为一个对象,包含三个子字段:controlidvalue。其中,value字段会被动态替换为实际的平台名称。

3. 数据写入

最后一步是将转换后的数据通过POST请求写入到企业微信的API接口。以下是完整的API请求配置:

{
    "/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. 特殊处理

某些字段可能需要特殊处理,例如“接口作用”字段,它根据不同条件动态生成值:

{
    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系统接口开发配置

更多系统对接方案