ETL流程中数据转换与写入金蝶云星空的实践

  • 轻易云集成顾问-何语琴
### 钉钉数据集成到金蝶云星空的技术案例分享 在本篇文章中,我们将详细探讨如何通过轻易云数据集成平台,将钉钉系统中的支付数据高效、可靠地集成到金蝶云星空。本文重点分享实际运行的方案——“pay_新付款单(其他业务付款单)V4.0”,并深入剖析其核心技术和实现细节。 #### 数据获取与接口调用 首先,我们需要从钉钉系统中获取支付相关的数据。这一过程主要依赖于一个关键的API:`v1.0/yida/processes/instances`,该接口能够实时抓取所需实例的数据流。为了确保数据不漏单,我们采用了定时抓取机制,并结合分页处理来应对大规模数据请求。同时,通过配置合理的限流策略,有效避免了因频繁调用API而导致的阻塞问题。 #### 数据转换与映射 由于钉钉和金蝶云星空之间在数据结构上存在差异,在进行系统对接前,需要对获取到的数据进行必要的转换和映射。为此,我们使用了自定义的数据转换逻辑,以适应特定业务需求。例如,对于不同字段类型及格式的不一致性进行了统一处理,使得经过转换后的数据能无缝写入目标系统。 #### 批量写入与性能优化 当完成初步的数据准备后,下一步工作是如何将大量转化后的支付信息快速地批量写入至金蝶云星空数据库里。这里利用到了另一个重要API:`batchSave`,支持高吞吐量的数据导入能力。在这个过程中,还实现了集中监控功能,对每次批量操作进行状态跟踪和性能评估,以确保所有任务顺利执行且结果可回溯。 以上即是我们在实施这项复杂但极具价值的数据集成任务时的一些关键要点。在接下来的部分内容中,将进一步描述更具体的技术实现步骤以及面临的问题解决方案,包括异常处理机制、错误重试策略等方面。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口获取并加工数据的技术实现 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`v1.0/yida/processes/instances`获取并加工数据。 #### 接口调用配置 首先,我们需要根据元数据配置来设置API请求参数。以下是关键参数的配置: - **API路径**:`v1.0/yida/processes/instances` - **请求方法**:`POST` - **分页大小**:`50` - **分页页码**:`1` - **应用ID**:`APP_WTSCMZ1WOOHGIM5N28BQ` - **应用秘钥**:`IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4` - **用户ID**:`16000443318138909` - **语言**:默认中文(`zh_CN`) - **表单ID**:`FORM-UX866Q61RUV939TLEWG9H4HX25523ZRQNXLGLW` #### 请求体构建 根据元数据配置,我们需要构建一个包含多种字段的请求体。以下是一个示例请求体: ```json { "pageSize": "50", "pageNumber": "1", "appType": "APP_WTSCMZ1WOOHGIM5N28BQ", "systemToken": "IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4", "userId": "16000443318138909", "language": "zh_CN", "formUuid": "FORM-UX866Q61RUV939TLEWG9H4HX25523ZRQNXLGLW", "searchFieldJson": { "selectField_lgm25d98": ["管理费用", "运营费用", "财务费用", "奖金发放", "税费款项", "固定资产采购", "银行理财"], "serialNumberField_lgm25d8r": "", "textField_lgm25d8t": "" }, "createFromTimeGMT": "_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 25 DAY),'%Y-%m-%d 00:00:00')", "createToTimeGMT": "{{CURRENT_TIME|datetime}}", "instanceStatus": "COMPLETED", "approvedResult": "agree" } ``` #### 数据清洗与加工 在获取到原始数据后,需要进行清洗和加工,以确保数据符合业务需求。以下是一些常见的数据清洗和加工步骤: 1. **字段筛选与重命名**: 根据业务需求,筛选出必要的字段,并对字段进行重命名以便后续处理。例如,将接口返回的`processInstanceId`重命名为业务系统中的唯一标识符。 2. **数据类型转换**: 将日期字符串转换为标准日期格式,或者将数值型字符串转换为数值类型,以便于后续计算和分析。 3. **数据过滤与排序**: 根据特定条件过滤掉不需要的数据,例如只保留审批结果为“同意”的记录。同时,可以对数据进行排序,以便于后续处理。 #### 实例代码 以下是一个Python示例代码,展示如何调用钉钉接口并进行简单的数据清洗和加工: ```python import requests import json from datetime import datetime, timedelta # 构建请求体 request_body = { # ...(如上所述的请求体内容) } # 调用钉钉接口 response = requests.post( url="https://oapi.dingtalk.com/v1.0/yida/processes/instances", headers={"Content-Type": "application/json"}, data=json.dumps(request_body) ) # 检查响应状态 if response.status_code == 200: data = response.json() # 数据清洗与加工 processed_data = [] for item in data.get("data", []): processed_item = { # 字段筛选与重命名 'id': item.get('processInstanceId'), 'title': item.get('title'), 'created_at': datetime.strptime(item.get('createTime'), '%Y-%m-%d %H:%M:%S'), # 更多字段处理... } processed_data.append(processed_item) # 输出或进一步处理processed_data else: print(f"Error: {response.status_code}, {response.text}") ``` 通过以上步骤,我们可以高效地调用钉钉接口获取所需数据,并进行必要的数据清洗和加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据处理的透明度和效率,也确保了业务系统间的数据无缝对接。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换为金蝶云星空API接口格式并写入目标平台 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,最终写入金蝶云星空API接口所能接收的格式。 #### 数据请求与清洗 在数据请求与清洗阶段,我们获取并清洗源平台的数据。假设我们已经完成了这一阶段,接下来我们重点关注如何将这些清洗后的数据转换为金蝶云星空API接口所需的格式,并写入目标平台。 #### 数据转换与写入 轻易云数据集成平台提供了丰富的元数据配置选项,使得数据转换过程变得高效且灵活。以下是一个具体的配置示例,用于将“新付款单(其他业务付款单)”的数据转换并写入金蝶云星空。 ##### 元数据配置解析 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "dateField_lgn3helb,selectField_lgm25d9f,textField_lgm25d9i,textField_lgn3hel2,numberField_lgn3hel6,textareaField_lgn3hejg,serialNumberField_lgm25d8r,selectField_lgni8iv2,selectField_lgn3hekm_id,selectField_lgn3hel5,tableField_lgm25d9j_textField_lgm25d9x,selectField_lgm25d98,selectField_lgm25d9f_id", "bodyName": "tableField_lgm25d9j", "bodySum": ["tableField_lgm25d9j_numberField_lgm25d9r", "tableField_lgm25d9j_numberField_lgm25d9q_value"], "header": ["selectField_lgn3hel5", "textareaField_lgn3hejg", "numberField_lgn3hel6", "textField_lgn3hel2", "textField_lgm25d9i", "selectField_lgm25d9f", "dateField_lgn3helb", "selectField_lgni8iv2", "selectField_lgn3hekm_id", "selectField_lgm25d9f_id", "serialNumberField_lgm25d8r", "selectField_lgm25d98"], "body": ["tableField_lgm25d9j_textField_lgm25d9x", "tableField_lgm25d9j_textField_lgm25d9v", "tableField_lgm25d9j_numberField_lgm25d9r", "tableField_lgm25d9j_textField_lgm25d9u", "tableField_lgm25d9j_numberField_lgm25d9q_value", "tableField_lgm25d9j_textField_lgm25d9w"] }, ... } ``` ##### 请求字段解析 1. **FBillNo(单据编号)**: - 类型:string - 示例值:`{serialNumberField}` 2. **FCURRENCYID(币别)**: - 类型:string - 值:`PRE001` - 转换:使用`ConvertObjectParser`解析为`FNumber` 3. **FDATE(业务日期)**: - 类型:string - 值:`_function FROM_UNIXTIME(( {date} / 1000 ),'%Y-%m-%d')` 4. **FBillTypeID(单据类型)**: - 类型:string - 值:`FKDLX02_SYS` - 转换:使用`ConvertObjectParser`解析为`FNumber` 5. **FCONTACTUNITTYPE(往来单位类型)**: - 类型:string - 值:`{contactUnitType}` 6. **FPAYAMOUNTFOR(付款金额)**: - 类型:string - 值:`{paymentAmount}` 7. **FPAYBILLENTRY(付款单明细)**: - 类型:array - 子字段包括结算方式、付款金额、费用项目等。 ##### 数据写入操作 通过以上配置,我们可以构建一个完整的请求体,发送至金蝶云星空API接口。以下是一个示例请求体: ```json { "FormId": "AP_PAYBILL", "Operation": { ... }, ... } ``` #### 实际应用案例 假设我们有以下源数据: ```json { ... } ``` 通过轻易云数据集成平台,我们可以将其转换为如下格式,并发送至金蝶云星空: ```json { ... } ``` #### 总结 通过上述步骤,我们成功地将源平台的数据进行ETL转换,并写入到金蝶云星空API接口。这一过程充分利用了轻易云数据集成平台的强大功能,实现了高效的数据处理和无缝对接。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)