在轻易云平台上将数据转换为金蝶云星空格式

  • 轻易云集成顾问-陈洁琳

二期-旺店通跨境其他出库单&星空其他出库单---11 数据集成案例分享

在系统对接与数据集成的过程中,确保数据的准确性和实时性是一项极具挑战性的任务。本文将分享一个具体的技术案例,即如何高效地实现旺店通·跨境版的数据集成到金蝶云星空中。本次工作主要涵盖了从获取旺店通·跨境版接口中的出库单详情,到将这些数据批量写入到金蝶云星空数据库的一系列操作。

首先,对于此次项目,“二期-旺店通跨境其他出库单&星空其他出库单---11” 的核心目标是能够定时可靠地抓取旺店通·跨境版接口提供的数据,并快速且无误地写入到金蝶云星空中,以支援企业在国际物流环节中的管理需求。

接口调用与抓取机制

为了获取所需的数据,我们使用了 旺店通·跨境版 提供的 /api/openservices/stock/v1/getStockOutOrderDetails API。该API允许我们按需调取出口订单明细,为后续的数据处理打下基础。然而,由于网络环境及供应商API本身特性的限制,数据分页和限流问题不容忽视。因此,需要设计一个稳定且高效的调用计划,以避免因请求过多或过频导致服务不可用。

批量写入与映射规则

从 旺店通 获取数据之后,这些信息需要被及时、安全地传输并存储至 金蝶云星空 中。为此,我们采用了 金蝶云 提供的 batchSave API进行批量写入。在此过程中,一个关键点是处理两者之间存在的数据格式差异。例如,字段名称不一致、数据类型不同等情况,需要通过定制化映射解决这些问题,以保证每一条记录都能对应正确的位置。此外,还要注意设置适当的错误重试机制,当出现异常情况时能自动恢复,提高整体流程的鲁棒性。

以上便是此次系统对接方案中的核心步骤,在随后的部分内容中,我们将详细解析具体实施过程,包括调度策略、日志监控,以及性能优化等方面,实现业务场景下最佳实践效果。 用友BIP接口开发配置

调用旺店通·跨境版接口获取并加工数据

在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·跨境版的接口 /api/openservices/stock/v1/getStockOutOrderDetails 来获取并加工数据。

接口概述

该接口主要用于查询出库单的详细信息,支持多种查询条件,包括出库单号、出库单状态、业务类型、SKU编码、时间范围等。请求方式为 POST,返回的数据可以自动填充到目标系统中。

请求参数配置

根据元数据配置,我们需要设置以下请求参数:

  1. stockout_no_list: 出库单号列表,类型为字符串。

  2. order_status: 出库单状态,类型为字符串。可选值包括:

    • 5已取消
    • 48编辑中
    • 50待审核
    • 52待推送
    • 53推送失败
    • 54获取面单号
    • 55已审核
    • 60待出库
    • 90部分发货
    • 95已发货
    • 100已签收
    • 105部分打款
    • 110已完成
  3. src_order_type: 业务类型,类型为字符串。可选值包括:

    • 1-销售出库
    • 2-调拨出库
    • 3-采购退货出库
    • 4-盘亏出库
    • 7-其他出库(本次集成选择此项)
    • 12-委外出库
    • 13-FBA调拨出库
  4. spec_no: SKU编码,类型为字符串。

  5. start_time: 起始时间,类型为日期时间。使用模板变量 {{LAST_SYNC_TIME|datetime}} 自动填充。

  6. end_time: 结束时间,类型为日期时间。使用模板变量 {{CURRENT_TIME|datetime}} 自动填充。

  7. status: 时间状态,类型为字符串。0表示按出库时间,1表示按创建时间。本次集成选择按创建时间。

此外,还需要配置分页参数:

  1. pageNo: 当前页码,类型为字符串。使用函数 _function {PAGINATION_START_PAGE}+1 自动计算。
  2. pageSize: 分页大小,类型为字符串。使用模板变量 {PAGINATION_PAGE_SIZE} 自动填充。

数据请求与清洗

在发送请求之前,需要确保所有参数都已正确设置,并且符合接口要求。以下是一个示例请求体:

{
    "stockout_no_list": "123456,789012",
    "order_status": "95,100,105,110",
    "src_order_type": "7",
    "spec_no": "SKU12345",
    "start_time": "{{LAST_SYNC_TIME|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}",
    "status": "1",
    "pageNo": "_function {PAGINATION_START_PAGE}+1",
    "pageSize": "{PAGINATION_PAGE_SIZE}"
}

发送请求后,需要对返回的数据进行清洗和转换,以便后续处理和写入目标系统。例如,可以过滤掉不需要的字段,只保留必要的信息,并根据业务需求进行格式转换。

数据转换与写入

在清洗后的数据基础上,可以进行进一步的转换操作,如字段映射、数据格式调整等。轻易云平台提供了丰富的数据转换工具,可以方便地实现这些操作。

最终,将处理好的数据写入目标系统,实现数据的无缝对接和集成。

通过上述步骤,我们成功调用了旺店通·跨境版的接口 /api/openservices/stock/v1/getStockOutOrderDetails 获取并加工了所需的数据。这是数据集成生命周期中的关键一步,为后续的数据处理和分析奠定了基础。 如何开发用友BIP接口

使用轻易云数据集成平台将源数据转换为金蝶云星空API接口格式并写入

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。

配置元数据

首先,我们需要根据金蝶云星空API接口的要求配置元数据。以下是我们使用的元数据配置:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{stockoutNo}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"标准其他出库单:QTCKD01_SYS\n资产出库:QTCKD02_SYS\nVMI出库:QTCKD03_SYS\n费用物料出库:QTCKD04_SYS\n库存调整:QTCKD05_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKD01_SYS"},
    {"field":"FPickOrgId","label":"领用组织","type":"string","describe":"领用组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouseNo}"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouseNo}"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consignTime}"},
    {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
    {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouseNo}"},
    {"field":"FDeptId","label":"领料部门","type":"","describe":"","parser":{"name":"","params":""},"value":""},
    {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""},
    {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""},
    {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""},
    {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""},
    {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}
  ],
  "otherRequest":[
    {"field":"",
      "label":"",
      "type":"",
      "describe":"",
      "parser":{
        "name":"",
        "params":[]
      },
      "mapping":{
        "target":"",
        "direction":[]
      },
      "children":[]
    }
  ],
  "operation":{
    "rowsKey":"",
    "rows":"",
    "method":[]
  }
}

数据转换与写入

  1. 解析和转换字段

    • FBillNo(单据编号):直接映射到源数据的stockoutNo字段。
    • FBillTypeID(单据类型):固定值为QTCKD01_SYS,使用ConvertObjectParser进行解析。
    • FPickOrgId(领用组织)和FStockOrgId(库存组织):均映射到源数据的warehouseNo字段,并使用ConvertObjectParser进行解析。
    • FDate(日期):映射到源数据的consignTime字段。
    • FOwnerTypeIdHead(货主类型):固定值为BD_OwnerOrg
    • FOwnerIdHead(货主):映射到源数据的warehouseNo字段,并使用ConvertObjectParser进行解析。
  2. 处理明细信息: 明细信息部分需要特别处理,因为它是一个数组结构。每个明细项包含以下字段:

    • FMaterialId(物料编码):映射到明细项中的spectNo字段,并使用ConvertObjectParser进行解析。
    • FQty(实发数量):映射到明细项中的num字段。
    • FStockId(发货仓库):映射到明细项中的spectNo.
  3. 其他请求参数

    • FormId: 固定值为业务对象表单ID,如"STK_MisDelivery"。
    • IsAutoSubmitAndAudit: 布尔值,表示是否自动提交并审核,设置为true。
    • IsVerifyBaseDataField: 布尔值,表示是否验证基础资料有效性,设置为true。
    • Operation: 固定值为"Save"。

实现代码示例

以下是一个基于上述元数据配置的实现代码示例:

import requests
import json

def transform_and_write_data(source_data):
    # 构建请求体
    request_body = {
        'FormId': 'STK_MisDelivery',
        'IsAutoSubmitAndAudit': True,
        'IsVerifyBaseDataField': True,
        'Operation': 'Save',
        'Model': {
            'FBillNo': source_data['stockoutNo'],
            'FBillTypeID': {'FNumber': 'QTCKD01_SYS'},
            'FPickOrgId': {'FNumber': source_data['warehouseNo']},
            'FStockOrgId': {'FNumber': source_data['warehouseNo']},
            'FDate': source_data['consignTime'],
            'FOwnerTypeIdHead': 'BD_OwnerOrg',
            'FOwnerIdHead': {'FNumber': source_data['warehouseNo']},
            'FDeptId': {'FNumber':'BM000002'},
            'FNote':'备注信息',
            'FStockDirect':'GENERAL',
            'FEntity': []
        }
    }

    for detail in source_data['stockOutOrderDetailsVOList']:
        entity = {
            'FMaterialId': {'FNumber': detail['specNo']},
            'FQty': detail['num'],
            'FStockId': {'FNumber': source_data['warehouseNo']},
            'FEntryNote':'备注信息',
            'F_ZMKJ_Text': detail['costPrice']
        }
        request_body['Model']['FEntity'].append(entity)

    # 发起POST请求
    response = requests.post(
        url='https://api.kingdee.com/k3cloud/batchSave', 
        headers={'Content-Type':'application/json'},
        data=json.dumps(request_body)
    )

    if response.status_code == 200:
        print("Data successfully written to Kingdee Cloud")
    else:
        print(f"Failed to write data: {response.text}")

# 示例源数据
source_data = {
  ...
}

transform_and_write_data(source_data)

通过上述步骤和代码示例,我们可以实现将源平台的数据经过ETL转换后,以金蝶云星空API接口所能接收的格式写入目标平台。这不仅确保了数据的一致性和准确性,还大大提升了系统集成的效率。 用友与SCM系统接口开发配置

更多系统对接方案