数据集成与ETL模式下的金蝶云星空数据写入方法

  • 轻易云集成顾问-谢楷斌
### 某电子企业易仓数据对接金蝶云星空的实现案例 在本次技术分享中,我们将详细介绍如何通过轻易云数据集成平台,实现某电子企业的易仓系统和金蝶云星空之间的数据对接。具体方案为“Done-易仓-直接调拨单——>金蝶-直接调拨单”,目标是确保从易仓获取到的每一条调拨单据,能够准确、高效地写入到金蝶云星空。 首先,为了保证从易仓系统中抓取的数据不漏单,我们利用`getTransferOrders` API接口进行定时拉取。这一步至关重要,它不仅保证了业务数据的实时性,还能有效应对分页和限流问题。在实施过程中,我们设置了细致的分页处理逻辑,并增加重试机制来应对意外错误。 随后,将大批量的数据快速写入到金蝶云星空系统,是项目成功与否的关键。我们使用的是金蝶提供的`batchSave` API接口,通过这个接口可以一次性接收大量数据,从而大幅提升操作效率。为了进一步优化,采用了异步处理及并发控制手段,以确保在高峰期也能保持稳定运行。 另一个不可忽视的问题是两套系统间的数据格式差异。针对这一挑战,我们设计了一系列映射规则,借助轻松自定义化的数据转换功能,将不同结构、字段名等差异统一起来,确保无缝衔接。此外,在整个过程中的每个环节,都安排有实时监控与日志记录,从而及时发现和解决潜在问题,提高整体流程透明度和可靠性。 最后,需要特别注意的是异常处理与错误重试机制。当遇到无法预见的问题时,比如网络抖动或API返回异常状态码时,这些措施将会自动介入,通过多次尝试以最大程度上保证任务完成。同时,也不会阻塞后续正常任务执行,使得整个流程更加健壮。 总结上述步骤,本文案例展示了如何通过精细化设计,实现复杂业务场景中的跨系统集成,为其他类似项目提供可行参考。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用易仓接口getTransferOrders获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用易仓接口`getTransferOrders`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置调用易仓接口的元数据。以下是具体的元数据配置: ```json { "api": "getTransferOrders", "effect": "QUERY", "method": "POST", "number": "to_code", "id": "to_code", "idCheck": true, "request": [ {"field": "page", "label": "page", "type": "int", "value": "1"}, {"field": "page_size", "label": "page_size", "type": "int", "value": "50"}, {"field": "data_receiving_for", "label": "收货完成时间开始", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "data_receiving_to", "label": "收货完成时间结束", "type": "string", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "user_id", "label": "当前user登录ID", "type": "string", "value":"58"}, {"field":"warehouse_receipt","label":"目的仓状态","type":"int","value":"2"} ], “autoFillResponse”: true, “condition_bk”: [ [ {"field":"target_warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"}, {"field":"warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"} ] ], “condition”: [ [ {"field":"target_warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"}, {"field":"warehouse_id","logic":"in","value":"19.4.8.11.7.6.22.12.5.16.26.25.9.28"} ] ] } ``` #### 请求参数详解 - `page` 和 `page_size`:用于分页请求,确保每次请求的数据量可控。 - `data_receiving_for` 和 `data_receiving_to`:分别表示收货完成时间的开始和结束,通过动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来设置。 - `user_id`:当前用户的登录ID,这里固定为58。 - `warehouse_receipt`:目的仓状态,固定值为2。 #### 条件过滤 为了确保我们只获取到目标仓库的数据,我们设置了两个条件过滤: - `target_warehouse_id` 和 `warehouse_id`:使用逻辑运算符"in"来限定目标仓库和源仓库的ID范围。 #### 数据请求与清洗 在完成接口调用配置后,我们通过POST方法发送请求以获取调拨单数据。轻易云平台会自动处理响应数据,包括自动填充响应(autoFillResponse),这一步骤极大简化了开发者的工作。 #### 数据转换与写入 在获取并清洗完数据后,下一步是将其转换为目标系统所需的格式,并写入金蝶系统。这部分工作通常包括字段映射、数据类型转换等操作。 例如,将从易仓获取到的调拨单号(to_code)映射到金蝶系统中的相应字段,并确保所有字段的数据类型匹配。 通过上述步骤,我们可以高效地完成从易仓到金蝶系统的数据集成。这不仅提高了业务流程的透明度和效率,还确保了数据的一致性和准确性。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源平台数据写入金蝶云星空 在数据集成的生命周期中,ETL(提取、转换、加载)是一个至关重要的环节。本文将深入探讨如何利用轻易云数据集成平台,将已集成的源平台数据进行ETL转换,并最终通过API接口写入金蝶云星空。 #### 元数据配置解析 元数据配置是实现数据转换和写入的核心。以下是具体的元数据配置解析: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "...", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "ZJDB01_SYS" }, ... ], ... } ``` - `api`:指定调用的API接口,这里为`batchSave`。 - `method`:HTTP请求方法,使用`POST`。 - `idCheck`:是否进行ID检查,设置为`true`。 - `request`:请求参数列表,包含多个字段,每个字段都有详细的描述和配置。 #### 请求参数详解 ##### 单据类型(FBillTypeID) ```json { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "...", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "ZJDB01_SYS" } ``` - `field`: 字段名,对应金蝶云星空API中的参数。 - `label`: 字段标签,用于标识字段含义。 - `type`: 数据类型,这里为字符串。 - `parser`: 数据解析器,将源平台的数据格式转换为目标平台所需格式。 - `value`: 默认值或映射值,这里为标准直接调拨单类型。 ##### 销售组织(FSaleOrgId) ```json { "field": "FSaleOrgId", ... "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, ... } ``` 销售组织字段需要通过`ConvertObjectParser`解析器,将源平台的组织ID转换为金蝶云星空所需的格式。 ##### 调拨单明细信息(FBillEntry) ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { ..., { field: 'FBillEntry', label: '明细信息', type: 'array', describe: '1', value: 'transfer_order_details', children: [ { field: 'FMaterialId', label: '物料编码', type: 'string', describe: '基础资料', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '_findCollection find FMaterialId_FNumber from 6019c615-1c31-3860-ac7f-b8508e4573cc where FCustMatNo={{transfer_order_details.product_sku}}' }, { field: 'FQty', label: '调拨数量', type: 'string', describe: '数量', value: '{{transfer_order_details.quantity}}' }, { field: 'FSrcStockId', label: '调出仓库', type: 'string', describe: '基础资料', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '{warehouse_id}', mapping:{ target:'65efbdb61ff2e733b803043f', direction:'positive' } }, { field:'FDestStockId', label:'调入仓库', type:'string', describe:'基础资料', parser:{ name:'ConvertObjectParser', params:'FNumber' }, value:'{target_warehouse_id}', mapping:{ target:'65efbdb61ff2e733b803043f', direction:'positive' } }, { field:'FNoteEntry', label:'备注', type:'string', describe:'多行文本' } ] } ] } } } } } } } } } } } } } } } } } } ``` 明细信息字段是一个数组,包含多个子字段,如物料编码、调拨数量、调出仓库等。这些子字段同样需要通过解析器进行转换。 #### 调用API接口 在完成所有字段的配置后,通过HTTP POST请求将数据发送到金蝶云星空API接口: ```python import requests url = "<金蝶云星空API地址>" headers = {"Content-Type":"application/json"} data = {...} # 根据元数据配置生成的数据 response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("数据成功写入金蝶云星空") else: print(f"写入失败,状态码:{response.status_code}") ``` #### 总结 通过上述步骤,我们可以利用轻易云数据集成平台,将源平台的数据进行ETL转换,并最终通过API接口写入金蝶云星空。在实际操作中,需要根据具体业务需求调整元数据配置,以确保数据准确无误地传输到目标系统。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)