将旺店通数据ETL转换并写入金蝶云星空的步骤详解

  • 轻易云集成顾问-谢楷斌

旺店通·旗舰奇门调拨出库单数据集成到金蝶云星空的技术实现

在本次案例中,我们将详细探讨如何通过轻易云数据集成平台,将旺店通·旗舰奇门中的调拨出库单数据(API接口:wdt.wms.stockout.transfer.querywithdetail)高效、安全地集成到金蝶云星空(API接口:batchSave)。这个过程涉及多个重要技术环节,包括分页和限流处理、数据格式差异转换、高效的数据批量写入以及异常处理等。

首先,需要解决的是如何可靠地抓取旺店通·旗舰奇门接口的数据。我们采用定时任务机制,确保每隔一段时间准确且全面地获取最新的调拨出库单信息。在这过程中,通过实时监控与日志记录,可以随时掌握数据抓取情况,一旦出现问题能够及时调整。

其次,面对大量的业务数据,为了快速写入至金蝶云星空,我们设计了批量化的数据提交策略。这不仅提升传输效率,还能有效减少系统压力。同时,在对接过程中,要特别注意两端系统的数据格式差异。为此,我们构建了一套灵活的映射关系,并在存储前进行必要的数据转换,以保证无缝对接。

另外,由于API调用可能会受限速影响,分页请求是必不可少的一步。本方案就此设计了较为完善的分段拉取逻辑,有效防止因超载导致请求失败。同时,为确保整个过程的稳定性,对所有API调用均加入错误重试机制,最大程度降低因网络波动或其他不可抗力导致的数据丢失风险。

最后,对于已经成功推送到金蝶云星空的数据,同样需要进行状态跟踪及审计。一套完善且透明化的数据操作日志,可帮助我们回溯并审查每个环节,大幅提高整体流程安全性和合规性。在实战中,这些措施不仅显著提高了系统联动效率,也大大增强了可靠性的保障。 企业微信与OA系统接口开发配置

调用旺店通·旗舰奇门接口获取并加工数据

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

接口概述

接口wdt.wms.stockout.transfer.querywithdetail主要用于查询调拨出库单的详细信息。该接口采用POST请求方式,支持多种查询参数和分页功能,以确保数据查询的灵活性和高效性。

元数据配置

以下是该接口的元数据配置:

{
  "api": "wdt.wms.stockout.transfer.querywithdetail",
  "method": "POST",
  "number": "order_no",
  "id": "stockout_id",
  "idCheck": true,
  "request": [
    {
      "field": "params",
      "label": "查询参数",
      "type": "object",
      "describe": "查询参数",
      "children": [
        {
          "field": "start_time",
          "label": "开始时间",
          "type": "string",
          "describe": "起始时间,若无出库单号或调拨单号,则为必填。",
          "value": "{{LAST_SYNC_TIME|datetime}}",
          "parent": "params"
        },
        {
          "field": "end_time",
          "label": "结束时间",
          "type": "string",
          "describe": "结束时间,上同开始时间",
          "value": "{{CURRENT_TIME|datetime}}",
          "parent": "params"
        },
        {
          ...
        }
      ]
    },
    ...
  ],
  ...
}

请求参数解析

  1. params: 查询参数对象,包含多个子字段:

    • start_time: 起始时间,格式为字符串。通常使用上次同步时间({{LAST_SYNC_TIME|datetime}})作为起点。
    • end_time: 结束时间,格式为字符串。通常使用当前时间({{CURRENT_TIME|datetime}})作为终点。
    • warehouse_no: 仓库编号,用于指定查询的仓库。
    • src_order_no: 调拨单号,可选参数。
    • stockout_no: 出库单号,可选参数。
    • position: 是否按照货位分组,默认值为"0"(否)。
    • status: 出库单状态,默认值为"110"(已完成)。
  2. pager: 分页对象,包含两个子字段:

    • page_size: 每页记录数,默认值为50。
    • page_no: 页码,从0开始计数。

数据请求与清洗

在调用接口后,我们会得到一个包含调拨出库单详细信息的响应数据。接下来需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入操作。

  1. 校验数据完整性 确保每条记录都包含必要的字段,如order_nostockout_id。如果某些记录缺失关键字段,可以选择丢弃或记录日志以便后续处理。

  2. 转换时间格式 将响应中的日期时间字段转换为统一的格式,例如ISO8601标准。这有助于后续的数据处理和分析。

  3. 过滤无效数据 根据业务需求过滤掉不符合条件的数据。例如,只保留状态为“已完成”的出库单记录。

  4. 分页处理 如果响应数据量较大,需要根据分页信息进行多次请求,并合并所有页的数据。

示例代码

以下是一个示例代码片段,用于调用接口并处理响应数据:

import requests
import json
from datetime import datetime

# 配置请求参数
params = {
    'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'warehouse_no': 'WH001',
    'status': '110'
}
pager = {
    'page_size': 50,
    'page_no': 0
}

# 发起POST请求
response = requests.post(
    url='https://api.example.com/wdt.wms.stockout.transfer.querywithdetail',
    headers={'Content-Type': 'application/json'},
    data=json.dumps({'params': params, 'pager': pager})
)

# 处理响应数据
if response.status_code == 200:
    data = response.json()
    for record in data['records']:
        # 校验并清洗数据
        if 'order_no' in record and 'stockout_id' in record:
            # 转换时间格式
            record['start_time'] = datetime.strptime(record['start_time'], '%Y-%m-%d %H:%M:%S').isoformat()
            record['end_time'] = datetime.strptime(record['end_time'], '%Y-%m-%d %H:%M:%S').isoformat()
            # TODO: 更多清洗逻辑
else:
    print(f"Error: {response.status_code}")

通过上述步骤,我们可以高效地从旺店通·旗舰奇门系统中获取所需的调拨出库单详细信息,并对其进行初步加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据集成的效率,也确保了数据质量和一致性。 用友BIP接口开发配置

使用轻易云数据集成平台将数据转换并写入金蝶云星空API

在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台实现这一过程。

元数据配置解析

元数据配置是整个ETL过程的核心。以下是针对调拨出库单的数据写入金蝶云星空API的元数据配置:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 20,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"DBCKD"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FPickOrgId","label":"领用组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"1"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{consign_time|datetime}}"},
    {"field":"FCustId","label":"客户","type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
    {"field": "FDeptId", "label": "领料部门", "type": "string", "describe": "基础资料", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "BM000032"},
    {"field": "FPickerId", "label": "领料人", "type": "string", "describe": "基础资料", 
      ...

数据转换与写入流程

  1. 字段映射与解析

    • FBillNo(单据编号):直接映射为源数据中的order_no
    • FBillTypeID(单据类型):使用ConvertObjectParser解析器,将固定值DBCKD转换为目标系统可识别的格式。
    • FStockOrgId(库存组织)FPickOrgId(领用组织):同样使用ConvertObjectParser解析器,将固定值100转换。
    • FDate(日期):通过模板引擎将源数据中的时间字段consign_time格式化为目标系统所需的日期格式。
  2. 明细信息处理

    • FEntity(明细信息):这是一个数组结构,包含多个子字段,如物料编码、实发数量、发货仓库等。
      • FMaterialId(物料编码):使用模板引擎从源数据中提取detail_list.spec_no并进行转换。
      • FQty(实发数量):直接映射为源数据中的detail_list.goods_count
      • FAmount(总成本)FPrice(成本价):根据业务需求计算或直接映射。
  3. 特殊字段处理

    • FOwnerTypeIdHead(货主类型)FOwnerIdHead(货主):这些字段需要使用解析器进行多类别基础资料转换。
    • 备注字段处理:例如,FNote和明细中的备注字段,需要从源数据中提取相应内容并进行多行文本处理。
  4. 请求参数构建与发送: 根据上述配置,构建最终的请求参数,并通过HTTP POST方法调用金蝶云星空API接口:

{
  ...
  {
    field: 'FormId',
    label: '业务对象表单Id',
    type: 'string',
    describe: '必须填写金蝶的表单ID如:PUR_PurchaseOrder',
    value: 'STK_MisDelivery'
  },
  {
    field: 'IsAutoSubmitAndAudit',
    label: '提交并审核',
    type: 'bool',
    value: true
  },
  {
    field: 'IsVerifyBaseDataField',
    label: '验证基础资料',
    type: 'bool',
    describe: '是否验证所有的基础资料有效性,布尔类,默认false(非必录)',
    value: true
  },
  {
      field: 'Operation',
      label: '执行的操作',
      type: 'string',
      value: 'Save'
  }
}

数据校验与错误处理

在实际操作中,还需要对每个字段进行严格的数据校验,以确保所有必填项都已正确填写,并且所有基础资料都能被目标系统识别。如果出现错误,应及时捕获并记录日志,以便后续排查和修正。

通过上述步骤,我们可以高效地将已经集成的源平台数据进行ETL转换,并成功写入到金蝶云星空API接口,从而实现不同系统间的数据无缝对接。 如何对接用友BIP接口

更多系统对接方案