使用轻易云平台进行ETL转换并写入金蝶云星空

  • 轻易云集成顾问-彭亮
### 钉钉数据集成到金蝶云星空的技术案例分享 在本次案例中,我们将深入探讨如何通过轻易云数据集成平台,实现钉钉报销【现货采购】的数据无缝集成到金蝶云星空的付款单上。整个过程不仅确保了高效、准确的数据流动,还能够实时监控和处理各种异常情况,以最大化地提升业务运营的透明度和效率。 为了实现这一目标,我们首先需要从钉钉获取相关报销数据。此步骤中的关键技术点是调用 `topapi/processinstance/get` 接口,确保我们能定时、可靠地抓取所需数据。在实际操作中,需要特别注意接口分页和限流的问题,因为大量请求可能会触发钉钉API的限制策略,从而影响数据完整性。因此,通过合理设计请求频率与缓存机制,可以有效规避这些问题,保证不漏单。 接下来,要处理的是将从钉钉获取的大量报销数据快速写入到金蝶云星空。在这一阶段,利用 `batchSave` API 进行批量写入是一个关键手段。这不仅提高了写入速度,还能减少对系统资源的占用。然而,由于两者之间的数据格式存在差异,这就要求我们在设计映射规则时格外慎重。通过定制化的数据映射方案,可以精准转换并匹配每个字段,使其符合金蝶云星空对于付款单记录的要求。 此外,为更好地应对实际环境中的各种复杂情况,我们引入了一系列异常处理与错误重试机制。例如,当由于网络延迟或其他不可预测因素导致部分数据未成功写入时,可即时启用重试逻辑,对未完成项重新进行提交,以保证最终一致性。同时,在整个过程中植入实时监控与日志记录功能,不仅有助于随时追踪各环节状态,更为后续故障排查提供了详实依据。 通过上述多层次、多维度的方法实施,本案例展示了一个典型、高效且具备高度自动化能力的数据集成解决方案。从架构设计到具体实现,每一步都充分考虑到了不同系统间接口调用及交互细节,并针对可能出现的问题提前制定相应预案,从而为企业构建起一条稳定、安全、智能的信息桥梁。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`来获取报销类别为“现货采购”的数据,并进行初步加工。 #### 1. 配置API请求 首先,我们需要配置API请求的元数据。根据提供的元数据配置,我们使用POST方法调用钉钉接口`topapi/processinstance/get`,并设置必要的请求参数。 ```json { "api": "topapi/processinstance/get", "method": "POST", "number": "number", "id": "id", "idCheck": true, "condition": [ [ { "field": "报销类别", "logic": "eq", "value": "现货采购" } ] ] } ``` #### 2. 构建请求体 根据元数据配置,我们需要构建一个符合条件的请求体。以下是一个示例请求体: ```json { "process_instance_id": "<实例ID>", "user_id": "<用户ID>" } ``` 在实际操作中,`<实例ID>`和`<用户ID>`需要根据具体情况动态填充。 #### 3. 发起API请求 使用轻易云平台提供的全异步处理能力,我们可以高效地发起API请求,并确保在异步环境下不阻塞其他操作。以下是一个示例代码片段,用于发起API请求: ```python import requests url = 'https://oapi.dingtalk.com/topapi/processinstance/get' headers = {'Content-Type': 'application/json'} data = { 'process_instance_id': '<实例ID>', 'user_id': '<用户ID>' } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: process_data = response.json() else: raise Exception(f"Failed to fetch data: {response.status_code}") ``` #### 4. 数据过滤与清洗 获取到原始数据后,需要根据条件进行过滤和清洗。我们只保留报销类别为“现货采购”的记录。以下是一个示例代码片段,用于过滤和清洗数据: ```python def filter_data(process_data): filtered_data = [] for item in process_data['process_instance']: if item['报销类别'] == '现货采购': filtered_data.append(item) return filtered_data cleaned_data = filter_data(process_data) ``` #### 5. 数据转换与写入 经过过滤和清洗后的数据,需要进行格式转换,以便写入目标系统(如金蝶付款单)。以下是一个示例代码片段,用于将清洗后的数据转换为目标系统所需的格式: ```python def transform_data(cleaned_data): transformed_data = [] for item in cleaned_data: transformed_item = { '付款单号': item['number'], '申请人': item['user_id'], '金额': item['amount'], # 添加其他必要字段转换 } transformed_data.append(transformed_item) return transformed_data final_data = transform_data(cleaned_data) ``` #### 6. 写入目标系统 最后,将转换后的数据写入目标系统。在此过程中,可以利用轻易云平台提供的数据写入功能,实现与金蝶付款单系统的一致性对接。 ```python def write_to_target_system(final_data): # 假设我们有一个函数可以将数据写入金蝶系统 for item in final_data: write_to_kingdee(item) write_to_target_system(final_data) ``` 通过以上步骤,我们实现了从钉钉接口获取、过滤、清洗、转换并写入目标系统的完整流程。这一过程充分利用了轻易云平台的数据集成功能,使得不同系统间的数据无缝对接成为可能。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式是关键步骤。本文将详细介绍如何使用轻易云数据集成平台,将钉钉报销【现货采购】的数据转换并写入金蝶云星空API接口。 #### 配置元数据 元数据配置是实现数据转换和写入的基础。以下是配置的关键字段及其解析方式: 1. **单据编号(FBillNo)** - 类型:string - 描述:单据编号 - 值:`{{extend.business_id}}` 2. **单据类型(FBillTypeID)** - 类型:string - 描述:单据类型 - 解析器:`ConvertObjectParser` - 参数:`FNUMBER` - 值:`FKDLX01_SYS` 3. **业务日期(FDATE)** - 类型:string - 描述:业务日期 - 值:`{{extend.finish_time}}` 4. **结算组织(FSETTLEORGID)** - 类型:string - 描述:100 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 值:`_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}` 5. **付款组织(FPAYORGID)** - 类型:string - 描述:100 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 值:同结算组织 6. **币别(FCURRENCYID)** - 类型:string - 描述:币别 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 值:`PRE001` 7. **往来单位类型(FCONTACTUNITTYPE)** - 类型:string - 描述:往来单位类型 - 值:`BD_Supplier` 8. **往来单位(FCONTACTUNIT)** * 类型: string * 描述: 往来单位 * 解析器: `ConvertObjectParser` * 参数: `FNumber` * 值: `_findCollection find FNumber from e3fb9252-4cce-32f4-bccf-2792bac19e8d where FName={{项目费用明细.供应商名称}}` 9. **付款单明细(FPAYBILLENTRY)** * 类型: array * 子字段: * **结算方式(FSETTLETYPEID)** * 类型: string * 解析器: `ConvertObjectParser` * 参数: `FNumber` * 值: `_findCollection find Number from 04463531-c6b1-3e53-b5d7-9d456a92d4cf where Name={{付款方式_new}}` * **付款用途(FPURPOSEID)** * 类型: string * 解析器: `ConvertObjectParser` * 参数: `FNumber` * 值: `SFKYT08_SYS` * **应付金额(FPAYTOTALAMOUNTFOR)** * 类型: string * 值: `{{项目报销明细.合计}}` #### 数据请求与清洗 在数据请求阶段,首先从钉钉报销系统获取相关数据。通过API接口获取到的数据可能包含冗余信息或格式不符合要求,需要进行清洗和预处理。例如,日期格式的转换、字符串的修剪等。 #### 数据转换与写入 在清洗后的数据基础上,利用元数据配置进行ETL转换。轻易云提供了强大的转换功能,可以通过配置文件中的解析器和参数,实现复杂的数据映射和转换。 例如,结算组织字段的值通过 `_findCollection find Number from ... where Name={{费用归属项目}}` 的方式,从指定集合中查找并匹配相应的编号。这种动态查找机制极大地提高了数据准确性和一致性。 最终,通过调用金蝶云星空API接口,将转换后的数据写入目标平台。以下是一个示例请求: ```json { "FormId": "AP_PAYBILL", "Operation": "BatchSave", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": false, "Model": { "FBillNo": "{{extend.business_id}}", "FBillTypeID": {"FNUMBER": "FKDLX01_SYS"}, "FDATE": "{{extend.finish_time}}", ... "FPAYBILLENTRY": [ { "FSETTLETYPEID": {"FNUMBER": "_findCollection find Number from ... where Name={{付款方式_new}}"}, ... } ] } } ``` 通过上述步骤,成功实现了从钉钉报销系统到金蝶云星空的无缝数据集成。在整个过程中,轻易云的数据处理能力和灵活配置为高效、准确的数据传输提供了保障。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)