从MySQL到金蝶云星空:ETL转换及数据写入方案

  • 轻易云集成顾问-曾平安

利用轻易云实现MySQL数据集成到金蝶云星空的技术案例分享

在企业系统间的数据对接需求中,如何高效、可靠地将MySQL数据库中的销售出库单(MOM-XSCKD)数据实时或定时同步至金蝶云星空batchSave接口,是一个值得深入探讨的问题。本篇文章将通过具体的技术案例:MOM-XSCKD-销售出库单保存,为大家详细解析这一过程。

首先,我们需要解决的是MySQL获取数据和金蝶云星空写入数据之间的API调用问题。为此,我们采用了select API从MySQL中抓取所需销售出库单的数据,通过批量处理,利用batchSave API将这些数据快速、准确地写入至金蝶云星空。这一过程中,关键技术要点包括:

  1. 高吞吐量的数据写入能力:大量销售出库单需要及时结算,因此我们的方案必须确保能够支持大规模的数据高速传输及处理。
  2. 集中监控与告警系统:为了实时追踪每个环节的状态及性能指标,本次集成方案搭载了集中监控与告警系统,保障任务透明度及可控性。
  3. 自定义逻辑和映射对接:不同于传统的一对一字段映射,本案根据业务需求设计了灵活的自定义转换逻辑,以适应两端系统特有的数据结构差异。
  4. 异常处理与错误重试机制:对于可能出现的网络波动、API调用失败等情况,我们部署了一整套完备的错误处理机制,在保证整体运行稳定性的同时,实现误操作后的自动恢复。

这项技术实施不仅仅是完成简单的数据搬迁,更重要的是如何实现全流程无缝衔接且不丢失任何关键信息。在后续内容里,我会逐步揭示整个集成方案中的各个步骤,包括API接口调用细节以及流程控制策略,从根本上说明如何确保集成质量,以及我们在实际应用中的经验总结。 如何对接钉钉API接口

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

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用MySQL接口select获取并加工数据,具体实现销售出库单保存的集成方案。

元数据配置解析

在本次集成方案中,我们使用了以下元数据配置:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "id": "sourceid",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
      "value": "1",
      "children": [
        {
          "field": "limit",
          "label": "限制结果集返回的行数",
          "type": "int",
          "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。",
          "value": 100
        },
        {
          "field": "offset",
          "label": "偏移量",
          "type": "int",
          "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。"
        }
      ]
    }
  ],
  ...
}

主SQL语句解析与优化

主SQL语句如下:

select
t2.instruction_doc_id as 'sourceid',
t1.sd_code as '单据编号',
t3.attr_value as '运输单号',
t3.last_update_date as '更新时间'
from ty_mes.mt_so_delivery_not_label_approve t1
left join ty_mes.mt_instruction_doc t2 on t1.sd_code = t2.instruction_doc_num
left join ty_mes.mt_instruction_doc_attr t3 on t2.tenant_id = t3.tenant_id and t2.instruction_doc_id = t3.instruction_doc_id
left join ty_mes.mt_instruction_doc_attr t4 on t2.tenant_id = t4.tenant_id and t2.instruction_doc_id = t4.instruction_doc_id and t4.attr_name = 'TRACKING_NUMBER_SYNC'
where t2.tenant_id = 7 and t2.site_id = 8001
and t1.flag = 1
and t3.attr_name = 'TRACKING_NUMBER'
and t3.attr_value <> ''
and t1.sd_code not like 'XSCK%'
and (t4.attr_value is null or t4.attr_value <> 1)
limit :limit offset :offset

为了提高SQL语句的可读性和维护性,我们采用参数绑定的方法,将动态字段:limit:offset替换为占位符,并在执行查询之前进行参数绑定。

优化后的SQL语句如下:

select
t2.instruction_doc_id as 'sourceid',
t1.sd_code as '单据编号',
t3.attr_value as '运输单号',
t3.last_update_date as '更新时间'
from ty_mes.mt_so_delivery_not_label_approve t1
left join ty_mes.mt_instruction_doc t2 on t1.sd_code = t2.instruction_doc_num
left join ty_mes.mt_instruction_doc_attr t3 on t2.tenant_id = t3.tenant_id and t2.instruction_doc_id = t3.instruction_doc_id
left join ty_mes.mt_instruction_doc_attr t4 on t2.tenant_id = t4.tenant_id and t2.instruction_doc_id = t4.instruction_doc_id and t4.attr_name = 'TRACKING_NUMBER_SYNC'
where 
    (t2.tenant_id, 
        t2.site_id, 
        t1.flag, 
        t3.attr_name, 
        t3.attr_value, 
        t1.sd_code, 
        t4.attr_value) in (?, ?, ?, ?, ?, ?, ?)
limit ? offset ?

请求参数配置

在实际调用过程中,我们需要设置请求参数,以确保SQL语句中的占位符能够正确绑定相应的数据。以下是请求参数配置示例:

{
  ...
  "request":[
    {
      ...
      // 主参数对象内包含两个子参数:limit 和 offset。
      // limit 用于限制结果集返回的行数,offset 用于指定起始位置。
      // 在实际调用时,这两个参数将被绑定到 SQL 查询中的占位符。
      {
        ...
        // 设置 limit 参数为100,表示每次最多返回100行数据。
        {
          ...
          // 设置 offset 参数为0,表示从第一行开始返回数据。
        }
      ]
    }
  ],
}

数据请求与清洗

通过上述配置,我们可以通过POST方法发送请求,从MySQL数据库中获取所需的数据。在这个过程中,我们可以对原始数据进行初步清洗,例如去除空值、格式化日期等操作,以确保后续的数据转换与写入更加顺利。

总结

通过轻易云数据集成平台,我们能够高效地调用MySQL接口获取并加工数据。在这个过程中,通过合理配置元数据和优化SQL语句,可以显著提升查询效率和代码可维护性,为后续的数据转换与写入打下坚实基础。 金蝶与CRM系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口

在数据集成生命周期的第二步,我们将重点探讨如何将已经集成的源平台数据进行ETL(提取、转换、加载)处理,并转化为金蝶云星空API接口所能接收的格式,最终写入目标平台。本文将详细介绍如何配置元数据和调用API接口,以实现销售出库单的保存操作。

元数据配置解析

在本案例中,我们需要将源平台的数据转换为金蝶云星空所需的格式,并通过其API接口进行保存。以下是元数据配置的详细解析:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"FID","label":"FID","type":"string","value":"{sourceid}"},
    {"field":"F_FSYNCMOM","label":"同步标志","type":"string","value":"true"},
    {"field":"FCarriageNO","label":"运输单号","type":"string","value":"{{运输单号}}"}
  ],
  "otherRequest": [
    {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"},
    {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"},
    {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"false"},
    {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"},
    {"field":"IsDeleteEntry","label":"是否删除已存在的分录","type":"string","describe":"默认仓库模块","value":"false"}
  ],
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  }
}

数据请求与清洗

首先,我们需要从源平台提取数据,并进行必要的清洗和格式化。假设我们从源平台获取到如下数据:

{
  "sourceid": "12345",
  "运输单号": "TRK20231010"
}

在这个过程中,我们确保所有字段都符合目标平台要求。例如,将sourceid映射到FID字段,并将运输单号映射到FCarriageNO字段。

数据转换与写入

接下来,我们使用轻易云数据集成平台提供的ETL工具,将清洗后的数据转换为金蝶云星空API能够接受的格式。根据元数据配置,我们需要构建一个POST请求,其中包含以下参数:

  • FID: 对应源平台中的sourceid
  • F_FSYNCMOM: 同步标志,固定值为true
  • FCarriageNO: 对应源平台中的运输单号
  • FormId: 固定值为SAL_OUTSTOCK
  • Operation: 固定值为BatchSave
  • IsAutoSubmitAndAudit: 固定值为false
  • IsVerifyBaseDataField: 固定值为true
  • IsDeleteEntry: 固定值为false

构建后的请求体如下:

{
  "FormId": "SAL_OUTSTOCK",
  "Operation": "BatchSave",
  "IsAutoSubmitAndAudit": false,
  "IsVerifyBaseDataField": true,
  "IsDeleteEntry": false,
  "Model": {
    "FID": "12345",
    "F_FSYNCMOM": true,
    "FCarriageNO": "{{运输单号}}"
  }
}

调用API接口

最后一步是通过HTTP POST方法调用金蝶云星空API接口,将转换后的数据写入目标平台。我们使用轻易云提供的异步处理机制,确保请求能够高效地被处理和响应。

以下是调用API接口的示例代码(假设使用JavaScript):

const axios = require('axios');

const requestData = {
  FormId: 'SAL_OUTSTOCK',
  Operation: 'BatchSave',
  IsAutoSubmitAndAudit: false,
  IsVerifyBaseDataField: true,
  IsDeleteEntry: false,
  Model: {
    FID: '12345',
    F_FSYNCMOM: true,
    FCarriageNO: 'TRK20231010'
  }
};

axios.post('https://api.kingdee.com/batchSave', requestData)
.then(response => {
  console.log('Data saved successfully:', response.data);
})
.catch(error => {
  console.error('Error saving data:', error);
});

通过上述步骤,我们成功地将源平台的数据经过ETL处理后,写入到了金蝶云星空系统中。这一过程充分利用了轻易云数据集成平台提供的强大功能,实现了不同系统间的数据无缝对接和高效处理。 钉钉与CRM系统接口开发配置

更多系统对接方案