ETL技术在数据集成中的应用:将U8数据写入旺店通

  • 轻易云集成顾问-曾平安
### 用友U8数据集成到旺店通·企业奇门的技术案例:B111 u8采购入库单(详情)查询 - 拍扁 在现代系统对接过程中,如何实现用友U8与旺店通·企业奇门之间的数据平滑转换和高效同步,是每个技术团队关注的焦点。本次技术案例展示了通过轻易云数据集成平台,成功实现用友U8系统中的采购入库单数据快速、安全地传输至旺店通·企业奇门。这一方案名为“B111 u8采购入库单(详情)查询 - 拍扁”,其核心挑战包括确保数据不漏单、处理接口分页和限流、以及准确无误的格式差异处理。 首先,我们需要从用友U8中抓取采购入库单详细信息。使用/api链接/u8api这个API,我们能够定时可靠地获取所需数据,并且实时监控抓取过程以应对可能出现的问题。在这一步骤中,需要特别注意接口调用频率及分页机制,以避免因超载导致的数据丢失或服务拒绝。此外,还要考虑到如何将这些大量的数据快速写入到目标系统——旺店通·企业奇门。 其次,在处理自主化映射时,我们利用wdt.purchase.order.push API,将提取自用友U8的原始数据显示规则校准后推送给旺店通。此过程中不可忽略的是两者之间的数据格式差异问题,通过定制化映射规则,以及综合错误重试与异常机制,使得每条记录都能被精准转化并安全传输。 最后,对接流程还必须包含全面的监控与日志记录,从而保障整个操作链路透明可追溯。一旦发生预期外错误,可以及时定位原因并触发自动重试逻辑,提高整体可靠性。 本篇文章将深入介绍上述各环节的具体实施方式,带领读者探究一个高效稳定的数据集成解决方案实例。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 调用用友U8接口获取并加工数据的技术案例 在轻易云数据集成平台中,调用源系统用友U8接口/apilink/u8api获取并加工数据是生命周期的第一步。本文将深入探讨如何通过配置元数据实现这一过程,并分享具体的技术细节和案例。 #### 配置元数据 首先,我们需要理解并配置元数据,以便正确调用用友U8接口。以下是我们使用的元数据配置: ```json { "api": "/apilink/u8api", "effect": "QUERY", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "data", "label": "body参数", "type": "object", "children": [ { "field": "过滤条件_1", "label": "过滤条件_1", "type": "object", "children": [ {"field": "名称", "label": "开始时间", "type": "string", "value":"ddate"}, {"field": "比较符号", "label":"大于等于", "type":"string", "value" : ">="}, {"field":"值","label":"短日期","type":"datetime","value":"{{HOURE_AGO_1|datetime}}"} ] }, { "field":"过滤条件_2", "label":"过滤条件_2", "type":"object", ... }, { ... } ] } ], ... } ``` #### 请求参数配置 在请求参数中,我们定义了两个主要的过滤条件,用于指定查询采购入库单的时间范围。这些过滤条件包括开始时间和结束时间,分别使用`{{HOURE_AGO_1|datetime}}`和`{{CURRENT_TIME|datetime}}`来动态生成查询时间。 ```json { ... { field: 'data', label: 'body参数', type: 'object', children: [ { field: '过滤条件_1', label: '过滤条件_1', type: 'object', children: [ { field: '名称', label: '开始时间', type: 'string', value: 'ddate' }, { field: '比较符号', label: '大于等于', type: 'string', value: '>=' }, { field: '值', label: '短日期', type: 'datetime', value: '{{HOURE_AGO_1|datetime}}' } ] }, { field: '过滤条件_2', label: '过滤条件_2', type: 'object', children: [ { field: '名称', label: '结束时间', type: 'string', value: 'ddate' }, { field: '比较符号', label:'小于等于', type:'string', value:'<=' }, { field:'值','label':'短日期','type':'datetime','value':'{{CURRENT_TIME|datetime}}' } ] } ] } } ``` #### 接口调用与数据处理 在配置好请求参数后,我们通过POST方法调用用友U8接口。以下是一个示例请求体: ```json { data:{ 过滤条件_1:{ 名称:"ddate", 比较符号:"≥", 值:"2023-10-01T00:00:00" }, 过滤条件_2:{ 名称:"ddate", 比较符号:"≤", 值:"2023-10-02T00:00:00" }, apicontext:{ pagesize:"10", pageindex:"1" } }, apiurl:"pustorein/list" } ``` 通过上述请求体,我们可以获取指定时间范围内的采购入库单列表。返回的数据会自动填充到响应中,并根据需求进行拍扁处理。 #### 数据拍扁处理 为了便于后续的数据转换与写入,我们对返回的数据进行拍扁处理。拍扁处理是指将嵌套结构的数据转换为平铺结构,使得每个字段都能独立访问。例如: ```json { id:"12345", ddate:"2023-10-01T12:00:00", supplierName:"供应商A" } ``` 通过这种方式,可以更方便地进行后续的数据转换和写入操作。 #### 实践案例 假设我们需要查询最近一小时内的采购入库单,并将结果存储到目标系统中。我们可以按照以下步骤进行操作: 1. **配置元数据**:如上所述,定义请求参数和API接口。 2. **发送请求**:通过POST方法调用用友U8接口,获取采购入库单列表。 3. **处理响应**:对返回的数据进行拍扁处理,确保每个字段都能独立访问。 4. **存储数据**:将处理后的数据写入目标系统,实现无缝对接。 通过以上步骤,我们可以高效地实现不同系统间的数据集成,确保数据的一致性和准确性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期的第二步:ETL转换与写入目标平台 在数据集成生命周期中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。 #### API接口配置与元数据解析 在本案例中,我们需要将U8采购入库单的数据转换并推送到旺店通·企业奇门API接口。根据提供的元数据配置,API接口为`wdt.purchase.order.push`,使用POST方法进行数据提交。以下是具体字段及其描述: 1. **供应商编码(provider_no)**: - 字段类型:string - 描述:供应商编号,ERP供应商档案必须存在此编号,否则推送失败。 - 映射值:`{cvencode}` 2. **仓库编号(warehouse_no)**: - 字段类型:string - 描述:代表仓库所有属性的唯一编码,用于仓库区分。 - 固定值:`999999` 3. **API单号(outer_no)**: - 字段类型:string - 描述:API单号保证唯一。 - 映射值:`{ccode}` 4. **收货人(contact)**: - 字段类型:string - 描述:收货人姓名。 5. **采购人(purchase_name)**: - 字段类型:string - 描述:采购员。 6. **备注(remark)**: - 字段类型:string - 描述:采购单备注。 - 映射值:`{cmemo}` 7. **多行分录(details_list)**: - 字段类型:array - 描述:包含采购单所有货品明细信息的数据节点。 - 商家编码(spec_no):映射值 `{{body.cinvcode}}` - 采购量(num):映射值 `{{body.iquantity}}` - 采购价格(price):映射值 `{{body.ioritaxcost}}` #### 数据转换过程 在进行数据转换时,我们需要确保每个字段都能正确映射到目标平台所需的格式。这包括字符串处理、数值转换和数组结构的调整。 1. **提取源数据**: ```json { "cvencode": "V12345", "ccode": "PO20231001", "cmemo": "紧急订单", "body": [ { "cinvcode": "P001", "iquantity": 100, "ioritaxcost": 50.00 }, { "cinvcode": "P002", "iquantity": 200, "ioritaxcost": 30.00 } ] } ``` 2. **转换为目标格式**: ```json { "provider_no": "V12345", "warehouse_no": "999999", "outer_no": "PO20231001", "contact": "", "purchase_name": "", "remark": "紧急订单", "details_list": [ { "spec_no": "P001", "num": 100, "price": 50.00 }, { "spec_no": "P002", "num": 200, "price": 30.00 } ] } ``` #### 数据写入目标平台 完成数据转换后,即可通过POST请求将数据写入目标平台旺店通·企业奇门。以下是一个示例请求: ```python import requests url = 'https://api.wangdian.cn/openapi2/wdt.purchase.order.push' headers = {'Content-Type': 'application/json'} data = { 'provider_no': 'V12345', 'warehouse_no': '999999', 'outer_no': 'PO20231001', 'contact': '', 'purchase_name': '', 'remark': '紧急订单', 'details_list': [ {'spec_no': 'P001', 'num': 100, 'price': 50.00}, {'spec_no': 'P002', 'num': 200, 'price': 30.00} ] } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` 通过上述步骤,我们实现了从U8采购入库单到旺店通·企业奇门API接口的数据ETL转换和写入。此过程不仅保证了数据的一致性和准确性,还提升了系统间的数据流动效率。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)