使用轻易云平台实现金蝶往来单位员工数据向钉钉API接口的ETL转换与写入

  • 轻易云集成顾问-何语琴
### 技术案例分享:金蝶云星空数据集成到钉钉 在企业信息化系统的对接过程中,如何高效地实现不同平台的数据集成是一个关键问题。本案例详细介绍了使用轻易云数据集成平台,将金蝶云星空中的往来单位及员工数据,无缝对接到钉钉系统的过程。通过调用金蝶云星空API `executeBillQuery` 获取所需数据,并利用钉钉API `topapi/processinstance/create` 进行数据写入,实现了两个系统之间的数据流转和自动化处理。 首先,为确保大量数据能够快速且准确地从金蝶云星空接口获取,我们采用了定时任务抓取机制。通过配置定时器,定期调用`executeBillQuery`接口,有效避免因手动操作导致的数据漏单。同时,对于分页和限流问题,我们设计并实现了一套高效的批量处理机制,以确保所有需要的数据都能被完整获取。在此基础上,自定义转换逻辑被用以调整原始数据格式,使其符合钉钉系统的要求。 在向钉钉推送数据环节,通过轻易云提供的可视化设计工具,对整个流程进行了精心设计与监控。我们将获取到的数据分批次写入,并添加重试机制,以提高操作可靠性。当发生错误或异常情况时,告警系统会实时通知相关人员,同时日志记录功能详细保留每一次操作轨迹,为后续排查及优化提供依据。 最后,在实际运行方案中,我们特别关注了多种可能出现的问题,如接口超时、返回结果不一致等,通过集中监控和告警体系,高效地识别并解决这些问题。此外,还针对特殊业务需求进行了高度定制化,以提升整体集成效率。这些技术措施不仅保证了整个对接过程透明、顺畅,也为企业持续优化管理决策奠定坚实基础。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D25.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与元数据解析 首先,我们需要理解元数据配置中的各个字段及其作用。以下是元数据配置的详细解析: - **api**: `"executeBillQuery"` - 指定要调用的API接口名称。 - **effect**: `"QUERY"` - 表示该操作为查询操作。 - **method**: `"POST"` - 指定HTTP请求方法为POST。 - **number**: `"FNumber"` - 数据唯一标识字段。 - **id**: `"FID"` - 数据ID字段。 - **idCheck**: `true` - 是否进行ID检查。 请求参数部分包括: - **request**: 包含具体的数据字段,如`FNumber`, `FID`, `FName`, `FMobile`, `FEmail`, `FPostDept`, `FBaseProperty3`等。这些字段用于指定需要查询的数据内容。 其他请求参数部分包括: - **otherRequest**: - **Limit**: 分页参数,指定每页返回的数据量。 - **StartRow**: 分页参数,指定查询起始行。 - **TopRowCount**: 分页参数,指定返回的最大行数。 - **FilterString**: 查询过滤条件,例如:`FSupplierId.FNumber = 'VEN00010' and FApproveDate>=`。 - **FieldKeys**: 指定需要返回的字段主键ID格式,例如:`FPOOrderEntry_FEntryId, FPurchaseOrgId.FNumber`。 - **FormId**: 表单ID,例如:`BD_Empinfo`。 #### 实际应用案例 为了更好地理解如何调用和处理该接口,我们以一个实际应用案例来说明。 假设我们需要从金蝶云星空中获取员工信息,并将其集成到钉钉系统中。具体步骤如下: 1. **配置请求参数** 根据元数据配置,我们需要设置请求参数。例如,我们希望查询所有员工的信息,并且每次查询返回50条记录,从第0行开始: ```json { "FormId": "BD_Empinfo", "FieldKeys": ["FNumber", "FID", "FName", "FMobile", "FEmail", "FPostDept", "FBaseProperty3"], "FilterString": "", "Limit": 50, "StartRow": 0 } ``` 2. **发送HTTP POST请求** 使用轻易云平台提供的可视化界面或编写代码发送HTTP POST请求: ```http POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.executeBillQuery Content-Type: application/json { "FormId": "BD_Empinfo", "FieldKeys": ["FNumber", "FID", "FName", "FMobile", "FEmail", "FPostDept", "FBaseProperty3"], "FilterString": "", "Limit": 50, "StartRow": 0 } ``` 3. **处理响应数据** 假设我们收到以下响应数据: ```json [ { "FNumber": "E001", "FID": "1001", "FName": "张三", "FMobile": "13800000000", "FEmail": "zhangsan@example.com", "FPostDept": "销售部", "FBaseProperty3": "" }, ... ] ``` 4. **数据清洗与转换** 在轻易云平台上,可以通过内置的数据清洗和转换工具对响应数据进行处理。例如,将手机号格式化、去除空白字段等。 5. **写入目标系统** 最后,将清洗和转换后的数据写入钉钉系统。可以使用轻易云平台提供的连接器或API接口实现这一过程。 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,获取并加工了员工信息,实现了与钉钉系统的数据集成。这一过程充分展示了轻易云平台在异构系统间无缝对接和高效处理数据方面的强大能力。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶往来单位员工数据向钉钉API接口的ETL转换与写入 在数据集成生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台能够接收的格式。本文将详细介绍如何使用轻易云数据集成平台,将金蝶系统中的员工数据通过ETL转换,最终写入钉钉API接口。 #### 1. 数据请求与清洗 首先,从金蝶系统中获取员工数据。假设我们已经通过轻易云平台完成了这一阶段的数据请求与清洗工作,获得了如下结构的原始数据: ```json { "FName": "张三", "FNumber": "1001", "FDeptID": "908684802" } ``` #### 2. 数据转换与写入 接下来,我们需要将上述数据转换为钉钉API接口所能接收的格式,并通过POST请求写入钉钉系统。根据提供的元数据配置,我们需要构建一个符合以下结构的JSON对象: ```json { "api": "topapi/processinstance/create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "process_code", "label": "钉钉表单id", "type": "string", "describe": "process_code在审批流程编辑页面的URL网址中获取。", "value": "PROC-7E1B60DE-7B2D-46CA-A0EC-E3A608157C79" }, { "field": "originator_user_id", "label": "发起人userid", "type": "string", "describe": "审批实例发起人的userid。", "value": "{originator_user_id}" }, { "field": "dept_id", "label": "发起人所属部门id", "type": "string", "describe": "发起人所在的部门,如果发起人属于根部门,传-1。", "value": "{dept_id}" }, { "field": "form_component_values", "label": "", ... ``` 为了实现这一目标,我们需要进行以下步骤: ##### 2.1 定义映射关系 首先,我们定义金蝶系统中的字段与钉钉API接口字段之间的映射关系: | 金蝶字段 | 钉钉字段 | |----------|----------| | FName | 员工名称 | | FNumber | 员工编码 | | FDeptID | dept_id | ##### 2.2 构建请求体 根据元数据配置和映射关系,我们构建出最终的请求体。假设`originator_user_id`为`0911101641848981`,则最终JSON对象如下: ```json { api: 'topapi/processinstance/create', effect: 'EXECUTE', method: 'POST', idCheck: true, request: [ { field: 'process_code', label: '钉钉表单id', type: 'string', describe: 'process_code在审批流程编辑页面的URL网址中获取。', value: 'PROC-7E1B60DE-7B2D-46CA-A0EC-E3A608157C79' }, { field: 'originator_user_id', label: '发起人userid', type: 'string', describe: '审批实例发起人的userid。', value: '0911101641848981' }, { field: 'dept_id', label: '发起人所属部门id', type: 'string', describe: '发起人所在的部门,如果发起人属于根部门,传-1。', value: '908684802' }, { field: 'form_component_values', label: '', type: 'object', describe: '', children:[ { field:'员工名称', label:'员工名称', type:'string', describe:'控件1', value:'张三' }, { field:'员工编码', label:'员工编码', type:'string', describe:'控件2', value:'1001' } ] } ] } ``` ##### 2.3 数据写入 最后,通过HTTP POST请求将上述JSON对象发送到钉钉API接口,实现数据写入操作。可以使用轻易云平台提供的HTTP客户端功能或其他HTTP库(如axios、requests等)来完成这一操作。 示例代码(使用axios库): ```javascript const axios = require('axios'); const data = { api: 'topapi/processinstance/create', effect: 'EXECUTE', method: 'POST', idCheck: true, request: [ { //...上文构建好的JSON对象内容... } ] }; axios.post('https://oapi.dingtalk.com/topapi/processinstance/create', data) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` 通过以上步骤,我们成功地将金蝶系统中的员工数据转换并写入到钉钉API接口,实现了跨系统的数据集成。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)