轻易云平台的ETL转换与金蝶云星空API对接案例

  • 轻易云集成顾问-钟家寿

MySQL 数据集成到金蝶云星空的系统对接案例分享:MOM-FBSDCD-分步式调出单-提交审核

在这篇技术案例文章中,我们将深入探讨如何通过轻易云数据集成平台,实现 MySQL 数据库与金蝶云星空之间的数据对接,具体涵盖 MOM-FBSDCD-分步式调出单-提交审核方案。本案例重点聚焦于如何高效、可靠地将大规模数据从 MySQL 中提取并写入到金蝶云星空。

为了确保数据无缝迁移与同步,我们利用了轻易云数据集成平台的一系列技术特性,包括:

  1. 高吞吐量的数据写入能力: 在批量处理和写入大量数据时,平台提供的大容量、高性能接口极大提升了任务完成的效率。

  2. 实时监控与告警: 集中的监控系统能够实时跟踪所有数据集成任务的状态,一旦发现异常情况便会及时发出告警,确保每个环节都在可控范围内运行。

  3. MySQL 与金蝶云星空 API 资产管理功能: 通过统一视图和控制台精确掌握 API 的使用情况,并实现资源优化配置,有助于更高效地进行接口调用与管理。

本文案例涉及的主要步骤包括:

  1. 定时抓取 MySQL 接口数据: 使用 SELECT 查询语句,从指定的表中获取待处理的数据。这些查询操作需要特别注意分页和限流问题,以防止因一次性提取过多导致系统负载过重或崩溃。

  2. 自定义转换逻辑适应业务需求: 针对不同业务需求,自定义转换逻辑,将原始数据结构转变为符合目标格式要求的数据,这一步骤至关重要以使后续操作顺利进行。

  3. 批量写入金蝶云星空并触发审批流程(Audit): 利用平台提供的大容量批处理功能,将经过转换后的数据快速、安全地写入到金蝶云星空,并通过其 Audit 接口触发相应的审批流程。期间需关注接口返回值以及错误信息,以执行必要的错误重试机制来保证整体过程完整性及可靠性。

  4. 实时监控日志记录及异常处理机制实现: 配置完善的日志记录功能,对每次API调用以及响应结果进行详细记录。面对不可预知的问题,可依据日志快速定位故障点,并采用系统化设计好的重试策略保障再次尝试成功率。。

通过上述步骤,本次技术实施着力解决了两个核心挑战:一是保证海量My 用友与SCM系统接口开发配置

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

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台配置元数据,从MySQL数据库中调用select接口获取并加工数据。

配置元数据

首先,我们需要配置元数据,以便正确调用MySQL接口并获取所需的数据。以下是一个典型的元数据配置示例:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "id": "单据编号",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
      "value": "1",
      "children": [
        {
          "field": "limit",
          "label": "限制结果集返回的行数",
          "type": "int",
          "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。",
          "value": "{PAGINATION_PAGE_SIZE}"
        },
        {
          "field": "offset",
          "label": "偏移量",
          "type": "int",
          "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。",
          "value": "{PAGINATION_START_ROW}"
        }
      ]
    }
  ],
  "otherRequest": [
    {
      "field": "main_sql",
      "label": "主SQL语句",
      "type": "string",
      "describe": 
        `主SQL查询语句中使用 :limit 这种动态语法字段的赋值,以确保字段与请求参数一一对应,我们可以采用参数绑定的方式。
         下面是具体的优化步骤:
         1. 将主SQL查询语句中的动态字段 :limit 替换为占位符(例如 ?),表示参数的位置。
         2. 在执行查询之前,使用参数绑定的方法,将请求参数的值与占位符进行对应绑定。
         通过这种优化方式,我们能够提高查询语句的可读性和维护性,并确保动态语法字段与请求参数的正确对应关系。这样可以更好地保证查询的准确性和安全性。`,
      `value`: 
        `select
         t1.instruction_doc_num as 'sourceid',
         t1.instruction_doc_num as '单据编号'
         from ty_mes.wms_transfer_out_iface t1
         where t1.tenant_id = 7
         and t1.return_order = 3
         and t1.STATUS in ('N', 'E')
         limit :limit offset :offset`
    }
  ],
  autoFillResponse: true,
  omissionRemedy: {
    crontab: '1 1 1 1 1',
    takeOverRequest: []
  }
}

调用MySQL接口

在上述配置中,我们定义了一个POST方法来调用MySQL数据库中的select接口。主要包含以下几个关键部分:

  • API:指定为select,表示我们要执行一个SELECT操作。
  • Effect:设置为QUERY,表明这是一个查询操作。
  • Method:使用POST方法来发送请求。
  • ID:标识字段,这里设置为单据编号

请求参数

请求参数部分定义了两个主要字段:

  • Limit:限制结果集返回的行数,用于分页。
  • Offset:指定结果集起始位置,用于分页。

这些参数通过动态绑定方式传递给主SQL语句,以确保灵活性和准确性。

主SQL语句

主SQL语句使用占位符(如:limit:offset)来表示动态字段,并在执行时通过绑定实际值来替换这些占位符:

select
t1.instruction_doc_num as 'sourceid',
t1.instruction_doc_num as '单据编号'
from ty_mes.wms_transfer_out_iface t1
where t1.tenant_id = 7
and t1.return_order = 3
and t1.`STATUS` in ('N', 'E')
limit :limit offset :offset

这种方式不仅提高了SQL语句的可读性,还增强了其维护性和安全性。

自动填充响应

配置中的autoFillResponse设置为true,这意味着系统会自动处理并填充响应数据,无需手动干预。这极大简化了开发工作,提高了效率。

异常处理

为了确保系统稳定运行,我们还配置了异常处理机制(omissionRemedy),包括定时任务(crontab)和接管请求(takeOverRequest),以便在出现问题时能够及时响应和处理。

通过以上配置,我们成功实现了从MySQL数据库中调用select接口获取并加工数据。这一步骤不仅是整个数据集成生命周期的重要组成部分,也是确保后续数据转换与写入操作顺利进行的基础。 用友与WMS系统接口开发配置

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

在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL转换,转为目标平台能够接收的格式,并最终写入目标平台。在本案例中,我们将探讨如何使用轻易云数据集成平台,将源数据转换为金蝶云星空API接口所需的格式,并成功提交审核。

配置元数据

首先,了解金蝶云星空API接口的元数据配置是至关重要的。以下是我们需要配置的元数据:

{
  "api": "Audit",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field": "FormId", "label": "FormId", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "STK_TRANSFEROUT"},
    {"field": "Numbers", "label": "Numbers", "type": "string", "describe": "111", "value": "{{单据编号}}"},
    {"field": "Ids", "label": "Ids", "type": "string", "describe": "111"},
    {"field": "InterationFlags", "label": "InterationFlags", "type": "string", 
      "describe":"字符串类型,分号分隔,格式:\"flag1;flag2;...\"(非必录) 例如(允许负库存标识:STK_InvCheckResult)","value":"STK_InvCheckResult"},
    {"field":"IgnoreInterationFlag","label":"IgnoreInterationFlag","type":"string","describe":"布尔类型,默认true(非必录)","value":"true"},
    {"field":"NetworkCtrl","label":"NetworkCtrl","type":"string","describe":"布尔类型,默认false(非必录)","value":"false"},
    {"field":"IsVerifyProcInst","label":"IsVerifyProcInst","type":"string","describe":"是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)","value":"false"}
  ]
}

数据请求与清洗

在进行ETL转换之前,我们需要确保从源系统获取的数据是干净且结构化的。这包括对原始数据进行清洗和预处理,以确保其符合目标系统的要求。例如,我们可能需要对日期格式、数值精度等进行标准化处理。

数据转换与写入

接下来,我们进入关键步骤,即将清洗后的数据转换为金蝶云星空API接口所需的格式。根据上述元数据配置,我们需要构建一个符合API要求的请求体。

构建请求体
  1. FormId: 表单ID,这是一个固定值,在本案例中为"STK_TRANSFEROUT"
  2. Numbers: 单据编号,这通常是从源系统获取并经过清洗的数据字段。
  3. Ids: 单据ID,可以根据业务需求从源系统获取。
  4. InterationFlags: 交互标识,用于控制特定业务逻辑,如允许负库存标识。
  5. IgnoreInterationFlag: 忽略交互标识,通常设置为true
  6. NetworkCtrl: 网络控制标识,通常设置为false
  7. IsVerifyProcInst: 是否验证流程实例,通常设置为false

以下是构建请求体的示例代码:

{
  "FormId": "{{FormId}}",
  "Numbers": "{{单据编号}}",
  // 如果有多个单据编号,可以用逗号分隔
  // 如:"Numbers" : ["12345", ...]
  // Ids 字段可以为空
  // 如:"Ids" : ""
  // InterationFlags 可以根据实际情况调整
  // 如:"InterationFlags" : ""
  // IgnoreInterationFlag 设置为 true
  // NetworkCtrl 设置为 false
  // IsVerifyProcInst 设置为 false
}

提交审核

在完成请求体构建后,通过轻易云的数据集成平台发起POST请求,将构建好的JSON对象发送到金蝶云星空API接口。以下是一个简化的示例代码,用于发起HTTP POST请求:

import requests

url = 'https://api.kingdee.com/Audit'
headers = {'Content-Type': 'application/json'}
data = {
    'FormId': 'STK_TRANSFEROUT',
    'Numbers': '12345',
    'Ids': '',
    'InterationFlags': 'STK_InvCheckResult',
    'IgnoreInterationFlag': True,
    'NetworkCtrl': False,
    'IsVerifyProcInst': False
}

response = requests.post(url, headers=headers, json=data)

if response.status_code == 200:
    print('提交审核成功')
else:
    print('提交审核失败', response.text)

通过上述步骤和代码示例,我们可以实现将源平台的数据成功转换并写入到金蝶云星空API接口,从而完成整个ETL过程。 如何开发钉钉API接口

更多系统对接方案