轻松实现从源数据ETL转换至金蝶云星辰V2

  • 轻易云集成顾问-卢剑航
### 汤臣倍健营销云数据集成到金蝶云星辰V2——退货入库案例分享 在企业运营过程中,精准高效的退货管理对于优化库存和提升客户满意度至关重要。本文将重点探讨如何通过汤臣倍健营销云接口与金蝶云星辰V2的数据集成,实现自动化、及时准确的退货入库处理。在本次案例中,我们选用“退货入库-(佰嘉)广州玛祖”作为实际运行方案,通过调用汤臣倍健营销云数据查询API `/erp/api/order/query/saleReturnOrder` 和金蝶云星辰V2的数据写入API `/jdy/v2/scm/sal_in_bound`,实现数据的无缝衔接。 #### 数据获取与处理 首先,我们利用汤臣倍健营销云提供的API接口实时抓取销售退货订单信息。为了确保完整性,需要特别关注分页和限流问题,每次请求返回的数据量限制在合理范围内,但能够持续稳定地获取全量所需数据。同时,为了适应具体业务需求,可以自定义转换逻辑,将原始数据映射为符合目标系统要求的结构格式。 #### 数据质量监控与异常检测 其次,在整个数据传输过程中,必须增强对数据质量及其一致性的监控。不仅需要设置实时告警机制,对于任何可能出现的数据异常情况,都能及时发现并进行处理,从而保障最终写入金蝶云星辰V2系统中的数据信息准确无误。 #### 高效批量写入 然后,通过具有高吞吐量能力的平台支持,大批量地将预处理完毕的数据快速导入到金蝶云星辰V2中。这一过程不仅要考察集成效率,还要兼顾系统负载和响应速度等方面。一旦出现网络波动或其他技术故障,应能有效触发错误重试机制以保证任务顺利完成。 以上只是本案例中的几个关键步骤,详细实施细节将在后文进一步展开,包括如何设计可视化的数据流图、制定特定场景下的映射规则以及更具体的问题解决策略。希望通过这次分享,为大家带来一些实践经验上的启示,让更多企业可以从容应对多样复杂的数据集成挑战。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统API接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的`/erp/api/order/query/saleReturnOrder`接口获取退货入库数据,并对其进行初步加工。 #### API接口配置与调用 首先,我们需要配置API接口的元数据,以便正确地请求和处理数据。以下是该API的元数据配置: ```json { "api": "/erp/api/order/query/saleReturnOrder", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "idCheck": true, "request": [ {"field":"tenantId","label":"经销商id","type":"string","describe":"经销商id(必填,营销云id)如:34cc4109705e4c058b7b3b0352e57d31","value":"xxx"}, {"field":"yxyNumber","label":"营销云销售订单号","type":"string","describe":"如:YD1215710122031701,传此参数时,其他时间状态等条件无效"}, {"field":"number","label":"系统订单号","type":"string","describe":"如:XOUT0000000293,传此参数时,其他时间状态等条件无效"}, {"field":"status","label":"订单状态","type":"string","describe":"0:未审核 1:已审核(已出库)","value":"1"}, {"field":"beginTime","label":"开始时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-00 00:00:00,如果不传单号此字段必填","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endTime","label":"结束时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-00 00:00:00,如果不传单号此字段必填","value":"{{CURRENT_TIME|datetime}}"}, {"field":"pageNo","label":"页码","type":"string","describe":"默认1","value":"1"}, {"field":"pageSize","label":"每页条数","type":"string","describe":"默认30","value":"30"}, {"field":"timeType","label":"时间段标志","type":"string","describe":"查询时间段标识,0:创建时间(默认),1:最后更新时间","value":"1"} ], "autoFillResponse": true } ``` #### 请求参数解析 在实际调用过程中,我们需要根据业务需求填写相应的请求参数: - `tenantId`: 经销商ID,这是一个必填项,用于标识具体的经销商。 - `yxyNumber` 和 `number`: 分别对应营销云销售订单号和系统订单号,这两个字段在特定情况下可以作为唯一标识来查询。 - `status`: 表示订单状态,这里我们设置为已审核(值为1)。 - `beginTime` 和 `endTime`: 用于指定查询的时间范围,通过模板变量动态获取上次同步时间和当前时间。 - `pageNo` 和 `pageSize`: 分页参数,用于控制每次请求的数据量。 - `timeType`: 时间段标志,用于区分基于创建时间还是更新时间进行查询。 #### 数据请求与清洗 通过配置好的元数据,我们可以发起POST请求来获取退货入库的数据。轻易云平台会自动处理请求并返回结果。在这个过程中,我们需要关注以下几点: 1. **数据格式验证**:确保返回的数据符合预期的格式,包括字段类型和结构。 2. **异常处理**:处理可能出现的网络异常或接口错误,例如超时、无效参数等。 3. **数据清洗**:对返回的数据进行初步清洗,例如去除空值、格式转换等。 #### 数据转换与写入 在完成数据请求与清洗后,我们需要将数据转换为目标系统所需的格式,并写入到相应的数据库或文件中。这一步通常包括: - **字段映射**:将源系统的数据字段映射到目标系统对应的字段。 - **格式转换**:例如日期格式、数值精度等转换。 - **批量写入**:为了提高效率,可以采用批量写入的方法,将多条记录一次性写入目标系统。 通过上述步骤,我们可以高效地从汤臣倍健营销云获取退货入库的数据,并进行初步加工,为后续的数据处理和分析打下坚实基础。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换至金蝶云星辰V2API接口 在数据集成的生命周期中,第二步是将已集成的源平台数据进行ETL转换,并写入目标平台。在本案例中,我们将数据转换为金蝶云星辰V2API接口所能接收的格式,最终写入目标平台。以下是具体的技术实现细节。 #### API接口配置 首先,我们需要配置目标API接口。根据提供的元数据配置,金蝶云星辰V2API接口的路径为`/jdy/v2/scm/sal_in_bound`,请求方法为`POST`。以下是详细的字段映射和配置: ```json { "api": "/jdy/v2/scm/sal_in_bound", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "bill_source", "label": "来源", "type": "string", "value": "ISV" }, { "field": "bill_date", "label": "出库日期", "type": "string", "describe": "出库日期,格式:2019-01-01", "value": "{{auditTime|date}}" }, { "field": "customer_id", ... } ] } ``` #### 数据转换与映射 在进行ETL转换时,我们需要将源平台的数据映射到目标API接口所需的字段。以下是几个关键字段的处理逻辑: 1. **bill_date**: 出库日期,需要将源数据中的`auditTime`字段格式化为日期字符串。 ```json { "field": "bill_date", "label": "出库日期", ... "value": "{{auditTime|date}}" } ``` 2. **customer_id**: 客户ID,通过查询客户编号获取对应的ID。 ```json { ... { "field": "customer_id", ... "value":"_findCollection find id from 8c940730-bea3-3b6b-9120-72d220c2196b where number={extCusCode}" } } ``` 3. **material_entity**: 商品分录,这是一个数组类型字段,需要对每个商品项进行处理。 ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... {"field":"material_entity","label":"商品分录","type":"array","describe":"商品分录","value":"itemList","children":[{"field":"material_id","label":"商品id","type":"string","describe":"商品id","value":"_findCollection find id from 624ce803-38fe-3d71-8c88-cbb93bc5a8df where number={extMaterialNo}"},{"field":"stock_id","label":"仓库id","type":"string","describe":"仓库id","value":"1545724383396399104"},{"field":"qty","label":"数量","type":"int","describe":"数量","value":"{{itemList.opernumber}}"},{"field":"tax_price","label":"含税单价","type":"int","describe":"含税单价","value":"{{itemList.taxunitprice}}"},{"field":"is_free","label":"是否赠品","type":"bool","describe":"是否赠品","value":"false"},{"field":"unit_id","label":"单位id","type":"string","describe":"单位id","value":"_findCollection find base_unit_id from 624ce803-38fe-3d71-8c88-cbb93bc5a8df where number={extMaterialNo}"},{"field":"batch_no","label":"批次号","type":"string"},"describe":"","批次号":"","value":"","{{itemList._Flot}}"},"{"field":"","comment":"","label":"","行备注":"","type":"","string":"","describe":"","行备注":"","value":"","{{itemList.remark}}"},"{"field":"","kf_date":"","label":"","生产日期":"","type":"","string":"","describe":"","生产日期","",""{},""{{itemList._Fmfg}}""}]}]} ``` #### 数据写入 完成数据转换后,将其通过HTTP POST请求写入金蝶云星辰V2API接口。以下是示例代码: ```python import requests url = 'https://api.kingdee.com/jdy/v2/scm/sal_in_bound' headers = {'Content-Type': 'application/json'} data = { ... } # 转换后的JSON数据 response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print('Data successfully written to Kingdee Cloud.') else: print(f'Failed to write data: {response.status_code}, {response.text}') ``` 通过以上步骤,我们实现了从源平台到金蝶云星辰V2API接口的数据ETL转换与写入。这一过程确保了不同系统间的数据无缝对接,提高了业务流程的效率和透明度。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)