数据转换与写入技巧:钉钉报销到金蝶云星空

  • 轻易云集成顾问-潘裕
### 案例分享:钉钉数据集成到金蝶云星空 在企业财务管理中,实现多个系统之间的数据无缝对接是提升业务效率的关键一步。本案例将详细介绍如何通过轻易云数据集成平台,实现钉钉报销【项目报销类】数据与金蝶付款单【晨丰】的高效对接。 首先,我们需要确保从钉钉获取的数据不漏单且能够快速、可靠地写入到金蝶云星空。为了实现这一目标,使用了以下几个关键API和技术方案: 1. **定时抓取与接口调用**: - 钉钉提供了`topapi/processinstance/get`接口,用于获取报销流程实例的信息。通过配置定时任务,平台可以在预设时间点自动调用该接口,从而保证数据及时抓取。 2. **分页和限流处理**: - 当读取大量记录时,为避免超过API调用限制,对返回结果进行分页处理,同时遵循限流机制,确保不会触发API访问上限。 3. **批量写入到金蝶云星空**: - 将从钉钉采集到的数据批量写入至金蝶云星空,提高操作效率。这里主要用到了`batchSave`接口,该接口支持一次性提交多条记录,有效减少网络请求次数,加快整体操作速度。 4. **格式差异化处理与映射**: - 由于两大平台的数据结构存在差异,在读入数据后,需要进行适当的格式转换和映射。例如,将不同字段名及其对应值平滑过渡,以符合目标系统要求。此外,还执行必要的数据校验步骤以提高成功率。 5. **异常处理与重试机制**: - 在整个过程中,对于可能出现的任何异常情况(如网络中断或第三方服务端问题),我们设计了一套完善的错误捕捞和重试机制。这包括实时监控每次操作日志,当检测到失败时自动尝试重新执行相应步骤,并记录所有相关信息供进一步分析。 本案例展示了如何借助轻易云平台,一步步解决从初始需求分析,到具体实施过程中的各项挑战,最终实现两个重要系统间高效、安全、稳定的数据同步。在接下来的部分,将更深入探讨上述每个环节所涉及的实际配置细节及代码示例。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据的技术案例 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,获取并加工报销数据,以实现与金蝶付款单的无缝对接。 #### 接口调用配置 首先,我们需要配置调用钉钉接口的元数据。根据提供的元数据配置,可以看到我们需要使用POST方法来调用`topapi/processinstance/get`接口,并且需要传递特定的参数和条件。 ```json { "api": "topapi/processinstance/get", "method": "POST", "number": "number", "id": "id", "idCheck": true, "condition": [ [ { "field": "报销类别", "logic": "eq", "value": "项目报销类" } ] ] } ``` #### 数据请求与清洗 1. **构建请求参数**: 根据元数据配置,我们需要构建一个POST请求,其中包含必要的参数,如报销类别为“项目报销类”的条件。 ```json { "process_instance_id": "<process_instance_id>", "user_id": "<user_id>" } ``` 2. **发送请求**: 使用轻易云平台提供的API调用功能,发送上述构建好的请求到钉钉接口。 3. **处理响应**: 钉钉接口返回的数据可能包含多个字段,我们需要根据业务需求进行筛选和清洗。例如,只保留与项目报销相关的信息,并去除冗余字段。 #### 数据转换与写入 1. **数据转换**: 将从钉钉获取的数据转换为金蝶付款单所需的数据格式。这一步通常涉及字段映射和数据类型转换。例如,将“报销金额”字段从字符串转换为数值类型,以便后续处理。 2. **写入目标系统**: 最后,将处理好的数据写入金蝶系统中。轻易云平台支持多种异构系统间的数据对接,因此可以方便地将转换后的数据通过API或数据库连接写入金蝶付款单模块。 #### 实际案例 假设我们从钉钉获取到以下原始数据: ```json { "process_instance_id": "1234567890", "title": "项目报销 - 张三", "create_time": "2023-10-01T12:00:00Z", "finish_time": null, "form_component_values": [ { "name": "报销金额", "value": "1000" }, { "name": "报销类别", "value": "项目报销类" }, { "name": "备注", "value": "" } ] } ``` 经过清洗和转换后,得到如下格式的数据准备写入金蝶: ```json { "单据编号": "<自动生成>", "申请人": "<user_id>", "申请日期": "<create_time>", "金额": 1000, "备注信息": "" } ``` 在这个过程中,轻易云平台通过全透明可视化操作界面,使得每一步的数据处理都清晰可见,并实时监控数据流动和处理状态,大大提升了业务透明度和效率。 通过以上步骤,我们成功实现了从钉钉获取项目报销类数据,并将其无缝对接到金蝶付款单中。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 将钉钉报销数据转换并写入金蝶云星空API接口的技术案例 在数据集成过程中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台所能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将钉钉报销【项目报销类】的数据转换为金蝶付款单【晨丰】的数据格式,并通过金蝶云星空API接口进行写入。 #### 数据请求与清洗 在这一步中,我们已经从钉钉获取了报销数据。接下来,我们需要对这些数据进行清洗和预处理,以确保其符合目标系统的要求。这包括字段的映射、数据类型的转换以及必要的数据校验。 #### 数据转换与写入 我们主要使用金蝶云星空API接口`batchSave`方法来实现数据的批量保存操作。以下是具体的元数据配置和对应的字段映射。 ##### API 接口配置 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{{extend.business_id}}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"FKDLX04_SYS"}, {"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{extend.create_time}}"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FPAYORGID","label":"付款组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"","describe":"","value":"","parser":{"name":"","params":""},"defaultValue":"","required":false}, {"field":"","label":"","type":"","describe":"","value":"","parser":{"name":"","params":""},"defaultValue":"","required":false}, ... ], "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "", "value": ""}, ... ] } ``` ##### 字段映射与解析 1. **单据编号 (FBillNo)** - 来源:`{{extend.business_id}}` - 类型:字符串 - 描述:单据编号 2. **单据类型 (FBillTypeID)** - 来源:固定值 `FKDLX04_SYS` - 类型:字符串 - 描述:单据类型 - 解析器:`ConvertObjectParser`,参数 `FNUMBER` 3. **业务日期 (FDATE)** - 来源:`{{extend.create_time}}` - 类型:字符串 - 描述:业务日期 4. **结算组织 (FSETTLEORGID)** - 来源:动态查询 `_findCollection find Number from ... where Name={{费用归属项目}}` - 类型:字符串 - 描述:结算组织 - 解析器:`ConvertObjectParser`,参数 `FNumber` 5. **付款组织 (FPAYORGID)** - 来源:动态查询 `_findCollection find Number from ... where Name={{费用归属项目}}` - 类型:字符串 - 描述:付款组织 - 解析器:`ConvertObjectParser`,参数 `FNumber` 6. **币别 (FCURRENCYID)** - 来源:固定值 `PRE001` - 类型:字符串 - 描述:币别 - 解析器:`ConvertObjectParser`,参数 `FNumber` 7. **往来单位类型 (FCONTACTUNITTYPE)** - 来源:固定值 `BD_Department` - 类型:字符串 - 描述:往来单位类型 8. **往来单位 (FCONTACTUNIT)** - 来源:`{{费用归属部门_关联}}` - 类型:字符串 - 描述:往来单位 - 解析器:`ConvertObjectParser`,参数 `FNumber` 9. **收款单位类型 (FRECTUNITTYPE)** - 来源:固定值 `BD_Department` - 类型:字符串 - 描述:"收款单位类型" 10. **收款单位 (FRECTUNIT)** - 来源: `{{费用归属部门_关联}}` - 类型: 字符串 ... ##### 子表明细配置 1. **结算方式 (FPAYBILLENTRY.FSETTLETYPEID)** ```json { "field": "FPAYBILLENTRY.FSETTLETYPEID", ... ... ... ... ... ... ... ... ... ... ... ... ... ![如何开发用友BIP接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)