ETL转换:从用友BIP到旺店通的集成实现

  • 轻易云集成顾问-曾平安
### 案例分享:用友BIP数据集成到旺店通·企业奇门 在本案例中,我们将详细展示如何通过“供应商集成同步-v”这一方案,实现用友BIP系统的数据精准高效地对接到旺店通·企业奇门平台。 首先,确保用友BIP的供应商信息不漏单是整个数据对接过程中的首要任务。我们使用了/yonbip/digitalModel/vendor/list接口从用友BIP获取必要的供应商数据。为了保证所有数据都能准确抓取,我们设置了定时任务,这些任务能够可靠地调用API并抓取最新的数据。这不仅确保了实时监控与日志记录,还提高了整体流程的透明度和管理效率。 同时,为了解决大批量数据快速写入到旺店通·企业奇门的问题,采用了wdt.purchase.provider.create接口进行批量写入。由于两个系统之间存在一定的数据格式差异,在实施过程中,需要进行定制化的数据映射,并有效处理分页和限流问题,以避免任何潜在的系统负载过重或超时错误。 最后,不可忽视的是,对接异常情况及错误重试机制也是整个项目成功的重要环节之一。当出现API调用失败或者网络故障等异常状况时,通过预设的重试策略,可以自动重新尝试连接,从而保障业务不中断,大幅提升稳定性和可靠性。 通过上述各个步骤,本案例展示了如何使用专业技术手段,高效、安全且无缝地实现不同系统间的数据集成,为后续更多复杂业务场景提供了一种行之有效的解决方法。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image) ### 用友BIP接口/yonbip/digitalModel/vendor/list数据调用与加工 在数据集成的生命周期中,调用源系统接口并获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP接口`/yonbip/digitalModel/vendor/list`,并对获取的数据进行必要的加工处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的基本配置信息: - **API路径**: `/yonbip/digitalModel/vendor/list` - **请求方法**: `POST` - **主要字段**: - `pageIndex`: 页号,默认值为1 - `pageSize`: 每页行数,默认值为10 - `vendororg`: 使用组织id - `code`: 供应商编码 - `helpcode`: 助记码 - `vendorclass`: 所属分类id - `shipvia`: 发运方式id - `correspondingcust`: 对应客户id - `stopstatus`: 状态(false:启用、true:停用),默认值为false - `person`: 专管业务员id - `org`: 管理组织id - `deliveryvendor`: 发货供应商id - `invoicevendor`: 开票供应商id - `currency`: 交易币种id - `taxrate`: 进项税率 - `parentVendor`: 上级供应商id - `retailInvestors`: 散户(true:是、false:否) 此外,还有一个嵌套对象`simple`,包含一个字段: - **pubts**: 时间戳,用于查询大于等于该时间的供应商档案 #### 请求参数解析与设置 在实际操作中,我们需要根据业务需求设置请求参数。以下是一个示例请求参数配置: ```json { "pageIndex": "1", "pageSize": "10", "vendororg": "[666666]", "code": "03004", "helpcode": "IntelZGGS", "vendorclass": "2165398870233344", "shipvia": "[1869874060415232]", "correspondingcust": "1965830945558784", "stopstatus": "false", "person": "[1888966431069184]", "org": "[666666]", "deliveryvendor": "[2166990446334208]", "invoicevendor": "[2166990446334208]", "currency": "[\"G001ZM0000DEFAULTCURRENCT00000000006\"]", "taxrate": "[13]", "parentVendor": "[2164161776636160]", "retailInvestors": "true", "simple": { "pubts": "{{LAST_SYNC_TIME|datetime}}" } } ``` #### 数据格式化与转换 在获取到原始数据后,我们需要对其进行格式化和转换。根据元数据配置中的`formatResponse`字段,我们可以看到需要将返回结果中的`id`字段重命名为`new_id`,并将其格式化为字符串类型。 例如,假设原始响应数据如下: ```json { "data": [ { "id": 12345, "name": "供应商A" }, { "id": 67890, "name": "供应商B" } ] } ``` 我们需要将其转换为: ```json { "data": [ { "new_id": "12345", "name": "供应商A" }, { "new_id": "67890", "name": "供应商B" } ] } ``` #### 条件过滤 根据元数据中的条件配置,我们还需要对返回的数据进行过滤。例如,过滤掉`vendorApplyRange_org_name`不等于“北京翼讯世纪科技有限公司”和“企业账号级”的记录。 假设返回的数据如下: ```json { ... } ``` 我们可以使用以下逻辑进行过滤: ```python filtered_data = [item for item in data if item['vendorApplyRange_org_name'] not in ["北京翼讯世纪科技有限公司", "企业账号级"]] ``` 通过以上步骤,我们完成了从调用用友BIP接口获取数据到对数据进行格式化和过滤的全过程。这些操作确保了我们能够高效地集成和处理异构系统间的数据,为后续的数据转换与写入奠定了坚实基础。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:对接旺店通·企业奇门API接口 在数据集成生命周期中,ETL(Extract, Transform, Load)转换是关键的一步。本文将深入探讨如何将已经集成的源平台数据通过ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。 #### 元数据配置解析 首先,我们需要理解元数据配置,这是进行ETL转换的基础。以下是我们需要配置的元数据: ```json { "api": "wdt.purchase.provider.create", "method": "POST", "idCheck": true, "request": [ {"field": "provider_no", "label": "供应商编号", "type": "string", "describe": "代表供应商所有属性的唯一编码,用于供应商区分,ERP内支持自定义(ERP供应商界面设置),用于创建供应商数据信息", "value": "{code}"}, {"field": "provider_name", "label": "供应商名称", "type": "string", "describe": "供应商名称", "value": "{name}"}, {"field": "provider_group", "label":":"供应商分组","type":"string","describe":"供应商名称","value":"{supplyType}"}, {"field":"min_purchase_num","label":"最小采购量","type":"string","describe":"最小采购量"}, {"field":"purchase_cycle_days","label":"采购周期","type":"string","describe":"采购周期"}, {"field":"arrive_cycle_days","label":"到货周期","type":"string","describe":"到货周期"}, {"field":"contact","label":"联系人","type":"string","describe":"联系人"}, {"field":"last_purchase_time","label":"最后采购日期","type":"string","describe":"对供应商最后一次采购日期,不传默认接口创建供应商的年月日,格式:yyyy-MM-dd HH:mm:ss"}, {"field":"charge_cycle_days","label":"结算周期","type":"string","describe":"对供应商的账款结算周期,单位(天),不传默认0"} ] } ``` #### 数据转换过程 1. **提取(Extract)**: 从源系统提取原始数据。假设我们从一个ERP系统中提取了以下数据: ```json { "code": "S12345", "name": "ABC Supplies", "supplyType": "Raw Materials", // 其他字段 } ``` 2. **转换(Transform)**: 将提取的数据转换为目标系统所需的格式。根据元数据配置,我们需要将提取的数据映射到对应的字段上。 - `provider_no` 对应 `{code}` - `provider_name` 对应 `{name}` - `provider_group` 对应 `{supplyType}` 假设我们还需要填充其他字段,如最小采购量、采购周期等,可以使用默认值或从其他来源获取。 3. **加载(Load)**: 将转换后的数据通过API接口写入目标系统。使用HTTP POST请求,将JSON格式的数据发送到旺店通·企业奇门API接口。 #### 示例代码实现 以下是一个示例代码片段,展示如何进行上述步骤: ```python import requests import json # 提取的数据 source_data = { "code": "S12345", "name": "ABC Supplies", "supplyType": "Raw Materials" } # 转换后的数据 transformed_data = { 'provider_no': source_data['code'], 'provider_name': source_data['name'], 'provider_group': source_data['supplyType'], 'min_purchase_num': '100', # 示例值 'purchase_cycle_days': '30', # 示例值 'arrive_cycle_days': '15', # 示例值 'contact': 'John Doe', # 示例值 'last_purchase_time': '2023-10-01 00:00:00', # 示例值 'charge_cycle_days': '60' # 示例值 } # API请求URL和头信息 url = 'https://api.wangdian.cn/openapi2/wdt.purchase.provider.create' headers = {'Content-Type': 'application/json'} # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(transformed_data)) # 检查响应状态码和内容 if response.status_code == 200: print('Data successfully loaded to target platform.') else: print(f'Failed to load data: {response.text}') ``` #### 注意事项 1. **字段映射**:确保所有必需字段都已正确映射,并且数据类型符合目标平台要求。 2. **错误处理**:在实际应用中,需要增加错误处理机制,以便在请求失败时进行重试或记录日志。 3. **安全性**:确保API密钥和敏感信息不被泄露,可以使用环境变量或加密存储。 通过上述步骤,我们可以高效地将源平台的数据转换并写入到旺店通·企业奇门API接口,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)