使用轻易云进行数据ETL转换及写入金蝶云星空的技术探讨
### 钉钉数据集成到金蝶云星空:案例分享与实现方法
在企业信息系统的对接过程中,如何高效且准确地将业务数据从钉钉平台集成到金蝶云星空,是许多企业关注的重点。本篇文章介绍了一个实际运行方案“传给钉钉后,回传金蝶字段②”的技术细节,通过轻易云数据集成平台,实现了这一复杂任务。
在这个案例中,我们主要通过调用两个核心API接口来完成整个流程:使用`topapi/processinstance/get`从钉钉获取流程实例数据,并采用`batchSave`接口将处理后的数据批量写入到金蝶云星空。以下是具体操作步骤和技术要点。
首先,为确保不会遗漏任何重要业务信息,我们需要定时可靠地抓取钉钉提供的数据。利用轻易云的数据调度功能,可以设置定期任务来调用`topapi/processinstance/get`接口,从而实时监控和记录每一次的数据抓取过程。不仅如此,该方案还内置了错误重试机制,即使出现网络波动或其他异常情况,也能保证数据采集的完整性。
其次,在处理大量数据快速写入金蝶云星空时,需要特别注意API接口的限流问题。针对大批量的数据提交,需分批次进行,以避免触发限流策略导致请求失败。在这里,我们采用分页拉取和并行处理相结合的方法,每次只获取一定数量的数据,通过先进先出的队列管理机制,将其依序导入到金蝶云星空中,大幅提升了整体效率。
另外,由于两者之间的数据格式差异较大,我们自定义了一套映射规则,对相关字段进行转换。例如,从钉丁获取的信息包括审批状态、审批人等,而这些信息可能以不同格式存储在金蝶云。因此,在执行 `batchSave` 操作之前,需要对这些字段进行预先转换。这一环节不仅保障了数据的一致性,还便于日后的维护升级。
最后,为应对不同种类异常情况,本案例设计了一整套完善的异常捕获与恢复机制。一旦发现某个任务执行失败或者返回错误码,可以自动进入重试阶段,同时会生成详细日志供开发人员分析。这一部分由轻易云透明化可视界面全程监控,不但有助于快速定位问题,还能及时做出响应调整。
![如何开发钉钉API接口](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台调用钉钉接口topapi/processinstance/get获取并加工数据
在数据集成的生命周期中,调用源系统接口获取原始数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,并对获取的数据进行初步加工。
#### 接口调用配置
首先,我们需要配置调用钉钉接口的元数据。以下是具体的配置细节:
```json
{
"api": "topapi/processinstance/get",
"method": "POST",
"number": "id",
"id": "id",
"idCheck": true,
"request": [
{
"label": "审批流的唯一码",
"field": "process_code",
"type": "string",
"value": "PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5"
},
{
"label": "审批实例开始时间。Unix时间戳,单位毫秒。",
"field": "start_time",
"type": "string",
"value": "_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000"
},
{
"label": "审批实例结束时间,Unix时间戳,单位毫秒",
"field": "end_time",
"type": "string",
"value": "{CURRENT_TIME}000"
},
{
"label": "分页参数,每页大小,最多传20。",
"field": "size",
"type": "string",
"value": "20"
},
{
"label": "分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。",
"field": "cursor",
"type": "string"
}
]
}
```
#### 参数解析与设置
1. **审批流的唯一码 (`process_code`)**:
- 固定值为`PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5`。
- 用于标识特定的审批流程。
2. **审批实例开始时间 (`start_time`)**:
- 使用函数计算:`_function ({LAST_SYNC_TIME}-(3600 * 24))* 1000`。
- `LAST_SYNC_TIME`表示上次同步的时间,通过减去一天(3600秒 * 24小时)并转换为毫秒。
3. **审批实例结束时间 (`end_time`)**:
- 当前时间转换为Unix时间戳,并乘以1000转换为毫秒:`{CURRENT_TIME}000`。
4. **分页参数 (`size`)**:
- 每页大小固定为20条记录。
5. **分页查询游标 (`cursor`)**:
- 初始值为0,在后续请求中使用返回参数中的`next_cursor`值。
#### 数据请求与清洗
在完成上述配置后,我们可以通过轻易云平台发起POST请求来获取钉钉的审批实例数据。以下是一个示例请求:
```json
{
"_url":"https://oapi.dingtalk.com/topapi/processinstance/get",
"_method":"POST",
"_headers":{
// 包含必要的认证信息
},
"_body":{
process_code: 'PROC-C1D46DC7-ACB2-4B63-8C48-F644942F63E5',
start_time: (LAST_SYNC_TIME-(3600 * 24))*1000,
end_time: CURRENT_TIME*1000,
size: '20',
cursor: '0'
}
}
```
在接收到响应后,需要对数据进行初步清洗和处理。例如,将Unix时间戳转换为可读日期格式、过滤掉不需要的字段等。
#### 数据转换与写入
经过清洗后的数据将进入下一阶段的数据转换与写入过程。在这一阶段,可以根据业务需求将数据写入到目标系统,如金蝶等ERP系统。通过轻易云平台提供的多种异构系统支持,可以实现无缝的数据对接和高效的数据流转。
#### 实时监控与优化
在整个过程中,通过轻易云平台提供的实时监控功能,可以随时查看数据流动和处理状态。这不仅提高了业务透明度,还能及时发现和解决潜在问题,从而优化数据集成流程。
通过上述步骤,我们成功地使用轻易云数据集成平台调用了钉钉接口,并对获取的数据进行了初步加工。这一过程展示了如何高效地进行跨系统的数据集成,为后续的数据处理奠定了坚实基础。
![打通钉钉数据接口](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例
在数据集成过程中,数据的ETL(提取、转换、加载)是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。
#### 数据请求与清洗
在数据请求与清洗阶段,我们已经从源系统中提取了原始数据,并对其进行了初步清洗和处理。接下来,我们将重点关注如何将这些数据转换为金蝶云星空API接口所需的格式,并通过API写入目标平台。
#### 元数据配置解析
我们使用以下元数据配置来指导ETL过程:
```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 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo={{单据编号}}"
},
{
"field": "F_VAOJ_TDD",
"label": "是否同步钉钉",
"type": "string",
"describe": "单据类型",
"value": "已同步"
}
],
"otherRequest": [
{
"field": "FormId",
"label": "业务对象表单Id",
"type": "string",
"describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder",
"value": "CN_PAYAPPLY"
},
{
"field": "Operation",
"label": "执行的操作",
"type": "string",
"value": ":BatchSave"
},
{
"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"false"},
{
field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"},
{"label":"NeedUpDateFields","field":"NeedUpDateFields","type":"string","value":"F_VAOJ_TDD","parser":{"name":"StringToArray","params":","}}
]
}
```
#### 转换与写入
1. **字段映射与转换**:
- `FID`:通过 `_findCollection` 方法从源系统中查找对应的 `FID`。
- `F_VAOJ_TDD`:设置为固定值“已同步”,表示该单据已经同步到钉钉。
2. **其他请求参数**:
- `FormId`:指定业务对象表单ID,这里为 `CN_PAYAPPLY`。
- `Operation`:执行批量保存操作。
- `IsAutoSubmitAndAudit` 和 `IsVerifyBaseDataField`:分别设置为 `false`,表示不自动提交和审核,也不验证基础资料有效性。
- `NeedUpDateFields`:指定需要更新的字段,这里为 `F_VAOJ_TDD`。
#### API调用示例
通过配置好的元数据,我们可以构建出具体的API调用请求:
```json
{
"_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo={{单据编号}}"
}
```
假设我们从源系统获取到的数据如下:
```json
{
"_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345"
}
```
然后我们将这些数据转换为金蝶云星空API所需格式:
```json
{
"_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345"
}
```
最终,通过POST方法将这些数据发送到金蝶云星空API接口,实现数据写入:
```json
{
"_findCollection find FID from 85a16772-5481-3a9b-ad07-eb7f0ddd2587 where FBillNo=12345"
}
```
#### 实践应用中的注意事项
在实际应用中,需要特别注意以下几点:
1. **字段映射准确性**:确保所有字段都能正确映射到目标系统中的相应字段。
2. **数据格式一致性**:确保转换后的数据格式符合目标系统API接口要求。
3. **错误处理机制**:在调用API时,要有完善的错误处理机制,以便及时发现和解决问题。
通过以上步骤,我们成功实现了从源系统到金蝶云星空的ETL转换和数据写入。这不仅提高了数据处理效率,还确保了业务流程的一致性和准确性。
![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)