ETL在金蝶云星空与纷享销客数据集成中的应用

  • 轻易云集成顾问-潘裕
### 案例分享:金蝶其他应收单对接纷享销客账户支出流水--账户信息未填 在本篇技术文章中,我们将深入探讨一个实际运行的系统对接集成案例。通过本次项目,成功实现了金蝶云星空的数据无缝传输到纷享销客,尤其是针对"金蝶其他应收单"与"纷享销客账户支出流水"的特定场景。 首先,在数据获取方面,我们利用金蝶云星空提供的executeBillQuery API,实现了对“其他应收单”数据的精准抓取。此接口支持分页及限流处理,有效避免了由于大规模数据调用导致的网络拥塞和接口超时问题。同时,我们设定了定时任务机制,确保每隔一定时间段就能可靠地从金蝶云星空获取最新的数据快照。 然后,为解决两端系统间的数据格式差异,我们设计了一套数据转换逻辑。这包括字段映射、类型转换以及必要的数据清洗等步骤。例如,将获取到的数据重新格式化,以符合纷享销客API/cgri/crm/v2/data/create所需的JSON结构,从而顺利完成批量写入操作。 另外,在整个集成过程中,对于可能出现的数据异常情况,例如某条记录字段缺失或值不合法,我们实现了一套完善的错误重试机制和实时监控日志记录系统。一旦检测到接口调用失败,即可根据日志信息及时定位并解决问题,如自动重试或手动干预处理,极大提升了系统稳定性和数据完整度。 通过这些精密设计与实施方法,本次项目不仅充分展示了如何高效且可靠地进行跨平台数据集成,也为未来类似需求提供了一份成熟且值得借鉴的方法论。后续部分将详细介绍具体实施细节与代码示例。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工数据,以实现与纷享销客账户支出流水的对接。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的详细内容: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillNo", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"}, {"field": "FDATE", "label": "业务日期", "type": "string", "value": "FDATE"}, {"field": "FAMOUNTFOR", "label": "总金额", "type": "string", "value": "FAMOUNTFOR"}, {"field": "FCONTACTUNIT_FNumber", "label": "往来单位", "type": "string", "value":"FCONTACTUNIT.FNumber"}, {"field": "FSALEERID_FName", "label": "销售员", "type":"string","value":"FSALEERID.FName"}, {"field":"F_PRSH_Assistant_imu","label":"用途","type":"string","value":"F_PRSH_Assistant_imu.fnumber"} ], ... } ``` #### 请求参数解析 1. **API及方法**:使用POST方法调用`executeBillQuery` API。 2. **分页设置**:每次请求获取100条记录,通过分页参数控制数据量。 3. **字段映射**:定义了多个字段,如单据编号(FBillNo)、业务日期(FDATE)、总金额(FAMOUNTFOR)等,确保从源系统获取到所需的数据。 4. **过滤条件**:通过`FilterString`字段设置过滤条件,例如 `FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and F_PRSH_Assistant_imu.fnumber in ('01')`,确保只获取符合条件的数据。 #### 数据请求与清洗 在实际操作中,首先需要构建请求体,并根据元数据配置发送HTTP POST请求至金蝶云星空接口。以下是一个示例请求体: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 数据集成平台生命周期的第二步:ETL转换与写入纷享销客API接口 在数据集成过程中,将源平台的数据转换为目标平台能够接收的格式是关键的一步。本文将深入探讨如何使用轻易云数据集成平台,将金蝶其他应收单的数据通过ETL(Extract, Transform, Load)转换后,写入到纷享销客的账户支出流水中。 #### API接口配置解析 在进行数据写入之前,我们需要了解目标平台的API接口配置。以下是针对纷享销客API接口的元数据配置: ```json { "api": "/cgi/crm/v2/data/create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "data", "label": "数据map", "type": "object", "children": [ { "field": "object_data", "label": "表头", "type": "object", "children": [ {"field":"dataObjectApiName","label":"对象的api_name","type":"string","value":"AccountTransactionFlowObj"}, {"field":"name","label":"单号","type":"string","value":"{FBillNo}"}, {"field":"transaction_date","label":"交易日期","type":"string","value":"_function ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) / 1000),0)"}, {"field":"customer_id","label":"客户","type":"string","value":"_findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}"}, {"field":"owner","label":"负责人","type":"string","value":"_findCollection find user_id from ad096beb-313f-340a-b153-cdf7fdf9b6d7 where name={FSALEERID_FName}","parser":{"name":"StringToArray","params":","},"default":"FSUID_F56CEEA6EDDBFE10681577526DF83326"}, {"field":"expense_type","label":"支出类型","type":"string","value":"2"}, {"field":"expense_amount","label":"支出金额","type":"string","value":"{FAMOUNTFOR}"}, {"field":"fund_account_id","label":"账户--表头没有账户信息,后续需要修改关联语句","type":"string","value":"_function case '{F_PRSH_Assistant_imu}' when '01' then '66b5c4b5537d670001a55d86' end"}, {"field":"remark","label":"备注","type":"string"}, {"field":"field_kingdee_document_number__c","label":"金蝶单号","type":"string","value":"{FBillNo}"} ] } ] } ], "otherRequest": [ { "field": "currentOpenUserId", "label": "当前操作人userid", "type": "string", "value": "FSUID_F56CEEA6EDDBFE10681577526DF83326" } ] } ``` #### 数据字段解析与转换 1. **对象的api_name**: - `dataObjectApiName`字段指定了目标对象为`AccountTransactionFlowObj`。 2. **单号**: - `name`字段直接映射金蝶中的`FBillNo`。 3. **交易日期**: - `transaction_date`字段通过SQL函数将时间戳转换为所需格式。使用`ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) / 1000),0)`实现。 4. **客户ID**: - `customer_id`字段通过查找集合中的客户编号来获取对应的客户ID,使用了 `_findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}`。 5. **负责人**: - `owner`字段通过查找集合中的负责人名称来获取对应的用户ID,并使用了字符串转数组解析器 `StringToArray`。 6. **支出类型**: - `expense_type`字段固定值为"2"。 7. **支出金额**: - `expense_amount`字段直接映射金蝶中的金额字段 `{FAMOUNTFOR}`。 8. **账户信息**: - `fund_account_id`字段使用条件判断语句 `_function case '{F_PRSH_Assistant_imu}' when '01' then '66b5c4b5537d670001a55d86' end` 来确定具体账户ID。 9. **备注与金蝶单号**: - `remark` 和 `field_kingdee_document_number__c` 分别映射备注和金蝶单号。 #### 数据请求与写入 在完成上述字段映射和转换后,通过POST方法将数据发送到纷享销客API接口 `/cgi/crm/v2/data/create`。注意,当前操作人的用户ID也需要包含在请求中,以确保操作权限和记录准确性: ```json { "currentOpenUserId": "{FSUID_F56CEEA6EDDBFE10681577526DF83326}", ... } ``` #### 实际案例应用 假设我们从金蝶系统获取了一条其他应收单,其关键数据如下: ```json { "FBillNo": "20231001001", "FDATE": "2023-10-01T12:00:00", ... } ``` 经过ETL处理后,生成的请求体如下: ```json { "data":{ ... { object_data:{ dataObjectApiName:"AccountTransactionFlowObj", name:"20231001001", transaction_date:"1696156800000", // 转换后的时间戳 customer_id:"1234567890", // 查找到的客户ID owner:"0987654321", // 查找到的用户ID expense_type:"2", expense_amount:"1000.00", // 示例金额 fund_account_id:"66b5c4b5537d670001a55d86", // 条件判断后的账户ID remark:"", field_kingdee_document_number__c:"20231001001" } } ... }, currentOpenUserId:"FSUID_F56CEEA6EDDBFE10681577526DF83326" } ``` 通过上述配置和处理,我们成功地将源平台的数据经过ETL转换,写入到了目标平台纷享销客中。这一过程不仅确保了数据的一致性和准确性,也大大提高了业务处理效率。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)