如何通过轻易云平台实现数据重跑与异常处理机制

  • 轻易云集成顾问-彭亮

案例:重跑数据—分销旺店通销售出库单=>金蝶销售出库单(正常销售&刷单)

在企业不断扩展其信息系统的过程中,数据的无缝集成是确保业务流畅运行的重要环节。本文将分享如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据高效对接到金蝶云星空,以“重跑数据—分销旺店通销售出库单=>金蝶销售出库单(正常销售&刷单)”为具体案例,解析整个技术过程。

1. 确保集成不漏单

为了保证从旺店通获取的数据完整性,我们调用了wdt.stockout.order.query.trade接口定时抓取旺店通·企业奇门的最新订单数据。通过设置合理的时间间隔和分页处理机制,有效避免遗漏任何一条待处理订单。同时,实时监控与日志记录功能确保每一次API调用都被详细记录,可追溯并排查潜在问题。

2. 大量数据快速写入

对于大量的订单数据,我们选择使用金蝶云星空提供的batchSave接口进行批量写入操作。这不仅提高了写入效率,还减少了网络传输时间,提高了整体处理速度。在实施过程中,通过优化批次大小和并发数,进一步提升系统性能,使得每次重跑任务能够迅速完成。

3. 数据格式差异处理

面对不同平台之间的数据结构差异,我们采用自定义映射规则,将旺店通·企业奇门的数据字段准确转换为金蝶云星空所需格式。例如,对应字段类型、长度及必填项等细节均进行了严格校验与匹配,从而确保两端系统能够顺利交互,不产生误解或错误。

4. 异常处理与错误重试机制

为增强整个集成过程的鲁棒性,设计了一套完善的异常处理策略。一旦在向金蝶云星空提交请求时发生错误,比如网络超时或验证失败,该机制会自动进行多次重试,并记录相关日志以便后续分析。此外,为防止因短期异常导致的大规模重复提交,与主要业务逻辑分离的方法使恢复更加灵活快捷。

本篇技术文章开头部分重点介绍上述关键点,下文将深入解析各个步骤,并提供相关代码示例及配置详情。 用友与SCM系统接口开发配置

调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query.trade,并对获取的数据进行初步加工。

接口调用配置

首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置:

{
  "api": "wdt.stockout.order.query.trade",
  "effect": "QUERY",
  "method": "POST",
  "number": "order_no",
  "id": "stockout_id",
  "idCheck": true,
  "request": [
    {"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"},
    {"field":"status","label":"状态","type":"string","describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"110,95"},
    {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"111"},
    {"field":"src_tid","label":"原始单号","type":"string","describe":"111"},
    {"field":"stockout_no","label":"出库单号","type":"string","describe":"111"},
    {"field":"shop_no","label":"店铺编码","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"},
    {"field":"warehouse_no","label":"仓库编码","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"},
    {"field": "FSaleDeptID", "label": "销售部门", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}}
  ],
  "otherRequest": [
    {"field": "page_size", "label": "page_size", "type": "string", "describe": "每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "page_no", "label": "page_no", "type": "string", "describe": "不传值默认从0页开始", "value": "{PAGINATION_START_PAGE}"}
  ],
  "autoFillResponse": true,
  "condition":[
    [{"field": "trade_type", "logic": "eqv2", "value": 1}, {"field": "shop_name",   "value" :   "系统分销店铺ae89e42" ,   "logic" :   "eqv2"}]
  ]
}

请求参数解析

  1. 时间参数

    • start_timeend_time 用于增量获取数据。start_time 是上次同步的时间点,而 end_time 是当前时间点。
    • 时间格式为 yyyy-MM-dd HH:mm:ss
  2. 状态参数

    • status 参数用于过滤订单状态,这里我们关注的是已发货(95)和已完成(110)的订单。
  3. 其他参数

    • shop_nowarehouse_no 分别代表店铺和仓库的唯一编码,用于区分不同的店铺和仓库。
    • FSaleDeptID 使用了一个名为 ConvertObjectParser 的解析器,将其转换为特定格式。
  4. 分页参数

    • page_sizepage_no 用于控制分页,每次请求的数据条数和页码。

数据请求与清洗

在调用接口后,我们会获得一批原始数据。这些数据需要经过清洗,以确保其符合目标系统的要求。以下是清洗步骤:

  1. 字段映射

    • 将源系统中的字段映射到目标系统所需的字段。例如,将 stockout_id 映射到目标系统中的订单ID。
  2. 数据类型转换

    • 确保所有字段的数据类型符合目标系统要求。例如,将字符串类型的日期转换为日期类型。
  3. 过滤无效数据

    • 根据业务规则过滤掉无效或不必要的数据。例如,只保留状态为已发货和已完成的订单。

数据转换与写入

清洗后的数据需要进行转换,以便写入目标系统。在这个阶段,我们可能需要进行如下操作:

  1. 格式化输出

    • 将清洗后的数据格式化为目标系统所需的JSON或XML格式。
  2. API调用写入

    • 使用目标系统提供的API将转换后的数据写入。例如,通过金蝶API将销售出库单信息写入金蝶系统。

以上就是通过轻易云数据集成平台调用旺店通·企业奇门接口并对数据进行初步加工的详细过程。通过合理配置元数据和精细化的数据处理,可以确保高效、准确地实现不同系统间的数据集成。 用友与外部系统接口集成开发

轻易云数据集成平台:ETL转换与金蝶云星空API接口集成案例

在数据集成生命周期的第二步,我们将已从源平台获取并清洗的数据进行ETL转换,最终写入目标平台——金蝶云星空API接口。本文将详细解析这一过程,重点探讨如何利用元数据配置实现数据的高效转换与传输。

数据请求与清洗

首先,我们假设已经完成了数据请求与清洗阶段,获得了结构化的源数据。接下来,我们需要将这些数据转换为金蝶云星空API能够接收的格式,并通过API接口写入目标平台。

元数据配置详解

元数据配置是ETL过程中的核心环节,它决定了如何将源数据映射到目标系统所需的数据结构中。以下是我们使用的元数据配置:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "batchArraySave",
    "rows": 1,
    "rowsKey": "array"
  },
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "单据类型",
      "value": "_function CASE '{flag_name}' WHEN '刷单' THEN 'ZYD-106' ELSE 'ZYD-017' END",
      "parser": {
        "name": "ConvertObjectParser",
        "params": "FNUMBER"
      }
    },
    ...
  ],
  ...
}

核心字段解析

  1. FBillTypeID(单据类型)

    • 配置:"value":"_function CASE '{flag_name}' WHEN '刷单' THEN 'ZYD-106' ELSE 'ZYD-017' END"
    • 描述:根据flag_name字段的值判断单据类型。如果是“刷单”,则设置为ZYD-106,否则为ZYD-017
    • 转换器:使用ConvertObjectParser将结果转换为金蝶所需的格式。
  2. FBillNo(单据编号)

    • 配置:"value":"{order_no}"
    • 描述:直接映射源数据中的订单编号字段。
  3. FDate(日期)

    • 配置:"value":"{consign_time}"
    • 描述:映射发货时间字段。
  4. FSaleOrgId(组织)

    • 配置:"value":"_function CASE '{shop_no}' WHEN 'E0029' THEN '3000' ... ELSE '7000' END"
    • 描述:根据店铺编号映射销售组织ID。
    • 转换器:使用ConvertObjectParser进行格式转换。
  5. FCustomerID(客户)

    • 配置:"value":"{fenxiao_nick}"
    • 描述:映射分销商昵称字段。
    • 转换器及映射关系:通过ConvertObjectParser和指定的目标ID进行双向映射。
  6. FEntity(实体行项目)

    • 配置示例:
      {
      ...
      "children":[
       {
         ...
         {"field":"FMaterialID","label":"物料编码","type":"string","value":"{spec_no}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
         {"field":"FStockID","label":"仓库","type":"string","value":"_findCollection find FNumber from ... where FName={warehouse_name}"},
         ...
       }
      ]
      }
    • 描述:实体行项目包含多个子字段,如物料编码、仓库、计价数量等,每个子字段都通过特定规则和转换器进行处理。

API调用与写入

在完成所有字段的配置和映射后,通过调用金蝶云星空的API接口,将处理后的数据批量写入目标系统。具体操作如下:

  1. API调用方式
    • 方法:POST
    • API路径:batchSave
  2. 请求体构建: 根据元数据配置构建请求体,将所有字段及其对应值封装成JSON对象。
  3. 执行写入操作: 调用API接口,将构建好的请求体发送至金蝶云星空,实现批量保存操作。
{
  ...
  "FormId": "SAL_OUTSTOCK",
  ...
}

总结

通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并通过金蝶云星空API接口实现了数据写入。在这个过程中,元数据配置起到了至关重要的作用,确保了每个字段都能正确地映射和转换,为高效的数据集成奠定了基础。 数据集成平台可视化配置API接口

更多系统对接方案