管易云与金蝶云星空的高效数据集成案例分享:wk_发货单_销售出库单
在实际运营中,多个业务系统的数据互通对于企业的信息流转至关重要。本次技术案例将着眼于如何通过轻易云数据集成平台,实现管易云(Guanyi ERP)中的发货单数据迅速且无缝地对接到金蝶云星空(Kingdee Cloud Cosmic)的销售出库模块。
方案概述
此项目命名为“wk_发货单_销售出库单”,主要任务是利用管易云提供的API接口gy.erp.trade.deliverys.get
实时抓取最新的发货单数据,并通过优化后的批量写入方法调用金蝶云星空的API batchSave
,以确保大量数据能够快速、准确地写入到目的数据库。在整个过程中,我们还需要应对各种挑战,如分页处理、限流控制以及不同系统间的数据格式差异等问题。
数据获取与处理
-
定时可靠的数据抓取: 利用轻易平台调度功能,每隔固定时间调用接口
gy.erp.trade.deliverys.get
。该接口支持分页查询,因此我们设计了自动化脚本来管理分页请求,确保所有新生成和变动过的发货单都能及时被捕捉。 -
限流处理: 为避免因频繁请求带来的接口调用限制问题,在调度服务中实现了智能延迟机制,有效平衡调取频率和每次硬件性能消耗,使得全流程运行更加稳定可靠。
-
实时监控与日志记录: 全程使用轻易平台自带的监控面板,对每次API调用进行详细记录,不仅跟踪成功与否,还收录返回状态及具体错误信息,从而便于后期审计和快速错漏修正,提高整体效率及安全性。
数据转换与存储
-
格式规范化: 不同系统间往往存在着字段属性及结构上的差异。例如,管易云所输出的是JSON数组,而金蝶要求的是特定XML或专属JSON格式。因此,通过编写映射函数,将原始抓取得到的数据列表,通过简单配置直接转换为目标要求格式,无需额外编码步骤,简化开发流程并减少人为误差可能性。
-
批量快速写入: 对大量数据执行分区策略,并凭借高效缓存队列,一组一组地提交给金蝶API
batchSave
, 实现短时间内大规模、高并发地完成多条记录插入操作。结合重试机制,应对偶尔出现网络延时或宕机引调用源系统管易云接口gy.erp.trade.deliverys.get获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过调用管易云接口gy.erp.trade.deliverys.get
来获取并加工数据,以实现高效的数据集成。
接口配置与请求参数
首先,我们需要配置元数据以便正确调用管易云的API接口。以下是关键的元数据配置:
{
"api": "gy.erp.trade.deliverys.get",
"method": "POST",
"number": "code",
"id": "code",
"pagination": {
"pageSize": 100
},
"idCheck": true,
"omissionRemedy": {
"crontab": "2 */2 * * *",
"takeOverRequest": [
{
"field": "start_delivery_date",
"label": "发货时间开始段",
"type": "string",
"is_required": false,
"describe": null,
"value": "{{DAYS_AGO_1|datetime}}"
},
{
"field": "end_delivery_date",
"label": "发货时间结束段",
"type": "string",
"is_required": false,
"describe": null,
"value": "{{CURRENT_TIME|datetime}}"
}
]
},
...
}
请求参数详解
在实际调用过程中,我们需要构建请求参数。以下是主要的请求参数及其作用:
start_create
和end_create
: 用于指定创建时间的范围。start_delivery_date
和end_delivery_date
: 用于指定发货时间的范围,默认值分别为上次同步时间和当前时间。start_modify_date
和end_modify_date
: 用于指定修改时间的范围。del
: 指定是否返回作废单据,0表示不返回作废单据。delivery
: 发货状态,1表示已发货。code
: 单号,用于唯一标识每个发货单。
分页参数:
page_size
: 每页返回的数据条数,默认为10,这里我们设置为100以提高效率。page_no
: 当前页码,默认为1。
数据获取与清洗
通过上述配置,我们可以发送POST请求到管易云接口以获取发货单数据。以下是一个示例请求体:
{
"start_create": "",
"end_create": "",
...
"page_size": 100,
"page_no": 1
}
在接收到响应后,需要对数据进行清洗和转换。例如,将日期格式统一、去除无效字段等。以下是一个简单的数据清洗示例:
def clean_data(data):
for record in data:
# 转换日期格式
record['delivery_date'] = convert_to_standard_format(record['delivery_date'])
# 去除无效字段
if 'unnecessary_field' in record:
del record['unnecessary_field']
return data
异常处理与重试机制
在实际操作中,可能会遇到网络异常或API限流等问题。我们需要设计合理的异常处理和重试机制。例如,当请求失败时,可以等待一段时间后重试:
import time
def fetch_data_with_retry(api, params, retries=3, delay=5):
for attempt in range(retries):
try:
response = send_request(api, params)
if response.status_code == 200:
return response.json()
else:
raise Exception("API Error")
except Exception as e:
if attempt < retries - 1:
time.sleep(delay)
else:
raise e
数据写入与存储
最后,将清洗后的数据写入目标系统。这一步通常涉及到数据库操作或调用其他系统的API接口。在轻易云平台上,可以通过可视化界面配置目标系统的连接信息,并使用拖拽式操作完成数据写入。
通过以上步骤,我们实现了从管易云获取发货单数据并进行清洗和存储的完整流程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现步骤和关键配置。
配置元数据
在进行ETL转换时,首先需要配置好元数据,以确保数据能够正确映射到金蝶云星空API接口所需的格式。以下是元数据配置的详细说明:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "XSCKD01_SYS"
},
{
...
}
],
...
}
数据字段解析和映射
在上述配置中,request
数组中的每个对象代表一个字段映射。以下是几个关键字段的解析和映射说明:
- FBillTypeID: 单据类型,通过
ConvertObjectParser
解析器将值转换为金蝶系统所需的格式。 - FBillNo: 单据编号,直接从源数据中获取并赋值。
- FDate: 日期,通过模板语法
{{delivery_statusInfo.delivery_date|date}}
从源数据中提取并格式化日期。 - FSaleOrgId: 销售组织,同样使用
ConvertObjectParser
解析器进行转换。
明细信息处理
对于复杂的数据结构,如明细信息,需要使用嵌套数组进行处理:
{
...
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
...
"children": [
{
...
{
"field": "FMaterialID",
...
"value": "{{details.sku_code}}"
},
{
...
"_function CASE {{details.price}} when 0 then 'true' else 'false' end"
}
}
],
...
}
}
在这里,每个明细项都包含多个字段,如物料编码(FMaterialID)、实发数量(FRealQty)等,这些字段通过模板语法从源数据中提取并赋值。
API调用和操作配置
完成元数据配置后,需要设置API调用和操作参数:
{
...
{
...
{
"field": "FormId",
...
"value": "SAL_OUTSTOCK"
},
{
...
{
...
{"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}
}
}
}
}
这些参数确保了数据能够正确提交到金蝶云星空系统,并自动完成审核流程。
数据清洗与转换
在实际操作中,可能需要对源数据进行一定的清洗和转换,以满足目标平台的要求。例如,将日期格式统一、处理空值或异常值等。这些操作可以通过轻易云的数据处理功能实现。
数据写入目标平台
最后一步是将清洗和转换后的数据通过API接口写入到金蝶云星空系统。根据元数据配置,使用POST方法调用batchSave
接口,将整理好的JSON对象发送到目标系统。
通过以上步骤,我们实现了从源平台到目标平台的数据ETL转换,并成功写入金蝶云星空API接口。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。