采购入库单数据ETL转换至金蝶云星空的技术案例分析

  • 轻易云集成顾问-吴伟
### 金蝶云星空数据集成:采购入库单解决方案 在本案例中,我们将探讨如何通过轻易云数据集成平台实现金蝶云星空系统之间的数据对接。具体来说,我们将重点介绍“采购入库单(除了委外,艾尔时)”的实际运行方案。 为了确保大量采购入库单数据能够快速、准确地写入到目标金蝶云星空系统中,本次集成任务主要采用了以下技术手段: 1. **高吞吐量的数据写入能力**:利用金蝶云星空的`batchSave` API接口,实现批量数据的高效写入,从而保证了大规模业务场景下的数据处理及时性。 2. **集中监控和告警系统**:通过实时跟踪集成任务的状态与性能,不仅提高了对潜在问题的响应速度,也为后续优化提供了可靠依据。 3. **API资产管理功能**:借助统一视图和控制台,全面掌握各API资产使用情况,有效提升资源配置效率。这一特性尤其适用于多业务线共享同一个数据源的场景。 4. **定时可靠抓取机制**:使用定期调用executeBillQuery接口,以稳定且可预见的频率获取最新采购入库数据信息,并及时进行处理与存储,避免遗漏任何关键交易记录。 5. **自定义数据转换逻辑**:针对不同业务需求和数据结构,通过编写特定转换规则,对原始获取到的数据进行格式化处理,再导出至目标系统,确保前后一致性与完整性。 接下来,文章将在具体步骤中逐步展开上述技术细节,包括如何调度API接口以应对分页与限流问题、异常处理及错误重试机制,以及如何利用强大的可视化工具来设计和管理整个数据集成流程。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何使用轻易云数据集成平台,通过调用金蝶云星空的`executeBillQuery`接口来获取采购入库单数据,并进行初步的数据加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是关键的元数据配置项: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `STK_InStock`(业务对象表单Id) - **Pagination**: 每页500条记录 - **FieldKeys**: 需查询的字段key集合 - **FilterString**: 过滤条件 #### 请求参数配置 根据元数据配置,我们需要构建请求参数。以下是主要的请求字段及其含义: ```json { "FormId": "STK_InStock", "FieldKeys": "FInStockEntry_FEntryId,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FOwnerTypeIdHead,FOwnerIdHead.FNumber,FDemandOrgId.FNumber,FPurchaseOrgId.FNumber,FSupplierId.FName,FStockerGroupId.FNumber,FStockDeptId.FNumber,FCreateDate,FCancelDate,FDeliveryBill,FTakeDeliveryBill,FApproveDate,FCancelStatus,FSupplyId.FNumber,FSettleId.FNumber,FChargeId.FNumber,FBusinessType,FSupplyAddress,FAPSTATUS,FTransferBizType,FDisassemblyFlag,FConfirmDate,FConfirmStatus,FSplitBillType,FPayOrgId.FNumber,FSettleOrgId.FNumber,FSettleCurrId.FNumber,FBillCost,FBillTaxAmount,FBillCostAmount,FBillAllAmount,FSettleTypeId,FExchangeRate,FLocalCurrId.FNumber,FBillAmount,FIsIncludedTax,FOwnerCustomerID.FNumber,FSettleSupplierID.FNumber,FISGENFORIOS,FISPRICEEXCLUDETAX,FISINVOICEARLIER", "FilterString": "FDate>='{{LAST_SYNC_TIME|date}}' and FSupplierId.FNumber= 'G0175'", "Limit": 500, "StartRow": 0, "TopRowCount": true } ``` #### 数据请求与清洗 通过上述配置,我们可以发起POST请求,调用金蝶云星空的`executeBillQuery`接口。返回的数据通常是一个JSON数组,每个元素代表一条采购入库单记录。我们需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入。 以下是一个示例代码片段,用于处理返回的数据: ```python import requests import json url = "https://api.kingdee.com/executeBillQuery" headers = {"Content-Type": "application/json"} payload = { "FormId": "STK_InStock", "FieldKeys": "...", # 上述字段集合 "FilterString": "...", # 上述过滤条件 "Limit": 500, "StartRow": 0, "TopRowCount": True } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与初步加工 cleaned_data = [] for record in data: cleaned_record = { "id": record[0], "实体主键": record[1], # ...其他字段映射... "金额": float(record[-3]), # 将金额字段转换为浮点数类型 # ...继续处理其他字段... } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=2)) ``` #### 数据转换与写入 经过清洗和初步加工后的数据,可以进一步进行转换和写入到目标系统。在轻易云平台上,这一步通常涉及到映射字段、格式转换等操作,以确保数据能够无缝对接到目标系统。 例如,将清洗后的JSON数据转换为目标系统所需的格式,并通过相应的API接口进行写入: ```python # 假设目标系统接受的数据格式为XML def convert_to_xml(data): xml_data = "<Records>" for record in data: xml_data += "<Record>" for key, value in record.items(): xml_data += f"<{key}>{value}</{key}>" xml_data += "</Record>" xml_data += "</Records>" return xml_data xml_payload = convert_to_xml(cleaned_data) target_url = "https://target-system.com/api/upload" response = requests.post(target_url, headers={"Content-Type": "application/xml"}, data=xml_payload) if response.status_code == 200: print("Data successfully written to target system.") else: print(f"Failed to write data. Status code: {response.status_code}") ``` 通过以上步骤,我们实现了从金蝶云星空获取采购入库单数据,并进行了初步的数据清洗和加工,为后续的数据转换与写入奠定了基础。这一过程展示了如何利用轻易云平台高效地管理和处理异构系统间的数据集成任务。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 采购入库单数据集成到金蝶云星空API接口的ETL转换 在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术案例分析。 #### 数据请求与清洗 首先,我们从源系统中提取采购入库单的数据,并进行必要的清洗和预处理。这个过程确保了数据的一致性和准确性,为后续的转换和写入打下基础。 #### 数据转换与写入 在轻易云数据集成平台中,我们使用配置好的元数据来实现数据的转换与写入。以下是关键配置和操作步骤: 1. **API接口配置** - API: `batchSave` - 方法: `POST` - ID检查: `true` 2. **操作方法** - 方法: `merge` - 字段: `FBillNo, FDate, FSupplierId_FName, FSettleCurrId_FNumber, FPurchaseOrgId_FNumber` - 请求体名称: `details` - 请求头字段: `["FBillNo", "FDate", "FSupplierId_FName", "FSettleCurrId_FNumber", "FPurchaseOrgId_FNumber", "FExchangeRate"]` - 请求体字段: `["FMaterialId_FNumber", "FRealQty", "FTaxPrice", "FAllAmount", "FDiscount", "FPurchaseOrgId_FNumber"]` 3. **请求字段映射** 通过元数据配置,我们将源系统中的字段映射到金蝶云星空API所需的字段。例如: ```json { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{FBillTypeID_FNumber}", ... } ``` 4. **具体字段解析** - 单据编号 (`FBillNo`): `{FBillNo}` - 入库日期 (`FDate`): `{FDate}` - 供应商 (`FSupplierId`): `{FSupplierId_FName}` - 币别 (`FSettleCurrId`): `{FSettleCurrId_FNumber}` 5. **财务信息** 财务信息部分包含多个子字段,例如结算组织、付款组织等: ```json { "field": "FInStockFin", ... "children": [ { ... {"field": "FSettleOrgId","value":"104"}, {"field": "FPayOrgId","value":"_function case when '{FPurchaseOrgId_FNumber}' ='100' then '104' ..."} }, ... ] } ``` 6. **明细信息** 明细信息部分同样包含多个子字段,例如物料编码、实收数量、含税单价等: ```json { ... {"field": "FMaterialId","value":"{FMaterialId_FNumber}"}, {"field": "FRealQty","value":"{{details.FRealQty}}"}, {"field": "FTaxPrice","value":"{{details.FTaxPrice}}"}, {"field":"价税合计","value":"{{details.FAllAmount}}"} ... } ``` 7. **其他请求参数** - 业务对象表单ID (`FormId`): `"STK_InStock"` - 提交并审核 (`IsAutoSubmitAndAudit`): `false` - 执行操作 (`Operation`): `"Save"` - 验证基础资料 (`IsVerifyBaseDataField`): `true` - 系统模块 (`SubSystemId`): `"21"` 通过上述配置,我们可以将源平台的数据成功转换为金蝶云星空API能够接收的格式,并通过POST请求将数据写入目标平台。这一过程充分利用了轻易云数据集成平台的全异步、多异构系统支持特性,实现了不同系统间的数据无缝对接。 以上技术案例展示了如何利用轻易云数据集成平台进行采购入库单的数据ETL转换及写入金蝶云星空API接口,确保了数据处理过程的高效性和准确性。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)