使用轻易云平台实现金蝶和钉钉之间的数据转换

  • 轻易云集成顾问-彭萍
### 金蝶云星空数据集成到钉钉:员工查询表单解决方案 在金蝶云星空与钉钉系统对接过程中,确保数据高效、准确地传输是实现业务无缝衔接的关键。本案例分享将聚焦于如何通过executeBillQuery接口从金蝶云星空获取员工信息,并利用钉钉的topapi/processinstance/create接口完成员工表单的数据写入。 #### 如何调用金蝶云星空API执行数据查询 借助轻易云数据集成平台,我们能够简便地配置executeBillQuery接口来抓取所需的员工信息。该接口支持定时可靠的数据抓取机制,有效处理分页和限流问题,确保每次请求都能获取准确且完整的信息。在实操中,通过精细化参数调配,可以避免漏单现象: ```json { "formid": "BD_Empinfo", "fieldKeys": ["FStaffNumber", "FStaffName"], // 调整分页参数以适应不同规模的数据量 "pagination": { "currentPageIndex":1, "pageSize":1000 } } ``` #### 批量写入大量数据至钉钉 为了保证批量数据快速安全地写入到钉钉,需要采用合理的数据映射策略和异常处理与错误重试机制。在调用topapi/processinstance/create接口时,将从executeBillQuery获得的数据进行必要格式转换,以适应两端系统的对接要求。例如,将金蝶的枚举类型字段转换为符合企业自定义模版需求的结构: ``` json { "process_code":"PROC-XXXXXX", // 动态生成实例ID及其它必填字段 ... } ``` 此外,在批量操作中,通过多线程并发实现高效率推送,同时借助实时监控与日志记录功能,能够精准掌握每一条记录状态,一旦发生错误亦可迅速定位并启动重试流程。 本案例将在后续章节详细探讨具体实现步骤,包括API配置、异常管理以及成功结果验证等环节,为开发者提供从思路到实践的一站式指导。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取员工数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要了解`executeBillQuery`接口的基本配置和调用方式。根据提供的元数据配置,接口的请求方法为POST,主要用于查询操作(effect为QUERY)。 ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FID", "idCheck": true, "request": [ {"field": "FNumber", "label": "编码", "type": "string", "describe": "111", "value": "FNumber"}, {"field": "FID", "label": "实体主键", "type": "string", "describe": "111", "value": "FID"}, {"field": "FName", "label": "员工姓名", "type": "string", "describe": "111", "value": "FName"}, {"field": "FMobile", "label": "移动电话", "type": "string", describe: “111”, “value”: “FMobile”}, {"field":"FEmail","label":"电子邮箱","type":"string","describe":"111","value":"FEmail"}, {"field":"FPostDept","label":"所属部门","type":"string","describe":"111","value":"FPostDept"}, {"field":"FBaseProperty3","label":"部门全称","type":"string","describe":"111","value":"FBaseProperty3"}, {"field":"FOpenBankName","label":"开户银行","type":"string","value":"FOpenBankName"}, {"field":"FBankCode","label":"银行账号","type":"string","value":"FBankCode"}, {"field":"FCNAPS","label":"联行号","type":"string","value":"FCNAPS"}, {"field":"FBankHolder","label":"账户名称","type":"string","value":"FBankHolder"}, {"field":"FUseOrgId_FNumber","label":"使用组织编码","type":"string","value":"FUseOrgId.FNumber"}, {"field:""FUseOrgId_FName","label":"组织名称","type":"string","value":"FUseOrgId.FName"} ], “otherRequest”:[ {“field”:“Limit”,“label”:“最大行数”,“type”:“string”,“describe”:“金蝶的查询分页参数”,“value”:“2000”}, {“field”:“StartRow”,“label”:“开始行索引”,“type”:“string”,“describe”:“金蝶的查询分页参数”,“value”:“{PAGINATION_START_ROW}”}, {“field”:“TopRowCount”,“label”:“返回总行数”,“type”:“int”,“describe”:“金蝶的查询分页参数”}, {“field”:“FilterString”,“label”:“过滤条件”,“type”:“string”,“describe”:“示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=”,"value":"FModifyDate >='{{HOURE_AGO_3|datetime}}' and FUseOrgId.FNumber in ('04','0402','401')"}, {“field”: “FieldKeys”, “label”: “需查询的字段key集合”, “type”: “array”, “describe”: “金蝶分录主键ID格式: FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber”, “value”: “{MAIN_REQUEST}”}, {“field”: “FormId”, “label”: “业务对象表单Id”, “type”: “string”, “describe”: 必须填写金蝶的表单ID如:PUR_PurchaseOrder,“value”: BD_Empinfo} ], autoFillResponse: true } ``` #### 请求参数解析 1. **基础请求字段**: - `api`: 接口名称,这里是`executeBillQuery`。 - `effect`: 操作类型,这里是`QUERY`。 - `method`: 请求方法,这里是POST。 - `number`, `id`, `idCheck`: 用于标识和校验数据唯一性的字段。 2. **请求体字段**: - 包含员工信息相关字段,如编码(`FNumber`)、实体主键(`FID`)、员工姓名(`FName`)、移动电话(`FMobile`)、电子邮箱(`FEmail`)等。 3. **其他请求参数**: - 分页参数:如最大行数(`Limit`)、开始行索引(`StartRow`)。 - 过滤条件:通过过滤字符串(`FilterString`)来限定查询范围,例如根据修改日期和使用组织编码进行筛选。 - 字段集合:指定需要查询的字段集合(`FieldKeys`)。 - 表单ID:指定业务对象表单ID(如员工信息表单ID为BD_Empinfo)。 #### 数据获取与初步加工 在发送请求后,系统会返回符合条件的数据集。我们可以利用轻易云平台提供的数据清洗功能对这些数据进行初步加工。例如: 1. **数据清洗**: - 去除重复记录:根据唯一标识字段(如FID)去重。 - 格式化字段值:例如,将电话号码格式化为统一格式。 2. **数据转换**: - 字段映射:将金蝶云返回的数据字段映射到钉钉所需的数据结构中。 - 数据合并:如果需要从多个接口或多个系统获取数据,可以在此阶段进行数据合并处理。 #### 实际案例 假设我们需要获取最近三小时内修改过的员工信息,并将其导入钉钉系统。我们可以设置如下过滤条件: ```json { FilterString: 'FModifyDate >= "{{HOURE_AGO_3|datetime}}" and FUseOrgId.FNumber in ("04", "0402", '401')' } ``` 通过上述配置,我们可以精准地获取所需的数据,并通过轻易云平台完成后续的数据转换和写入操作。这一过程确保了数据从源系统到目标系统之间的无缝对接,实现了高效、透明的数据集成。 以上就是关于如何调用金蝶云星空接口executeBillQuery获取并加工数据的详细技术解析。希望这些内容能为您在实际项目中提供有价值的参考。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:从金蝶到钉钉的ETL转换与写入 在轻易云数据集成平台中,数据处理生命周期的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台能够接收的格式。本文将详细探讨如何将金蝶系统中的员工查询数据通过ETL转换,最终写入钉钉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-E223EAB0-4FBE-48DC-9AF3-444950945CDB" }, { "field": "originator_user_id", "label": "发起人userid", "type": "string", "describe": "审批实例发起人的userid。", "value": "{UserId}" }, { "field": "dept_id", "label": "发起人所属部门id", "type": "string", "describe": "发起人所在的部门,如果发起人属于根部门,传-1。", "value": "{DeptId}" }, { "field": "form_component_values", "label": "表单控件", "type": "object", ... } ] } ``` ##### 配置解析 1. **API Endpoint**: `topapi/processinstance/create` - 我们使用的是钉钉提供的创建审批实例的API接口。 - 方法类型为`POST`,表示我们将向该接口发送数据。 2. **字段配置**: - `process_code`: 钉钉表单ID,需要在审批流程编辑页面的URL中获取。 - `originator_user_id`: 发起人的用户ID,从金蝶系统中提取并映射到该字段。 - `dept_id`: 发起人所属部门ID,如果是根部门则传`-1`。 - `form_component_values`: 表单控件,包括多个子字段,如收款人、开户行、大额行号等,这些字段需要从金蝶系统中提取相应的数据并映射到这里。 ##### 数据映射与转换 假设我们从金蝶系统中提取到了如下数据: ```json { "_UserId_":"01210911252326062645", "_DeptId_":"1", "_FName_":"张三", "_FOpenBankName_":"中国银行", "_FCNAPS_":"123456789012", "_FBankCode_":"6222021001123456789", "_FUseOrgId-FNumber_":"6577ba6af82ea526c578f93c" } ``` 我们需要将这些字段映射到钉钉API所需的格式: ```json { ... { field: 'originator_user_id', value: '01210911252326062645' }, { field: 'dept_id', value: '1' }, { field: 'form_component_values', children: [ { field: '收款人', value: '张三' }, { field: '开户行', value: '中国银行' }, { field: '大额行号', value: '123456789012' }, { field: '收款账户', value: '6222021001123456789' }, { field: '主体企业', value: '6577ba6af82ea526c578f93c' } ] } } ``` #### 实际操作步骤 1. **定义元数据配置**:根据上述配置定义好元数据,这一步通常在轻易云平台上通过可视化界面完成。 2. **编写ETL脚本**:编写脚本以实现从金蝶系统到钉钉API的数据转换。这可以通过轻易云平台提供的脚本引擎来完成。 3. **执行转换并写入**:运行ETL脚本,将转换后的数据通过HTTP POST请求发送到钉钉API接口。 #### 示例代码 以下是一个简化版的Python代码示例,用于实现上述操作: ```python import requests import json # 金蝶系统提取的数据 data = { "_UserId_":"01210911252326062645", "_DeptId_":"1", "_FName_":"张三", "_FOpenBankName_":"中国银行", "_FCNAPS_":"123456789012", "_FBankCode_":"6222021001123456789", "_FUseOrgId-FNumber_":"6577ba6af82ea526c578f93c" } # 转换后的数据格式 transformed_data = { 'process_code': 'PROC-E223EAB0-4FBE-48DC-9AF3-444950945CDB', 'originator_user_id': data["_UserId_"], 'dept_id': data["_DeptId_"], 'form_component_values': [ {'name': '收款人', 'value': data["_FName_"]}, {'name': '开户行', 'value': data["_FOpenBankName_"]}, {'name': '大额行号', 'value': data["_FCNAPS_"]}, {'name': '收款账户', 'value': data["_FBankCode_"]}, {'name': '主体企业', 'value': data["_FUseOrgId-FNumber_"]} ] } # 钉钉API URL url = "<https://oapi.dingtalk.com/topapi/processinstance/create>" # 发起HTTP POST请求 response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(transformed_data)) # 打印响应结果 print(response.json()) ``` 通过上述步骤,我们成功地将金蝶系统中的员工查询数据经过ETL转换后,写入了钉钉API接口,实现了两个异构系统间的数据无缝对接。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)