利用轻易云平台进行数据ETL并写入金蝶云星空的指南
### 钉钉数据集成到金蝶云星空:样机借用申请到其他出库单案例分享
在企业运营中,系统对接和数据集成一直是IT部门的核心任务之一。我们将详细介绍一个具体的系统对接案例——从钉钉的样机借用申请流程,到金蝶云星空中的其他出库单处理。本篇文章重点阐述如何高效、准确地实现数据的无缝集成。
#### 数据获取与可靠性保证
为了确保每一条样机借用申请记录都被捕获并传输至金蝶云星空,我们使用了钉钉提供的数据接口 `topapi/processinstance/get`。这个API能够稳定地抓取所有相关数据,并支持定时执行,以保证及时同步。通过轻易云的数据集成平台,我们设置了一个定时调度器,每小时调用该接口一次,从而避免漏单问题。此外,为了解决大批量数据写入带来的性能瓶颈,采用了分批次写入策略,大幅提升效率和稳定性。
#### 接口调用与分页处理
由于钉钉API存在分页限制,我们需要特别注意处理多页返回结果。在实现过程中,通过循环调用`topapi/processinstance/get`接口并解析JSON响应来逐页获取完整的数据。这不仅保障了数据完整性,还有效应对可能发生的限流问题。例如,在每次请求后引入短暂延迟,以避免触发限流机制。
#### 数据格式转换与映射
当从钉钉获取数据后,面临的一大挑战是如何将其转化为金蝶云星空所能识别的数据结构。这涉及字段名称、类型以及值域等方面的不一致。因此,我们设计了一套自定义映射规则,对每个字段进行精细化匹配。同时利用轻易云提供的数据转换工具,将原始JSON格式转为满足金蝶API要求的XML或其他合适形式,使得batchSave操作顺利完成。
这一系列措施,不仅成功解决了不同系统间的数据交互问题,还显著提升了业务运作效率和透明度。在实际操作中,如遇任何异常情况,都会立即记录并触发重试机制,确保最终的一致性和可靠性。
![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image)
### 调用钉钉接口topapi/processinstance/get获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将深入探讨如何通过调用钉钉接口`topapi/processinstance/get`来获取数据,并进行初步加工,为后续的数据处理和写入打下坚实基础。
#### 接口调用配置
首先,我们需要配置元数据以便正确调用钉钉的API接口。以下是我们在轻易云平台上使用的元数据配置:
```json
{
"api": "topapi/processinstance/get",
"effect": "QUERY",
"method": "POST",
"number": "number",
"id": "id",
"name": "number",
"idCheck": true,
"autoFillResponse": true
}
```
这些配置项具有特定的含义:
- `api`: 指定要调用的API接口,这里是`topapi/processinstance/get`。
- `effect`: 表示该操作是一个查询操作。
- `method`: 使用POST方法进行请求。
- `number`和`id`: 定义了请求参数中的标识字段。
- `name`: 在返回的数据中,将使用`number`字段作为名称。
- `idCheck`: 启用ID检查,确保请求参数中的ID有效。
- `autoFillResponse`: 自动填充响应数据,简化后续处理步骤。
#### 数据请求与清洗
在实际操作中,我们首先需要构建一个有效的POST请求,以获取钉钉系统中的流程实例数据。以下是一个示例请求体:
```json
{
"process_instance_id": "<实例ID>"
}
```
发送请求后,钉钉会返回一个包含流程实例详细信息的JSON对象。假设返回的数据如下:
```json
{
"dingtalk_smartwork_bpms_processinstance_get_response": {
"result": {
"process_instance_id": "<实例ID>",
"title": "<流程标题>",
"status": "<流程状态>",
...
}
}
}
```
#### 数据转换与初步加工
接收到响应数据后,我们需要对其进行初步加工,以便后续处理。具体步骤包括:
1. **提取关键字段**:从响应中提取出我们关心的字段,例如`process_instance_id`, `title`, 和 `status`等。
2. **格式转换**:根据目标系统(如金蝶)的要求,对数据格式进行转换。例如,将日期格式从ISO标准转换为目标系统所需的格式。
3. **数据校验**:根据业务规则,对提取的数据进行校验。例如,确保流程状态为“已完成”时才继续处理。
以下是一个简单的数据转换示例代码:
```python
def process_dingtalk_response(response):
result = response.get("dingtalk_smartwork_bpms_processinstance_get_response", {}).get("result", {})
processed_data = {
"process_instance_id": result.get("process_instance_id"),
"title": result.get("title"),
"status": result.get("status"),
# 添加更多字段处理逻辑
}
return processed_data
# 示例调用
response = {
# 假设这是从API获取到的响应
}
processed_data = process_dingtalk_response(response)
print(processed_data)
```
#### 自动填充响应
由于配置了`autoFillResponse: true`,轻易云平台会自动将API响应中的字段填充到预定义的数据结构中。这一步骤极大简化了开发工作,使得我们可以专注于业务逻辑而非底层实现。
#### 总结
通过上述步骤,我们成功地调用了钉钉接口`topapi/processinstance/get`,并对返回的数据进行了初步加工。这为后续的数据转换与写入奠定了基础。在实际项目中,根据具体需求可能还需要进一步细化和优化这些步骤,但总体思路是一致的。
![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据经过ETL转换后,写入金蝶云星空API接口。
#### API接口配置
首先,我们需要了解目标平台金蝶云星空的API接口配置。根据提供的元数据配置,金蝶云星空的API接口为`batchSave`,采用`POST`方法,且需要进行ID检查。以下是详细的请求字段配置:
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号"},
{"field": "FBillTypeID", "label": "单据类型", "type": "string",
"describe": "标准其他出库单:QTCKD01_SYS\n资产出库:QTCKD02_SYS\nVMI出库:QTCKD03_SYS\n费用物料出库:QTCKD04_SYS\n库存调整:QTCKD05_SYS",
"parser": {"name": "ConvertObjectParser", "params":"FNumber"},
"value":"QTCKD10_SYS"},
{"field": "FPickOrgId", "label": "领用组织", "type": "string",
"describe":"领用组织",
...
}
],
...
}
```
#### 数据字段解析与转换
在ETL过程中,数据字段的解析与转换是至关重要的一环。以下是部分关键字段的解析与转换过程:
1. **单据类型(FBillTypeID)**:
- 使用`ConvertObjectParser`解析器,将内部编码转换为金蝶系统识别的编码。
- 示例值为`QTCKD10_SYS`,表示标准其他出库单。
2. **领用组织(FPickOrgId)**:
- 同样使用`ConvertObjectParser`解析器,将内部组织编码转换为金蝶系统识别的编码。
- 示例值为`101`。
3. **日期(FDate)**:
- 直接映射源平台的借用日期字段。
- 示例值为`{{借用日期}}`。
4. **备注(FNote)**:
- 使用自定义函数处理空值情况。
- 示例代码:`_function CASE '{{备注}}' WHEN 'NULL' THEN '' ELSE '{{备注}}' END`
5. **明细信息(FEntity)**:
- 包含多个子字段,如物料编码(FMaterialId)、实发数量(FQty)、发货仓库(FStockId)等。
- 每个子字段均使用相应的解析器进行转换,如物料编码使用`ConvertObjectParser`解析器,将内部物料编码转换为金蝶系统识别的编码。
#### 请求示例
完成所有字段的解析与转换后,我们将生成一个完整的请求示例:
```json
{
"FormId": "STK_MisDelivery",
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
FBillNo: '20230101',
FBillTypeID: 'QTCKD10_SYS',
FPickOrgId: '101',
FStockOrgId: '101',
FDate: '2023-01-01',
FDeptId: '_findCollection find FNumber from ... where FName=... FUseOrgId=101',
FNote: '_function CASE \'备注\' WHEN \'NULL\' THEN \'\' ELSE \'备注\' END',
FStockDirect: 'GENERAL',
F_TLQG_TextDDLSH: '流水号123456',
F_TLQG_BaseLLRY: '_findCollection find FNumber from ... where ...',
FEntity: [
{
FMaterialId: '物料编码12345',
FQty: '100',
FStockId: 'CK008',
FSTOCKSTATUSID: 'KCZT01_SYS',
FEntryNote: '',
FBaseQty: 100,
FKeeperTypeId: 'BD_KeeperOrg',
FStockLocId: {FSTOCKLOCID__FF100008:'Q'}
}
]
}
}
}
}
}
}
}
}
}
}
},
...
}
```
#### 执行操作
最后,通过轻易云数据集成平台执行上述请求,将数据写入金蝶云星空。确保所有基础资料验证通过,并根据业务需求选择是否自动提交并审核。
通过以上步骤,我们成功实现了将源平台的数据经过ETL转换后,写入目标平台金蝶云星空API接口。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。
![如何开发用友BIP接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)