分页与限流:金蝶与旺店通系统集成的最佳实践

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

金蝶云星空与旺店通·企业奇门的系统对接案例分享

在系统集成项目中,高效且精准地传递数据是至关重要的一环。本文将聚焦于一个具体的技术案例:如何实现金蝶云星空的数据集成到旺店通·企业奇门,并基于委外退料申请单自动生成采购退货单。在这个过程中,我们主要利用了金蝶云星空接口executeBillQuery获取数据,而后通过旺店通·企业奇门API wdt.purchase.return.push进行写入操作。

首先,为确保整个数据集成流程不漏单,定时、可靠地抓取金蝶云星空接口数据成为关键一环。我们使用调度任务定期调用金蝶云星空executeBillQuery,每次调用都精确记录当前处理的位置,以便在下一次调用时继续抓取未处理的数据。这不仅保证了高效性,还能最大程度避免遗漏任何订单。

在实际应用中,大量的订单需要快速、安全地写入到旺店通·企业奇门。这就要求我们优化批量数据插入的方法,通过分块写入机制,将大批量的数据拆分为若干小块,并行处理,从而加快整体速度。此外,在每次批量操作完成后,实施严格的状态监控和错误重试机制,对失败的记录进行智能重试,这种方式极大程度上提升了系统对接的成功率。

值得注意的是,金蝶云星空与旺店通·企业奇门之间存在一定的数据格式差异。例如,字段名称、类型以及结构可能并不完全一致。在这种情况下,自定义映射规则显得尤为重要。我们通过轻易云平台提供的多样化映射工具,根据业务需求灵活调整映射关系,使不同系统间的数据能够顺利转换并正确存储。

分页和限流问题也是系统对接过程中不可忽视的一部分。特别是在大量历史或者实时交易数据同步场景下,如果一次性拉取过多数据容易导致接口响应超时或网速受限。因此,在实现方案中,通过参数设置合理控制分页大小,以及采用频繁的小规模请求减少压力,可以有效应对这些挑战。同时,对于临时出现的大流量请求情况,还设计了一套降级策略,在保障主业务正常运行前提下逐步恢复其他服务功能。

最后,实现实时监控和日志记录同样是必不可少的一环。一旦某个步骤发生异常,可借助日志迅速定位问题来源,并启动预设的应急响应措施。这种全方位、多层次的监控手段,为进一步优化和维护打下坚实基础,也确保整个过程始终处于可控范围内。

钉钉与MES系统接口开发配置

调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,以获取委外退料申请单的数据,并进行初步加工。

配置元数据

首先,我们需要根据提供的元数据配置来设置API请求参数。以下是关键字段及其描述:

  • api: executeBillQuery
  • method: POST
  • number: FBillNo
  • id: {random}
  • name: FBillNo
  • idCheck: true

请求字段包括但不限于:

[
  {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"},
  {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
  {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态 \n暂存:Z \n创建:A \n审核中:B\n已审核:C","value":"FDocumentStatus"},
  {"field":"FBillTypeID_Fnumber","label":"单据类型","type":"string","describe":"标准退料申请:TLSQDD01 SYS\n资产退回申请单:TLSQDD02 SYS\n委外退料申请单:TLSQDD03 SYS\n现购退料申请:TLSQDD0D04 SYS\nVMI退料由请:TLSQDD05 SYS","value":"FBillTypeID.Fnumber"},
  {"field":"FDate","label":"申请日期","type":"string","describe":"申请日期","value":"FDate"}
]

请求参数设置

在调用executeBillQuery接口时,我们需要设置请求参数,包括分页参数和过滤条件等。以下是一个示例请求体:

{
  "FormId": "PUR_MRAPP",
  "FieldKeys": "FID,FBillNo,FDocumentStatus,FBillTypeID.Fnumber,FDate",
  "FilterString": "FApproveDate>='2023-01-01'",
  "Limit": "100",
  "StartRow": "0"
}

调用API接口

使用轻易云平台的可视化界面,我们可以配置上述请求参数,并通过POST方法调用金蝶云星空的executeBillQuery接口。具体步骤如下:

  1. 配置API节点

    • 在轻易云平台上添加一个新的API节点。
    • 设置API URL为金蝶云星空的接口地址。
    • 配置HTTP方法为POST。
  2. 设置请求头和请求体

    • 请求头通常包括Content-Type等信息。
    • 请求体按照上述示例进行配置,确保包含必要的字段和过滤条件。
  3. 执行并获取响应

    • 执行API调用,获取返回的数据。
    • 响应数据通常为JSON格式,需要进一步解析和处理。

数据清洗与加工

获取到原始数据后,需要对其进行清洗和初步加工,以便后续的数据转换与写入。常见的数据清洗操作包括:

  1. 字段映射与转换

    • 将金蝶云星空返回的数据字段映射到目标系统所需的字段。
    • 根据业务需求,对某些字段进行格式转换或单位换算。
  2. 数据过滤与校验

    • 根据业务规则,过滤掉不符合条件的数据。
    • 对关键字段进行校验,如单据编号、日期格式等。
  3. 日志记录与错误处理

    • 对每次API调用和数据处理过程进行日志记录,便于追踪和调试。
    • 针对可能出现的错误情况(如网络异常、数据格式错误等)进行相应的处理和告警。

示例代码

以下是一个简单的Python示例代码,用于调用executeBillQuery接口并处理返回的数据:

import requests
import json

url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
    "FormId": "PUR_MRAPP",
    "FieldKeys": "FID,FBillNo,FDocumentStatus,FBillTypeID.Fnumber,FDate",
    "FilterString": "FApproveDate>='2023-01-01'",
    "Limit": "100",
    "StartRow": "0"
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()

# 数据清洗与加工
processed_data = []
for item in data:
    processed_item = {
        '单据编号': item['FBillNo'],
        '单据状态': item['FDocumentStatus'],
        '单据类型': item['FBillTypeID.Fnumber'],
        '申请日期': item['FDate']
    }
    processed_data.append(processed_item)

print(processed_data)

通过上述步骤,我们可以高效地从金蝶云星空获取委外退料申请单的数据,并进行初步加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据处理的透明度和效率,也确保了业务流程的顺畅运行。 泛微OA与ERP系统接口开发配置

使用轻易云数据集成平台将金蝶委外退料申请单转换为旺店通采购退货单

在数据集成过程中,ETL(Extract, Transform, Load)是一个至关重要的环节。本文将深入探讨如何利用轻易云数据集成平台,将来自金蝶的委外退料申请单数据转换为旺店通·企业奇门API接口所能接收的采购退货单格式,并最终写入目标平台。

1. 数据请求与清洗

在进行数据转换之前,首先需要从源系统(金蝶)中提取委外退料申请单的数据。假设我们已经完成了这一阶段,并且得到了清洗后的原始数据。接下来,我们重点关注如何将这些数据转换为目标平台所需的格式。

2. 数据转换与写入

为了将金蝶的委外退料申请单数据转换为旺店通·企业奇门API接口所需的格式,我们需要配置元数据并进行相应的字段映射和数据处理。

元数据配置解析

以下是我们需要配置的元数据:

{
  "api": "wdt.purchase.return.push",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "FBillNo,FStockId_Fnumber",
    "bodyName": "details",
    "bodySum": ["FMRAPPQTY"],
    "header": ["FBillNo", "FStockId_Fnumber", "FSUPPLIERID_Fnumber"],
    "body": ["FMATERIALID_Fnumber", "FMRAPPQTY"]
  },
  "request": [
    {
      "field": "provider_no",
      "label": "供应商编号",
      "type": "string",
      "describe": "供应商编号",
      "value": "{FSUPPLIERID_Fnumber}"
    },
    {
      "field": "outer_no",
      "label": "外部单号",
      "type": "string",
      "describe": "外部单号",
      "value": "{FBillNo}{FStockId_Fnumber}"
    },
    {
      "field": "warehouse_no",
      "label": "出库仓库编号",
      ...
字段映射与处理
  1. 供应商编号(provider_no)

    • 来源字段:FSUPPLIERID_Fnumber
    • 映射关系:直接映射到provider_no
  2. 外部单号(outer_no)

    • 来源字段:FBillNoFStockId_Fnumber
    • 映射关系:拼接后映射到outer_no
  3. 出库仓库编号(warehouse_no)

    • 来源字段:FStockId_Fnumber
    • 映射关系:直接映射到warehouse_no
  4. 明细列表节点(detail_list)

    • 包含多个子字段,如商家编码、退货数量等
    • 每个子字段都需要从源数据中的相应字段进行映射
数据处理逻辑

在进行具体的数据处理时,我们需要遵循以下步骤:

  1. 合并操作:根据元数据中的配置,将FBillNoFStockId_Fnumber作为合并键,合并明细行。
  2. 汇总数量:对相同物料的退货数量进行汇总,确保每种物料只有一条记录。
  3. 构建请求体:按照旺店通·企业奇门API接口要求,构建请求体,包括头信息和明细信息。

以下是一个示例代码片段,用于展示如何进行上述处理:

def transform_data(source_data):
    transformed_data = {
        'provider_no': source_data['FSUPPLIERID_Fnumber'],
        'outer_no': f"{source_data['FBillNo']}{source_data['FStockId_Fnumber']}",
        'warehouse_no': source_data['FStockId_Fnumber'],
        'detail_list': []
    }

    details = {}

    for item in source_data['details']:
        key = item['FMATERIALID_Fnumber']
        if key not in details:
            details[key] = {
                'spec_no': item['FMATERIALID_Fnumber'],
                'num': item['FMRAPPQTY'],
                'detail_remark': source_data['FBillNo']
            }
        else:
            details[key]['num'] += item['FMRAPPQTY']

    transformed_data['detail_list'] = list(details.values())

    return transformed_data
API调用与写入

最后一步是通过HTTP POST方法将转换后的数据推送到旺店通·企业奇门API接口:

import requests

def push_to_wdt(transformed_data):
    url = 'https://api.wangdian.cn/openapi2/wdt.purchase.return.push'
    headers = {'Content-Type': 'application/json'}

    response = requests.post(url, json=transformed_data, headers=headers)

    if response.status_code == 200:
        print("Data pushed successfully")
    else:
        print(f"Failed to push data: {response.text}")

# Example usage
source_data = ... # 从金蝶提取并清洗后的原始数据
transformed_data = transform_data(source_data)
push_to_wdt(transformed_data)

通过以上步骤,我们可以实现从金蝶委外退料申请单到旺店通采购退货单的数据转换和写入。这一过程不仅确保了不同系统之间的数据无缝对接,也提升了业务流程的自动化程度和效率。 金蝶与外部系统打通接口

更多系统对接方案