利用轻易云进行ETL转换并写入金蝶云的完整流程

  • 轻易云集成顾问-黄宏棵
### 钉钉数据集成到金蝶云星空:修改下推的付款单③ 在企业信息系统对接中,如何高效、可靠地实现不同平台间的数据流动,是成功实施数据集成项目的重要课题。本次案例分享聚焦于“修改下推的付款单③”的具体技术方案,通过使用轻易云数据集成平台,将钉钉的审批流程实例数据集成到金蝶云星空中,并实现稳定、高效的数据同步。 #### 数据获取与处理 - 钉钉接口调用 首先,我们需要从钉钉系统获取审批流程实例的数据。通过调用`topapi/processinstance/get` API,可以精确取得所需的数据信息。该过程面临分页和限流问题,这要求我们设计一个稳健的抓取策略,采用定时任务机制可靠地从钉钉接口批量提取数据,避免漏单现象。 #### 数据转换与映射 - 适应金蝶云星空结构 由于钉钉输出的数据格式与金蝶云星空所需格式不一致,在进行写入操作前,需要自定义一套转换逻辑。在此过程中,可视化的数据流设计工具显得尤为重要,它使得复杂的数据转化过程变得更加直观且便于管理。同时,为了确保输入到金蝶云系统中的每条记录均准确无误,我们还要开启实时监控功能,对整个处理过程进行追踪和日志记录。 #### 批量写入 - 金蝶云星空API交互 最终,经过清洗、校验和转换后的数据将通过`batchSave` API批量写入到金蝶云星空里。在这个步骤中,高吞吐量的数据写入能力确保大量数据信息能快速进入目标系统,提高整体效率。此外,当遇到网络波动或意外错误时,还需具备完善的异常处理机制,包括错误重试及明确告警,保证业务连续性和平稳运行。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`来获取并加工数据。 #### 接口概述 钉钉接口`topapi/processinstance/get`用于获取指定业务流程实例的详细信息。该接口采用POST方法请求,主要参数包括业务ID(business_id),这是我们需要获取的单据编号。 #### 元数据配置解析 根据提供的元数据配置: ```json { "api": "topapi/processinstance/get", "method": "POST", "number": "business_id", "id": "单据编号", "idCheck": true } ``` 我们可以得出以下关键信息: - **API路径**:`topapi/processinstance/get` - **请求方法**:POST - **业务ID字段**:business_id - **单据编号字段**:单据编号 - **ID校验**:启用 #### 数据请求与清洗 在实际操作中,首先需要构建请求体,并确保业务ID(business_id)的准确性和唯一性。以下是一个示例请求体: ```json { "process_instance_id": "your_business_id" } ``` 轻易云平台会根据元数据配置自动生成并发送该请求。返回的数据通常包含多个字段,我们需要对其进行清洗和筛选,以提取有用的信息。例如: ```json { "process_instance": { "title": "付款申请", "create_time": "2023-10-01T12:00:00Z", "finish_time": null, ... } } ``` 在这个过程中,我们可能只需要特定字段,如`title`、`create_time`等。因此,需要编写清洗规则来过滤和转换这些字段。 #### 数据转换与写入 清洗后的数据需要进一步转换,以符合目标系统的要求。例如,将时间格式从UTC转换为本地时间,或者将字段名称映射到目标系统的字段名称。 假设目标系统要求的数据格式如下: ```json { "document_title": "付款申请", "created_at": "2023-10-01 20:00:00" } ``` 我们可以使用轻易云平台提供的数据转换功能,将原始数据进行相应的映射和格式化处理: ```python def transform_data(data): return { "document_title": data["process_instance"]["title"], "created_at": convert_utc_to_local(data["process_instance"]["create_time"]) } def convert_utc_to_local(utc_time): # 假设时区为东八区 local_time = datetime.strptime(utc_time, "%Y-%m-%dT%H:%M:%SZ") + timedelta(hours=8) return local_time.strftime("%Y-%m-%d %H:%M:%S") ``` 通过上述代码,可以将原始数据转换为目标系统所需的格式。 #### 实践案例 假设我们需要集成一个付款单审批流程。首先,通过调用钉钉接口获取审批实例详情,然后对返回的数据进行清洗和转换,最后写入目标系统。 1. **调用接口**: ```python response = requests.post( url="https://oapi.dingtalk.com/topapi/processinstance/get", headers={"Content-Type": "application/json"}, data=json.dumps({"process_instance_id": business_id}) ) data = response.json() ``` 2. **清洗数据**: ```python cleaned_data = { "title": data["process_instance"]["title"], "create_time": data["process_instance"]["create_time"] } ``` 3. **转换数据**: ```python transformed_data = transform_data(cleaned_data) ``` 4. **写入目标系统**: ```python target_system.write(transformed_data) ``` 通过上述步骤,可以实现从钉钉获取审批实例详情,并将其加工后写入目标系统的完整流程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台将源平台的数据进行ETL转换,并通过金蝶云星空API接口将其写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统中提取所需的数据。假设我们已经完成了数据请求与清洗阶段,接下来我们将重点放在数据转换与写入阶段。 #### 数据转换 在数据转换过程中,我们需要根据目标平台的要求对数据进行格式化和处理。以下是元数据配置示例,它定义了如何将源数据字段映射到金蝶云星空API所需的字段: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ { "field": "FID", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "_findCollection find FID from b91e58dd-b358-385e-a6e9-58ae2b8c37ff where FBillNo={Number}" }, { "field": "F_VAOJ_HKSX", "label": "货款属性", "type": "string", "describe": "单据类型", "value": "_function case '{{货款属性}}' when '成品' then 'CP' else 'FL' end" }, { "label": "备注", "field": "FREMARK", "type": "string", "value": "{title}-{{收款人(公司名称)}}-{{备注}}" }, { "label": "单据编号", "field": "FBillNo", "type": "string", "value": "{business_id}" } ], ... } ``` #### 数据写入 在完成数据转换后,我们需要将处理后的数据通过金蝶云星空API接口写入目标平台。以下是如何配置和调用API接口的详细步骤: 1. **配置API接口**: - `api`: `batchSave`,表示批量保存操作。 - `method`: `POST`,HTTP请求方法。 - `idCheck`: `true`,表示检查ID是否存在。 - `operation`: 定义具体操作方法和参数,如`batchArraySave`。 2. **映射字段**: - `FID`: 单据编号,通过查询获取。 - `F_VAOJ_HKSX`: 货款属性,通过条件判断赋值。 - `FREMARK`: 备注信息,组合多个字段生成。 - `FBillNo`: 单据编号,直接从业务ID获取。 3. **其他请求参数**: - `FormId`: 金蝶业务对象表单ID,例如`AP_PAYBILL`。 - `Operation`: 执行的操作类型,例如`BatchSave`。 - `IsAutoSubmitAndAudit`: 是否自动提交并审核,布尔值。 - `IsVerifyBaseDataField`: 是否验证基础资料有效性,布尔值。 4. **调用API**: 使用配置好的元数据,通过轻易云平台的可视化界面或编程方式调用金蝶云星空的API接口,实现数据的批量保存。 ```json { ... // 调用API时发送的JSON请求体 { "_modelName":"AP_PAYBILL", "_data":{ "_array":[ { "_key":"batchArraySave", "_value":[ { "_key":"FID", "_value":"123456" }, { "_key":"F_VAOJ_HKSX", "_value":"CP" }, ... ] } ] } } } ``` 通过上述步骤,我们可以高效地将源平台的数据经过ETL转换后写入到金蝶云星空系统中,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)