调用金蝶云星空接口获取并加工数据的完整流程

  • 轻易云集成顾问-姚缘

金蝶分布式调出单=>旺店通调拨单(组织内)集成案例分享

在实际业务中,企业常常面临不同系统之间数据对接的挑战。本文将聚焦于一个具体的系统集成案例,即金蝶云星空的数据集成到旺店通·企业奇门,通过技术细节展示该方案如何实现无缝连接和高效数据处理。

接口调用与性能优化

在本次项目中,我们主要利用了两个核心API:金蝶云星空的executeBillQuery接口用于获取分布式调出单数据,而旺店通·企业奇门则通过wdt.stock.transfer.push接口进行相应数据写入。这一过程中,为确保高吞吐量的数据能够快速并准确地从金蝶云星空流向旺店通·企业奇门,多线程并行处理机制成为关键。

首先,执行定时任务来可靠地抓取金蝶云星空接口的数据是基础步骤之一。我们设置了一个高效、稳定且按需调整的计划任务,以便周期性地调用executeBillQuery,抓取最新一批次的数据。这些批量获得的数据将在后续过程里迅速而安全地传输至目标系统。

分页与限流策略

鉴于大规模数据传输可能引发的一系列问题,我们制定了一套分页和限流策略,以保证服务端负载均衡和响应速度。在每一次API调用中,通过合理设定分页参数,使得请求压力有效分散,从而避免单个请求导致的大量资源消耗。同时,引入限流控制预防突增访问带来的冲击,对综合系统性能提高起到了显著作用。

数据格式转换及映射

不同系统间往往存在数据结构差异,在此之前,自定义转换逻辑显得尤为重要。针对具体需求,我们设计了一套适配器模式,将从金蝶云星空获取的信息转化为符合旺店通·企业奇门标准的数据格式。例如,根据业务需求对字段名称、类型及内容方法进行了必要调整,并编写自定义脚本完成这个过程,从而确保在各个环节上保持一致性与准确性,保障最终效果达到预期。

结合可视化工具设计整体流程图,更直观展现整个ETL流程,加强管理人员对当前操作状态的掌控力。同时借助集中监控和告警功能,实现实时跟踪各项任务状况,全盘了解潜在风险,并及时采取措施予以解决,有效提升了整套平台运行效率及业务透明度。 打通用友BIP数据接口

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

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口executeBillQuery来获取并加工数据。

接口配置与请求参数

首先,我们需要配置元数据,以便正确调用金蝶云星空的API接口。以下是元数据配置的关键部分:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FSTKTRSOUTENTRY_FEntryID",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "request": [
    {"field":"FSTKTRSOUTENTRY_FEntryID","label":"FEntryID","type":"string","value":"FSTKTRSOUTENTRY_FEntryID"},
    {"field":"FID","label":"实体主键","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
    {"field":"FStockOrgID_FNumber","label":"调入库存组织","type":"string","value":"FStockOrgID.FNumber"},
    {"field":"FDate","label":"日期","type":"string","value":"FDate"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"},
    {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"},
    {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"},
    {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"},
    {"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"},
    {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '7000'"}
  ],
  "otherRequest":[
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}
  ]
}

请求构建与发送

在构建请求时,需要注意以下几个关键点:

  1. API EndpointexecuteBillQuery
  2. HTTP Method:POST
  3. Pagination:每次请求的数据量设置为500条,通过LimitStartRow参数进行分页。
  4. FilterString:用于过滤特定条件的数据,例如:
    FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '7000'

以下是一个示例请求体:

{
  "FormId": "STK_TRANSFEROUT",
  "FieldKeys": ["FID", ...],
  ...
}

数据清洗与转换

获取到原始数据后,下一步是对数据进行清洗和转换。清洗过程包括去除无效字段、处理缺失值等。转换过程则根据业务需求,将数据格式化为目标系统所需的结构。

例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式,或将字段名映射为目标系统中的字段名。

数据写入

经过清洗和转换后的数据,需要写入到目标系统中。在本案例中,目标系统是旺店通调拨单(组织内)。可以通过轻易云平台提供的数据写入功能,将处理好的数据推送到旺店通。

实时监控与日志记录

在整个过程中,实时监控和日志记录是确保数据集成顺利进行的重要手段。轻易云平台提供了全面的监控和日志功能,可以帮助我们及时发现并解决问题。

通过上述步骤,我们可以高效地调用金蝶云星空接口获取并加工数据,为后续的数据处理和写入打下坚实基础。这不仅提升了业务透明度和效率,也确保了不同系统间的数据无缝对接。 打通钉钉数据接口

基于轻易云数据集成平台的ETL转换:金蝶分布式调出单到旺店通调拨单

在数据集成生命周期中,ETL(提取、转换、加载)是一个至关重要的环节。本文将深入探讨如何使用轻易云数据集成平台,将金蝶分布式调出单的数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。

API接口配置与元数据解析

在进行ETL转换之前,首先需要了解目标API接口的配置和元数据。本文涉及的目标平台是旺店通·企业奇门,其API接口为wdt.stock.transfer.push,请求方法为POST。以下是关键元数据配置:

{
  "api": "wdt.stock.transfer.push",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "FBillNo,FSrcStockID_FNumber,FDestStockID_FNumber",
    "bodyName": "detail_list",
    "header": ["FBillNo", "FSrcStockID_FNumber", "FDestStockID_FNumber", "FNOTE"],
    "body": ["FMaterialID_FNumber", "F_UHZG_JJQty", "FEntryNote", "FLOT"]
  },
  "request": [
    {"field":"outer_no","label":"外部单号","type":"string","describe":"外部单据唯一标识,用于避免同一数据重复推送","value":"{FBillNo}"},
    {"field":"from_warehouse_no","label":"源仓库调出仓库","type":"string","describe":"货品被调出的仓库","value":"{FSrcStockID_FNumber}"},
    {"field":"to_warehouse_no","label":"目标仓库调入仓库","type":"string","describe":"货品被调入的仓库","value":"{FDestStockID_FNumber}"},
    {"field":"telno","label":"联系电话","type":"string","describe":"联系电话"},
    {"field":"remark","label":"备注","type":"string","describe":"备注","value":"{FNOTE}"},
    {"field":"transfer_type","label":"调拨类型","type":"string","describe":"0:分步调拨,1:快速调拨,默认是1"},
    {"field":"mode","label":"调拨方式","type":"string","describe":"0:单品调拨,1:货位调拨;默认是0"},
    {"field":"autocheck","label":"是否审核","type":"string","describe":"1:审核,0:不审核,默认为0","value":"1"},
    {
      "field": "skus",
      "label": "货品列表节点",
      "type": "array",
      "describe": "调拨单货品列表节点",
      "children": [
        {"field": "spec_no", "label": "商家编码", "type": "string", 
            "describe": "ERP内单品唯一编码(SKU),代表单品(SKU)所有属性,并且为库存量出入计算最小单元。SKU概念介绍,单击这里,", 
            "value": "{{detail_list.FMaterialID_FNumber}}", 
            "parent": "skus"
        },
        {"field": "from_position_no", 
            "label": "调出货位", 
            "type": "string", 
            "describe": "(当mode为1时必传),不传值读ERP配置【入库开单货位优先级配置】,取默认货位、上一次入库货位、ZANCUN货位其中一个货位。",
            "parent": 'skus'
        },
        {"field": 'to_position_no', 
            "label': '调入货位', 
            "type': 'string', 
            "describe': '(当mode为1时必传),不传值读ERP配置【入库开单货位优先级配置】,取默认货位、上一次入库货位、ZANCUN货位其中一个货位。',
            "parent': 'skus'
        },
        {"field': 'num', 
            "label': '调拨数量', 
            "type': 'string', 
            "describe': '调拨数量',
            "value': '{{detail_list.F_UHZG_JJQty}}',
            'parent': 'skus'
        },
        {"field': 'remark', 
            "label': '明细备注',
            "type': 'string',
            "describe': '货品明细备注',
            "value': '{{detail_list.FEntryNote}}',
            'parent': 'skus'
        },
        {"field':'batch_no',
            'label':'批次{{detail_list.FLOT}}',
            type':'string'}
      ],
      value:'detail_list'
   }
],
otherRequest:[{"field':'transfer_info','label':'调拨单信息','type':'string'}]
}

数据请求与清洗

在ETL流程中,我们首先从金蝶系统中提取原始数据。这些数据可能包含多个字段和记录,需要进行初步清洗和过滤,以确保数据质量和一致性。例如:

{
  FBillNo: 'D20231001',
  FSrcStockID_FNumber: 'WH001',
  FDestStockID_FNumber: 'WH002',
  FNOTE: '',
  detail_list: [
    {
      FMaterialID_FNumber: 'M001',
      F_UHZG_JJQty: 10,
      FEntryNote: '',
      FLOT: ''
    }
  ]
}

数据转换与写入

根据上述元数据配置,我们需要将清洗后的数据转换为目标API所需的格式。具体操作如下:

  1. 映射字段

    • outer_no 对应 FBillNo
    • from_warehouse_no 对应 FSrcStockID_FNumber
    • to_warehouse_no 对应 FDestStockID_FNumber
    • remark 对应 FNOTE
  2. 设置默认值

    • transfer_type 设置为 1(快速调拨)
    • mode 设置为 0(单品调拨)
    • autocheck 设置为 1(审核)
  3. 处理数组字段

    • detail_list 中的每个条目映射到 skus 节点下相应的字段。

最终生成的数据结构如下:

{
  outer_no: 'D20231001',
  from_warehouse_no: 'WH001',
  to_warehouse_no: 'WH002',
  telno: '',
  remark: '',
  transfer_type: '1',
  mode: '0',
  autocheck: '1',
  skus: [
    {
      spec_no: 'M001',
      from_position_no: '',
      to_position_no: '',
      num: '10',
      remark: '',
      batch_no:''
    }
  ]
}

调用API接口

最后一步是将转换后的数据通过HTTP POST请求发送到旺店通·企业奇门API接口。以下是示例代码:

import requests
import json

url = "<API_ENDPOINT>"
headers = {
    'Content-Type': 'application/json'
}

payload = {
    # 上述生成的数据结构
}

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

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

总结

通过以上步骤,我们成功地实现了从金蝶分布式调出单到旺店通·企业奇门API接口的数据ETL转换。这不仅提高了数据处理效率,还确保了不同系统之间的数据一致性和准确性。在实际应用中,可以根据业务需求进一步优化和扩展该流程。 如何开发金蝶云星空API接口

更多系统对接方案