每刻报销单到金蝶云星空:从API调用到数据写入全教程

  • 轻易云集成顾问-曾平安
### 每刻报销单集成至金蝶云星空的技术方案分享 在本次案例中,我们探讨的是如何通过轻易云数据集成平台实现每刻报销单的数据无缝对接到金蝶云星空系统。整个方案分为三个具体执行部分:付款申请、*特殊*付款申请单以及*专项*付款申请单。从获取数据,到处理并映射格式,再到批量写入,本文将详细解析各个步骤和关键技术点。 首先,关于数据抓取,需要调用每刻提供的API接口`/api/openapi/form/reimburse`。为了确保不漏掉任何一个数据,在定时器触发机制下建立可靠的数据拉取流程尤为重要。此外,每刻接口存在分页和限流的问题,因此需要设计支持多次请求合并结果的逻辑,通过适当调整频率与间隔来优化性能。 然后是数据处理环节。这一步主要涉及将从每刻获取的数据转换为符合金蝶云星空要求的格式。这包括字段映射、值转化及必要的计算等。同时,为了应对可能出现的数据丢失或错误情况,本方案引入了实时监控与日志记录功能,以便随时发现并解决问题。 最后,将处理后的数据批量写入到金蝶云星空。我们使用的是金蝶提供的`batchSave` API接口,这有助于快速高效地完成大规模数据迁移。在此过程中,还需注意异常处理与重试机制,以保证所有请求均能成功执行且不会丢失任何一条记录。 这种全生命周期管理不仅提高了业务透明度,也显著提升了整体效率。接下来,我将逐步深入解释这一系列操作背后的具体实现细节,包括API调用方式、分页策略、错误重试机制及其他必要技术手段,以供参考和学习之用。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统每刻接口/api/openapi/form/reimburse获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过调用每刻接口`/api/openapi/form/reimburse`来获取并加工数据,以实现数据的无缝对接和高效处理。 #### 接口配置与请求参数 首先,我们需要了解接口的基本配置和请求参数。根据提供的元数据配置,`/api/openapi/form/reimburse`接口使用POST方法进行调用,主要参数包括单据创建时间、分页条数、单据状态等。 ```json { "api": "/api/openapi/form/reimburse", "method": "POST", "number": "formCode", "id": "formCode", "idCheck": true, "beatFlat": ["expenseList", "allocationList"], "request": [ {"label": "根据单据的创建时间", "field": "createdAtStart", "type": "string"}, {"label": "根据单据的创建时间", "field": "createdAtEnd", "type": "string"}, {"label": "分页条数", "field": "pageSize", "type": "string", "value": "100"}, {"label": "当前页首条数据在所有数据中的偏移量", "field": "offset", "type": "string"}, {"label": "单据状态", "field": "formStatus", "type": "string", "value": "SIGNING,SETTLEMENT", "describe": "可选值: APPROVING(审批中),AUDITING(审核中),SIGNING(签收等待)(仅支持报销单),SETTLEMENT(结算中),COMPLETED(已完成),DELETED(已删除),ABANDON(已作废),REJECTED(被驳回)SUBMIT_FAILED(提交失败),DRAFT(草稿)。默认值为所有未删除单据。" }, {"label":"单据小类业务编码","field":"formSubTypeBizCode","type":"string","value":"FT2009081ASUOUWW,FT2012231RM7POQO,FT2202101CPP4XKW"}, {"label":"单据号","field":"formCodes","type":"string","parser":{"name":"StringToArray","params":","}}, {"label":"根据单据的审批通过时间","field":"approvedAtStart","type":"string","value":"{LAST_SYNC_TIME}000"}, {"label":"根据单据的审批通过时间","field":"approvedAtEnd","type":"string","value":"{CURRENT_TIME}000"}, {"label":"最后审核节点的通过时间","field":"auditedAtStart","type":"string"}, {"label":"最后审核节点的通过时间","field":"auditedAtEnd","type":"string"} ], ... } ``` #### 请求参数解析 - **createdAtStart** 和 **createdAtEnd**:用于指定报销单创建时间范围。 - **pageSize** 和 **offset**:用于分页控制,每次请求返回的数据条数和偏移量。 - **formStatus**:指定要获取的报销单状态,默认值为`SIGNING, SETTLEMENT`。 - **formSubTypeBizCode**:指定报销单的小类业务编码。 - **formCodes**:可以传入多个报销单号,通过逗号分隔,并使用`StringToArray`解析器将其转换为数组。 - **approvedAtStart** 和 **approvedAtEnd**:指定报销单审批通过时间范围。 - **auditedAtStart** 和 **auditedAtEnd**:指定最后审核节点的通过时间范围。 #### 数据请求与清洗 在发送请求之前,需要确保所有必需参数都已正确设置。以下是一个示例请求体: ```json { "createdAtStart": "{START_DATE}", "createdAtEnd": "{END_DATE}", "pageSize": 100, "offset": 0, ... } ``` 发送请求后,平台会接收到包含报销单详细信息的数据响应。在这个阶段,我们需要对数据进行清洗和预处理,以便后续的数据转换与写入。例如,可以将嵌套结构的数据展平,将复杂字段拆解为简单字段等。 #### 数据转换与写入准备 清洗后的数据需要进行格式转换,以符合目标系统(金蝶付款申请单)的要求。这一步通常涉及字段映射、数据类型转换等操作。例如,将每刻报销单中的费用列表和分配列表展平,并映射到金蝶付款申请单对应的字段上。 ```json { ... // 展平后的费用列表 { ... // 映射到金蝶付款申请单 ... } } ``` #### 实时监控与错误处理 在整个过程中,实时监控和错误处理至关重要。轻易云平台提供了强大的监控功能,可以实时跟踪数据流动和处理状态。一旦出现错误,如网络故障或数据格式不匹配,可以及时捕获并处理,确保数据集成过程顺利进行。 综上所述,通过合理配置和调用每刻接口`/api/openapi/form/reimburse`,我们可以高效地获取并加工报销单数据,为后续的数据转换与写入打下坚实基础。这不仅提升了业务透明度和效率,也为实现不同系统间的数据无缝对接提供了有力支持。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:从每刻报销单到金蝶云星空 在数据集成过程中,将每刻报销单的数据转换并写入到金蝶云星空的付款申请单中是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台进行这一过程的ETL(Extract, Transform, Load)转换,并通过API接口实现数据的无缝对接。 #### 1. 数据提取与清洗 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换。首先,从每刻报销单中提取相关数据字段,这些字段包括但不限于: - 单据编号(formCode) - 结算组织(customObject-CF339-detailBusinessCode) - 应付金额(paymentBaseAmount-amountStr) - 申请日期(customObject-CF405-startTime) - 申请付款金额(baseAmount-amountStr) - 往来单位(tradingPartnerBizCode) 这些字段将被映射到金蝶云星空API接口所需的格式。 #### 2. 数据转换 为了确保数据能够正确写入目标平台,需要对提取的数据进行必要的转换和映射。以下是关键字段的转换规则: ```json { "FBillNo": "{formCode}", "FSETTLEORGID": "_findCollection find F_JSJT_Text_MKBM from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={{customObject-CF339-detailBusinessCode}}", "FPAYAMOUNTFOR_H": "{{paymentBaseAmount-amountStr}}", "FDATE": "{{customObject-CF405-startTime|datetime}}", "FBillTypeID": "FKSQ005_SYS", "FAPPLYAMOUNTFOR_H": "{{baseAmount-amountStr}}", "FCONTACTUNITTYPE": "BD_Customer", "FCONTACTUNIT": "{tradingPartnerBizCode}", "FRECTUNITTYPE": "BD_Customer", "FRECTUNIT": "{tradingPartnerBizCode}", "FPAYORGID": "_findCollection find F_JSJT_Text_MKBM from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={{customObject-CF339-detailBusinessCode}}", "FAPPLYORGID": "_findCollection find F_JSJT_Text_MKBM from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={{customObject-CF339-detailBusinessCode}}" } ``` 在上述配置中,`_findCollection`函数用于从特定集合中查找对应的值,并使用`ConvertObjectParser`解析为目标平台所需格式。例如,结算组织、付款组织和申请组织都需要通过此方法进行转换。 #### 3. 数据写入 最终,经过转换的数据将通过API接口写入到金蝶云星空。以下是API请求配置: ```json { "api":"batchSave", "method":"POST", "idCheck":true, "operation":{ "method":"merge", "field":"formCode,customObject-CF339-detailBusinessCode,paymentBaseAmount-amountStr,baseAmount-amountStr,tradingPartnerBizCode,customObject-CF405-startTime", "bodyName":"items", "header":["formCode","customObject-CF339-detailBusinessCode","paymentBaseAmount-amountStr","baseAmount-amountStr","tradingPartnerBizCode","customObject-CF405-startTime"], "body":[ {"parent":"FPAYBILLSRCENTRY","label":"费用项目","field":"FCOSTID","type":"string","value":"{{expenseList_viceExpenseTypeBizCode}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"parent":"FPAYBILLSRCENTRY","label":"申请付款金额","field":"FAPPLYAMOUNTFOR","type":"string","value":"{{expenseList_allocationList_approvedBaseAmount-amountStr}}"}, {"parent":"FPAYBILLSRCENTRY","label":"应付金额","field":"FAFTTAXTOTALAMOUNT","type":"string","value":"{{expenseList_allocationList_approvedBaseAmount-amountStr}}"}, {"parent":"FPAYBILLSRCENTRY","label":"付款用途","field":"FPAYPURPOSEID","type":"string","value":"SFKYT018","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"parent":"FPAYBILLSRCENTRY","label":"到期日","field":"FEXPIRY","type":"string","value":"{{approvedAt|datetime}}"}, {"parent":"FPAYBILLSRCENTRY","label":"期望付款日期","field":"FEXPECTPAYDATE","type":"string","value":"{{approvedAt|datetime}}"}, {"parent":"FPAYBILLSRCENTRY","label":"备注","field":"FDescription","type":"string","value":" {expenseList_comments}"}, {"parent":"FPAYBILLSRCENTRY","label":"费用承担组织","field":"F_JSJT_Base_FYCDZZ","type":"string","value":"_findCollection find F_JSJT_Text_MKBM from dac46c84-b360-329a -889f-f8bbb8cca5b1 where FNumber={{items.expenseList_allocationList_customObject_detailBusinessCode}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}} ] }, ... } ``` 以上配置定义了API请求的方法、字段映射及其解析方式。特别注意的是,每个字段都需要根据目标平台的要求进行相应的解析和格式化,以确保数据能够正确地被金蝶云星空接收和处理。 #### 总结 通过上述步骤,我们实现了从每刻报销单到金蝶云星空付款申请单的数据ETL转换。这一过程不仅保证了数据的一致性和准确性,还极大地提高了业务处理效率。在实际应用中,灵活运用轻易云数据集成平台提供的各种功能,可以进一步优化和简化复杂的数据集成任务。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)