使用轻易云进行ETL转换写入金蝶云星空的技术分享

  • 轻易云集成顾问-胡秀丛
### 钉钉数据集成到金蝶云星空案例分享:付款申请单-撤销 在系统对接与数据集成的复杂任务中,处理钉钉平台上的付款申请单并将其撤销操作同步至金蝶云星空,是一个典型且具有挑战性的场景。本文将详细介绍如何通过轻易云数据集成平台,实现这一业务流程的自动化和高效管理。 我们主要使用了两个核心API接口:钉钉的`topapi/processinstance/get`用于获取付款申请单的数据,以及金蝶云星空的`CancelAssign`接口执行对应的数据写入及撤销处理。在这个过程中,我们需要解决诸多技术难题,包括但不限于API调用频率控制、分页问题、数据格式转换以及异常处理等。 首先,通过自定义的数据转换逻辑,我们能够确保从钉钉获取的数据精确匹配到金蝶云星空所需的数据结构。这不仅包括基本字段映射,还要考虑复杂业务规则,例如不同状态下的特殊字段处理。同时,为了避免漏单现象,定时可靠地抓取钉钉接口数据是关键一步。利用轻易云提供的可视化数据流设计工具,可以更直观地配置和管理这些步骤,有助于提升开发效率和准确性。 在实际运行方案中,高吞吐量的数据写入能力使得大量付款申请单被快速、安全地传输至金蝶云星空。这不仅极大提高了工作效率,也减少了一些无法预见的人为错误。此外,为了保证整个数据处理过程中的透明度,集中监控和告警系统实时跟踪各项任务,从而及时发现并解决潜在问题,以确保业务连续性。 下一步,我们将详细阐述具体实现方案,包括API调用细节、分页机制、限流策略以及异常重试机制等方面技术要点。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`来获取并加工数据,以实现付款申请单的撤销。 #### 接口调用与元数据配置 首先,我们需要理解元数据配置中的各个字段及其作用: ```json { "api": "topapi/processinstance/get", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "name": "number", "idCheck": true, "autoFillResponse": true, "condition": [ [ { "field": "单据类型", "logic": "eqv2", "value": "ERP供应商付款同步" } ] ] } ``` - **api**: 指定了我们要调用的钉钉接口,即`topapi/processinstance/get`。 - **effect**: 表示此次操作的类型为查询(QUERY)。 - **method**: 使用POST方法进行请求。 - **number**和**id**: 分别指定了请求和响应中的关键字段。 - **idCheck**: 设置为true,表示需要对ID进行校验。 - **autoFillResponse**: 设置为true,表示自动填充响应数据。 - **condition**: 定义了查询条件,这里我们只获取“单据类型”为“ERP供应商付款同步”的记录。 #### 实际操作步骤 1. **配置请求参数** 根据元数据配置,我们需要构建POST请求的参数。假设我们要查询某个特定付款申请单的详细信息,参数可能如下: ```json { "process_instance_id": "<具体实例ID>" } ``` 2. **发送请求** 使用轻易云平台提供的API调用功能,发送上述POST请求到钉钉接口: ```python import requests url = 'https://oapi.dingtalk.com/topapi/processinstance/get' headers = {'Content-Type': 'application/json'} data = { 'process_instance_id': '<具体实例ID>' } response = requests.post(url, headers=headers, json=data) result = response.json() ``` 3. **处理响应** 响应结果会包含详细的流程实例信息。根据元数据配置中的`autoFillResponse`设置,平台会自动填充这些信息到相应的数据结构中。假设响应结果如下: ```json { "errcode": 0, "process_instance": { "title": "<标题>", "create_time": "<创建时间>", ... } } ``` 4. **数据清洗与转换** 获取到原始数据后,需要进行清洗和转换,以符合目标系统的数据格式要求。例如,我们可能需要提取特定字段,并进行格式转换: ```python process_instance = result.get('process_instance', {}) cleaned_data = { 'title': process_instance.get('title'), 'create_time': process_instance.get('create_time'), # 添加更多字段处理逻辑 } # 转换时间格式等操作 from datetime import datetime cleaned_data['create_time'] = datetime.strptime(cleaned_data['create_time'], '%Y-%m-%d %H:%M:%S').isoformat() # 最终处理后的数据 print(cleaned_data) ``` 5. **写入目标系统** 最后,将清洗和转换后的数据写入目标系统。这一步通常涉及调用另一个API或数据库操作。在轻易云平台上,可以通过配置相应的数据流转规则,实现自动化的数据写入。 #### 总结 通过上述步骤,我们可以高效地调用钉钉接口`topapi/processinstance/get`获取所需的数据,并进行必要的清洗和转换,以实现付款申请单撤销的业务需求。轻易云平台提供了全透明可视化的操作界面,使得整个过程更加直观和高效。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台完成这一过程,特别是针对付款申请单撤销的具体操作。 #### 配置元数据 首先,我们需要理解和配置元数据,以确保数据能够正确地映射到金蝶云星空API接口中。以下是我们使用的元数据配置: ```json { "api": "CancelAssign", "method": "POST", "idCheck": true, "request": [ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "CN_PAYAPPLY"}, {"field": "Numbers", "label": "编码集合", "type": "string", "value": "{{单据编号}}"}, {"field": "Ids", "label": "id集合", "type": "string", "value": "_findCollection find FID from 41890cdb-99b0-3124-99a8-5c91f522ffa4 where FBillNo={{单据编号}}"}, {"field": "InterationFlags", "label": "交互标志集合", "type": "string", "describe":"字符串类型,分号分隔,格式:\"flag1;flag2;...\"(非必录) 例如(允许负库存标识:STK_InvCheckResult)"}, {"field": "IgnoreInterationFlag", "label":"是否允许忽略交互","type":"string","describe":"布尔类型,默认true(非必录)","value":"true"}, {"field":"NetworkCtrl","label":"是否启用网控","type":"string","describe":"布尔类型,默认false(非必录)","value":"false"}, {"field":"IsVerifyProcInst","label":"检验单据关联运行","type":"string","describe":"是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)","value":"false"} ] } ``` #### 数据提取与转换 在这个阶段,我们需要从源系统中提取相关的数据,并根据目标系统要求进行转换。对于付款申请单撤销操作,我们需要特定的字段和格式: 1. **FormId**: 固定值“CN_PAYAPPLY”,表示业务对象表单Id。 2. **Numbers**: 编码集合,对应源系统中的“单据编号”。 3. **Ids**: id集合,通过SQL查询从数据库中获取对应的FID。 4. **InterationFlags**: 可选字段,用于传递交互标志。 5. **IgnoreInterationFlag**: 默认值为true,可选字段。 6. **NetworkCtrl**: 默认值为false,可选字段。 7. **IsVerifyProcInst**: 默认值为false,可选字段。 #### 数据加载 在完成数据提取和转换后,我们需要将这些数据通过API接口写入到金蝶云星空系统中。以下是具体的实现步骤: 1. **构建请求体**: 根据元数据配置构建请求体,将提取和转换后的数据填充到相应字段中。例如: ```json { "FormId": "CN_PAYAPPLY", "Numbers": ["12345"], "_findCollection find FID from 41890cdb-99b0-3124-99a8-5c91f522ffa4 where FBillNo=12345", ... } ``` 2. **发送请求**: 使用HTTP POST方法将请求体发送到金蝶云星空API接口`CancelAssign`。确保请求头包含必要的认证信息和内容类型,例如: ```http POST /k3cloud/api/CancelAssign HTTP/1.1 Host: api.kingdee.com Content-Type: application/json Authorization: Bearer <token> { ... } ``` 3. **处理响应**: 接收并处理来自金蝶云星空API接口的响应,根据响应结果进行相应的业务逻辑处理。例如,如果撤销成功,则更新本地数据库状态;如果失败,则记录错误日志并进行重试或告警。 #### 实践案例 假设我们有一个付款申请单编号为“12345”,我们需要将其撤销。具体操作如下: 1. 从源系统中提取“12345”的相关信息。 2. 构建请求体: ```json { "FormId": "CN_PAYAPPLY", "Numbers": ["12345"], "_findCollection find FID from 41890cdb-99b0-3124-99a8-5c91f522ffa4 where FBillNo=12345", ... } ``` 3. 发送POST请求至`CancelAssign` API接口。 4. 根据响应结果更新本地状态或处理错误。 通过以上步骤,我们可以高效地将源平台的数据转换并写入到金蝶云星空系统中,实现了异构系统间的数据无缝对接。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)