实现金蝶数据到钉钉的数据ETL转换的技术解读

  • 轻易云集成顾问-彭萍
### 案例分享:金蝶云星空与钉钉的高效数据集成 在本文中,我们将深入探讨如何通过轻易云数据集成平台,将金蝶云星空中的付款单位信息无缝地对接到钉钉的流程管理系统。本案例具体运行方案名称为:【资料】金蝶&钉钉—【付款单位】员工,重点介绍相关API接口调用、分页处理以及错误重试机制等技术要点。 在本次集成任务中,我们利用了金蝶云星空提供的数据查询接口`executeBillQuery`来抓取所需的动态数据。为了确保高吞吐量,我们采用了批量方式定时从该接口获取最新的数据,并通过轻易云强大的可视化数据流设计工具构建了整个集成过程,使得每一个环节都清晰明了且便于管理。 接收端方面,为保证大量数据能够快速、高效地写入到钉钉系统中,我们使用了其开放API `topapi/processinstance/create` 进行对接。为了应对可能出现的数据格式差异和限流问题,本方案特别设计了一套自定义转换逻辑,以适应特定业务需求,同时配备异常处理与错误重试机制,保障系统稳定性与可靠性。 此外,通过轻易云集中监控和告警系统,可以实时跟踪整个数据集成任务的状态、性能及日志记录,实现全面透明的生命周期管理。从而确保不仅仅是个简单的数据传输,更是整条业务链路上的精确控制和优化配置。这一切使得企业可以更高效、更精准地掌握及时可信的信息资源,与此同时避免手动错误,提高整体运营效率。 这个案例展示的不只是API之间的数据交换,更体现出对于复杂商业场景下多源头、多目标系统有效调度和组织的重要意义。在后续内容中,我们将详细剖析这一实现路径,包括具体代码示例,以及面临问题时的一些解决思路和技巧。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用金蝶云星空接口`executeBillQuery`是数据集成生命周期的第一步。本文将深入探讨如何配置和使用该接口来获取并加工数据。 #### 接口配置与元数据解析 首先,我们需要理解元数据配置中的各个字段及其作用。以下是关键字段的解析: - **api**: `executeBillQuery`,表示调用的API名称。 - **effect**: `QUERY`,表示该API的作用是查询。 - **method**: `POST`,表示使用HTTP POST方法进行请求。 - **number**: `FNumber`,表示查询结果中的编号字段。 - **id**: `FID`,表示查询结果中的唯一标识字段。 - **idCheck**: `true`,表示需要检查ID的唯一性。 请求参数部分(request)包含了需要查询的字段信息: ```json [ {"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"}, {"field":"FID","label":"FID","type":"string","describe":"111","value":"FID"}, {"field":"FName","label":"FName","type":"string","describe":"111","value":"FName"}, {"field":"FMobile","label":"FMobile","type":"string","describe":"111","value":"FMobile"}, {"field":"FEmail","label":"FEmail","type":"string","describe":"111","value":"FEmail"}, {"field":"FPostDept","label":"FPostDept","type":"string","describe":"111","value":"FPostDept"}, {"field":"FBaseProperty3","label":"FBaseProperty3","type":"string","describe":"111","value":"FBaseProperty3"} ] ``` 其他请求参数(otherRequest)用于分页、过滤和指定表单ID等: ```json [ {"field": "Limit", "label": "Limit", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "StartRow", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "TopRowCount", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "FilterString", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>="}, {"field": "FieldKeys", "label": "FieldKeys", "type": "array", "describe": "", "value":[ "FID", "FBillNo", "FSupplierId.FNumber", "FSupplierId.FName", "FPurchaseOrgId.FNumber", "FPurchaseOrgId.FName" ]}, {"field": "FormId", "label": "FormId", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "BD_Empinfo"} ] ``` #### 实际操作步骤 1. **设置请求参数** 根据元数据配置,我们需要设置请求参数以便调用接口。以下是一个示例请求体: ```json { "_api_": { "_name_": "_executeBillQuery_" }, "_data_":{ "_formid_":"", "_filterString_":"", "_limit_":"", "_startrow_":"", "_toprowcount_":"", "_fieldkeys_":[] } } ``` 2. **填充具体值** 根据业务需求,我们可以填充具体值。例如,如果我们要查询员工信息,可以设置如下: ```json { "_api_":{ "_name_":"", "_effect_":"", "_method_":"", "_number_":"", "_idcheck_":"", "_id_":"", "_request":[{ _FieldKeys_: [ { _FieldKey_: _FID_, _Value_: _123_ }, { _FieldKey_: _FBillNo_, _Value_: _PO123456_ }, { _FieldKey_: _FSupplierId.FNumber_, _Value_: _VEN00010_ }, { _FieldKey_: _FSupplierId.FName_, _Value_: _供应商A_ }, { _FieldKey_: _FPurchaseOrgId.FNumber_, _Value_: _ORG001_ }, { _FieldKey_: _FPurchaseOrgId.FName_, _Value_: _采购组织A_ } ] }] } } ``` 3. **发送请求并处理响应** 通过轻易云平台发送上述配置好的POST请求,并处理返回的数据。返回的数据通常会包含多个记录,每个记录对应一个员工的信息。 4. **数据清洗与转换** 根据业务需求,对返回的数据进行清洗与转换。例如,将电话号码格式化、去除无效字符等。 5. **写入目标系统** 最后,将清洗和转换后的数据写入目标系统,如钉钉或其他ERP系统。这一步可以通过轻易云平台提供的数据写入功能实现。 #### 注意事项 1. **分页处理** 在大规模数据查询时,需要特别注意分页处理,以避免一次性获取过多数据导致性能问题。 2. **错误处理** 在实际操作中,应对可能出现的错误进行处理,如网络异常、接口返回错误信息等。 通过以上步骤,我们可以高效地使用轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`获取并加工所需的数据,为后续的数据集成奠定基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现金蝶到钉钉的ETL转换 在数据集成生命周期的第二步,我们将重点探讨如何利用轻易云数据集成平台,将已经集成的源平台金蝶的数据进行ETL(Extract, Transform, Load)转换,转为目标平台钉钉API接口所能够接收的格式,并最终写入目标平台。本文将通过具体的技术案例,详细解析这一过程。 #### 钉钉API接口配置 在本次案例中,我们需要将金蝶系统中的付款单位员工信息,通过ETL转换后写入到钉钉系统中。首先,我们来看一下钉钉API接口的元数据配置: ```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-8615E2EA-1F9A-4333-916F-DD5B1C9A34A8" }, { "field": "originator_user_id", "label": "发起人userid", "type": "string", "describe": "审批实例发起人的userid。", "value": "0911101641848981" }, { "field": "dept_id", "label": "发起人所属部门id", "type": "string", "describe": "发起人所在的部门,如果发起人属于根部门,传-1。", "value": "-1" }, { "field": "form_component_values", "label": "表单控件", "type": "object", "describe":"111", children: [ { field: '员工名称', label: '员工名称', type: 'string', describe: '控件1', value: '{FName}' }, { field: '员工编码', label: '员工编码', type: 'string', describe: '控件2', value: '{FNumber}' } ] } ] } ``` #### 数据提取与清洗 首先,从金蝶系统中提取付款单位员工信息。这一步骤需要确保从源系统中提取的数据是准确且完整的。假设我们从金蝶系统中提取到以下数据: ```json { FName: '张三', FNumber: '1001' } ``` #### 数据转换 接下来,我们需要将提取到的数据进行转换,以符合钉钉API接口所需的格式。根据元数据配置,构建请求体: ```json { process_code: 'PROC-8615E2EA-1F9A-4333-916F-DD5B1C9A34A8', originator_user_id: '0911101641848981', dept_id: '-1', form_component_values: [ { name: '员工名称', value: '张三' }, { name: '员工编码', value: '1001' } ] } ``` #### 数据写入 最后,将转换后的数据通过POST请求写入到钉钉系统中。具体实现如下: ```python import requests import json url = 'https://oapi.dingtalk.com/topapi/processinstance/create' headers = {'Content-Type': 'application/json'} data = { 'process_code': 'PROC-8615E2EA-1F9A-4333-916F-DD5B1C9A34A8', 'originator_user_id': '0911101641848981', 'dept_id': '-1', 'form_component_values': [ {'name': '员工名称', 'value': '张三'}, {'name': '员工编码', 'value': '1001'} ] } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.json()) ``` 通过上述步骤,我们成功地将金蝶系统中的付款单位员工信息经过ETL转换后写入到了钉钉系统中。这一过程充分展示了轻易云数据集成平台在异构系统间无缝对接和高效数据处理方面的强大能力。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)