高效数据处理:从金蝶云星空到吉客云的ETL转化实战

  • 轻易云集成顾问-杨嫦
### 金蝶云星空分布式调入单对接吉客云其他入库 在实施企业系统集成项目的过程中,如何高效且准确地将金蝶云星空的数据集成到吉客云是一项重要课题。本文聚焦于一个实际运行的成功案例——“金蝶云星空分布式调入单对接吉客云其他入库”,深入探讨如何通过轻易云数据集成平台实现这一目标。 首先,要确保从金蝶云星空获取的数据不漏单,我们采用了executeBillQuery接口。这个接口支持分页查询,以应对大量数据的抓取需求。此外,为了解决分页和限流问题,每次调用接口时我们都设置了合理的分页参数,并结合限流策略,有效避免了API请求超载导致的数据丢失或延迟。 在数据处理方面,针对两套系统之间存在的数据格式差异,定制化的数据映射方案尤为关键。在轻易云平台上,我们定义并配置了详细的字段映射规则。例如,将金蝶云中的“物料编号”与吉客云中的对应字段进行精确匹配,同时处理必要的一些单位转换和格式调整。这些操作保证了数据在写入吉客云时能够被无缝识别和处理。 为了保障写入流程快速且可靠,在批量导出数据后,通过erp.stock.createandstockin API将其迅速写入到吉客后台库存系统。同时,结合事务控制机制确保整个过程具备容错能力,如出现异常情况还可自动重试,这极大提升了接收端系统稳定性。 实时监控及日志记录功能是整个方案中的另一个亮点。利用轻易云提供的操作界面,我们可以监测每个阶段的数据处理状态,从源API调用、传输线路,到目标API响应都一目了然。当发生任何异常时,可立即通过日志追踪具体原因并及时解决,使得整合流程透明且可靠。 通过上述技术手段,“金蝶云星空分布式调入单对接吉客云其他入库”项目取得圆满成功,为进一步探索复杂多元化企业应用系统间互联互通提供了一条切实可行的发展路径。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取和加工数据。 #### 接口配置与请求 首先,我们需要配置调用金蝶云星空接口的元数据。在这个案例中,我们使用的是`executeBillQuery`接口,采用POST方法进行请求。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSTKTRSINENTRY_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FSTKTRSINENTRY_FEntryID","label":"FEntryID","type":"string","value":"FSTKTRSINENTRY_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgID_FNumber","label":"调入库存组织","type":"string","value":"FStockOrgID.FNumber"}, {"field":"FDate","label":"日期","type":"datetime","value":"FDate"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"}, {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"}, {"field":"FCreateDate","label":"创建日期","type":"datetime","value":"FCreateDate"}, {"field":"FApproveDate","label":"审核日期","type":"datetime","value":"FApproveDate"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FDestStockID.FNumber in ('01DS')" }, {"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_TRANSFERIN" } ] } ``` #### 请求参数解析 在上述配置中,几个关键字段需要特别注意: - **api**: `executeBillQuery`,表示调用的API名称。 - **method**: `POST`,表示请求方法。 - **number**: `FBillNo`,表示单据编号。 - **id**: `FSTKTRSINENTRY_FEntryID`,表示分录主键。 - **pagination**: 配置分页参数,每页大小为500条记录。 - **idCheck**: 设置为true,用于检查返回结果中的主键。 请求参数部分定义了需要从金蝶云星空获取的数据字段,包括单据编号、单据状态、调入库存组织等。这些字段在后续的数据处理和转换中将起到重要作用。 #### 数据请求与清洗 通过上述配置,我们可以向金蝶云星空发送请求以获取所需的数据。以下是一个示例请求体: ```json { "FormId": "STK_TRANSFERIN", "FieldKeys": [ 'FID', 'FBillNo', 'FDocumentStatus', 'FStockOrgID.FNumber', 'FDate', 'FBillTypeID', 'FTransferDirect', 'FNOTE', 'FCreateDate', 'FApproveDate' ], "FilterString": "FSupplierId.FNumber = 'VEN00010' and FApproveDate>='2023-01-01' and FDestStockID.FNumber in ('01DS')", ... } ``` 在实际操作中,我们会根据业务需求动态生成这些参数,并通过轻易云平台发送HTTP POST请求。返回的数据将经过清洗和转换,以便后续写入目标系统。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换。例如,将日期格式统一、将不同字段合并或拆分等。这一步骤通常通过轻易云平台提供的可视化工具完成,确保每个环节都透明可见。 最后,将处理好的数据写入目标系统(如吉客云),完成整个数据集成过程。 #### 总结 通过轻易云数据集成平台调用金蝶云星空接口,我们能够高效地获取并加工所需的数据。本文详细介绍了如何配置和使用`executeBillQuery`接口,以及如何处理返回的数据。这一过程不仅提升了业务透明度,还极大提高了数据处理效率。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 数据集成案例:将金蝶云星空分布式调入单数据转换并写入吉客云 在使用轻易云数据集成平台进行数据集成时,生命周期的第二步是将已经集成的源平台数据进行ETL转换,并最终写入目标平台。本案例中,我们将详细探讨如何将金蝶云星空分布式调入单的数据转换为吉客云API接口所能够接收的格式,并写入吉客云。 #### API接口配置 首先,我们需要了解吉客云API接口的具体配置参数。根据提供的元数据配置,目标API接口为`erp.stock.createandstockin`,请求方法为`POST`。以下是关键配置项: - **header字段**:包括单据ID(FID)、单据编号(FBillNo)、单据状态(FDocumentStatus)、目标仓库ID(FDestStockID_FNumber)、日期(FDate)、审核日期(FApproveDate)。 - **body字段**:包括物料ID(FMaterialID_FNumber)、剩余库存数量(FRemainInStockQty)、目标批号(FDestLot_FNumber)、生产日期(FProduceDate)、到期日期(FEXPIRYDATE)和保质期(FMaterialId_FExpPeriod)。 #### 数据请求与清洗 在ETL过程中,首先需要从金蝶云星空提取相关数据,并进行必要的清洗和转换。以下是一个示例请求: ```json { "vendCode": "供应商编码", "applyDepartCode": "H04", "applyCompanyCode": "103", "inWarehouseCode": "{FDestStockID_FNumber}", "inType": "101", "relDataId": "{FBillNo}", "applyUserId": "1", "applyUserName": "吕修远", "applyDate": "{FApproveDate}", "memo": "{FBillNo}", "operator": "吕修远", "source": "OPEN", "logisticNo": "1", "logisticCode": "", "stockInDetailViews": [ { "skuBarcode": "{{details.FMaterialID_FNumber}}", "relDetailId": "", "skuCount": "{{details.FRemainInStockQty}}", "isCertified": "1", "batchList": [ { "batchNo": "{{details.FDestLot_FNumber}}", "quantity": "{{details.FRemainInStockQty}}", "productionDate": "{{details.FProduceDate}}", "expirationDate": "{{details.FEXPIRYDATE}}", "shelfLife": "_function case '{{details.FMaterialId_FExpPeriod}}' when '0' then '' else {{details.FMaterialId_FExpPeriod}} end", "shelfLiftUnit":"_findCollection find FExpUnit from 44da707b-4d02-3e20-ad97-fdd69ff7a37d where FNumber={{details.FMaterialID_FNumber}}" } ] } ] } ``` #### 数据转换与写入 接下来,我们需要将清洗后的数据按照吉客云API接口要求进行转换,并通过HTTP POST请求将其写入吉客云。以下是实现步骤: 1. **字段映射**:根据元数据配置,将金蝶云星空的数据字段映射到吉客云API所需的字段。例如,将`FDestStockID_FNumber`映射到`inWarehouseCode`,将`FBillNo`映射到`relDataId`等。 2. **数组处理**:对于嵌套数组,如`stockInDetailViews`和其中的`batchList`,需要逐层处理并确保每个子字段都正确映射和填充。 3. **动态值替换**:使用模板引擎或字符串替换技术,将动态值如`{{details.FMaterialID_FNumber}}`替换为实际值。 4. **HTTP请求发送**:构建完整的JSON请求体,通过HTTP POST方法发送至吉客云API接口。 以下是一个示例代码片段,用于发送HTTP POST请求: ```python import requests import json url = 'https://api.jikexy.com/erp.stock.createandstockin' headers = {'Content-Type': 'application/json'} data = { # 填充上述JSON结构 } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully written to JiKeYun") else: print(f"Failed to write data: {response.text}") ``` 通过上述步骤,我们可以实现从金蝶云星空到吉客云的数据无缝对接,确保数据在不同系统间准确传递和存储。这不仅提高了业务流程的效率,也保证了数据的一致性和完整性。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)