ETL过程:将用友BIP数据转换写入吉客云

  • 轻易云集成顾问-吕修远
### 系统对接集成案例:用友BIP数据集成到吉客云 在本技术案例中,我们将探讨如何通过轻易云数据集成平台,实现用友BIP系统中的采购入库单(API接口路径为/yonbip/scm/purinrecord/list)与吉客云仓储管理模块中的入库单(API接口路径为erp.stock.createandstockin)的高效数据对接。方案名称为YS-采购入库单--->吉客云-入库单-ok。 该项目的核心挑战在于确保大量的数据能够快速精准地从用友BIP系统获取,并稳定、安全地写入到吉客云中。这不仅需要考虑如何处理分页和限流问题,还要确保两者之间的数据格式兼容。此外,整个过程必须具备高度透明度和实时监控能力,以随时掌握数据流动情况并及时发现异常。 首先,通过自定义数据转换逻辑,可以有效地解决用友BIP与吉客云之间的数据结构差异。例如,用友BIP返回的JSON结构可能包含多层嵌套,而吉客云可能要求一种扁平化或重新映射后的数据格式。在这个过程中,可视化的数据流设计工具显得尤为重要,它使得复杂的数据转换步骤更加直观和易于管理。 其次,由于使用了高吞吐量的数据写入能力,在批量处理大规模数据时,不仅提升了效率,也保证了业务连续性。同时,为防止漏单发生,对原始接口进行定时可靠抓取,并结合实时日志记录功能,以实现全程监控,从而最大程度上保障了每一笔记录都能准确无误地同步到目标系统中。 此外,通过集中监控和告警系统,实施了一套完善的异常检测及错误重试机制。当某个任务出现故障时,系统可以即时发出告警信息,并根据预设策略进行自动重试或手动干预。这种机制极大提高了整体流程的可靠性,使企业能够更安心地依赖这套自动化集成方案来支持其每日运营需求。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口调用与数据加工技术案例 在轻易云数据集成平台中,调用用友BIP接口`/yonbip/scm/purinrecord/list`获取并加工数据是生命周期的第一步。本文将详细探讨如何配置和使用该接口,以实现采购入库单数据的有效集成。 #### 接口基本信息 该接口主要用于查询采购入库单的列表信息,支持POST请求。以下是元数据配置中的关键字段: - `api`: `/yonbip/scm/purinrecord/list` - `effect`: `QUERY` - `method`: `POST` - `number`: `code` - `id`: `id` - `idCheck`: `true` #### 请求参数配置 请求参数是接口调用的重要组成部分,以下是主要的请求参数及其配置: 1. **分页参数**: - `pageIndex`:页码,默认值为1。 - `pageSize`:每页记录数,默认值为10,这里设置为100。 2. **查询条件**: - `isSum`:是否查询表头,默认值为false。 - `code`:单据编码,用于精确查询特定单据。 - 日期范围: - `open_vouchdate_begin`:开始日期。 - `open_vouchdate_end`:结束日期。 - 其他条件如交易类型、仓库、库存组织等。 3. **复杂查询条件**: 配置了两个复杂查询条件,用于更精细的数据过滤: - 条件1:审核时间在过去三天到当前时间之间。 ```json { "field": "auditTime", "op": "between", "value1": "{{DAYS_AGO_3|datetime}}", "value2": "{{CURRENT_TIME|datetime}}" } ``` - 条件2:采购入库单数量大于某个值。 ```json { "field": "purInRecords.qty", "op": "gt", "value1": "" } ``` #### 请求示例 根据上述配置,一个完整的请求示例如下: ```json { "pageIndex": "1", "pageSize": "100", "isSum": "false", "code": "", "open_vouchdate_begin": "", "open_vouchdate_end": "", "bustype_name": "", "warehouse_name": "", "org_id": "", "org_name": "", "org_code": "", "stockMgr_name": "", "operator_name": "", "department_name": "", "product_cName": "", "simpleVOs": [ { "field1": { "field": "auditTime", "op": "between", "value1": "{{DAYS_AGO_3|datetime}}", "value2": "{{CURRENT_TIME|datetime}}" } }, { "field2": { "field": "purInRecords.qty", "op": "gt", "value1": "" } } ] } ``` #### 数据处理与转换 获取到数据后,需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台中,可以利用内置的ETL工具进行以下操作: 1. **数据清洗**: - 去除无效或重复的数据。 - 格式化日期和数值字段。 2. **数据转换**: - 将源系统字段映射到目标系统字段。 - 根据业务需求进行字段合并或拆分。 例如,将采购入库单中的物料信息拆分成多个子记录,并映射到目标系统的相应字段。 #### 实时监控与调试 在数据集成过程中,实时监控和调试是确保数据准确性的重要手段。轻易云平台提供了可视化的监控界面,可以实时查看每个环节的数据流动和处理状态,并及时发现和解决问题。 通过以上步骤,我们可以高效地调用用友BIP接口获取采购入库单数据,并进行必要的清洗和转换,为后续的数据写入打下坚实基础。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将采购入库单数据转换并写入吉客云API接口 在数据集成生命周期的第二步,我们需要将已经从源平台集成的数据进行ETL(Extract, Transform, Load)转换,最终写入目标平台吉客云。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,将采购入库单数据转换为吉客云API接口所能接收的格式,并通过POST方法写入目标平台。 #### 元数据配置解析 以下是我们需要使用的元数据配置: ```json { "api": "erp.stock.createandstockin", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "inWarehouseCode", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "_findCollection find code from b43de0e8-d19c-3422-87d0-363ebf7eb13e where id={warehouse}" }, { "field": "inType", "label": "入库类型", "type": "string", "describe": "入库类型 101=采购入库 102=调拨入库 103=盘盈入库 104=其他入库", "value": "101" }, { "field": "relDataId", "label": "关联单据编号", "type": "string", "describe": "可随机,保证不重复即可", "value": "{srcBillNO}+{code}" }, { ... } ], ... } ``` #### 数据转换与写入步骤 1. **提取源数据**: 首先,我们需要从源系统提取采购入库单的数据。这些数据通常包括仓库编码、申请时间、备注信息、货品条形码、数量、价格等。 2. **字段映射与转换**: 根据元数据配置,我们需要将源系统中的字段映射到目标系统所需的字段。例如,`inWarehouseCode`字段需要从特定集合中查找仓库编码,而`relDataId`字段则由源单据编号和一个随机码组合生成。 3. **构建请求体**: 将映射后的字段组装成符合吉客云API接口要求的JSON结构。以下是一个示例请求体: ```json { "inWarehouseCode": "<仓库编码>", "inType": "101", ... ... ... } ``` 4. **发送请求**: 使用POST方法将构建好的JSON请求体发送到吉客云API接口。确保在发送前进行必要的ID校验(`idCheck: true`),以避免重复或错误的数据写入。 5. **处理响应**: 接收并处理吉客云返回的响应,确保数据成功写入。如果出现错误,根据错误信息进行相应调整和重试。 #### 示例代码 以下是一个使用Python实现上述步骤的示例代码: ```python import requests import json # 构建请求体 request_body = { 'inWarehouseCode': get_warehouse_code(warehouse_id), 'inType': '101', 'relDataId': f"{src_bill_no}{random_code}", 'applyDate': vouch_date, 'memo': code, 'source': 'OPEN', 'stockInDetailViews': [ { 'skuBarcode': product_barcode, 'relDetailId': detail_id, 'skuCount': qty, 'isCertified': '1', 'skuPrice': round(ori_tax_unit_price, 2), 'totalAmount': round(nat_sum, 2), 'serialList': [{'serialNo': sn} for sn in serial_numbers] } for product in products ] } # 设置API URL和Headers api_url = 'https://api.jikecloud.com/erp.stock.createandstockin' headers = {'Content-Type': 'application/json'} # 发送POST请求 response = requests.post(api_url, headers=headers, data=json.dumps(request_body)) # 检查响应状态 if response.status_code == 200: print('Data successfully written to JiKeYun') else: print(f"Error: {response.status_code}, {response.text}") ``` #### 技术要点总结 - **字段映射与转换**:确保每个字段都正确映射并转换为目标系统所需格式。 - **请求体构建**:根据元数据配置,组装符合API要求的JSON结构。 - **ID校验与错误处理**:在发送请求前进行ID校验,并在接收响应后处理可能出现的错误。 通过以上步骤,我们可以高效地将采购入库单数据从源系统转换并写入到吉客云,实现不同系统间的数据无缝对接。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)