ETL转换与写入聚水潭API接口的实践案例

  • 轻易云集成顾问-贺强
### 金蝶采购入库对接聚水潭采购入库技术案例分享 在企业数据集成过程中,实现系统间的数据交互是至关重要的一环。本文将详细介绍如何通过轻易云数据集成平台,将金蝶云星空的采购入库数据高效、准确地对接到聚水潭系统,确保业务流程的无缝衔接。 为了实现这一目标,我们采用了一系列定制化的数据集成方案,其中包括调用金蝶云星空接口`executeBillQuery`以获取采购入库单据,并使用聚水潭API `jushuitan.purchasein.upload`进行批量写入。整个过程充分利用了轻易云平台的全生命周期管理功能,在保证高透明度和实时监控的同时,使得每个操作步骤清晰可见。 为解决大规模数据传输中的挑战,如避免漏单和处理分页及限流问题,我们设计了多项关键措施。例如,通过设置定时任务可靠抓取金蝶云星空接口数据,同时实施错误重试机制,以应对可能出现的网络波动或系统异常。此外,为确保两者之间的数据格式兼容性,我们进行了细致的数据映射和转换处理,使得不同系统间的数据能快速且准确地完成转移。 最终,本次案例不仅成功打通了金蝶与聚水潭之间的信息壁垒,也展示了如何通过全面应用先进平台特性,高效实现复杂场景下的数据集成需求。因此,这些实践经验将为其他类似项目提供宝贵参考。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购入库数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": {"pageSize": 1000}, "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, // ...其他字段省略 ], "otherRequest": [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"TopRowCount","label":"返回总行数","type":"int","describe":"金蝶的查询分页参数"}, {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FDocumentStatus = 'C' AND FStockId.FGROUP='现货仓库' AND FISGENFORIOS != 1"}, {"field":"FieldKeys","label":"需查询的字段key集合","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{"name": "ArrayToString", "params": ","}}, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "STK_InStock"} ], // ...其他配置省略 } ``` #### 请求参数解析 1. **API和方法**: - `api`: `executeBillQuery` - `method`: `POST` 2. **分页设置**: - `pagination.pageSize`: 每次请求的数据条数,设置为1000。 - `Limit`和`StartRow`:分别控制每次请求的数据量和起始位置。 3. **过滤条件**: - `FilterString`: 用于筛选符合条件的数据,例如:`FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FDocumentStatus = 'C' AND FStockId.FGROUP='现货仓库' AND FISGENFORIOS != 1`。 4. **字段选择**: - `FieldKeys`: 指定需要查询的字段集合,通过逗号分隔。 5. **业务对象表单ID**: - `FormId`: 设置为`STK_InStock`,表示采购入库单。 #### 数据请求与清洗 在配置好元数据后,可以通过轻易云平台发起HTTP POST请求,调用金蝶云星空接口获取采购入库数据。以下是一个示例请求体: ```json { "FormId": "STK_InStock", "FieldKeys": ["FID", "FBillNo", ...], "FilterString": "FApproveDate>='2023-01-01' AND FDocumentStatus = 'C'", // 分页参数 "Limit": 1000, "StartRow": 0 } ``` #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。常见的数据清洗操作包括: 1. **字段重命名**:将原始字段名转换为目标系统所需的字段名。 2. **数据类型转换**:确保所有字段的数据类型符合目标系统要求。 3. **过滤无效数据**:剔除不符合业务规则的数据,例如状态不为“已审核”的记录。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: cleaned_record = { 'id': record['FInStockEntry_FEntryId'], 'bill_no': record['FBillNo'], 'approve_date': record['FApproveDate'], # ...其他字段处理 } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 经过清洗后的数据可以进一步转换为目标系统所需的格式,并通过轻易云平台写入到聚水潭等目标系统中。这一步通常涉及到API调用、数据库操作等技术细节。 通过上述步骤,我们实现了从金蝶云星空获取采购入库数据并进行初步加工,为后续的数据处理奠定了基础。在实际项目中,还需要根据具体业务需求进行更多定制化处理。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换和写入聚水潭API接口的技术案例 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并将其转为目标平台能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台将金蝶采购入库的数据转换并写入聚水潭API接口。 #### 1. API 接口配置 首先,我们需要了解聚水潭API接口的基本配置。根据元数据配置,目标API为`jushuitan.purchasein.upload`,请求方法为`POST`。在此基础上,我们需要确保ID检查(`idCheck: true`)以及操作方法(`method: merge`)。 #### 2. 数据请求与清洗 在进行ETL转换之前,需要从源平台提取数据并进行初步清洗。这一步骤通常包括字段映射和数据格式的标准化。以下是主要字段及其映射关系: - `FBillNo`: 外部单号(外部系统中的采购单号) - `FSupplierId_FNumber`: 供应商编号 - `FStockId_FNumber`: 仓库编号 - `FMaterialId_FNumber`: 商品SKU - `FRealQty`: 商品数量 - `FLot_FNumber`: 批次号 - `FProduceDate`: 生产日期 - `FNote`: 备注 - `FExpiryDate`: 有效期至 #### 3. 数据转换与写入 在完成初步清洗后,下一步是将数据转换为聚水潭API能够接收的格式,并通过POST请求写入目标平台。 ##### 请求头配置 根据元数据配置,我们需要设置以下请求头字段: ```json { "is_confirm": "是否自动确认单据", "wms_co_id": "{FStockId_FNumber}", "supplier_id": "_findCollection find supplier_id from 8212cf64-d26d-3c38-8112-d4ffae353278 where supplier_code={FSupplierId_FNumber}", "po_id": "采购单号", "external_id": "{FBillNo}", "remark": "备注", "tax_rate": "税率", "co_id": "货主仓库编号" } ``` ##### 请求体配置 请求体中包含商品列表信息,每个商品项包含以下字段: ```json { "items": [ { "sku_id": "{{items.FMaterialId_FNumber}}", "qty": "{{items.FRealQty}}", "price": "", // 单价可以根据业务需求动态填充 "batch_id": "{{items.FLot_FNumber}}", "produced_date": "{{items.FProduceDate}}", "expiration_date": "{{items.FExpiryDate}}", "remark": "{{items.FNote}}" } ] } ``` ##### 数据合并操作 为了确保数据的一致性和完整性,我们采用了合并操作(`method: merge`)。该操作会根据指定的字段(如`FBillNo`, `FSupplierId_FNumber`)合并相同采购单号和供应商编号的数据。 #### 4. 实际案例应用 假设我们从金蝶系统中提取到以下采购入库数据: ```json { "FBillNo": "PO12345", "FSupplierId_FNumber": "SUP001", "FStockId_FNumber": "STK001", "items": [ { "FMaterialId_FNumber": "MAT001", "FRealQty": 100, "FLot_FNumber": "LOT001", "FProduceDate": "2023-01-01", "FNote": "", "FExpiryDate": "" }, { "FMaterialId_FNumber": "MAT002", "FRealQty": 200, "FLot_FNumber": "", "FProduceDate": "", "FNote": "", "FExpiryDate": "" } ] } ``` 经过ETL转换后,生成的聚水潭API请求体如下: ```json { "is_confirm":"true", ... // 其他头部字段省略 ... ,"items":[ { "sku_id":"MAT001", "qty":"100", "price":"", "batch_id":"LOT001", "produced_date":"2023-01-01", "expiration_date":"", "remark":"" }, { "sku_id":"MAT002", "qty":"200", "price":"", "batch_id":"", "produced_date":"", "expiration_date":"", "remark":"" } ] } ``` 通过轻易云数据集成平台,我们可以实现从金蝶到聚水潭系统的数据无缝对接,极大提升了业务效率和透明度。 以上就是使用轻易云数据集成平台进行ETL转换和写入聚水潭API接口的详细技术案例。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T10.png~tplv-syqr462i7n-qeasy.image)