案例分享:金蝶云星空数据集成到云水聚
在“物料对接业务系统-ok”方案的实施过程中,我们成功解决了如何将金蝶云星空的数据高效、可靠地集成到云水聚的问题。本文将主要分享该案例中的关键技术细节,特别是如何调用金蝶云星空的executeBillQuery接口,从源头获取准确无误的数据,并使用轻易云平台实现全流程自动化处理。
为了确保数据不漏单,我们采用定时任务调度机制,定期抓取金蝶云星空的接口数据。通过调用executeBillQuery接口,可以实现对数据分页和批量处理,有效应对限流问题。在抓取过程中,为保证每条记录都被完整提取,还增加了实时监控和日志记录功能,如遇异常可即时重试。
在大量数据快速写入到云水聚方面,通过优化API调用以及并发控制,加速了/Kingdee/EditMaterial接口的数据写入速度。同时,通过轻易云平台提供的自定义映射和格式转换功能,我们有效解决了两系统之间的数据格式差异,使得不同维度的数据能够顺利对接。
此次项目还特别关注错误处理与重试机制,实现高度可靠性的同时减少可能出现的手工干预需求。这不仅提高了工作效率,也提升了整个系统运行过程中的稳定性和安全性。
后续内容,将详细解析每个环节中具体操作步骤及实际代码示例。
调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台中,调用源系统的API接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的executeBillQuery
接口来获取并加工数据。
接口配置与调用
首先,我们需要配置元数据,以便正确调用金蝶云星空的executeBillQuery
接口。以下是一个典型的元数据配置示例:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FNumber",
"id": "FMATERIALID",
"name": "FName",
"idCheck": true,
"request": [
{"field":"FMATERIALID","label":"实体主键","type":"int","describe":"实体主键","value":"FMATERIALID"},
{"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"},
{"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"},
{"field":"FSpecification","label":"规格型号","type":"string","describe":"规格型号","value":"FSpecification"},
{"field":"FOldNumber","label":"旧物料编码","type":"string","describe":"旧物料编码","value":"FOldNumber"},
{"field":"FBARCODE","label":"条码","type":"string","describe":"条码","value":"FBARCODE"},
{"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"},
{"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","describe":"物料分组","value":"FMaterialGroup.FNumber"},
{"field":"FErpClsID","label":"物料属性","type":"","describe":"","value":""},
{"field":...}
],
"otherRequest": [
{"field":...}
],
"autoFillResponse": true
}
请求参数解析
在上述配置中,request
字段定义了请求参数,这些参数将用于构建API请求。以下是一些关键字段及其含义:
FMATERIALID
: 实体主键,用于唯一标识物料。FNumber
: 编码,物料的唯一编号。FName
: 名称,物料的名称。FSpecification
: 规格型号,描述物料的具体规格和型号。FOldNumber
: 旧物料编码,用于兼容旧系统中的物料编号。
此外,还有一些其他重要字段,如FBARCODE
(条码)、FDescription
(描述)等,这些字段可以根据业务需求进行调整。
构建请求体
根据元数据配置,我们可以构建一个完整的请求体。例如:
{
"FormId": "BD_MATERIAL",
"FieldKeys": ["FMATERIALID", "FNumber", "FName", ...],
"FilterString": "FApproveDate>='2023-01-01' and FDocumentStatus='C' and FUseOrgId.FNumber=100",
"Limit": 100,
"StartRow": 0
}
在这个请求体中:
FormId
指定了业务对象表单Id,这里为"BD_MATERIAL"。FieldKeys
是需要查询的字段集合,可以根据实际需求进行调整。FilterString
用于过滤条件,例如只查询2023年1月1日之后审批通过且使用组织编号为100的数据。Limit
和StartRow
用于分页控制。
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。常见的数据清洗操作包括:
- 去除冗余字段:只保留业务需要的字段。
- 格式转换:将日期、数值等字段转换为标准格式。
- 数据校验:确保所有必填字段都有值,并符合预期格式。
例如,对于日期字段,可以使用以下代码进行格式转换:
import datetime
def convert_date(date_str):
return datetime.datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d')
data['approve_date'] = convert_date(data['approve_date'])
数据写入目标系统
最后,将清洗和转换后的数据写入目标系统。这一步通常涉及到调用目标系统的API接口,并传递处理后的数据。例如:
import requests
url = 'https://target-system-api.com/data'
headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=cleaned_data, headers=headers)
if response.status_code == 200:
print('Data successfully written to target system')
else:
print('Failed to write data to target system')
通过以上步骤,我们实现了从金蝶云星空获取、清洗、转换并写入目标系统的数据集成过程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入云水聚API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台云水聚API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。
1. 数据提取与清洗
首先,我们需要从源系统中提取原始数据,并进行必要的清洗和预处理。这一步骤确保了数据的完整性和一致性,为后续的转换和加载奠定基础。
{
"FNumber": "P001",
"FName": "净水器",
"FSpecification": "型号A",
"F_CY_Producttype": "售后物料",
"F_WDZN__CY_Machinetype": "主机",
"F_CY_Productcategory": "家用",
"F_WDZN__CY_Watertype": "NB物联网",
"F_WDZN__CY_Salemode": "卖断",
"F_WDZN__CY_Salerange": "公开",
"F_WDZN__CY_Issale": "是",
"F_WDZN__CY_Brand": "品牌A",
"FBaseUnitId_FNumber": "个"
}
2. 数据转换
在数据转换阶段,我们需要根据云水聚API接口的要求,将源数据字段映射到目标字段。以下是元数据配置示例:
{
"api": "/Kingdee/EditMaterial",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"productId","label":"物料编码","type":"string","value":"{FNumber}"},
{"field":"productName","label":"物料名称","type":"string","value":"{FName}"},
{"field":"model","label":"规格型号","type":"string","value":"{FSpecification}"},
{"field":"productCategory","label":"产品类型","type":"string","describe":"(售后物料、水机产品、成品滤芯)","value":"{F_CY_Producttype}"},
{"field":"machineType","label":"机器类型","type":"string","describe":"(主机、分机)","value":"{F_WDZN__CY_Machinetype}"},
{"field":"productType","label":"产品归类","type":"string","describe":"(商用、家用)","value":"{F_CY_Productcategory}"},
{"field":"waterFillingMethod","label":"充水方式","type":"string","describe":"(NB物联网)","value":"{F_WDZN__CY_Watertype}"},
{"field":"saleModel","label":"销售模式","type":"string","describe":"(卖断、租赁)","value":"{F_WDZN__CY_Salemode}"},
{"field":"saleRange","label":"销售范围","type":"string","describe":"(公开、授权)","value":"{F_WDZN__CY_Salerange}"},
{"field":"isSale","label":"是否在售","type":"string","describe":"(是、否)","value":"{F_WDZN__CY_Issale}"},
{"field":"brand","label":"品牌","type":"","value":{"brand"}},
{"field":"","label":"","type":"","value":{"unit"}},
{"field":"","label":"","type":"","value":{"inventoryQty"}}
]
}
通过上述配置,我们可以将源系统中的字段"FNumber"
映射到目标系统中的"productId"
,以此类推。这样做确保了数据在不同系统之间的一致性和准确性。
3. 数据加载
最后一步是将转换后的数据通过API接口写入目标系统。以下是一个示例HTTP请求:
POST /Kingdee/EditMaterial HTTP/1.1
Host: api.yunshuiju.com
Content-Type: application/json
Authorization: Bearer your_access_token
{
"productId": "{FNumber}",
"productName": "{FName}",
"model": "{FSpecification}",
...
}
在实际操作中,我们可以利用轻易云的数据集成平台自动生成并发送这些请求,从而实现高效的数据加载。
4. 实时监控与异常处理
为了确保整个ETL过程的顺利进行,我们需要对每个环节进行实时监控。一旦发现异常情况,如网络故障或数据格式错误,系统应及时发出警报并记录日志,以便后续排查和修复。
通过上述步骤,我们可以高效地完成从源系统到目标系统的数据ETL转换,并确保数据的一致性和准确性。这不仅提升了业务流程的透明度和效率,还为企业决策提供了可靠的数据支持。