轻易云平台ETL转换与金蝶云星空数据写入技术详解

  • 轻易云集成顾问-谢楷斌
### 聚水潭其他出库-金蝶其他出库:高效数据集成案例分析 在本技术文章中,我们将深入探讨如何通过轻易云数据集成平台,将聚水潭的其他出库数据无缝对接到金蝶云星空中的具体实现过程。本次集成任务主要依赖于两个关键API接口,即聚水潭的`other.inout.query`和金蝶云星空的`batchSave`。本文着重分享几个核心技术要点,包括确保数据不漏单、大量数据快速写入以及分页与限流问题处理。 首先,为了确保从聚水潭获取的数据不会出现漏单现象,我们采用定时可靠抓取机制,准确调用聚水潭接口 `other.inout.query`。该方法不仅能实时监控接口状态,还能及时记录日志,保证每次调用都被妥善记录并处理,一旦发生错误,可以进行精准重试。 其次,对于大量订单数据显示场景,我们通过批量写入的方法使用金蝶云星空提供的 `batchSave` 接口,以提升整体传输效率。在实际操作中,需要特别注意两者之间的数据格式差异。我们利用轻易云平台的强大转换功能,实现数据映射自动化,并根据业务需求自定义字段对应关系,从而保障了最终录入系统的数据完整性和一致性。 此外,为应对聚水潭API分页及限流要求,本方案引入了一套智能调度策略,通过动态调整请求参数,以及合理分配请求频率,避免因超额访问导致服务阻塞或速度下降。一经探测到异常情况,可以启动专门设计的错误重试机制,在保证稳定性的同时提高整体集成效率。 综上所述,这些关键步骤构成了我们此次系统对接项目成功运行的重要基石。下一部分将进一步详细阐述各个环节实施细节及技术实现方法,以供参考借鉴。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口other.inout.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的第一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭接口`other.inout.query`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置调用聚水潭接口的元数据。以下是关键的元数据配置: ```json { "api": "other.inout.query", "method": "POST", "number": "io_id", "id": "io_id", "pagination": { "pageSize": 50 }, "idCheck": true, "request": [ { "field": "modified_begin", "label": "修改起始时间", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "modified_end", "label": "修改结束时间", "type": "string", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "so_ids", "label": "指定线上订单", "type": "string" }, { "field": "types", "label": "单据类型", "type": "string", "describe": "单据类型 :其它退货,其它出库,其它进仓", "value": "其它出库", "parser":{ "name":"ConvertObjectParser","params":"FNumber" } }, { "field":"status","label":"单据状态","type":"string","describe":"单据状态,Confirmed=生效,WaitConfirm待审核,Archive=归档,Cancelled=取消","value":"Confirmed" }, { “field”: “page_index”, “label”: “开始页码”, “type”: “string”, “value”: “1” }, { “field”: “page_size”, “label”: “每页行数”, “type”: “string”, “value”: “{PAGINATION_PAGE_SIZE}” } ], "condition_bk":[[{"field":"remark","logic":"neq","value":"API接单"},{"field":"type","logic":"eq","value":"其它出库"}]] } ``` #### 请求参数解析 1. **时间范围**: - `modified_begin` 和 `modified_end` 分别表示修改起始时间和结束时间,通过模板变量 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成。 2. **单据类型**: - `types` 字段指定为“其它出库”,并使用 `ConvertObjectParser` 对其进行解析,以确保符合目标系统的格式要求。 3. **单据状态**: - `status` 字段设置为“Confirmed”,表示只查询已生效的单据。 4. **分页处理**: - `page_index` 和 `page_size` 分别表示开始页码和每页行数,通过 `{PAGINATION_PAGE_SIZE}` 动态控制分页大小。 #### 数据过滤条件 为了进一步精确查询,我们可以添加过滤条件。例如: - 排除备注为“API接单”的记录。 - 确保类型为“其它出库”。 这些条件通过 `condition_bk` 字段进行配置,如下所示: ```json "condition_bk":[[{"field":"remark","logic":"neq","value":"API接单"},{"field":"type","logic":"eq","value":"其它出库"}]] ``` #### 数据请求与清洗 在完成接口调用配置后,我们需要实际发起请求,并对返回的数据进行清洗。以下是一个简单的Python示例代码,用于发起请求并处理返回的数据: ```python import requests import json url = 'https://api.jushuitan.com/other.inout.query' headers = {'Content-Type': 'application/json'} payload = { 'modified_begin': '2023-01-01T00:00:00', 'modified_end': '2023-01-31T23:59:59', 'types': '其它出库', 'status': 'Confirmed', 'page_index': 1, 'page_size': 50 } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗示例 cleaned_data = [] for record in data['records']: if record['remark'] != 'API接单' and record['type'] == '其它出库': cleaned_data.append(record) print(cleaned_data) ``` 上述代码展示了如何通过HTTP POST请求调用聚水潭接口,并对返回的数据进行初步清洗。我们过滤掉备注为“API接单”的记录,并确保类型为“其它出库”。 #### 总结 通过轻易云数据集成平台,我们能够高效地调用聚水潭接口`other.inout.query`,并对获取的数据进行初步加工。这一步骤不仅确保了数据的准确性和完整性,也为后续的数据转换与写入奠定了坚实基础。在实际应用中,根据业务需求灵活调整元数据配置和过滤条件,可以进一步提升数据集成的效率和质量。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例 在轻易云数据集成平台的生命周期中,数据转换与写入是至关重要的一步。本文将详细探讨如何将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并通过金蝶云星空API接口将数据写入目标平台。 #### 数据请求与清洗 首先,我们需要从源平台获取原始数据并进行清洗。这部分工作通常包括对数据的格式化、去重、补全缺失值等操作,以确保数据质量。本文重点不在此,故略过详细步骤。 #### 数据转换与写入 接下来,我们进入数据转换与写入阶段。我们将使用轻易云提供的元数据配置,将清洗后的数据转换为金蝶云星空API接口能够接收的格式,并最终写入目标平台。 ##### 元数据配置解析 以下是我们使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"105"}, {"field":"FPickOrgId","label":"领用组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"105"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""} ], "otherRequest":[ {"field ":"FormId ","label ":"业务对象表单Id ","type ":"string ","describe ":"必须填写金蝶的表单ID如:PUR_PurchaseOrder ","value ":"STK_MisDelivery"}, {"field ":"IsAutoSubmitAndAudit ","label ":"提交并审核 ","type ":"bool ","value ":true}, {"field ":"IsVerifyBaseDataField ","label ":"验证基础资料 ","type ":"bool ","describe ":"是否验证所有的基础资料有效性,布尔类,默认false(非必录) ","value ":false}, {"field ":"Operation ","label ":"执行的操作 ","type ":"string ","value ":"Save"}, {"label ":"允许负库存 ","field ":"InterationFlags ","type ":"string ","value ":"STK_InvCheckResult"} ] } ``` ##### 数据字段映射 1. **FBillTypeID**:单据类型,通过`ConvertObjectParser`解析为`FNumber`。 2. **FBillNo**:单据编号,直接映射为`{io_id}`。 3. **FStockOrgId**:库存组织,通过`ConvertObjectParser`解析为`FNumber`。 4. **FPickOrgId**:领用组织,通过`ConvertObjectParser`解析为`FNumber`。 5. **FStockDirect**:库存方向,固定值为`GENERAL`。 6. **FDate**:日期,直接映射为`{io_date}`。 7. **FOwnerTypeIdHead**:货主类型,固定值为`BD_OwnerOrg`。 8. **FOwnerIdHead**:货主,通过`ConvertObjectParser`解析为`FNumber`。 ##### 明细信息字段映射 1. **FMaterialId**:物料编码,通过`ConvertObjectParser`解析为`FNumber`, 映射到 `{{items.sku_id}}` 2. **FCMKBarCode**:零售条形码,无需额外处理。 3. **FQty**:实发数量,直接映射到 `{{items.qty}}` 4. **FStockId**:发货仓库,通过 `ConvertObjectParser`, 映射到 `{warehouse}` 5. **FAmount**、**FPrice**、**FLot**、**FProduceDate**、**FExpiryDate**、**FEntryNote** ##### API请求构建 基于上述字段映射,我们构建API请求: ```json { "FormId": "STK_MisDelivery", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": false, "Operation": "Save", "InterationFlags": ["STK_InvCheckResult"], "Model":{ // 主表字段 ... // 明细表字段 ... } } ``` 通过上述步骤,我们成功地将源平台的数据转换并写入到金蝶云星空API接口中,实现了不同系统间的数据无缝对接。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)