通过轻易云平台进行金蝶云星空的ETL数据转换和写入

  • 轻易云集成顾问-吕修远

聚水潭数据集成到金蝶云星空:无信息件线上销售退货对接其他入库ok

在复杂的电商环境中,如何确保多平台间数据的一致性和及时性显得尤为重要。在本案例中,我们将分享一个实际运行的方案——“无信息件线上销售退货对接其他入库ok”,重点聚焦于从聚水潭的数据获取并高效地写入到金蝶云星空系统。通过这个案例,我们希望展示如何解决跨系统数据集成中的常见问题,包括API接口调用、分页处理、限流控制以及异常重试机制等。

首先,在进行数据集成之前,需要可靠且定时地抓取聚水潭的相关接口数据。我们使用了refund.single.query API来获取每个退货请求的信息,为了防止漏单情况的发生,设置了一系列动态参数和标记位以确保所有订单都能被准确捕获。一旦收集到这些原始数据信息后,如何迅速有效地大量写入至金蝶云星空成为下一个挑战,这里我们采用了batch处理方式,通过batchSave API实现批量提交操作,从而提升性能。

为了适应聚水潭与金蝶云星空之间的数据格式差异,我们实施了一层自定义的数据映射逻辑,并结合实时监控及日志记录功能,有效捕捉整个传输过程中可能出现的问题。此外,对于分页与限流问题,我们设计了一套灵活的机制,通过迭代检索与请求速率调整,实现稳定、高效的数据同步。同时,如果在对接过程中遇到了意外错误或异常,中断后的自动重试策略也保证了任务执行过程中的健壮性。

这套方案不仅满足了业务需求,也显著提高了工作效率和系统稳定性,为类似项目提供了宝贵经验。以下内容将详细阐述每个步骤及其技术实现细节…… 如何对接用友BIP接口

使用轻易云数据集成平台调用聚水潭接口refund.single.query并加工数据

在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用聚水潭接口refund.single.query,并对获取的数据进行加工处理。

接口调用配置

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

{
  "api": "refund.single.query",
  "method": "POST",
  "number": "as_id",
  "id": "as_id",
  "beatFlat": ["items"],
  "pagination": {"pageSize": 50},
  "formatResponse": [
    {"old": "items.receive_date", "new": "items.receive_date2", "format": "date"}
  ],
  "condition": [
    [{"field": "good_status", "logic": "eq", "value": "SELLER_RECEIVED"},
     {"field": "o_id", "logic": "eq", "value": -1},
     {"field": "items.r_qty", "logic": "neq", "value": 0}]
  ],
  "idCheck": true,
  "request": [
    {"field": "shop_id", 
     "label": "店铺编号", 
     "type":"string", 
     "describe":"店铺编号"},
    {"field":"is_offline_shop",
     "label":"shop_id为0且is_offline_shop为true查询线下店铺单据",
     "type":"string",
     "describe":"shop_id为0且is_offline_shop为true查询线下店铺单据"},
    {"field":"modified_begin",
     "label":"修改起始时间",
     "type":"string",
     "describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空",
     "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field":"modified_end",
     ...

请求参数说明

  • shop_id: 店铺编号,用于指定查询的店铺。
  • is_offline_shop: 当shop_id为0且该字段为true时,查询线下店铺单据。
  • modified_beginmodified_end: 修改起始和结束时间,必须同时存在,时间间隔不能超过七天。
  • so_ids: 指定线上订单号,与时间段不能同时为空。
  • shop_buyer_ids: 指定买家账号,最多50个。
  • page_index: 第几页,从第一页开始,默认1。
  • page_size: 每页多少条记录,默认30,最大50。

数据请求与清洗

在发出请求之前,需要确保所有必填字段都已正确填充。例如:

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ...
                            {
                              ...
![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image)
### 利用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入

在数据集成的过程中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能接收的格式,并最终写入目标平台。

#### 元数据配置解析

在对接金蝶云星空API接口时,我们需要遵循特定的元数据配置。以下是一个典型的配置示例:

```json
{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 1,
        "method": "batchArraySave"
    },
    "request": [
        {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{bfn_num}"},
        {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSTHRKD"},
        {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
        {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
        {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{batchs_receive_date2}"},
        {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
        {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
        {"field":"FNOTE","label":"备注","type":"string","describe":"多行文本","value": "{remark}"},
        {
            "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":   "FLOT",         "label":    "批号",       "type":     "string", 
                    "describe":     "批次", 
                    "value": "{items_batch_no}", 
                    "parent":   "FEntity", 
                    "parser":{"name":
                               ConvertObjectParser,
                               params: FNumber
                               }
                },
                // More fields...
            ]
        }
    ],
    // Other configurations...
}

数据转换与写入步骤

  1. 字段映射与转换

    • 在元数据配置中,每个字段都有明确的映射关系。例如,FBillNo对应源数据中的{bfn_num}FBillTypeID固定为XSTHRKD
    • 使用ConvertObjectParser进行必要的字段转换,例如将库存组织、货主等字段值转换为金蝶系统可识别的格式。
  2. 数组处理

    • FEntity字段是一个数组,包含多个子项,如物料编码、收货仓库、批号等。这些子项需要逐一映射和转换。
    • 配置中使用了rowsKey: arraymethod: batchArraySave来处理数组形式的数据。
  3. API请求构建

    • 根据元数据配置,构建符合金蝶云星空API要求的JSON请求体。
    • 使用POST方法发送请求,并确保启用ID检查(idCheck: true)。
  4. 特殊字段处理

    • 某些字段如日期、备注等需要从源数据中提取并格式化。例如,日期字段需要确保符合目标系统的日期格式要求。
  5. 执行操作

    • 配置中指定了操作类型为“Save”,并且设置了是否自动提交和审核(IsAutoSubmitAndAudit: false)。
    • 在实际操作中,可以根据业务需求调整这些参数。

实际案例

假设我们有一条退货记录,需要将其写入金蝶云星空系统。源数据如下:

{
    bfn_num: 'TH20230901',
    batchs_receive_date2: '2023-09-01',
    remark: '客户退货',
    items: [
        {
            items_sku_id: 'SKU12345',
            wms_co_id: 'WH001',
            items_batch_no: 'BATCH001',
            items_product_date: '2023-08-01',
            items_expiration_date: '2024-08-01',
            items_r_qty: '10'
        }
    ],
    l_id: 'EXP123456789'
}

根据上述元数据配置和源数据,我们可以生成如下JSON请求体:

{
    FormId: 'STK_MISCELLANEOUS',
    IsVerifyBaseDataField: false,
    Operation: 'Save',
    IsAutoSubmitAndAudit: false,
    Model:{
      FBillNo:'TH20230901',
      FBillTypeID:{ FNumber:'XSTHRKD' },
      FStockOrgId:{ FNumber:'100' },
      FStockDirect:'GENERAL',
      FDate:'2023-09-01',
      FOwnerTypeIdHead:'BD_OwnerOrg',
      FOwnerIdHead:{ FNumber:'100' },
      FNOTE:'客户退货',
      FEntity:[
          {
              FMATERIALID:{ FNumber:'SKU12345' },
              FSTOCKID:{ FNumber:'WH001' },
              FLOT:{ FNumber:'BATCH001' },
              FPRODUCEDATE:'2023-08-01',
              FEXPIRYDATE:'2024-08-01',
              FQty:'10',
              F_XC_TEXT2:'EXP123456789'
          }
      ]
   }
}

通过轻易云数据集成平台,将上述请求体发送到金蝶云星空API接口,实现无缝的数据对接和写入。

总结

本文详细探讨了如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并转为金蝶云星空API接口所能接收的格式,最终成功写入目标平台。通过合理配置元数据,可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 如何开发用友BIP接口

更多系统对接方案