实战案例:利用API实现金蝶与管易云系统集成的全过程

  • 轻易云集成顾问-蔡威
### 金蝶云星空数据集成到管易云的技术案例分享 在一个实际应用场景中,我们需要将金蝶云星空系统中的出库申请单逐单查询,并将其数据集成至管易云形成销售订单。为实现这一目标,采用了金蝶云星空的 `ExecuteBillQuery` API 和管易云的 `gy.erp.trade.add` API 进行对接。这一案例不仅展示了API接口调用及数据转换过程中的关键技术点,还提升了业务流程的自动化程度和效率。 首先,在获取金蝶云星空的数据方面,通过定时触发机制可靠地抓取出库申请单信息,并通过处理分页和限流问题,确保每一次请求都能完整、准确地返回所需的数据。这里利用轻易平台提供的集中监控和告警系统,可以实时跟踪这些任务执行状态,一旦发现异常即可立即采取补救措施,避免漏单现象发生。 在获得原始数据后,需要考虑如何处理两大系统之间的数据格式差异。例如,在转换过程中自定义相应逻辑,以适配特定业务需求。同时,可视化的数据流设计工具使得我们能够更直观地管理整个流程,提高配置调整的灵活性。 为了将大量数据高效写入管易云,我们使用批量操作来加快写入速度,同时确保每笔交易记录都经过精确映射并核查。结合错误重试机制,即便遇到瞬时网络问题或API响应失败,也能保证最终一致性及可靠性。此外,通过疑难解答日志及异常检测功能可以快速定位问题源头,从而持续优化整体集成方案性能。 接下来部分内容详述具体实操步骤与代码示例,将进一步解析从如何构建HTTP请求、进行身份认证,到处理复杂业务逻辑等细节,务求为读者呈现一份翔实而专业的技术解决方案。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口ExecuteBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`ExecuteBillQuery`接口来获取出库申请单数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要了解`ExecuteBillQuery`接口的基本配置和调用方式。根据提供的元数据配置,我们可以看到该接口采用POST方法进行数据请求,主要参数如下: - **Limit**: 分页参数,用于控制每次查询的数据量。 - **StartRow**: 分页参数,指定从哪一行开始查询。 - **TopRowCount**: 分页参数,指定查询的最大行数。 - **FilterString**: 过滤条件,用于筛选符合条件的数据。例如:`FSupplierId.FNumber = 'VEN00010' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'`。 - **FieldKeys**: 查询字段列表,指定需要返回的字段。 - **FormId**: 表单ID,这里我们使用的是`STK_OutStockApply`。 以下是一个示例请求体: ```json { "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "0", "TopRowCount": 100, "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'", "FieldKeys": ["FBillNo", "FId", "FMaterialId.FNumber", "FQty"], "FormId": "STK_OutStockApply" } ``` #### 数据请求与清洗 在发送请求后,我们会收到金蝶云星空返回的数据。为了确保数据的准确性和一致性,需要对返回的数据进行清洗和初步加工。这一步骤包括但不限于: 1. **数据格式转换**:将返回的数据转换为标准化格式,以便后续处理。例如,将日期格式统一为ISO8601标准。 2. **字段映射**:根据业务需求,将金蝶返回的字段映射到目标系统所需的字段。例如,将`FBillNo`映射为销售订单号。 3. **异常处理**:处理可能出现的异常情况,如空值、重复值或不符合业务规则的数据。 以下是一个示例代码片段,用于处理返回的数据: ```python def process_response(response): processed_data = [] for item in response['data']: processed_item = { 'order_number': item['FBillNo'], 'material_number': item['FMaterialId.FNumber'], 'quantity': item['FQty'], 'approve_date': convert_to_iso8601(item['FApproveDate']) } processed_data.append(processed_item) return processed_data def convert_to_iso8601(date_str): # 假设date_str格式为'YYYY-MM-DD HH:MM:SS' return date_str.replace(' ', 'T') + 'Z' ``` #### 数据转换与写入 在完成数据清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。这里我们以管易销售订单为例,假设管易系统要求的数据格式如下: ```json { "order_number": "SO12345", "material_number": "MAT001", "quantity": 10, "approve_date": "2023-10-01T12:00:00Z" } ``` 通过轻易云平台,我们可以配置相应的数据转换规则,并使用API将处理后的数据写入管易系统。以下是一个示例配置: ```json { "api": "/api/sales_order", "method": "POST", "data_mapping": { "order_number": "{{order_number}}", "material_number": "{{material_number}}", "quantity": "{{quantity}}", "approve_date": "{{approve_date}}" } } ``` #### 实时监控与日志记录 在整个数据集成过程中,实时监控和日志记录是确保系统稳定运行的重要手段。轻易云平台提供了全面的监控功能,可以实时查看每个环节的数据流动和处理状态。同时,通过日志记录,可以追踪每一次API调用和数据处理过程,方便排查问题和优化流程。 通过以上步骤,我们实现了从金蝶云星空获取出库申请单数据,并将其加工后写入管易销售订单系统。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 将金蝶出库申请单数据转换并写入管易云销售订单API接口 在数据集成过程中,将源平台的数据转换为目标平台可接收的格式是至关重要的一步。本文将详细介绍如何利用轻易云数据集成平台将金蝶出库申请单数据通过ETL(Extract, Transform, Load)流程转换为管易云销售订单API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,通过轻易云平台从金蝶系统中提取出库申请单的数据。该步骤主要包括数据的提取和初步清洗,确保数据完整且无误。 #### 数据转换与写入 接下来,我们进入关键的ETL转换阶段。以下是具体的元数据配置和转换逻辑: ```json { "api": "gy.erp.trade.add", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "platform_code", "label": "平台单号", "type": "string", "value": "{BillNo}" }, { "field": "shop_code", "label": "店铺代码", "type": "string", "value": "_function CASE '{FCustId}' WHEN '002' THEN 'CD0053' WHEN '021' THEN 'CD0032' WHEN '023' THEN 'CD0004' WHEN '025' THEN 'CD0040' WHEN '026' THEN 'CD0043' WHEN '027' THEN 'CD0045' WHEN '028' THEN 'CD0049' WHEN '358' THEN 'CD0046' WHEN 'CO0002' THEN '50010806' WHEN 'CO0003' THEN '50010805' ELSE '50010808' END" }, { "field": "vip_code", "label": "会员代码", "type": "string", "value": "JD001" }, { "field": "warehouse_code", "label": "仓库代码", "type": "string", "value": "_findCollection find F_UQRW_Text from 2d028336-2f80-3a32-9f6d-70cda23b44ad when FNumber={F_UQRW_Base_Number}" }, { "field": "deal_datetime", "label": "拍单时间", "type": "string", "value": "{{Date|datetime}}" }, { "field": "order_type_code", "label": "订单类型", "type": "string", "value":"Other" }, { ... } ] } ``` #### 字段映射与转换逻辑 1. **平台单号 (`platform_code`)**: - 从金蝶出库申请单的`BillNo`字段直接映射到管易云的`platform_code`字段。 2. **店铺代码 (`shop_code`)**: - 使用CASE语句根据`FCustId`字段进行条件判断和映射。例如,当`FCustId`为‘002’时,映射到‘CD0053’。 3. **会员代码 (`vip_code`)**: - 固定值‘JD001’,无需动态映射。 4. **仓库代码 (`warehouse_code`)**: - 使用 `_findCollection` 函数,根据 `F_UQRW_Base_Number` 字段查找相应的仓库代码。 5. **拍单时间 (`deal_datetime`)**: - 使用日期函数 `{{Date|datetime}}` 转换为标准时间格式。 6. **订单类型 (`order_type_code`)**: - 固定值‘Other’。 7. **收货信息**: - 包括收货人姓名、手机号码、省、市、区、详细地址等信息,分别从对应的金蝶字段中提取并映射到管易云API接口字段中。 - 对于详细地址,使用 `_function REPLACE` 函数去除换行符。 8. **商品明细 (`details`)**: - 商品明细是一个数组,每个元素包含商品代码、实际单价、数量和备注等信息。 - 商品代码使用 `_findCollection` 函数从指定集合中查找。 - 数量直接从 `Qty` 字段获取,备注则使用 `Id` 字段。 #### 数据写入 完成上述字段映射和转换后,通过POST方法将处理后的数据发送至管易云API接口 `gy.erp.trade.add`。确保在发送请求前进行ID检查,以避免重复提交或数据冲突。 通过以上步骤,我们实现了从金蝶出库申请单到管易云销售订单的数据无缝对接。利用轻易云数据集成平台强大的ETL功能,可以高效地完成复杂的数据转换任务,提高业务处理效率。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)