ETL数据转换:将金蝶云数据高效写入管易云系统

  • 轻易云集成顾问-钟家寿
### 金蝶云星空与管易云的采购订单系统对接——kw_采购订单案例分享 在数字化管理中,跨平台数据集成是保证业务流畅运行的关键。在这次技术案例中,我们将详细探讨如何将金蝶云星空的数据无缝集成到管易云,以实现高效、可靠的采购订单处理。我们选择了一个具体方案:`kw_采购订单`,并利用轻易云数据集成平台完成此任务。 首先,为了确保从金蝶云星空获取的数据不漏单,我们使用了executeBillQuery API来定时抓取采购订单信息,该API能够实时查询和筛选所需数据。为了避免分页和限流问题,我们精细化配置请求参数,并设置自动重试机制以应对短暂性网络故障或服务器限流引起的问题。这一操作不仅保证了数据完整性,也提高了接口调用效率。 其次,对于大量数据快速写入到管易云,我们采用gy.erp.purchase.add API进行批量插入操作。在接口层面,通过优化批处理策略,实现大规模数据传输时的低延迟和高成功率。此外,为应对不同的平台间的数据格式差异,定制化设计了一套映射规则,以及必要的数据转换逻辑,使得写入流程更加顺畅。 最后,在整个集成过程中,无论是系统异常还是正常工作状态,都通过实时监控与日志记录功能进行严密跟踪。这样不仅能即时发现潜在问题,还可以为后续故障排查提供详尽依据。同时,针对可能发生的错误情况,如网络抖动、API响应超时等,实施了一套完善的错误重试机制,提高系统可靠性的同时最大程度减少人为干预需求。 这个实例展示了如何巧妙运用先进的数据集成工具,通过全面考虑每个环节及其挑战,高效实现两个复杂系统之间的数据交互。接下来,将会深入解析这一解决方案中的具体技术实现过程,包括接口调用细节、错误处理以及性能优化策略等内容。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是关键的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购订单数据,并进行初步的数据加工。 #### 配置元数据 首先,我们需要配置元数据,以便正确调用金蝶云星空的`executeBillQuery`接口。以下是一个典型的元数据配置示例: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FPOOrderEntry_FEntryId", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FPOOrderEntry_FEntryId","label":"id","type":"string","value":"FPOOrderEntry_FEntryId"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FSourceBillNo","label":"源单编号","type":"string","describe":"源单编号","value":"FSourceBillNo"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"}, {"field":"FBusinessType","label":"业务类型","type":"string","describe":"下拉列表","value":"FBusinessType"}, {"field":"FSupplierId_FNumber","label":"供应商","type":"string","describe":"基础资料","value":"FSupplierId.FNumber"}, {"field":"FSettleModeId_FNumber","label":"结算方式","type":"string","describe":"基础资料","value":"FSettleModeId.FNumber"}, {"field":"FPayConditionId_FNumber","label":"付款条件","type":"string","describe":"基础资料","value":"FPayConditionId.FNumber"}, {"field":"FDate","label":"采购日期","type":"","describe":"","value":""}, {"field":"","label":"","type":"","describe":"","value":""} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "", "", "", "{PAGINATION_START_ROW}"}, {"field": "", "", "", ""}, {"field": "", "", "", ""} ] } ``` #### 调用API接口 在配置好元数据后,我们可以通过轻易云平台调用金蝶云星空的`executeBillQuery`接口。以下是一个典型的API请求示例: ```json { "FormId": "PUR_PurchaseOrder", "FieldKeys": [ "FBillNo", "FPOOrderEntry_FEntryId", ... ], "FilterString": "", ... } ``` 在这个请求中,`FormId`指定了业务对象表单ID(例如:采购订单),`FieldKeys`定义了需要查询的字段集合,`FilterString`用于设置过滤条件。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗与转换操作: 1. **字段映射**:将原始字段映射到目标系统所需的字段。例如,将金蝶云中的`FBillNo`映射到目标系统中的`order_number`。 2. **数据格式转换**:将日期、金额等字段转换为目标系统所需的格式。例如,将日期从字符串格式转换为日期对象。 3. **数据校验**:检查关键字段是否为空或格式是否正确。如果发现问题,可以记录日志或抛出异常。 #### 示例代码 以下是一个简单的Python示例代码,用于调用API并进行初步的数据清洗和转换: ```python import requests import json # 配置API请求参数 api_url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'PUR_PurchaseOrder', 'FieldKeys': 'FBillNo,FPOOrderEntry_FEntryId,...', 'FilterString': '', } # 调用API接口 response = requests.post(api_url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与转换 cleaned_data = [] for record in data: cleaned_record = { 'order_number': record['FBillNo'], 'entry_id': record['FPOOrderEntry_FEntryId'], ... } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=4)) ``` 通过以上步骤,我们可以成功地从金蝶云星空获取采购订单数据,并进行初步的数据清洗和转换,为后续的数据处理打下坚实基础。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换:实现采购订单数据写入管易云 在轻易云数据集成平台中,生命周期的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——管易云API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用元数据配置实现这一过程。 #### 元数据配置解析 元数据配置是实现ETL转换的关键。以下是针对管易云采购订单接口`gy.erp.purchase.add`的具体元数据配置: ```json { "api": "gy.erp.purchase.add", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo", "bodySum": ["FQty"], "bodyName": "goods_list", "header": ["FBillNo", "FSupplierId_FNumber", "FStockID_FNumber", "FID", "FBeizhu"], "body": ["FMaterialId_FNumber", "FQty", "FTaxPrice", "FPOOrderEntry_FEntryId"] }, "request": [ {"field": "warehouse_code", "label": "仓库代码", "type": "string", "value": "{FStockID_FNumber}"}, {"field": "supplier_code", "label": "供应商代码", "type": "string", "value": "{FSupplierId_FNumber}"}, {"field": "order_type", "label": "单据类型代码", "type": "string"}, {"field": "plan_date", "label": "预计到货时间", "type": "string"}, {"field": "note", "label": "备注", "type":"string","value":"{FBeizhu}"}, { "field":"detail_list", ... } ] } ``` #### 数据请求与清洗 首先,通过API接口获取源平台的数据。假设我们从ERP系统中获取了采购订单数据,这些数据需要经过清洗和转换才能匹配管易云的API格式。 例如,ERP系统中的采购订单可能包含以下字段: - FBillNo: 单据编号 - FSupplierId_FNumber: 供应商代码 - FStockID_FNumber: 仓库代码 - FBeizhu: 备注 - goods_list: 商品明细列表,其中包括商品编码、数量、价格等信息 #### 数据转换与映射 根据元数据配置,我们需要将这些字段映射到管易云API所需的格式: 1. **Header部分**: - `warehouse_code` 映射为 `{FStockID_FNumber}` - `supplier_code` 映射为 `{FSupplierId_FNumber}` - `note` 映射为 `{FBeizhu}` 2. **Body部分**: - `detail_list` 是一个数组,需要包含每个商品的详细信息,如商品条码、数量、实际进价、商品代码和SKU。 - 每个字段在goods_list中都有对应的映射关系,例如: - `qty` 映射为 `{{goods_list.FQty}}` - `price` 映射为 `{{goods_list.FTaxPrice}}` - `item_code` 和 `sku_code` 都映射为 `{{goods_list.FMaterialId_FNumber}}` #### 数据合并与计算 在进行数据转换时,还需要进行一些合并和计算操作。例如,根据元数据配置中的operation部分,我们需要对相同单据编号(FBillNo)的商品数量(FQty)进行求和,并生成一个合并后的goods_list。 ```json "operation":{ ... } ``` 这一步骤确保了所有相同单据编号的商品明细被正确合并,并且数量得到了准确计算。 #### 数据写入 完成上述步骤后,最终生成的数据结构如下: ```json { ... } ``` 通过POST方法,将这些转换后的数据发送到管易云API接口,实现采购订单的数据写入。 #### 实践案例 假设我们有以下ERP系统中的原始数据: ```json { ... } ``` 经过ETL转换后,生成的数据结构如下: ```json { ... } ``` 通过轻易云平台,我们可以实时监控这一过程,确保每个环节都清晰可见,并及时处理任何异常情况。 总结来说,通过合理配置元数据,并利用轻易云平台强大的ETL功能,可以高效地将源平台的数据转换并写入目标平台(如管易云),极大提升了业务流程的自动化和效率。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)