数据集成与ETL转换:金蝶到领星ERP实现

  • 轻易云集成顾问-钟敏甜

金蝶采购入库单对接领星ERP:从数据抽取到集成的技术要点

在实际业务场景中,实现金蝶云星空系统与领星ERP的无缝对接,对于确保数据传输准确、高效和稳定至关重要。本文将分享一个实际操作案例,解析如何通过轻易云平台完成金蝶采购入库单到领星ERP入库单的数据集成。

我们使用了金蝶云星空提供的executeBillQuery API接口获取采购入库单数据,并调用领星ERP的/erp/sc/routing/storage/storage/orderAdd接口进行数据写入。以下是这个过程中关键技术细节和挑战解决方案:

  1. 定时抓取与批量处理 通过设置定时任务可靠地抓取金蝶云星空中的采购入库单信息,这是确保实时性和完整性的基础。在高并发环境下,我们需要注意API限流问题,通过分页请求来分段获取大批量数据。

  2. 自定义转换逻辑 为适应不同系统间的数据结构差异,我们设计了一套自定义的转换逻辑,以满足特定业务需求。例如,针对字段名称差异和枚举值的不一致性进行了映射规则配置,使得两端系统能够正确理解彼此的数据格式。

  3. 高吞吐量写入能力 借助平台支持的大容量、高性能写入功能,大幅提升了海量数据向领星ERP快速流转效率。这一特性尤其适用于每日交易频繁且需实时更新库存记录等情境,有效缩短了延迟时间。

  4. 异常处理与重试机制 在对接过程中,如果发生异常情况(如网络波动或外部服务不可用等),实现了一套完备的错误捕捉及自动重试机制,以降低人工干预成本并保证任务最终成功执行。此外,还结合告警通知功能,及时反馈潜在的问题给运维人员。

  5. 集中监控与日志记录 利用集中式监控及日志记录功能,全程追踪每个集成流程步骤,包括API请求响应、状态变化及性能指标等。不仅使调试更为方便,也为后续优化提供了全面详实的数据支撑。

总而言之,该案例展示了如何利用轻松配置的平台工具,高效、透明地实现跨系统间复杂数据整合。而这些技术要点,将成为您推进类似项目实践的重要参考依据。 用友与外部系统接口集成开发

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

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

接口配置与请求参数

为了成功调用金蝶云星空的executeBillQuery接口,我们需要配置相应的元数据。以下是关键的配置项:

  • API: executeBillQuery
  • Method: POST
  • FormId: STK_InStock(业务对象表单ID)
  • FieldKeys: 需查询的字段key集合
  • FilterString: 过滤条件,用于筛选特定的数据
  • Pagination: 分页参数,包括每页大小和起始行索引

请求参数示例

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FInStockEntry_FEntryId",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "request": [
    {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_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_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"},
    {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"},
    {"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
    {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"},
    {"field": "FilterString", 
        "label": "过滤条件", 
        "type": "string", 
        "describe": 
            "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", 
        "value":
            "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FPurchaseOrgId.fnumber = '107'"},
    {"field": 
        "FieldKeys",
        "label":
            "需查询的字段key集合",
        "type":
            "array",
        "describe":
            "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber",
        "parser":
            {"name":
                "ArrayToString",
                "params":
                    "}"
             }
         },
     {"field":
          FormId,
          label:
              业务对象表单ID,
          type:
              string,
          describe:
              必须填写金蝶的表单ID如:PUR_PurchaseOrder,
          value:
              STK_InStock}
   ]
}

数据请求与清洗

在发送请求后,系统会返回一批原始数据。此时,我们需要对这些数据进行清洗和初步加工,以确保其符合目标系统(如领星入库单)的要求。

  1. 字段映射:将源系统中的字段映射到目标系统中。例如,将FBillNo映射为目标系统中的“单据编号”。
  2. 数据过滤:根据业务需求,过滤掉不必要的数据。例如,只保留状态为“已审核”的单据。
  3. 格式转换:将日期、金额等字段转换为目标系统所需的格式。

示例代码

以下是一个简单的数据清洗示例代码:

import requests
import json

# 配置请求头和URL
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}

# 构建请求体
payload = {
    'FormId': 'STK_InStock',
    'FieldKeys': 'FBillNo,FDate,FDocumentStatus',
    'FilterString': f"FApproveDate>='{last_sync_time}' and FPurchaseOrgId.fnumber = '107'",
    'Limit': page_size,
    'StartRow': start_row
}

# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 数据清洗与转换
    cleaned_data = []

    for entry in data['Result']:
        if entry['FDocumentStatus'] == 'C':
            cleaned_entry = {
                'bill_no': entry['FBillNo'],
                'date': entry['FDate'],
                'status': entry['FDocumentStatus']
            }
            cleaned_data.append(cleaned_entry)

else:
    print(f'Error: {response.status_code}')

# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))

总结

通过上述步骤,我们可以成功调用金蝶云星空的executeBillQuery接口获取采购入库单数据,并对其进行初步加工。这为后续的数据转换与写入奠定了坚实基础。在实际应用中,可以根据具体业务需求进一步调整和优化这些步骤。 如何开发金蝶云星空API接口

数据集成与ETL转换:从金蝶采购入库单到领星ERP

在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将金蝶采购入库单的数据转换为领星ERPAPI接口所能接收的格式,并最终写入目标平台。

API接口配置与元数据解析

在本案例中,我们需要将金蝶采购入库单的数据通过ETL(提取、转换、加载)过程,转化为领星ERP系统所需的格式。目标API接口为/erp/sc/routing/storage/storage/orderAdd,请求方法为POST。

元数据配置如下:

{
  "api": "/erp/sc/routing/storage/storage/orderAdd",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "merge",
    "field": "FBillNo",
    "bodyName": "reftables",
    "header": ["FBillNo", "FSupplierId_FNumber", "FStockId_FNumber", "FSupplyAddress"],
    "body": ["FMaterialId_FNumber", "FRealQty", "FMustQty", "FPrice"]
  },
  "request": [
    {"label":"仓库id","field":"wid","type":"string"},
    {"label":"系统仓库","field":"sys_wid","type":"string","value":"{FStockId_FNumber}"},
    {"label":"状态","field":"type","type":"string","value":"2"},
    {
      "label":"product_list",
      "field":"product_list",
      "type":"array",
      "value":"reftables",
      "children":[
        {"parent":"product_list","label":"sku","field":"sku","type":"string","value":"{{reftables.FMaterialId_FNumber}}"},
        {"parent":"product_list","label":"良品数量","field":"good_num","type":"string","value":"{{reftables.FRealQty}}"},
        {"parent":"product_list","label":"次品数量","field":"bad_num","type":"string"},
        {"parent":"product_list","label":"单价","field":"price","type":"string","value":"{{reftables.FPrice}}"}
      ]
    },
    {"label":"备注","field":"remark","type":"string","value":"{FBillNo}\\{FSupplierId_FNumber}"}
  ]
}

ETL转换过程详解

  1. 提取(Extract)

    • 从金蝶系统中提取采购入库单的数据。此阶段主要涉及对源数据的读取和初步清洗,确保数据完整性和准确性。
  2. 转换(Transform)

    • 根据元数据配置,对提取的数据进行字段映射和格式转换。
    • 在此案例中,需特别注意以下字段的处理:
      • sys_wid:映射自FStockId_FNumber
      • product_list:这是一个数组类型字段,需要将多个物料信息映射到该数组下,包括SKU、良品数量、次品数量和单价。
      • remark:由FBillNoFSupplierId_FNumber拼接而成,用于记录备注信息。
  3. 加载(Load)

    • 将转换后的数据通过POST请求写入到领星ERP系统的指定API接口。
    • 请求体结构示例如下:
{
  "wid": "<仓库ID>",
  "sys_wid": "<系统仓库ID>",
  "type": "2",
  "product_list": [
    {
      "sku": "<物料编码>",
      "good_num": "<良品数量>",
      ...
    }
  ],
  ...
}

实际应用中的注意事项

  • 字段校验与异常处理: 在实际应用中,需要对每个字段进行严格校验,确保数据符合目标平台的要求。例如,SKU编码必须存在且有效,数量字段必须为正数等。同时,对于异常情况(如网络故障、API返回错误等),需要有相应的处理机制,以保证数据传输的可靠性。

  • 性能优化: 对于大批量数据传输,可以考虑分批次处理,以减少单次请求的数据量,从而提高传输效率和成功率。此外,可以利用异步处理机制,提高整体处理速度。

通过以上步骤,我们可以高效地将金蝶采购入库单的数据转换并写入到领星ERP系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,也极大地提高了工作效率。 企业微信与OA系统接口开发配置

更多系统对接方案