ETL转换及数据写入金蝶云星空的实现指南

  • 轻易云集成顾问-冯潇
### 吉客云账单查询对接金蝶收款退款单技术案例分享 在本文中,我们将深入探讨如何通过轻易云数据集成平台实现吉客云与金蝶云星空系统的无缝对接,具体方案为“吉客云账单查询对接金蝶收款退款单”。本次系统集成的核心目标是确保从吉客云到金蝶云星空的数据传输高效、可靠,并满足业务需求。 #### 确保集成数据不漏单 在这个案例中,为了避免任何数据遗漏,我们重点关注了调用吉客云接口`acs.billinfo.get`时的数据抓取准确性和完整性。我们设计了一种定时任务机制,以周期性地抓取最新账单信息,并设立了分页处理逻辑以应对大量数据。 #### 数据快速写入与批量处理 当获取到吉客云的账单信息后,我们采取批量处理策略,将这些数据迅速、安全地写入到金蝶云星空。这一步利用了金蝶提供的API `batchSave`进行操作,实现大规模数据的一次性存储,极大提高了系统运行效率。 #### 处理接口分页与限流问题 由于吉客云接口有一定的分页和访问频率限制,为确保每一条记录都能成功读取并传输,我们制定了一套精细化的分页读取及限流控制方案。在脚本执行过程中,通过动态调整请求参数来有效管理API调用频率,从而防止因超出限制而导致的数据采集失败。 #### 数据格式差异及映射对接 两大平台之间存在显著的数据格式差异。为解决这一问题,在架构设计中加入了一层专门用于格式转换和映射配置的模块。比如,将从吉客云获得的JSON对象属性值精准映射至符合金蝶要求的数据结构,这不仅保障了数据一致性,还支持简单快捷的自定义字段匹配。 通过灵活运用这些技术特征,本案成功打造出一个稳定、高效、透明且实时监控能力强大的跨系统解决方案,有力支撑企业财务管理业务流程优化。在下一部分内容里,我将详细描述具体实现步骤以及代码示例。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口acs.billinfo.get获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云的`acs.billinfo.get`接口,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置元数据,以便正确调用吉客云的`acs.billinfo.get`接口。以下是关键的元数据配置项: ```json { "api": "acs.billinfo.get", "method": "Get", "number": "billAccountNo", "id": "billAccountNo", "pagination": { "pageSize": 50 }, "condition": [ [ { "field": "outAmount", "logic": "gt", "value": "0" } ] ], "idCheck": true, "request": [ { "field": "pageIndex", "label": "分页页码", "type": "string" }, { "field": "pageSize", "label": "分页页数", "type": "string", "value": "100" }, { "field": "settleAccountNameHeader", "label": "账户名", "type": "string" }, { "field": "bookTimeStart", "label": "开始时间", "type": "string", // 使用函数计算当前时间减去40天 // _function from_unixtime(({CURRENT_TIME}-3456000),'%Y-%m-%d %h:%i:%s') // 将当前时间转换为日期格式 // {{CURRENT_TIME|datetime}} }, { // 当前时间 // {{CURRENT_TIME|datetime}} }, { // 网店订单号 }, { // 账务流水号 }, { // 业务流水号 }, { // 账单类型 }, { // 审核状态,默认值为1(已审核) }, { // 对账状态,默认值为1(已对账) }, { // 对方帐号 }, { // 对方户名 }, { // 收支项目 } ] } ``` #### 数据请求与清洗 在配置好元数据后,我们可以开始进行数据请求和清洗。以下是详细步骤: 1. **设置请求参数**:根据元数据中的字段,我们需要设置请求参数。例如,分页页码(`pageIndex`)、分页页数(`pageSize`)、开始时间(`bookTimeStart`)和结束时间(`bookTimeEnd`)等。 2. **发送请求**:使用HTTP GET方法发送请求到吉客云的API端点。确保所有必需参数都已正确设置。 3. **接收响应**:处理API返回的数据,通常是JSON格式。解析响应内容,提取所需字段。 4. **数据过滤与转换**:根据业务需求,对接收到的数据进行过滤和转换。例如,只保留出金额大于0的记录。 5. **异常处理**:在整个过程中,需要处理可能出现的异常情况,如网络错误、API限流等。 #### 示例代码 以下是一个简单的Python示例代码,用于演示如何调用吉客云接口并处理返回的数据: ```python import requests import json # 配置请求参数 params = { 'pageIndex': '1', 'pageSize': '100', 'bookTimeStart': '2023-01-01 00:00:00', 'bookTimeEnd': '2023-02-01 23:59:59', 'auditStatus': '1', 'checkStatus': '1' } # API端点URL url = 'https://api.jikecloud.com/acs/billinfo/get' # 发起GET请求 response = requests.get(url, params=params) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据过滤与转换 filtered_data = [item for item in data if item['outAmount'] > 0] # 输出结果 print(json.dumps(filtered_data, indent=4)) else: print(f"Error: {response.status_code}") ``` #### 数据转换与写入 在完成数据请求与清洗后,下一步是将清洗后的数据转换并写入目标系统。这通常涉及将数据格式从源系统的结构转换为目标系统所需的结构,并通过API或数据库连接将其写入目标系统。在轻易云平台中,这一步可以通过可视化操作界面来实现,大大简化了复杂的数据转换过程。 通过以上步骤,我们成功地调用了吉客云的`acs.billinfo.get`接口,并对获取的数据进行了初步加工,为后续的数据集成奠定了基础。这一过程展示了如何利用轻易云平台实现高效、透明的数据集成。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并最终写入金蝶云星空API接口。 #### 元数据配置解析 元数据配置是实现数据转换和写入的核心。以下是我们将要使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "groupCalculate": { "headerGroup": ["settleAccountName", "bookTime_new", "bizType"], "bodyGroup": ["bizType", "itemCode"], "bodyName": "details", "targetBodyName": "FREFUNDBILLENTRY", "bodyMaxLine": 50, "calculate": { "outAmount": "$sum" } }, ... } ``` #### 数据请求与清洗 在开始ETL转换之前,首先需要从源系统请求数据并进行清洗。假设我们已经完成了这一步,现在我们重点关注如何将清洗后的数据进行转换,并通过API接口写入金蝶云星空。 #### 数据转换与写入 1. **API接口配置** 我们使用的是`batchSave` API,采用POST方法。确保每个请求都有唯一的ID以便追踪和检查。 2. **操作设置** - `method`: `batchArraySave` - `rows`: 每次处理一行 - `rowsKey`: 数据数组的键名为`array` 3. **分组计算** 分组计算用于处理复杂的数据聚合需求。例如,我们需要根据`settleAccountName`、`bookTime_new`和`bizType`进行头部分组,而根据`bizType`和`itemCode`进行表体分组。 4. **字段映射与解析** 在字段映射中,我们使用了多种解析器(Parser)来转换源数据到目标格式。例如: - `FSETTLEORGID`: 根据不同的结算账户名称,映射到不同的组织ID。 ```json { "field": "FSETTLEORGID", ... "parser": {"name":"ConvertObjectParser","params":"FNumber"}, ... "value":"_function CASE '{settleAccountName}' when '生和堂科技(天猫生和堂食品旗舰)支付宝' then 104 else 103 end" } ``` - `FDATE`: 将业务日期直接映射。 ```json { "field":"FDATE", ... "value":"{bookTime_new}" } ``` 5. **表体字段处理** 表体字段如退款单明细,需要特别处理。例如: - `FACCOUNTID`: 根据结算账户名称查找银行账号。 ```json { ... "field":"FACCOUNTID", ... "parser":{"name":"ConvertObjectParser","params":"FNumber"}, ... "value":"_findCollection find FNumber from e0411585-ebc3-30fb-ac16-872da1e0bfde where FName={settleAccountName}" } ``` 6. **其他请求参数** 除了主要字段外,还需要设置一些其他参数以确保请求成功: ```json [ {"field":"FormId","label":"业务对象表单Id","type":"string","value":"AR_REFUNDBILL"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","value":"false"} ] ``` #### 实际案例 假设我们有如下源数据: ```json { ... settleAccountName: '生和堂科技(天猫生和堂食品旗舰)支付宝', bookTime_new: '2023-10-01', bizType: '退款', details: [ { itemCode: 'A001', outAmount: 100 }, { itemCode: 'A002', outAmount: 200 } ] } ``` 经过ETL转换后,我们生成如下目标格式的数据: ```json { FormId: 'AR_REFUNDBILL', Operation: 'BatchSave', IsAutoSubmitAndAudit: true, IsVerifyBaseDataField: false, Model: { FBillNo: '', FSETTLEORGID: { FNumber: '104' }, FCURRENCYID: { FNumber: 'PRE001' }, FDATE: '2023-10-01', FBillTypeID: { FNumber: 'SKTKDLX01_SYS' }, FSALEORGID: { FNumber: '104' }, FCONTACTUNITTYPE: 'BD_Customer', FCONTACTUNIT: { FNumber:'生和堂科技(天猫生和堂食品旗舰)支付宝'}, FRECEIVEBILLENTRY:[ { FACCOUNTID:{FNumber:'123456'}, FPURPOSEID:{FNumber:'SFKYT01_SYS'}, FREFUNDAMOUNTFOR:'300', FREMARK:'', FSHT_PROMOTIONTYPE:{FNumber:'A001'} } // More entries... ] } } ``` 通过上述步骤,我们实现了从源平台到目标平台的数据无缝对接,确保了每个环节的数据准确性和完整性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)