钉钉与金蝶云星空无缝数据对接技术经验分享

  • 轻易云集成顾问-何语琴
### 金蝶云星空数据集成到钉钉的技术案例分享 在实际业务场景中,实现系统间的数据无缝对接是提高工作效能的重要手段。本文将重点介绍如何通过轻易云数据集成平台,将金蝶云星空中的销售退货数据高效、安全地集成至钉钉系统。这一过程中,我们运用了executeBillQuery API从金蝶云星空获取数据,并使用topapi/processinstance/create API将数据批量写入到钉钉,确保信息不漏单且实时同步。 首先,针对这一具体项目「销售退货金蝶=>钉钉--测试ok,需要加一个字段的配置,等待客户」,我们需要解决以下几个关键技术点: 1. **高吞吐量的数据写入能力**: 为了适应销售退货的大量记录,我们设计了高效的数据流方案,通过分批处理和并行执行,使得大量数据能够快速、稳定地写入到钉锤。 2. **分页和限流处理**: 金蝶云星空接口executeBillQuery在读取大批量数据时存在分页限制,为此我们实现了一套自动化的分页抓取机制,确保所有销售退货记录被全部捕获,不丢失、不重复。 3. **自定义数据转换逻辑**: 在不同系统之间进行对接时,经常会遇到数据格式差异问题。我们利用轻易云的平台提供的自定义转换功能,以满足特定业务需求,对原始API返回的数据结构进行了必要调整与优化。 4. **异常处理与错误重试机制**: 针对于API调用失败或网络波动导致的问题,我们实现了完善的异常监控及重试机制。当任务出现错误时,能够第一时间检测并重新尝试提交以保证整体流程不中断。 5. **集中监控与日志记录**: 为提升稳定性和可追溯性,我们启用了集中化的监控系统以及详细日志记录功能。每一次接口调用,每一个步骤都能被实时跟踪,有助于及时发现问题并回溯分析,提高可靠性。 下一步内容即为上述各步骤实施过程中的具体操作细节,包括API参数设置、调优方法等实践经验分享。同时,也会讨论如何进一步优化当前方案,应对未来可能遇见的新挑战。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/D36.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取销售退货数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置和调用金蝶云星空的`executeBillQuery`接口。该接口主要用于查询业务单据,支持POST请求。以下是元数据配置的详细说明: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FEntity_FENTRYID", "name": "FBillNo", "request": [ {"field":"FID","label":"实体主键","type":"string","describe":"实体主键","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"销售组织","value":"FSaleOrgId.FName"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"库存组织","value":"FStockOrgId"}, {"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"结算组织","value":"FSettleOrgId"}, {"field":"FApproveDate","label":"日期","type":"string","describe":"日期","value":"FApproveDate"}, {"field":"FMaterialId","label":"物料","type":"string","describe":"物料","value":"FMaterialId.FName"}, {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"货主","value":"FOwnerIdHead.FNumber"}, {"field":"FRealQty","label":"实发数量","type":"string","describe":"实发数量","value":"FRealQty"}, {"field": "FStockId_FNumber", "label": "仓库id", "type": "string", "describe": "仓库id", "value": "FStockId.FNumber"}, {"field": "FTaxPrice", "label": "含税单价", "type": "string", "describe": "含税单价", "value": "FTaxPrice"}, {"field": "FRetcustId", "label": "退货客户", "type": "string", "describe": "投诉对应客户", "value": "FRetcustId.FName"}, {"field": "FSrcBillNo", "label": "源单编号", "type": "string", "describe": "", "value" : "" }, {" field ":" FSalesManId_FName "," label ":" 销售员名称 "," type ":" string "," describe ":" 销售员 "," value ":" FSalesManId.FName "}, {" field ":" FHeadNote "," label ":" 单据头备注 "," type ":" string "," describe ":" 单据头备注 "," value ":" FHeadNote "}, {" field ":" FEntity_FENTRYID "," label ":" FEntity_FENTRYID "," type ":" string "," describe ":" FEntity_FENTRYID "," value ":" FEntity_FENTRYID "}, {" field ":" ``` #### 请求参数详解 在请求参数中,我们需要特别注意以下几个字段: - `FormId`: 必须填写金蝶的表单ID,例如:`SAL_RETURNSTOCK`。 - `FilterString`: 用于过滤条件,例如:`"FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and FDocumentStatus='B' and F_ora_CheckBox='1'"`。 - `FieldKeys`: 查询的字段集合,例如:`["FID", ...]`。 这些参数确保了我们能够准确地获取所需的数据。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗操作: 1. **字段映射**:将原始字段映射到目标系统所需的字段。例如,将`FBillNo`映射为目标系统中的订单编号。 2. **数据格式转换**:例如,将日期格式从`YYYY-MM-DD`转换为目标系统所需的格式。 3. **缺失值处理**:填充或删除缺失值,以确保数据完整性。 #### 示例代码 以下是一个示例代码片段,用于调用接口并处理返回的数据: ```python import requests import json # 配置请求参数 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'SAL_RETURNSTOCK', 'FilterString': 'FModifyDate>=\'2023-01-01\' and FDocumentStatus=\'B\' and F_ora_CheckBox=\'1\'', 'FieldKeys': ['FID', 'FBillNo', 'FSaleOrgId.FName', ...] } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 处理响应 if response.status_code == 200: data = response.json() # 数据清洗与转换 cleaned_data = [] for item in data: cleaned_item = { '订单编号': item['FBillNo'], '销售组织': item['FSaleOrgId.FName'], # 更多字段映射... } cleaned_data.append(cleaned_item) # 输出清洗后的数据 print(cleaned_data) else: print(f"Error: {response.status_code}") ``` 通过上述步骤,我们可以成功地从金蝶云星空获取销售退货数据,并进行初步加工,为后续的数据集成和分析奠定基础。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现销售退货数据的ETL转换并写入钉钉API接口 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台(钉钉API接口)的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台完成这一过程,重点关注API接口相关的技术细节。 #### 1. 数据请求与清洗 首先,我们需要从源平台(金蝶)获取销售退货数据。这一步骤已在生命周期的第一阶段完成,这里不再赘述。我们假设已经获得了所需的数据,并对其进行了初步清洗。 #### 2. 数据转换与写入 接下来,我们需要将清洗后的数据转换为钉钉API接口能够接收的格式。根据提供的元数据配置,钉钉API接口要求的数据结构如下: ```json { "api": "topapi/processinstance/create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "process_code", "label": "process_code", "type": "string", "describe": "process_code在审批流程编辑页面的URL网址中获取。", "value": "PROC-C32C1731-310A-4824-B403-0EE33B597311" }, { "field": "originator_user_id", "label": "originator_user_id", "type": "string", "describe": "审批实例发起人的userid。", "value": "_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base}" }, { ... } ] } ``` #### 3. 配置元数据 根据上述元数据配置,我们需要将金蝶系统中的字段映射到钉钉API接口所需的字段。以下是关键字段及其映射关系: - `process_code`: 固定值 `"PROC-C32C1731-310A-4824-B403-0EE33B597311"` - `originator_user_id`: 从金蝶系统中查找 `FStaffNumber` 字段,并根据 `FID` 进行匹配。 - `dept_id`: 同样从金蝶系统中查找 `FStaffNumber` 字段,并根据 `FID` 进行匹配。 - `form_component_values`: 包含多个子字段,如下所示: - `单据编号`: 映射为 `{FBillNo}` - `单据日期`: 映射为 `{FDate|date}` - `办理人`: 映射为 `_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base}` - `退货组织`: 映射为 `{FSaleOrgId}` - `事业部`: 映射为 `{F_ora_Combo}` - `渠道`: 映射为 `{F_ora_Combo1}` - `退货公司全称`: 映射为 `{FRetcustId}` - `币别`: 映射为 `{F_ora_Combo2}` - `退货原因`: 使用 `_function case '{F_ora_Remarks}' when ' ' then '无' else '{F_ora_Remarks}' end` 函数处理 - `退回金额(元)`: 映射为 `{FBillAllAmount}` - `品牌`: 从金蝶系统中查找 `FHelpCode` 字段,并根据 `FSaledeptid` 匹配。 此外,还有一个嵌套数组字段 `表格`,包含以下子字段: - `物料名称`: 映射为 `{FMaterialId}` - `实退数量`: 映射为 `{FRealQty}` - `含税单价`: 映射为 `{FTaxPrice}` - `价税合计`: 映射为 `{FAllAmount}` #### 4. 数据写入 配置完成后,我们使用轻易云平台提供的可视化界面,将上述映射关系配置到相应的ETL流程中。通过调用钉钉API接口,将转换后的数据写入目标平台。 具体实现步骤如下: 1. 在轻易云平台上创建一个新的ETL任务,选择源平台(金蝶)和目标平台(钉钉)。 2. 配置数据映射关系,根据提供的元数据配置,将金蝶系统中的字段映射到钉钉API接口所需的字段。 3. 设置API调用参数,包括请求方法(POST)、API路径(topapi/processinstance/create)等。 4. 执行ETL任务,实时监控数据流动和处理状态,确保每个环节都清晰易懂。 通过以上步骤,我们成功地将销售退货数据从金蝶系统转换并写入到钉钉API接口,实现了不同系统间的数据无缝对接。这不仅提高了业务透明度和效率,也确保了数据处理过程的全生命周期管理。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)