ETL实战:将数据转换并写入金蝶云星空API

  • 轻易云集成顾问-陈洁琳
### 新宝-产业链协同平台与金蝶云星空的数据集成案例分析 在新宝-产业链协同平台和金蝶云星空两大系统的对接实践中,采购订单到销售订单的数据转换无疑是最关键的一环。本文将详细解析这一数据集成过程中的技术细节,并分享实际操作中的经验教训。 首先,我们利用新宝-产业链协同平台提供的API接口 `/order/orderList` 获取所需的采购订单数据。为了确保所获取数据的完整性,我们设置了定时任务来可靠地抓取新增及变更的数据记录。这一过程中,需要特别注意接口分页和限流问题,以防止数据遗漏或超载现象。 获取到原始数据后,下一步则是将这些信息快速、高效地写入到金蝶云星空系统。我们使用其提供的 `batchSave` API 进行批量写入。在这一阶段,对两者之间的数据格式差异进行了相应的处理,通过自定义映射规则有效消除了不兼容的问题。例如,将新宝-产业链协同平台字段重新映射为符合金蝶云要求的格式,从而实现无缝对接。 整个流程还涉及实时监控与日志记录机制,一旦发现异常情况,如接口调用失败或者网络不稳定等问题,系统会自动触发错误重试机制,确保每一笔资料都能准确落地。此外,对于批量处理过程中可能出现的一些特例,还设计了相应的错误捕捉和手动干预功能,以减少人工参与度,提高自动化程度。 通过以上步骤,新宝-产业链协同平台到金蝶云星空的数据转换得到了高效、稳定保障,为企业各业务部门提供了精准及时的信息支持。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用新宝-产业链协同平台接口/order/orderList获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用新宝-产业链协同平台的`/order/orderList`接口获取采购订单数据,并进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据,以便正确调用新宝-产业链协同平台的接口。以下是元数据配置的详细说明: ```json { "api": "/order/orderList", "method": "POST", "number": "poNo", "id": "poNo", "idCheck": true, "sdk": "\\Adapter\\Donlim\\SDK\\DonlimSDK", "errorMsgKey": "msg", "dataListKey": "data", "autoPaging22": "page_no", "beatFlat": ["orderDetail"], "request": [ { "field": "queryTime", "label": "queryTime", "type": "string", "describe": "查询大于时间范围内数据,只支持查询跨度1个月内的数据", "value": "{{LAST_SYNC_TIME|dateTime}}" } ] } ``` #### 请求参数设置 在请求参数中,`queryTime`字段用于指定查询的时间范围。该字段的值采用模板变量`{{LAST_SYNC_TIME|dateTime}}`,表示上次同步时间点后的数据。这一设计确保了每次调用都能获取到最新的数据。 #### 数据请求与清洗 通过上述配置,我们可以使用轻易云平台提供的SDK进行接口调用。以下是一个示例代码片段: ```php $sdk = new \Adapter\Donlim\SDK\DonlimSDK(); $response = $sdk->post('/order/orderList', [ 'queryTime' => date('Y-m-d H:i:s', strtotime('-1 month')) ]); if ($response['msg'] !== 'success') { throw new Exception('API调用失败: ' . $response['msg']); } $dataList = $response['data']; ``` 在这个示例中,我们首先实例化了`DonlimSDK`类,然后使用`post`方法发送请求,并传入查询时间参数。如果返回结果中的`msg`字段不为“success”,则抛出异常以提示API调用失败。 #### 数据转换与写入 获取到原始数据后,需要对其进行初步清洗和转换。由于返回的数据结构中包含了嵌套的订单详情(即`orderDetail`),我们需要将其展开处理: ```php $processedData = []; foreach ($dataList as $order) { foreach ($order['orderDetail'] as $detail) { $processedData[] = [ 'poNo' => $order['poNo'], 'itemCode' => $detail['itemCode'], 'quantity' => $detail['quantity'], // 添加更多需要的字段 ]; } } ``` 在这个步骤中,我们遍历每个订单及其对应的订单详情,将必要的信息提取并重新组织成新的数组结构,以便后续写入目标系统。 #### 自动分页处理 为了处理大量数据,轻易云平台支持自动分页功能。在元数据配置中,通过设置`autoPaging22: page_no`实现自动分页。这样,当请求的数据量超过单页限制时,系统会自动进行分页请求,直到所有数据都被获取完毕。 ```php $pageNo = 1; do { $response = $sdk->post('/order/orderList', [ 'queryTime' => date('Y-m-d H:i:s', strtotime('-1 month')), 'page_no' => $pageNo ]); if ($response['msg'] !== 'success') { throw new Exception('API调用失败: ' . $response['msg']); } $dataList = $response['data']; // 数据处理逻辑... $pageNo++; } while (!empty($dataList)); ``` 通过这种方式,我们可以确保即使面对大规模的数据,也能高效地完成数据请求和处理工作。 综上所述,通过合理配置元数据和利用轻易云平台提供的强大功能,我们能够高效地从新宝-产业链协同平台获取采购订单数据,并进行必要的清洗和转换,为后续的数据写入和业务分析打下坚实基础。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将采购订单数据转换为金蝶云星空API接口所能接收的销售订单格式,并最终写入目标平台。 #### API接口配置与元数据解析 根据提供的元数据配置,目标平台为金蝶云星空,其API接口为`batchSave`,请求方法为`POST`。以下是具体的配置细节: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 20, "rowsKey": "array" }, "request": [ {"field": "FBillNo", "label": "单据编号", "type": "string"}, {"field": "FSaleOrgId", "label": "销售组织", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "100"}, {"field": "FDate", "label": "日期", "type": "string", "value": "{prepareDate}"}, {"field": "FCustId", ... ``` #### 数据转换与映射 在进行ETL转换时,我们需要将源平台的数据字段映射到目标平台所需的字段。以下是一些关键字段及其映射规则: 1. **单据编号 (FBillNo)**: - 类型:字符串 - 源数据字段直接映射,无需转换。 2. **销售组织 (FSaleOrgId)**: - 类型:字符串 - 使用`ConvertObjectParser`解析器,将源数据中的组织编号转换为金蝶系统中的编号。 3. **日期 (FDate)**: - 类型:字符串 - 使用占位符 `{prepareDate}` 从源数据中提取日期信息。 4. **客户 (FCustId)**: - 类型:字符串 - 使用`ConvertObjectParser`解析器,将源数据中的客户ID转换为金蝶系统中的客户编号。 5. **订单明细 (FSaleOrderEntry)**: - 类型:数组 - 包含多个子字段,如物料编码、销售数量、含税单价等,每个子字段都需要从源数据中提取并进行相应的转换。 #### 子字段详细配置 以订单明细中的物料编码(FMaterialId)为例,配置如下: ```json { ... { "field":"FMaterialId", ... { ... {"field":"FMaterialId","label":"物料编码","type":"string","value":"{orderDetail_materialNo}","parent":"FSaleOrderEntry","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, ... } } } ``` - **物料编码 (FMaterialId)**: - 类型:字符串 - 使用`ConvertObjectParser`解析器,将源数据中的物料编码转换为金蝶系统中的物料编号。 #### 请求参数组装 根据以上配置,我们需要组装请求参数,以符合金蝶云星空API接口的要求。以下是一个示例请求体: ```json { ... { ... { ... { ... { ... { ..., { ..., { ..., { ..., [ { ..., { ..., [ { ..., {"FBillNo":"PO12345","FSaleOrgId":"100","FDate":"2023-10-01","FCustId":"CUST001","FBillTypeID":"XSDD01_SYS","FNote":"","FLinkMan":"","FLinkPhone":"","FSaleOrderEntry":[{"FMaterialId":"MAT001","FQty":"10","FTaxPrice":"100.00","FEntryTaxRate":"","FDeliveryDate":"","FEntryNote":"","F_GZHQ_Text_KHDDH":"","F_GZHQ_Text":"","F_GZHQ_Text1":"","parent":"FSaleOrderEntry"}],"FSalerId":"YG202009300027"} ] } } ] } } } } } } } } } ``` #### 提交与审核 最后,我们需要设置一些其他请求参数,以确保提交并审核该销售订单。这些参数包括: - `FormId`: 金蝶业务对象表单ID,例如 `SAL_SaleOrder` - `Operation`: 执行操作,例如 `BatchSave` - `IsAutoSubmitAndAudit`: 是否自动提交并审核,布尔值 `true` - `IsVerifyBaseDataField`: 是否验证基础资料有效性,布尔值 `false` 这些参数确保了我们在提交销售订单时,能够自动完成审核流程,提高了效率。 通过以上步骤,我们成功地将采购订单的数据经过ETL转换后,写入到了金蝶云星空API接口,实现了不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了每个环节的数据准确性和一致性。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)