通过轻易云平台实现从金蝶到钉钉的ETL数据转换

  • 轻易云集成顾问-陈洁琳
### 案例分享:金蝶云星空数据集成到钉钉 在企业业务流程中,实现高效、精确的数据集成对于提升整体运营效率至关重要。本文将重点介绍如何利用轻易云数据集成平台,将金蝶云星空中的供应商信息无缝对接到钉钉系统的供应商表单。这一操作不仅需要确保数据不漏单,还要处理大量数据的快速写入以及异常情况下的数据重试机制。 首先,我们通过调用金蝶云星空的`executeBillQuery` API接口,定时抓取所需供应商信息。在这个过程中,需要特别关注分页和限流问题,因为一次性获取大批量数据可能导致API接口超时或失败。而解决这一问题的关键是实现可靠的抓取与分页策略,确保每次请求成功并获取完整的数据。具体而言,通过轻易云的平台可以设置自动重试机制和日志记录功能,对任何网络或接口错误进行及时捕捉和修正。 在成功从金蝶云星空获取到所需的供应商信息后,我们面临第二个技术难题:如何将这些数据准确、高效地写入到钉钉系统中。使用钉钉提供的`topapi/processinstance/create` API,可以生成新的供应商表单实例。然而,这一步同样涉及大量数据快速写入的问题,为此我们设计了批量处理机制,并结合实时监控工具,对整个过程进行全面跟踪,以便随时调整和优化。 此外,由于两套系统之间的数据格式存在差异,在实际对接过程中,还需要进行必要的数据映射转换工作。例如,从金蝶云星空提取出来的信息字段与钉钉表单预设字段不完全一致,需要通过定制化映射规则来实现无缝对接。这不仅包括字段名称的一致性,还涉及数据类型及内容格式上的匹配转换工作。 最后,一旦集成进入运行状态,实时监控与日志记录变得尤为重要。通过实施全生命周期管理,可以清晰透明地展示每一个环节的数据流动情况,帮助我们迅速定位潜在问题并做出响应。同时,也为后续维护和优化提供了坚实保障。 以上就是关于本案例开头部分的一些核心技术点展示,在下一节中,我们会详细探讨具体实现步骤以及相关代码示例。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取供应商数据,并进行必要的数据加工。 #### 配置元数据 首先,我们需要配置元数据,以便正确调用金蝶云星空的API接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FSupplierId", "name": "FNumber", "idCheck": true, "request": [ {"field":"FSupplierId","label":"FSupplierId","type":"string","describe":"FSupplierId","value":"FSupplierId"}, {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"}, {"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","describe":"创建组织","value":"FCreateOrgId.FNumber"}, {"field":"FUseOrgId_FNumber","label":"使用组织","type":"string","describe":"使用组织","value":"FUseOrgId.FNumber"}, {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"}, {"field":"FShortName","label":"简称","type":"string","describe":"简称","value":"FShortName"}, {"field":"FMinPOValue","label":"最小订单量","type":"string","describe":"最小订单量","value":"FMinPOValue"}, {"field":...}, ... ], "otherRequest": [ {"field": "Limit", "label": "{PAGINATION_PAGE_SIZE}", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field":...}, ... ], ... } ``` #### 调用API接口 在配置好元数据后,我们可以通过轻易云平台发起对金蝶云星空`executeBillQuery`接口的调用。以下是一个示例请求: ```json { "FormId": "BD_Supplier", "FieldKeys": ["FSupplierId", "FNumber", ...], "FilterString": "FAuditDate>='{{LAST_SYNC_TIME|dateTime}}' and FCreateOrgId.FNumber in ('04','0402','401')", ... } ``` 此请求将返回符合条件的供应商信息。关键字段包括供应商ID(`FSupplierId`)、编码(`FNumber`)、名称(`FName`)等。 #### 数据清洗与加工 获取到原始数据后,需要进行清洗和加工,以确保数据质量和一致性。例如,可以对某些字段进行格式转换或值替换: 1. **格式转换**:将日期字段从字符串格式转换为标准日期格式。 2. **值替换**:根据业务需求,将某些字段的值替换为更具可读性的内容。例如,将业务状态码转换为对应的状态描述。 以下是一个简单的数据清洗示例: ```python def clean_data(data): for record in data: # 转换日期格式 record['FAuditDate'] = convert_to_date(record['FAuditDate']) # 替换业务状态码 record['FBusinessStatus'] = status_code_to_description(record['FBusinessStatus']) return data ``` #### 写入目标系统 经过清洗和加工后的数据可以写入到目标系统,如钉钉供应商表单。这一步通常涉及到调用目标系统的API接口,并确保数据格式符合目标系统要求。 ```json { ... } ``` 通过上述步骤,我们实现了从金蝶云星空获取供应商数据并进行加工处理,最终写入到钉钉供应商表单中。这一过程充分利用了轻易云平台的数据集成功能,实现了不同系统间的数据无缝对接。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入钉钉API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现从金蝶供应商查询到钉钉供应商表单的无缝对接。 #### 钉钉API接口元数据配置解析 首先,我们需要理解钉钉API接口的元数据配置,以便在ETL过程中正确地映射和转换数据。以下是我们将要使用的元数据配置: ```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-CC6470B0-D13D-469D-9A5A-7C634C4892EB" }, { "field": "originator_user_id", "label": "发起人userid", "type": "string", "describe": "审批实例发起人的userid。", "value": "01210911252326062645" }, { "field": "dept_id", "label": "发起人所属部门id", "type": "string", "describe": "发起人所在的部门,如果发起人属于根部门,传-1。", "value": "-1" }, { "field": "form_component_values", "label": "表单控件", "type": "object", ... } ] } ``` #### 数据请求与清洗 在进行ETL转换之前,我们首先需要从金蝶系统中获取供应商信息。这一步骤通常涉及到通过API请求或数据库查询来提取相关数据,并对其进行必要的清洗和预处理。例如: ```sql SELECT FName, FBankHolder, FOpenBankName, FCNAPS, FBankCode, FUseOrgId_FNumber FROM SupplierTable WHERE Status = 'Active'; ``` #### 数据转换与映射 接下来,我们将提取的数据映射到钉钉API所需的字段。根据元数据配置,我们需要将金蝶系统中的字段对应到钉钉API中的表单控件字段: ```json "form_component_values":[ {"field":"供应商名称","label":"供应商名称","type":"string","describe":"控件1","value":"{FName}"}, {"field":"收款人","label":"收款人","type":"string","describe":"控件2","value":"{FBankHolder}"}, {"field":"开户行","label":"开户行","type":"string","describe":"控件3","value":"{FOpenBankName}"}, {"field":"大额行号","label":"大额行号","type":"string","describe":"控件4","value":"{FCNAPS}"}, {"field":"收款账户","label":"收款账户","type":"string","value":"{FBankCode}"}, {"field":"主体企业","label":"主体企业","type":"string","value":"{FUseOrgId_FNumber}"} ] ``` 在轻易云平台上,我们可以通过可视化界面进行字段映射,将金蝶系统中的字段值填充到上述JSON结构中。 #### 数据写入目标平台 完成数据转换后,我们需要将这些数据通过HTTP POST请求写入到钉钉API接口。以下是一个示例代码片段,展示了如何构建HTTP请求并发送: ```python import requests import json url = 'https://oapi.dingtalk.com/topapi/processinstance/create' headers = {'Content-Type': 'application/json'} data = { 'process_code': 'PROC-CC6470B0-D13D-469D-9A5A-7C634C4892EB', 'originator_user_id': '01210911252326062645', 'dept_id': '-1', 'form_component_values': [ {'name': '供应商名称', 'value': supplier_data['FName']}, {'name': '收款人', 'value': supplier_data['FBankHolder']}, {'name': '开户行', 'value': supplier_data['FOpenBankName']}, {'name': '大额行号', 'value': supplier_data['FCNAPS']}, {'name': '收款账户', 'value': supplier_data['FBankCode']}, {'name': '主体企业', 'value': supplier_data['FUseOrgId_FNumber']} ] } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.json()) ``` #### 实时监控与错误处理 在实际操作中,实时监控和错误处理是确保数据准确性和系统稳定性的关键。轻易云平台提供了实时监控功能,可以帮助我们跟踪每个步骤的数据流动和处理状态。一旦发生错误,可以迅速定位并解决问题。 通过上述步骤,我们成功地实现了从金蝶系统到钉钉API接口的数据ETL转换,并将处理后的数据写入目标平台。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)