使用轻易云实现金蝶云与马帮系统的ETL流程分享

  • 轻易云集成顾问-胡秀丛

金蝶云星空数据集成到马帮:组装单(子项)对接方案分享

在企业应用系统的日常运营中,金蝶云星空与马帮作为重要的数据管理和物流平台,各自承担了大量关键任务。然而,将这两个平台无缝集成,以实现高效的数据交互,并不是一个简单的任务。本文将介绍如何使用轻易云数据集成平台,在实际项目中成功完成金蝶云星空至马帮的组装单(子项)数据对接。

为了确保每个环节清晰易懂,我们借助轻易云提供的全透明可视化操作界面,通过executeBillQuery接口从金蝶云星空获取订单数据,并通过warehouse-do-add-storage-out接口将处理后的数据批量写入到马帮。这不仅提高了业务的时效性,同时也提升了整体效率和稳定性。

我们采用以下技术要点来实现该目标:

  1. 定时可靠抓取:利用计划任务功能定时调用金蝶云星空API executeBillQuery,确保及时、准确地抓取最新订单信息。
  2. 分页与限流处理:针对API调用过程中可能遇到的大量数据分页以及访问限流问题,设置自动分页逻辑及重试机制,以保证数据完整性。
  3. 实时监控与告警:通过集中监控系统实时跟踪每次执行状态,对异常情况进行即时告警并触发相应处理流程。
  4. 自定义转换逻辑:根据具体业务需求,对从金蝶获取的数据进行格式转换,使其符合马帮所需格式,从而顺利写入仓库系统。
  5. 错误重试机制:在调用马帮warehouse-do-add-storage-out API过程中,如果遇到网络或其他异常情况,启用错误重试机制以确保最终成功写入。

下一步内容将详细描述集成配置过程,包括如何灵活运用各类工具和特性,实现高效、稳定、安全的数据传输。 如何开发企业微信API接口

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

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

接口配置与请求参数

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

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FSubEntity_FDetailID",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "request": [
    {"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":"FOwnerTypeIdHead","label":"成品货主类型","type":"string","value":"FOwnerTypeIdHead"},
    {"field":"FOwnerIdHead_FNumber","label":"成品货主","type":"string","value":"FOwnerIdHead.FNumber"},
    {"field":"FAffairType","label":"事务类型","type":"string","value":"FAffairType"},
    {"field":"FEE","label":"费用","type":"string","value":"FEE"},
    {"field":"FDeptID_FNumber","label":"部门","type":"string","value":"FDeptID.FNumber"},
    {"field":"FNote","label":"备注","type":"","value":""},
    // ...省略其他字段
  ],
  "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 FAFFAIRTYPE = 'Assembly'"
   },
   // ...省略其他字段
 ]
}

请求与响应处理

  1. 构建请求:根据元数据配置,构建HTTP POST请求。请求体包含需要查询的字段、分页参数以及过滤条件。

  2. 发送请求:通过HTTP客户端发送请求到金蝶云星空API。

  3. 处理响应:解析响应数据,检查是否有错误信息。如果成功,提取所需的数据字段。

以下是一个示例代码片段,用于演示如何构建和发送请求:

import requests
import json

url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
  # 根据元数据配置构建payload
}

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

if response.status_code == 200:
    data = response.json()
    # 对返回的数据进行处理
else:
    print(f"Error: {response.status_code}")

数据清洗与转换

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

  • 字段映射:将源系统的字段名映射到目标系统的字段名。
  • 格式转换:例如,将日期字符串转换为标准日期格式。
  • 值替换:根据业务规则替换特定字段的值。

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

def clean_data(raw_data):
    cleaned_data = []

    for item in raw_data:
        cleaned_item = {
            'bill_no': item['FBillNo'],
            'status': item['FDocumentStatus'],
            'date': parse_date(item['FDate']),
            # ...其他字段处理
        }
        cleaned_data.append(cleaned_item)

    return cleaned_data

def parse_date(date_str):
    # 假设日期格式为 YYYY-MM-DD
    return datetime.strptime(date_str, '%Y-%m-%d')

实践案例

假设我们需要从金蝶云星空中获取组装单(子项)的相关信息,并将其集成到马帮系统中。首先,我们通过executeBillQuery接口获取原始数据,然后对其进行清洗和转换,最后将处理后的数据写入马帮系统。

  1. 调用API获取原始数据

    • 配置请求参数,包括需要查询的字段、分页参数和过滤条件。
    • 发送HTTP POST请求并接收响应。
  2. 清洗与转换数据

    • 映射字段名、格式转换和值替换。
    • 确保所有必需字段都已正确填充,并符合目标系统的要求。
  3. 写入目标系统

    • 构建目标系统所需的数据结构。
    • 调用目标系统API,将清洗后的数据写入。

通过上述步骤,我们可以实现从金蝶云星空到马帮系统的数据无缝对接。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。 企业微信与ERP系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入马帮API接口的技术案例

在数据集成生命周期的第二步,我们需要将已经从源平台(如金蝶)集成的数据进行ETL转换,转为目标平台(如马帮API接口)所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何使用轻易云数据集成平台完成这一过程。

元数据配置解析

首先,我们需要理解元数据配置,这将指导我们如何将数据从源平台转换并写入目标平台。以下是元数据配置的详细解析:

{
  "api": "warehouse-do-add-storage-out",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "warehouseName",
      "label": "仓库名称",
      "type": "string",
      "value": "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code={FStockIDSETY_FNumber}"
    },
    {
      "field": "employeeName",
      "label": "员工名称",
      "type": "string",
      "value": "金蝶单据同步"
    },
    {
      "field": "remark",
      "label": "备注",
      "type": "string",
      "value": "{FDescriptionSETY}"
    },
    {
      "field": "data",
      "label": "出库商品",
      "type": "array",
      "value": "goods_list",
      "children": [
        {
          "field": "stockSku",
          "label": "库存sku",
          "type": "string",
          "value": "{{goods_list.FMaterialIDSETY_FNumber}}"
        },
        {
          "field": "quantity",
          "label": "数量",
          "type": "string",
          "value": "{{goods_list.FQtySETY}}"
        }
      ]
    }
  ],
  ...
}

数据请求与清洗

在ETL过程中,首先要从源系统请求并清洗数据。这里我们假设已经完成了这一步,获取了如下示例数据:

{
  "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code=0010A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W5X6Y7Z8A9B0C1D2E3F4G5H6I7J8K9L0M1N2O3P4Q5R6S7T8U9V0W1X2Y3Z4A5B6C7D8E9F0G1H2I3J4K5L6M7N8O9P0Q1R2S3T4U5V6W7X8Y9Z0A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W...
}

数据转换与写入

接下来,我们需要根据元数据配置,将上述清洗后的数据转换为马帮API接口能够接收的格式。

请求体构建

根据元数据配置,我们构建请求体如下:

{
  // 仓库名称通过查找集合获取
  // 假设查找到的仓库名称为“仓库一”
  warehouseName: '仓库一',

  // 员工名称直接指定为“金蝶单据同步”
  employeeName: '金蝶单据同步',

  // 从原始数据中提取备注信息
  remark: '这是一个备注信息',

  // 出库商品列表
  data: [
    {
      stockSku: 'SKU12345', // 库存sku
      quantity: '100'       // 数量
    },
    {
      stockSku: 'SKU67890', // 库存sku
      quantity: '200'       // 数量
    }
  ]
}
API调用

最后,通过轻易云提供的API调用功能,将构建好的请求体发送到马帮API接口:

const axios = require('axios');

const requestBody = {
  warehouseName: '仓库一',
  employeeName: '金蝶单据同步',
  remark: '这是一个备注信息',
  data: [
    { stockSku: 'SKU12345', quantity: '100' },
    { stockSku: 'SKU67890', quantity: '200' }
  ]
};

axios.post('https://api.mabang.com/warehouse-do-add-storage-out', requestBody)
     .then(response => {
       console.log('Data successfully sent to 马帮:', response.data);
     })
     .catch(error => {
       console.error('Error sending data to 马帮:', error);
     });

通过上述步骤,我们成功地将从金蝶系统获取的数据经过ETL转换后写入了马帮API接口。这一过程充分利用了轻易云的数据处理能力,实现了不同系统间的数据无缝对接。 用友与CRM系统接口开发配置

更多系统对接方案