轻易云数据集成平台助力吉客云对接用友BIP

  • 轻易云集成顾问-吕修远
### 吉客云数据集成到用友BIP的技术案例分享 在本文中,我们将深入探讨通过轻易云数据集成平台实现吉客云与用友BIP的系统对接。本项目具体涉及吉客云中的“其他出库单”数据写入到用友BIP,方案名为"吉客云-其他出库---> YS-其他出库单-OK"。 #### 项目背景 整合吉客云与用友BIP两个系统的数据,是为了实现高效、无缝的数据流转。借助轻易云的平台,我们不仅能支持高吞吐量的数据写入,还具备实时监控和异常处理能力,从而确保整个数据集成过程平稳进行。 #### 技术要点 **1. 数据获取及分页处理** 通过调用吉客云提供的API `erp.storage.goodsdocout.v2`,我们可以获取需要同步的“其他出库单”数据。由于该接口存在分页和限流限制,我们设计了一套可靠的定时抓取机制,以确保每次请求都完整无误地获取所需数据。在此过程中,实现了精准掌控分页参数以及限流策略的灵活调整。 **2. 数据转换逻辑** 为了使得从吉客云提取出来的数据能够适配用友BIP接收格式,我们利用平台提供的自定义转换功能,对源数据进行必要的清洗和重构。这样处理后,再通过API `/yonbip/scm/othoutrecord/single/save` 将整理后的“其他出库单”批量、安全地提交至用友BIP系统。 **3. 实时监控与告警** 在整个流程中,通过全透明可视化操作界面和集中监控系统,我们可以实时跟踪每一个任务执行情况。一旦出现任何异常,如接口超时或响应错误,告警机制会立刻通知相关人员并触发自动重试策略,从而提高任务成功率。 以上是本项目实施的一些关键技术点,下文将详细介绍相关配置步骤与实施细节,并包括如何利用轻易云平台优化这些流程以达到最佳性能表现。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用吉客云接口`erp.storage.goodsdocout.v2`获取并加工数据。 #### 接口配置与请求参数 根据元数据配置,我们需要向吉客云接口发送一个POST请求。以下是该接口的主要配置参数: - **API**: `erp.storage.goodsdocout.v2` - **Method**: `POST` - **Pagination**: 每页50条记录 - **ID Check**: 启用ID检查 - **Auto Fill Response**: 自动填充响应 请求参数包括分页信息、出库单号、更新时间范围、创建时间范围、出库类型等。以下是具体的请求参数及其含义: ```json { "pageIndex": "1", "pageSize": "50", "goodsDocNo": "", "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')", "startDate": "", "endDate": "", "inouttype": "204", "warehouseCode": "", "outBillNo": "", "vendCode": "", "billNo": "", "userName": "", "selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,vendCustomerId,applyDepartId,applyDepartName,outBillNo,companyCode,deliveryNo,..." } ``` #### 数据清洗与转换 在接收到吉客云的数据后,需要进行清洗和转换,以便后续处理和写入目标系统。以下是几个关键步骤: 1. **分页处理**:由于每次请求只能获取50条记录,因此需要循环调用接口,直到获取所有数据。 2. **时间格式转换**:将`gmtModifiedStart`和`gmtModifiedEnd`字段的Unix时间戳转换为标准时间格式,确保数据的一致性。 3. **字段映射与重命名**:根据业务需求,将吉客云返回的数据字段映射到目标系统所需的字段。例如,将`goodsDocDetailList.goodsId`映射为目标系统中的商品ID。 4. **数据过滤与校验**:根据业务规则过滤无效或重复的数据。例如,过滤掉仓库编号为"03"的数据。 #### 实际案例 假设我们需要获取过去一天内所有“其他出库”的记录,并将其写入目标系统。具体步骤如下: 1. **初始化请求参数**: ```json { "pageIndex": "1", "pageSize": "50", ... "gmtModifiedStart": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')", ... } ``` 2. **循环调用接口,获取所有分页数据**: ```python all_data = [] page_index = 1 while True: response = call_api(api="erp.storage.goodsdocout.v2", method="POST", params={"pageIndex": page_index}) data = response["data"] if not data: break all_data.extend(data) page_index += 1 ``` 3. **清洗与转换数据**: ```python cleaned_data = [] for record in all_data: if record["warehouseCode"] != "03": cleaned_record = { # 映射字段 ... } cleaned_data.append(cleaned_record) ``` 4. **写入目标系统**: ```python for record in cleaned_data: write_to_target_system(record) ``` 通过上述步骤,我们可以高效地从吉客云获取所需的出库记录,并进行必要的数据清洗和转换,为后续的数据处理打下坚实基础。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 用友BIPAPI接口数据集成技术案例:ETL转换与写入 在使用轻易云数据集成平台进行数据处理的全生命周期管理中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台用友BIPAPI接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的关键技术细节和实现方法。 #### 1. API接口配置 在本案例中,我们需要将吉客云的“其他出库”数据转换并写入用友BIP系统。根据提供的元数据配置,我们使用的API接口为`/yonbip/scm/othoutrecord/single/save`,请求方法为POST。以下是该API接口的主要字段及其配置: - **单据编号 (`code`)**:此字段接受系统编码规则配置,示例值为`QTCK0000001`。在实际操作中,我们将其映射到源数据中的`goodsdocNo`。 - **库存组织 (`org`)**和**会计主体 (`accountOrg`)**:这两个字段都接受ID或代码,示例值为`wzyqzn`,映射到源数据中的`warehouseCode`。 - **单据日期 (`vouchdate`)**:日期格式为`yyyy-MM-dd`,示例值为`2021-03-05`,映射到源数据中的`inOutDate`。 - **交易类型 (`bustype`)**:固定值为`A10001`。 - **仓库 (`warehouse`)**:接受ID或代码,示例值为`ck01`,映射到源数据中的`warehouseCode`。 - **部门 (`department`)**、**业务员 (`operator`)**、**备注 (`memo`)**等字段也需要根据实际需求进行配置。 #### 2. 子表及孙表配置 对于子表“其他出库单子表”(字段名为 `othOutRecords`),我们需要处理以下字段: - **物料 (`product`)**:传入ID或代码,示例值为 `PD0817000001`,映射到源数据中的 `goodsNo`. - **批次号 (`batchno`)**:通过 `_function case _findCollection find detail.batchManage from 7aed2c28-cc02-35c8-aa6a-2d750373f9e1 where code={goodsNo} _endFind when false then '' else '001' end` 函数来确定是否需要填写批次号。 - **应发数量 (`contactsQuantity`)** 和 **数量 (`qty`)** 等字段均映射到源数据中的 `quantity`. 此外,对于孙表“序列号孙表”(字段名为 `othOutRecordsSNs`),我们需要处理以下字段: - **序列号id (`id`)** - **序列号 (`sn`)** 这些字段在更新操作时必填,并且需要确保每个序列号的唯一性。 #### 3. 数据转换与写入实现 在轻易云平台上,我们可以通过以下步骤实现数据转换与写入: 1. **定义元数据模型**:根据提供的元数据配置文件定义目标平台的数据模型。这一步确保了所有必要字段都被正确识别和映射。 2. **编写ETL脚本**: - 使用轻易云平台提供的可视化工具或编写自定义脚本,将源平台的数据提取出来。 - 对提取的数据进行清洗和转换,使其符合目标API接口所需的格式。例如,将日期格式从原始格式转换为 `yyyy-MM-dd`, 将数量等数值字段进行必要的单位换算等。 3. **调用API接口**: - 使用HTTP POST方法,将转换后的数据发送到用友BIP系统的 `/yonbip/scm/othoutrecord/single/save` 接口。 - 确保每个请求都包含必要的幂等性检查键(如 `resubmitCheckKey: {goodsdocNo}_1`),以防止重复提交。 4. **错误处理与日志记录**: - 捕获并处理API调用过程中可能出现的错误,如网络故障、验证失败等。 - 记录每次API调用的请求和响应,以便后续审计和问题排查。 #### 4. 示例代码片段 以下是一个简化版的Python代码片段,用于展示如何调用用友BIP API接口: ```python import requests import json url = "https://api.yonyoucloud.com/yonbip/scm/othoutrecord/single/save" headers = { "Content-Type": "application/json", "Authorization": "Bearer YOUR_ACCESS_TOKEN" } data = { "code": "QTCK0000001", "org": "wzyqzn", "accountOrg": "wzyqzn", "vouchdate": "2021-03-05", "bustype": "A10001", "warehouse": "ck01", # ... other fields ... "_status": "Insert", "othOutRecords": [ { "product": "PD0817000001", # ... other fields ... "_status": "Insert", "othOutRecordsSNs": [ { "id": 123, "sn": "SN01", "_status": "Insert" } ] } ], # ... other fields ... } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully written to Yonyou BIP") else: print(f"Failed to write data: {response.text}") ``` 通过上述步骤和技术实现,我们可以高效地将吉客云的数据转换并写入用友BIP系统,实现不同系统间的数据无缝对接。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)