使用轻易云进行ETL转换并写入金蝶云星空:技术步骤与配置解析

  • 轻易云集成顾问-冯潇

吉客云·奇门数据集成到金蝶云星空:JY-BDS销售出库单(1-零售业务)

在这个技术案例中,我们将详细解析如何通过轻易云数据集成平台,实现吉客云·奇门与金蝶云星空之间的数据对接。具体来说,本次分享的方案名称为“JY-BDS销售出库单(1-零售业务)”,该方案涉及了多方面的技术细节,包括接口调用、数据转换逻辑、自定义映射及异常处理机制等。

首先,通过调用吉客云·奇门API jackyun.tradenotsensitiveinfos.list.get,我们能够高效获取零售相关的交易信息。这些数据在源系统中通常以分页形式返回,因此需要设计稳健的分页处理逻辑,以确保所有数据都能被完整抓取,同时要避免因频繁调用导致限流问题。为了确保定时可靠地从吉客云·奇门提取这些交易信息,我们设置了定期任务,并结合日志记录和实时监控来保障任务执行的透明度与准确性。

其次,针对不同系统间的数据格式差异,我们使用自定义的数据转换功能,对获取到的数据进行必要的清洗和映射。在这部分操作中,需要特别注意字段类型、长度及格式上的兼容性。例如,对于日期格式或货币类型字段,需要采用标准化处理步骤,确保其能无缝写入目标系统——金蝶云星空。此外,为了提高大批量数据写入效率,平台提供了支持高吞吐量的数据写入能力,使得大量零售信息能够快速且稳定地保存至金蝶云星空数据库。

当准备好整合后的数据后,利用金蝶云星空API batchSave 进行批量提交。这一过程中不可避免会遇到一些网络或服务端的不确定因素,比如临时性错误或超时。因此,在实现上必须构建完善的异常处理与重试机制,以提升总体集成功能的健壮性。同时,通过集中监控和告警系统,可实时追踪每个集成任务状态,当发生异常时能够及时响应并采取修复措施,从而提高整个流程处置效率。

通过此案例展示,可以看到从获取和处理吉客云·奇门中的海量销售出库单,到最终导入至金蝶云星空,每一步都涉及精细化设计和实施。而这些环节又共同保证了全链条过程中不漏单、不失准,以及最大程度上优化资源配置,实现企业数字资产管理效益最大化。 金蝶与SCM系统接口开发配置

轻易云数据集成平台生命周期的第一步:调用吉客云·奇门接口获取并加工数据

在数据集成过程中,调用源系统接口是关键的第一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口 jackyun.tradenotsensitiveinfos.list.get 获取并加工数据。

接口配置与请求参数

我们使用 POST 方法来调用 jackyun.tradenotsensitiveinfos.list.get 接口。为了确保请求的有效性和准确性,需要配置一系列请求参数。这些参数不仅包括基本的分页信息,还涵盖了时间范围、订单状态等多种过滤条件。

以下是部分关键请求参数及其配置:

  • modified_beginmodified_end:用于指定修改时间的起始和结束范围,必须同时存在且时间间隔不能超过七天。
  • startConsignTimeendConsignTime:用于指定发货时间范围,默认值分别为上次同步时间和当前时间。
  • pageSizepageIndex:分页控制参数,默认每页记录数为20。
  • fields:指定需要返回的字段列表,以逗号分隔。

示例请求体如下:

{
  "modified_begin": "2023-09-01T00:00:00",
  "modified_end": "2023-09-07T23:59:59",
  "startConsignTime": "{{LAST_SYNC_TIME|datetime}}",
  "endConsignTime": "{{CURRENT_TIME|datetime}}",
  "pageSize": 20,
  "pageIndex": "{PAGINATION_START_PAGE}",
  "fields": "tradeNo,postFee,goodsDetail.goodsNo,goodsDetail.goodsName"
}

元数据配置与自动化处理

轻易云数据集成平台提供了强大的元数据配置功能,可以极大简化接口调用过程中的参数设置和数据处理。以下是元数据配置中的几个关键点:

  1. 分页控制

    • pagination 字段定义了每页记录数为20。
    • 在实际请求中,通过 pageSizepageIndex 参数实现分页控制。
  2. 定时任务与补偿机制

    • omissionRemedy 字段定义了一个定时任务,每天在特定时间点自动执行数据同步操作,并通过 takeOverRequest 字段设置发货时间范围,以确保漏掉的数据能够被补偿处理。
  3. 字段校验与默认值设置

    • idCheck 设置为 true,确保每条记录都有唯一标识。
    • 部分字段如 startConsignTimeendConsignTime 设置了默认值,分别为上次同步时间和当前时间。

数据清洗与转换

在获取到原始数据后,需要进行必要的数据清洗和转换,以便后续的数据写入操作。以下是常见的数据清洗步骤:

  1. 字段映射与重命名

    • 将接口返回的字段映射到目标系统所需的字段名称。例如,将 tradeNo 映射为目标系统中的订单编号。
  2. 数据格式转换

    • 将日期字符串转换为标准日期格式,确保一致性。
    • 对金额字段进行单位转换,如将分转换为元。
  3. 异常处理与日志记录

    • 对于缺失或异常的数据进行处理,并记录日志以便后续排查。例如,对于缺少订单编号的数据,可以选择丢弃或标记为异常。

示例代码片段如下:

def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        cleaned_record = {
            "order_no": record["tradeNo"],
            "post_fee": float(record["postFee"]) / 100,
            "goods_details": [
                {
                    "goods_no": item["goodsNo"],
                    "goods_name": item["goodsName"]
                } for item in record["goodsDetail"]
            ]
        }
        cleaned_data.append(cleaned_record)
    return cleaned_data

通过上述步骤,我们可以高效地从吉客云·奇门接口获取并加工销售出库单数据,为后续的数据写入和业务处理奠定坚实基础。 如何开发金蝶云星空API接口

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

在数据集成生命周期的第二阶段,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术步骤和配置解析。

1. 配置API接口元数据

我们需要将源数据转换为金蝶云星空API能够接受的格式。以下是配置元数据的详细解析:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 10,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD07_SYS"},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{tradeNo}"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consignTime}"},
    {"field":"FSaleOrgID","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2iazxw0 from a7cb0b9d-2aef-342a-bcb9-7d02e747f1d8 where textField_l2iazxvw={shopCode}"},
    {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2iazxvz from a7cb0b9d-2aef-342a-bcb9-7d02e747f1d8 where textField_l2iazxvw={shopCode}"},
    {"field":"FNote","label":"备注","type":"string","describe":"多行文本","value":"{sellerMemo}"},
    {"field":"FStockOrgID","label":"发货组织","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}"},
    {"field": "FOwnerIdHead", "label": "货主", "type": "string", "describe": "多类别基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}"},
    {
      "field": "FEntity",
      "label": "明细信息",
      "type": "array",
      "children": [
        {"field": "FCustMatID", "label": "客户物料编码", "type": "string", "describe": "基础资料", 
            "parser":{"name": "ConvertObjectParser", 
            "params": 
                "FNumber"}, 
                "parent":
                    "FEntity"
        },
        {"field": 
            "FMaterialID", 
            "label":
                "物料编码",
                "type":
                    "string",
                    "describe":
                        "基础资料",
                        "parser":
                            {"name":
                                "ConvertObjectParser",
                                "params":
                                    "FNumber"
                            },
                        "value":
                            "{goodsDetail.goodsNo}",
                        "parent":
                            "FEntity"
        },
        {"field":
            "FRealQty",
            "label":
                "实发数量",
                "type":
                    "string",
                    "describe":
                        "数量",
                        "value":
                            "{goodsDetail.sellCount}",
                        "parent":
                            "FEntity"
        },
        {
          // more fields...
        }
      ],
      // more fields...
    }
  ],
  // more fields...
}

2. 数据字段解析与转换

在上述配置中,每个字段都需要进行相应的解析和转换,以确保数据能够被金蝶云星空API正确接收和处理。

  1. 单据类型 (FBillTypeID): 使用 ConvertObjectParserXSCKD07_SYS 转换为目标系统中的对应值。

  2. 单据编号 (FBillNo): 直接从 {tradeNo} 中获取值。

  3. 日期 (FDate): 从 {consignTime} 中获取并格式化为目标系统接受的日期格式。

  4. 销售组织 (FSaleOrgID): 使用 shopCode 查找对应的销售组织编码。

  5. 客户 (FCustomerID): 同样使用 shopCode 查找对应的客户编码。

  6. 备注 (FNote): 从 {sellerMemo} 中获取备注信息。

  7. 发货组织 (FStockOrgID) 和 货主 (FOwnerIdHead): 使用 warehouseCode 查找对应的发货组织和货主编码。

  8. 明细信息 (FEntity): 包含多个子字段,如物料编码、实发数量等,需要逐一进行解析和转换。例如:

    • 物料编码 (FMaterialID): 从 {goodsDetail.goodsNo} 中获取并使用 ConvertObjectParser 转换。
    • 实发数量 (FRealQty): 从 {goodsDetail.sellCount} 中获取。
    • 更多字段...

3. 数据写入操作

通过配置元数据中的 operation 字段,我们定义了批量保存操作(batchSave)。该操作通过 POST 请求将处理后的数据发送到金蝶云星空API接口。具体操作如下:

{
  // other configurations...
  {
    // operation configurations
    {
      // method configurations
      {
        // request configurations
        {
          // field configurations
          {
            // data mappings and transformations
          }
        }
      }
    }
  }
}

4. 执行与监控

在完成所有配置后,通过轻易云平台执行ETL任务,并实时监控数据流动和处理状态,确保每个环节都清晰可见。当所有数据成功写入金蝶云星空后,即完成了整个ETL过程。

通过上述步骤,我们成功实现了从源平台到金蝶云星空的数据ETL转换,并确保了数据的一致性和完整性。 金蝶与CRM系统接口开发配置

更多系统对接方案