金蝶云星空数据集成到轻易云平台:查询金蝶收料通知单
在这次技术分享中,我们将详细探讨如何通过轻易云数据集成平台,将金蝶云星空系统中的“收料通知单”数据高效、准确地查询并写入到目标系统。核心任务是利用金蝶云星空的API接口executeBillQuery
来获取所需的数据,并通过轻易云提供的写入API /customer/add
完成整个数据流的闭环。
首先,面对不同系统之间的数据对接,一个常见而挑战性的场景就是处理海量数据的高吞吐量写入需求。通过使用轻易云的平台特性,可以实现大量收料通知单记录快速、高效地被查询和整合。为了确保每一个步骤从源头到目标都不漏掉任何一条重要的信息,利用轻易云集成平台强大的实时监控和告警机制,是保证透明度与稳定性的关键。
其次,实现这一系统对接时,需要特别关注接口调用中的分页和限流问题。在进行大规模数据抓取时,为了避免超出API限制或造成服务器响应延迟,应合理设计分页逻辑,并且确保每次请求均能成功执行。同时,为应对可能发生的数据异常情况,实施有效的错误重试机制尤为重要,以保障整个集成过程的不间断运行。
此外,不同系统之间的数据格式差异也是实施过程中需要解决的一大难题。借助于可视化的数据转换工具,可以自定义映射规则,使得金蝶云星空与轻易之问平台之间的数据格式无缝转换,从而满足具体业务需求。
最后,通过统一视图与控制台管理API资产,有助于企业全面掌握各个接口的使用情况,实现资源优化配置。这不仅提高了开发运维效率,还进一步提升了整体业务流程透明度及可靠性。
接下来部分内容我们会深入拆解每一个技术环节,包括具体操作步骤、代码示例以及注意事项等等,让你对这个案例有更全面深刻认识。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空接口executeBillQuery
来查询收料通知单,并对数据进行初步加工。
接口配置与调用
首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到接口的基本信息如下:
- API:
executeBillQuery
- 方法:
POST
- 分页参数: 每页500条记录
请求字段包括单据编号、单据状态、物料编码等多个字段。以下是一个典型的请求体示例:
{
"FormId": "PUR_ReceiveBill",
"FieldKeys": "FBillNo,FDocumentStatus,FMaterialId.fnumber,FStockOrgId.FNumber,FMaterialName,FDate,FMateriaModel,FBillTypeID.fnumber,FAuxPropId,FOwnerTypeIdHead,FOwnerIdHead,FMateriaType,FActlandQty,FSupplierId.fnumber,FActReceiveQty,FSendBillNo,FStockID.fnumber,FLadBillNo,FStockStatusId,FCarrierId,FBomId,FReceiveDeptId,FStockGroupId,FSupplierLot,FProduceDate,FReceiverId,FExpiryDate,FPurOrgId,FPurDeptId.fnumber,FAuxUnitQty,FPurGroupId,FDemandDeptId,FPurchaserId.fnumber,FCtrlStockInPercent,FNote,FStockInMaxQty,FStockInMinQty,FCreatorId,FInStockJoinQty,FCreateDate,FModifierId,FInStockQty,FIsFree,FModifyDate,FPriceUnitQty,FApproveDate,FApproverId,FDiscountRate,FCancellerId,FTaxNetPrice,FCancelDate,FAmount,FCancelStatus,FEntryTaxRate,FSupplyContact,FPrice,FSettleId",
"FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'",
"Limit": 500,
"StartRow": 0
}
数据请求与清洗
在获取到原始数据后,需要对其进行清洗和初步加工。这一步骤通常包括以下几个方面:
- 字段映射:将金蝶云星空返回的数据字段映射到目标系统所需的字段。例如,将
FMaterialName
映射为目标系统中的material_name
。 - 数据类型转换:确保所有字段的数据类型符合目标系统的要求。例如,将日期字符串转换为标准的日期格式。
- 过滤无效数据:剔除不符合业务规则的数据,例如状态为“已作废”的单据。
以下是一个简单的数据清洗示例代码:
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
if record['FDocumentStatus'] != '作废':
cleaned_record = {
'bill_no': record['FBillNo'],
'status': record['FDocumentStatus'],
'material_code': record['FMaterialId.fnumber'],
'receive_org': record['FStockOrgId.FNumber'],
'material_name': record['FMaterialName'],
'receive_date': convert_date(record['FDate']),
# 更多字段映射...
}
cleaned_data.append(cleaned_record)
return cleaned_data
def convert_date(date_str):
return datetime.strptime(date_str, '%Y-%m-%d')
数据转换与写入
在完成数据清洗后,下一步是将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步骤可能涉及复杂的业务逻辑和规则,例如计算库存数量、更新订单状态等。
def transform_and_write(cleaned_data):
transformed_data = []
for record in cleaned_data:
transformed_record = {
'order_number': record['bill_no'],
'product_code': record['material_code'],
'quantity_received': calculate_quantity(record),
# 更多业务逻辑...
}
transformed_data.append(transformed_record)
write_to_target_system(transformed_data)
def calculate_quantity(record):
return float(record.get('quantity', 0)) * conversion_factor
实时监控与错误处理
在整个过程中,实时监控和错误处理至关重要。轻易云平台提供了全面的监控功能,可以实时跟踪每个步骤的数据流动和处理状态。一旦发生错误,可以快速定位并解决问题。
try:
raw_data = fetch_raw_data()
cleaned_data = clean_data(raw_data)
transform_and_write(cleaned_data)
except Exception as e:
log_error(e)
通过以上步骤,我们实现了从金蝶云星空获取收料通知单并进行初步加工,为后续的数据处理和分析打下了坚实基础。
数据集成生命周期第二步:ETL转换与写入
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为目标平台API接口所能够接收的格式,并最终写入目标平台。
API接口配置与元数据解析
在本案例中,我们的目标是查询金蝶收料通知单,并将其数据写入轻易云集成平台。以下是我们将使用的API接口配置和元数据:
{
"api": "/customer/add",
"method": "POST",
"number": "FBillNo",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"otherRequest": [
{
"field": "FormId",
"label": "业务对象表单Id",
"type": "string",
"describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder"
},
{
"field": "Operation",
"label": "执行的操作",
"type": "string",
"value": "BatchSave"
},
{
"field": "IsAutoSubmitAndAudit",
"label": "提交并审核",
"type": "bool",
"value": true
},
{
"field": "IsVerifyBaseDataField",
"label": "验证基础资料",
"type": "bool",
"describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)",
"value":"false"
}
]
}
数据请求与清洗
首先,我们需要从金蝶系统中请求收料通知单的数据。这一步骤涉及到调用金蝶系统提供的API接口,并获取原始数据。假设我们已经成功获取了这些数据,接下来需要对这些数据进行清洗,以确保其符合目标平台的要求。
例如,我们可能需要去除一些无用字段、规范化日期格式、处理缺失值等操作。这些清洗步骤可以通过编写自定义脚本或使用轻易云平台提供的数据处理工具来完成。
数据转换
在数据清洗完成后,下一步就是将这些数据转换为目标平台API接口所能接受的格式。根据上述元数据配置,我们需要特别注意以下几点:
- 业务对象表单Id (
FormId
): 必须填写金蝶的表单ID,例如PUR_PurchaseOrder
。 - 执行的操作 (
Operation
): 固定值为BatchSave
。 - 提交并审核 (
IsAutoSubmitAndAudit
): 布尔值,设置为true
。 - 验证基础资料 (
IsVerifyBaseDataField
): 布尔值,可选参数,默认设置为false
。
假设我们从金蝶系统获取到的数据如下:
{
"FBillNo":"12345",
// ...其他字段
}
我们需要将其转换为如下格式,以便能够通过目标平台API接口进行写入:
{
"/customer/add":{
"method":"POST",
// 请求体内容
{
{
// ...其他字段
FormId: 'PUR_PurchaseOrder',
Operation: 'BatchSave',
IsAutoSubmitAndAudit: true,
IsVerifyBaseDataField: false,
}
}
}
}
数据写入
最后一步是将转换后的数据通过API接口写入到目标平台。我们需要确保请求方法为POST,并且请求体中的每个字段都符合目标平台API接口的要求。
以下是一个示例代码片段,用于展示如何通过HTTP POST请求将数据写入目标平台:
import requests
url = 'https://api.qingyiyun.com/customer/add'
headers = {'Content-Type': 'application/json'}
data = {
'FormId': 'PUR_PurchaseOrder',
'Operation': 'BatchSave',
'IsAutoSubmitAndAudit': True,
'IsVerifyBaseDataField': False,
# ...其他字段
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print('Data successfully written to the target platform.')
else:
print('Failed to write data:', response.text)
通过上述步骤,我们实现了从金蝶系统到轻易云集成平台的数据ETL转换与写入过程。这不仅提高了数据处理效率,还确保了各系统之间的数据一致性和完整性。