轻易云平台助力金蝶云星空API的数据ETL转换

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

聚水潭数据集成到金蝶云星空的案例分享

在实际业务操作过程中,实现不同系统之间的数据对接一直是一项具有挑战性的任务。本文将聚焦于一个具体技术案例,展示如何通过轻易云数据集成平台,将来自聚水潭的其他入库单数据高效同步至金蝶云星空。

自动化实现:[自动]-其他入库单同步方案概述

此次集成项目的核心是实现从聚水潭获取其他入库单数据,并无缝、批量地写入到金蝶云星空系统中。整个过程需要处理多个关键技术点,包括接口调用、分页和限流处理、异常重试机制以及数据格式转换等。

  1. 确保集成不漏单
    我们采用定时任务可靠抓取聚水潭接口/open/other/inout/query的数据,通过对每次请求进行标记和日志记录,保证所有入库单据无一遗漏地被采集。同时使用分页调度机制,以克服API自身限制,在大量数据情况下依然能稳定运行。

  2. 高效批量数据写入
    聚水潭的数据经过必要处理中间步骤后,通过调用金蝶云星空的batchSave API将其快速、高效地批量写入目标数据库。在此过程中,我们对每个字段进行了映射处理, 确保两端系统的数据一致性和完整性。

  3. 实时监控与日志记录
    在整个数据处理生命周期中,我们引入了全面实时监控机制,及早发现并解决潜在问题。日志记录功能则帮助我们追踪每一次操作,以及可能出现的异常情况,为后续调试提供有力支持。

  4. 错误重试机制与限流控制
    针对网络波动或服务不可用等异常情况,对关键路径增加错误重试逻辑,同时为避免短时间内发送大量请求造成服务器压力过大,引进了合理的限流控制策略,有效保证系统平稳运营。

这一系列措施不仅确保了业务流程连续性,也为未来更多复杂场景下的数据对接奠定坚实基础。以上,是本次[自动]-其他入库单同步方案的一些初步描述。在具体实施细节部分,还需要进一步探讨各个环节中的关键配置和优化策略,包括如何更好地处理聚水潭与金蝶云星空之间的数据格式差异,以及针对特殊需求进行自定义开发等内容。这将在随后的章节中详细展开。 打通金蝶云星空数据接口

调用聚水潭接口/open/other/inout/query获取并加工数据的技术案例

在轻易云数据集成平台的生命周期中,第一步是调用源系统接口获取数据。本文将详细探讨如何通过调用聚水潭接口 /open/other/inout/query 获取并加工数据。

接口调用配置

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

  • API路径: /open/other/inout/query
  • 请求方法: POST
  • 分页设置: 每页50条记录
  • 请求参数:
    • modified_begin: 修改起始时间,使用上次同步时间 {{LAST_SYNC_TIME|datetime}}
    • modified_end: 修改结束时间,使用当前时间 {{CURRENT_TIME|datetime}}
    • types: 单据类型,包括“其它进仓”和“其它退货”,通过字符串解析器 StringToArray 将逗号分隔的字符串转换为数组
    • status: 单据状态,固定为“Confirmed”
    • page_index: 开始页码,固定为1
    • page_size: 每页行数,使用分页设置 {PAGINATION_PAGE_SIZE}

请求参数解析

在实际操作中,请求参数需要根据业务需求进行动态调整。例如:

{
    "modified_begin": "{{LAST_SYNC_TIME|datetime}}",
    "modified_end": "{{CURRENT_TIME|datetime}}",
    "types": "其它进仓,其它退货",
    "status": "Confirmed",
    "page_index": "1",
    "page_size": "{PAGINATION_PAGE_SIZE}"
}

其中,types 字段通过解析器将字符串 "其它进仓,其它退货" 转换为数组 [“其它进仓”, “其它退货”]

数据过滤与条件设置

为了确保只获取到符合业务需求的数据,我们可以设置过滤条件:

  • 条件一: 类型等于“其它进仓”
  • 条件二: 类型等于“其它退货”

这些条件确保我们只处理特定类型的单据。

"condition": [
    [{"field":"type","logic":"eq","value":"其它进仓"}],
    [{"field":"type","logic":"eq","value":"其它退货"}]
]

异常处理与补偿机制

在实际运行过程中,可能会遇到各种异常情况,例如网络中断或接口响应超时。为了应对这些情况,我们可以配置异常处理和补偿机制:

  • 定时任务: 使用crontab表达式配置定时任务,每天10:30执行一次
  • 补偿请求: 如果某次请求失败,可以自动重试,并且将修改起始时间设为3天前,以确保数据不丢失
"omissionRemedy": {
    "crontab": "30 10 * * *",
    "takeOverRequest": [
        {
            "field": "modified_begin",
            "label": "修改起始时间",
            "type": "string",
            "value": "{{DAYS_AGO_3|datetime}}"
        }
    ]
}

数据清洗与转换

在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以根据业务需求对字段进行重新命名、格式化日期、过滤无效记录等操作。

"data_cleaning_rules": [
    {"field":"date", "operation":"format", "params":{"format":"yyyy-MM-dd"}},
    {"field":"amount", "operation":"filter", "params":{"min_value":0}}
]

通过上述步骤,我们能够高效地调用聚水潭接口 /open/other/inout/query 获取并加工数据,为后续的数据转换与写入打下坚实基础。这种全生命周期管理方式不仅提升了业务透明度和效率,还确保了数据处理过程的稳定性和可靠性。 打通钉钉数据接口

使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换

在数据集成的生命周期中,数据转换与写入是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据通过ETL转换,最终写入到金蝶云星空API接口所能接收的格式。

元数据配置解析

我们将以一个自动化的其他入库单同步方案为例,来说明如何配置元数据并进行ETL转换。以下是元数据配置的详细内容:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' when '13438465' then '100' else '101' end"},
    {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"},
    {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
    {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' when '13438465' then '100' else '101' end"},
    {"field":"FDEPTID","label":"部门","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"'_function case when '{{items.sku_id}}'' like ''A%'' or '{{items.sku_id}}'' like ''M%'' or '{{items.sku_id}}'' like ''X%'' or '{{items.sku_id}}'' like ''D%'' or '{{items.sku_id}}'' like ''T%'' then ''LJ006'' else ''LJ011'' end"},
    {"field": "FNOTE", "label": "备注", "type": "string", "describe": "多行文本", "value": "{remark}"},
    {"field": "F_TLWD_Assistant", "label": "出入库类型", "type": "string", "value": "{drop_co_name}", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
    {
      "field": "FEntity",
      "label": "明细信息",
      "type": "array",
      children: [
        {
          field: “FMATERIALID”,
          label: “物料编码”,
          type: “string”,
          describe: “基础资料”,
          parser: { name: “ConvertObjectParser”, params: “FNumber” },
          value: “{{items.sku_id}}”,
          parent: “FEntity”
        },
        {
          field: “FSTOCKID”,
          label: “收货仓库”,
          type: “string”,
          describe: “基础资料”,
          parser: { name: “ConvertObjectParser”, params: “FNumber” },
          value: “{wms_co_id}”,
          parent: “FEntity”
        },
        {
          field: “FQty”,
          label: “实收数量”,
          type: “string”,
          describe: “数量”,
          value: “{{items.qty}}”,
          parent: “FEntity”
        },
        {
          field: “FPrice”,
          label: “成本价”,
          type: “string”,
          describe: “单价”,
          value: “{{items.cost_price}}”,
          parent: “FEntity”
        },
        {
            field:"FEntryNote",
            label:"备注",
            type:"string",
            describe:"多行文本",
            parent:"FEntity"
        }
      ],
      value:"items"
    }
  ],
  otherRequest:[
    {"field" :“FormId”,“label”:“业务对象表单Id”,“type”:“string”,“describe”:“必须填写金蝶的表单ID如:PUR_PurchaseOrder”,“value”:“STK_MISCELLANEOUS”},
    {"field" :“IsVerifyBaseDataField”,“label”:“验证基础资料”,“type”:“bool”,“describe”:“是否验证所有的基础资料有效性,布尔类,默认false(非必录)”,“value”:true},
    {"field" :“Operation”,“label”:“执行的操作”,“type”:“string”,“value”:“Save”},
    {"field" :“IsAutoSubmitAndAudit”,“label”:“提交并审核”,“type”:“bool”,‘’value’’:true}
  ]
}

数据转换与写入过程

  1. API接口配置:首先,我们需要配置目标平台的API接口。在本案例中,我们使用的是batchSave接口,并通过POST方法进行数据传输。

  2. 字段映射与转换

    • 单据编号(FBillNo):直接从源数据中获取io_id
    • 单据类型(FBillTypeID):固定值为QTRKD01_SYS,通过ConvertObjectParser进行解析。
    • 库存组织(FStockOrgId):根据不同的wms_co_id值,通过函数映射到对应的库存组织编码。
    • 库存方向(FStockDirect):固定值为GENERAL
    • 日期(FDate):直接从源数据中获取io_date
    • 货主类型(FOwnerTypeIdHead):固定值为BD_OwnerOrg
    • 货主(FOwnerIdHead):同样根据不同的wms_co_id值,通过函数映射到对应的货主编码。
    • 部门(FDEPTID):根据SKU ID前缀,通过函数映射到对应的部门编码。
    • 备注(FNOTE):直接从源数据中获取备注信息。
    • 出入库类型(FTLWD_Assistant):通过解析器将公司名称转为相应编码。
  3. 明细信息处理: 明细信息部分包含多个字段,如物料编码、收货仓库、实收数量、成本价和备注。这些字段均需逐条处理,并通过解析器进行必要的转换。

  4. 其他请求参数配置

    • FormId: 固定值为 STK_MISCELLANEOUS
    • IsVerifyBaseDataField: 设置为 true
    • Operation: 固定值为 Save
    • IsAutoSubmitAndAudit: 设置为 true

实施步骤

  1. 配置元数据: 在轻易云平台上,根据上述元数据配置文件,创建相应的数据集成任务。

  2. 测试与验证: 在实际运行前,对配置进行测试,确保每个字段都正确映射和转换。特别是对于函数映射和解析器部分,需要确保逻辑正确无误。

  3. 运行任务并监控: 启动集成任务,并通过轻易云平台提供的实时监控功能,观察数据流动和处理状态。如果出现异常情况,可以及时调整配置或修正源数据。

  4. 结果验证与反馈: 在目标平台(金蝶云星空)上检查写入的数据是否符合预期,并根据反馈进行必要的调整和优化。

通过上述步骤,我们可以高效地将源平台的数据经过ETL转换后,无缝对接到金蝶云星空API接口,实现业务流程自动化和数据的一致性管理。 系统集成平台API接口配置

更多系统对接方案