管易云数据集成到金蝶云星空案例分享:wk_采购入库单
在本篇技术文章中,我们将探讨如何通过轻易云数据集成平台,完成管易云与金蝶云星空的数据对接。具体案例为工单 wk_采购入库单
的实际实施方案。在此过程中,重点考虑了以下几个关键问题:如何确保从管易云获取的采购订单数据不遗漏、快速且稳定地写入到金蝶云星空,以及处理两者间的数据格式差异和接口限制。
首先,通过调用管易云提供的API接口 gy.erp.purchase.arrive.get
抓取采购入库单的数据。为了保证抓取过程中的稳定性,我们实现了定时任务机制,并通过轻易平台提供的实时监控与日志记录功能进行全程追踪,有效防止漏单现象。此外,针对接口分页和限流的问题,我们采用了合理的分页策略,并设计了一套异常处理与错误重试机制,在网络或服务异常情况下能自动重新尝试获取数据。
其次,对于大量批量数据的高效率写入至金蝶云星空系统,我们使用其开放API batchSave
进行操作。在这一环节中,特别注意到两个方面,即输入数据格式与金蝶系统要求的一致性,以及大规模并发写操作可能带来的性能瓶颈问题。我们在实际应用中根据特定字段进行了精细化映射,同时使用多线程及分批次提交的方法,以确保整体写入速度和可靠性达到预期标准。
最后,对接过程中遇到了诸如字段匹配错误、网络波动等常见问题,通过灵活调整参数以及充分利用错误日志进行调试,很好地解决了这些挑战,使得整个流程顺畅运行,为业务部门提供了准确及时的数据支持。这一系列优化措施不仅保障了从源头获取到终端存储每一个节点都透明可控,还大幅提升了业务响应速度和准确度。
调用管易云接口gy.erp.purchase.arrive.get获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过调用管易云接口gy.erp.purchase.arrive.get
来获取采购入库单数据,并对其进行初步加工。
接口调用配置
首先,我们需要了解接口的基本配置和请求参数。根据元数据配置,gy.erp.purchase.arrive.get
接口采用POST方法进行调用,主要参数如下:
- 创建时间开始段 (
start_create
) - 创建时间结束段 (
end_create
) - 审核时间开始段 (
start_approve
) - 审核时间结束段 (
end_approve
) - 审核状态 (
status
) - 固定值为1 - 修改时间开始段 (
start_modify
) - 默认值为一天前 - 修改时间结束段 (
end_modify
) - 默认值为当前时间 - 是否返回已作废的入库单数据 (
has_cancel_data
) - 固定值为false
分页参数:
- 分页大小 (
page_size
) - 固定值为100 - 页号 (
page_no
) - 从1开始递增
请求参数构建
在实际操作中,我们需要根据业务需求动态构建请求参数。例如,要获取最近一天内的采购入库单数据,可以设置如下参数:
{
"start_create": "2023-10-01T00:00:00",
"end_create": "2023-10-02T00:00:00",
"start_approve": "",
"end_approve": "",
"status": "1",
"start_modify": "{{DAYS_AGO_1|datetime}}",
"end_modify": "{{CURRENT_TIME|datetime}}",
"has_cancel_data": "false",
"page_size": "100",
"page_no": "{PAGINATION_START_PAGE}"
}
其中,{{DAYS_AGO_1|datetime}}
和{{CURRENT_TIME|datetime}}
是轻易云平台提供的动态变量,用于自动填充相应的日期时间。
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换,以便后续的数据处理和存储。以下是一些常见的数据清洗操作:
- 字段重命名:将原始字段名转换为目标系统所需的字段名。
- 数据类型转换:确保每个字段的数据类型符合目标系统要求。
- 缺失值处理:对于缺失或异常的数据进行填充或剔除。
例如,对于获取到的采购入库单数据,可以进行如下处理:
def clean_and_transform(data):
cleaned_data = []
for record in data:
transformed_record = {
"purchase_code": record["code"],
"created_at": record["create_time"],
"approved_at": record["approve_time"],
# 更多字段转换...
}
cleaned_data.append(transformed_record)
return cleaned_data
实时监控与错误处理
在数据集成过程中,实时监控和错误处理同样至关重要。轻易云平台提供了完善的监控机制,可以实时跟踪每个API调用的状态,并记录任何错误信息。
常见的错误处理策略包括:
- 重试机制:对于临时性错误(如网络超时),可以设置自动重试。
- 告警通知:对于严重错误(如认证失败),可以通过邮件或短信及时通知相关人员。
- 日志记录:详细记录每次API调用的请求和响应,以便后续分析和排查问题。
def api_call_with_retry(api_url, params, max_retries=3):
retries = 0
while retries < max_retries:
response = requests.post(api_url, json=params)
if response.status_code == 200:
return response.json()
else:
retries += 1
time.sleep(2) # 等待2秒后重试
raise Exception("API调用失败")
# 调用示例
try:
data = api_call_with_retry("https://api.guanyiyun.com/gy.erp.purchase.arrive.get", request_params)
except Exception as e:
log_error(e)
send_alert("API调用失败", str(e))
通过以上步骤,我们可以高效地调用管易云接口获取采购入库单数据,并对其进行初步加工,为后续的数据处理打下坚实基础。
轻易云数据集成平台的ETL转换与金蝶云星空API接口对接技术案例
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现这一过程。
API接口配置
首先,我们需要理解金蝶云星空API接口的配置。根据提供的元数据配置,我们使用batchSave
API进行数据写入操作,采用POST方法提交请求。以下是关键字段及其配置细节:
- FBillTypeID: 单据类型,固定值为"RKD01_SYS",通过
ConvertObjectParser
解析。 - FBillNo: 单据编号,直接从源数据中获取。
- FSupplierId: 供应商,通过
ConvertObjectParser
解析供应商编码。 - FDate: 入库日期,通过模板语法从源数据中提取并格式化。
- FInStockEntry: 明细信息,包括物料编码、实收数量、单价、仓库、是否赠品、含税单价、税率和货主等字段。
数据转换与写入
在ETL过程中,需要对源数据进行清洗和转换,以符合目标平台的要求。以下是具体步骤:
-
单据类型与编号
FBillTypeID
字段固定为"RKD01_SYS",无需动态处理。FBillNo
字段直接映射源数据中的单据编号。
-
供应商信息
FSupplierId
字段需要通过ConvertObjectParser
解析,将供应商编码转换为金蝶系统可识别的格式。
-
日期处理
FDate
字段使用模板语法,将源数据中的创建日期格式化为目标平台接受的日期格式。
-
明细信息处理
FInStockEntry
包含多个子字段,每个子字段都需要从源数据中提取并进行相应转换。例如:FMaterialId
: 物料编码,通过ConvertObjectParser
解析。FRealQty
: 实收数量,直接映射源数据中的数量。FPrice
: 单价,直接映射源数据中的单价。FStockId
: 仓库,通过ConvertObjectParser
解析仓库编码。FGiveAway
: 是否赠品,通过条件判断,如果价格为0则标记为赠品。FTaxPrice
: 含税单价,直接映射源数据中的含税单价。FEntryTaxRate
: 税率,直接映射源数据中的税率。FOWNERID
: 货主,固定值为"100"。
-
其他请求参数
- 配置业务对象表单ID(FormId)为"STK_InStock"。
- 设置自动提交并审核(IsAutoSubmitAndAudit)为true。
- 执行操作(Operation)设置为"Save"。
- 验证基础资料有效性(IsVerifyBaseDataField)设置为false(默认值)。
- 系统模块(SubSystemId)设置为21(仓库模块)。
请求示例
以下是一个完整的请求示例:
{
"FormId": "STK_InStock",
"IsAutoSubmitAndAudit": true,
"Operation": "Save",
"IsVerifyBaseDataField": false,
"SubSystemId": 21,
"Model": {
"FBillTypeID": {"FNumber": "RKD01_SYS"},
"FBillNo": "{code}",
"FSupplierId": {"FNumber": "{supplier_code}"},
"FDate": "{{create_date|date}}",
"FInStockEntry": [
{
"FMaterialId": {"FNumber": "{{details.sku_code}}"},
"FRealQty": "{{details.qty}}",
"FPrice": "{{details.price_no_rate}}",
"FStockId": {"FNumber": "{warehouse_code}"},
"FGiveAway": "_function CASE {{details.price}} when 0 then 'true' else 'false' end",
"FTaxPrice": "{{details.price}}",
"FEntryTaxRate": "{{details.tax_rate}}",
"FOWNERID": {"FNumber":"100"}
}
],
"FNoteText": "{note}"
}
}
通过上述配置和请求示例,我们可以实现将源平台的数据成功转换并写入到金蝶云星空系统中。这一过程不仅确保了不同系统间的数据无缝对接,还提升了业务流程的透明度和效率。