利用轻易云实现YS-采购退料单的ETL转换

  • 轻易云集成顾问-李国敏
### 用友BIP到吉客云的系统对接集成案例分享 为满足企业业务流程高效、可靠的数据交互需求,本次技术案例将重点探讨如何通过用友BIP数据集成至吉客云。具体来说,本例方案“YS-采购退料单--->吉客云-出库单-ok”展示了如何利用轻易云数据集成平台实现这一复杂任务。 在本案例中,我们需要从用友BIP获取采购退料单的数据,并将其转换后写入到吉客云的出库单中。核心挑战包括处理接口分页和限流问题,确保数据完整性,以及解决两者之间的数据格式差异。此外,为避免漏单风险,我们设计了一套定时抓取机制,通过调用用友BIP提供的API接口 `/yonbip/scm/purinrecord/list` 获取数据,再利用轻易云平台中的自定义转换逻辑和批量写入能力,将处理后的数据通过 API 接口 `erp.stock.createandstockout` 写入至吉客云。 整个过程中,充分利用了以下几个关键特性: 1. **高吞吐量的数据写入能力**:能够快速、大量地将采购退料单数据导入到吉客云,从而显著提升处理效率。 2. **实时监控与日志记录**:可以全程跟踪每个步骤的执行情况,及时发现并处理异常,以保证不漏任何一条重要信息。 3. **自定义数据转换逻辑**:根据实际业务需求,对获取的数据进行适应性的调整,以便顺利完成跨系统对接。 通过使用这些特性和方法,我们有效地解决了跨系统间大批量、高频率、精准的一体化管理,实现了两大企业信息系统之间无缝衔接。在之后部分,将详细阐述具体实施方案及所遇挑战与解决策略。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口调用与数据加工技术案例 在数据集成过程中,调用源系统接口获取并加工数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP接口`/yonbip/scm/purinrecord/list`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置接口的元数据,以便正确调用和处理返回的数据。以下是元数据配置的关键部分: ```json { "api": "/yonbip/scm/purinrecord/list", "effect": "QUERY", "method": "POST", "number": "code", "id": "id", "idCheck": true, "formatResponse": [ { "old": "warehouse", "new": "new_warehouse", "format": "string" } ], ... } ``` - `api`: 指定了要调用的API路径。 - `effect`: 表示该操作为查询类型。 - `method`: 使用POST方法进行请求。 - `number` 和 `id`: 用于标识单据编码和唯一ID。 - `formatResponse`: 定义了响应数据的格式转换规则,将`warehouse`字段重命名为`new_warehouse`。 #### 请求参数配置 为了获取所需的数据,我们需要设置适当的请求参数。以下是一些关键参数及其配置: ```json { "request": [ {"field":"pageIndex","label":"页码","type":"string","describe":"例:1 默认值:1","value":"1"}, {"field":"pageSize","label":"每页数","type":"string","describe":"例:10 默认值:10","value":"100"}, {"field":"isSum","label":"查询表头","type":"string","describe":"例:false 默认值:false"}, {"field":"code","label":"单据编码","type":"string"}, {"field":"open_vouchdate_begin","label":"开始日期","type":"string"}, {"field":"open_vouchdate_end","label":"结束日期","type":"string"}, ... ] } ``` - `pageIndex` 和 `pageSize`: 控制分页查询,默认值分别为1和100。 - `isSum`: 是否查询表头信息,默认为false。 - `code`, `open_vouchdate_begin`, `open_vouchdate_end`: 用于过滤特定单据和日期范围。 #### 数据过滤条件 为了进一步精确地筛选数据,可以使用复杂的过滤条件。例如: ```json { "simpleVOs": { "field1": { "field": "auditTime", "op": "between", "value1": "{{DAYS_AGO_3|datetime}}", "value2": "{{CURRENT_TIME|datetime}}" }, ... } } ``` - 使用`auditTime`字段进行时间范围过滤,取最近三天的数据。 - 支持多种比较符,如`between`, `lt`, 等等。 #### 调用接口并处理响应 在完成上述配置后,通过轻易云平台发起请求,并对响应数据进行处理。以下是一个示例代码片段: ```python import requests import json url = 'https://api.yonyoucloud.com/yonbip/scm/purinrecord/list' headers = {'Content-Type': 'application/json'} payload = { 'pageIndex': '1', 'pageSize': '100', 'isSum': 'false', 'simpleVOs': { 'field1': { 'field': 'auditTime', 'op': 'between', 'value1': '{{DAYS_AGO_3|datetime}}', 'value2': '{{CURRENT_TIME|datetime}}' } } } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据格式转换 for record in data['records']: record['new_warehouse'] = record.pop('warehouse') ``` 通过上述步骤,我们成功调用了用友BIP接口,并对返回的数据进行了必要的格式转换和处理。 #### 总结 本文详细介绍了如何通过轻易云数据集成平台调用用友BIP接口获取采购退料单数据,并对其进行加工处理。这一步骤是整个数据集成生命周期中的关键环节,通过合理配置元数据和请求参数,可以高效地实现不同系统间的数据无缝对接。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将YS-采购退料单转换为吉客云出库单 在数据集成过程中,ETL(Extract, Transform, Load)是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将YS-采购退料单的数据进行ETL转换,并通过吉客云API接口写入到目标平台。 #### API接口配置与元数据解析 我们需要使用的API接口是`erp.stock.createandstockout`,该接口用于创建并执行出库操作。以下是具体的元数据配置: ```json { "api": "erp.stock.createandstockout", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "outWarehouseCode", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "_findCollection find code from b43de0e8-d19c-3422-87d0-363ebf7eb13e where new_id={new_warehouse}" }, { "field": "outType", "label": "类型", "type": "string", "describe": "类型", "value": "205" }, { "field": "relDataId", "label": "关联单据id", "type": "string", "describe": "关联单据id", "value": "{code}_1" }, { "field": "applyDate", "label": "申请时间", "type": "string", "describe": "申请时间", "value": "{vouchdate}" }, { ... } ], ... } ``` #### 数据请求与清洗 首先,我们需要从YS-采购退料单中提取相关数据,并进行必要的清洗和转换。这一步主要涉及字段映射和数据格式的调整。例如,仓库编码(`outWarehouseCode`)需要通过查询来获取: ```json { ... { “field”: “outWarehouseCode”, “label”: “仓库编码”, “type”: “string”, “describe”: “仓库编码”, “value”: “_findCollection find code from b43de0e8-d19c-3422-87d0-363ebf7eb13e where new_id={new_warehouse}” } } ``` 这里使用了一个查询语句来从指定集合中查找仓库编码,这种动态获取方式确保了数据的一致性和准确性。 #### 数据转换与写入 接下来是将清洗后的数据进行转换,并按照吉客云API接口所需的格式进行组织。以下是关键字段的转换示例: ```json { ... { “field”: “relDataId”, “label”: “关联单据id”, “type”: “string”, “describe”: “关联单据id”, “value”: “{code}_1” }, { ... } } ``` 在这个例子中,`relDataId`字段通过字符串拼接生成,以确保每个出库单都有唯一的关联标识。 对于出库明细信息(`stockOutDetailViews`),我们需要处理数组类型的数据,并对每个子项进行相应的字段映射和转换: ```json { ... { “field”: “stockOutDetailViews”, “label”: “出库明细信息”, “type”: “array”, ... ”children“: [ { ”field“: ”skuBarcode“, ”label“: ”条形码“, ”type“: ”string“, ”value“: ”{productn_productDetail_barCode}“ }, ... { ”field“: ”skuCount“, ”label“: ”数量“, ”type“: ”string“, ”describe“: ”数量“, ”value“: _function ‘{qty}’*(-1) }, ... ] } } ``` 这里特别注意数量(`skuCount`)字段,需要将正数转换为负数以符合出库逻辑。 #### 实际应用案例 假设我们有一笔YS-采购退料单,其核心数据如下: ```json { ... { new_warehouse: 'WH001', code: 'RT12345', vouchdate: '2023-10-01', purInRecords: [ { productn_productDetail_barCode: '1234567890123', qty: '10', oriTaxUnitPrice: '100.00', natSum: '1000.00' } ], purInRecordsSNs: [ { sn: 'SN001' }, { sn: 'SN002' } ] } } ``` 通过上述配置和处理,我们可以生成如下符合吉客云API接口要求的数据结构: ```json { outWarehouseCode: 'WH001', outType: '205', relDataId: 'RT12345_1', applyDate: '2023-10-01', source: 'OPEN', memo: 'YS采购退料单-RT12345', stockOutDetailViews:[ { skuBarcode:'1234567890123', relDetailId:'', skuCount:'-10', skuPrice:'100.00', isCertified:'1', totalAmount:'-1000.00', serialList:[ { serialNo:'SN001' }, { serialNo:'SN002' } ] } ], vendCode:'' } ``` 最终,通过POST请求,将这些数据写入到吉客云,实现了从YS系统到吉客云系统的数据无缝对接。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)