### 每刻自定义档案—部门->金蝶部门数据集成案例分享
在企业信息化管理中,跨系统的数据集成是提高业务效率和准确性的关键步骤。本篇文章将重点分享如何通过轻易云数据集成平台,将每刻的自定义档案——部门数据高效、安全地集成到金蝶云星空,同时实现对整个过程的实时监控与优化。
**挑战概述**
在该技术案例中,我们面临以下几个主要挑战:
1. **数据格式差异**:每刻API接口`/api/openapi/reference/data/detail/query`返回的数据格式和结构,与金蝶云星空API `batchSave`所需的数据格式存在较大差异,需要进行定制化转换。
2. **分页与限流问题**:由于每刻接口有分页限制和访问速率限制,在大量数据获取时需要设计合理的抓取策略,确保数据不漏单且符合速率规范。
3. **实时监控与告警系统**:提供一个可靠的集中监控机制,以便实时跟踪各个任务状态及性能,并在出现异常情况时及时告警处理。
**解决方案**
为有效应对上述挑战,我们实施了一系列技术手段:
- **自定义数据转换逻辑**
利用轻易云平台内置的可视化数据流设计工具,对从每刻获取的数据进行字段映射和结构调整,使之满足金蝶云星空所需的输入标准。通过编写脚本或使用图形界面配置,实现对字段类型、名称和层级关系的一一对应。
- **高吞吐量批量写入**
采用批量操作的方法,将经过清洗转换后的多个记录一次性写入到金蝶云星空数据库,大幅提升了整体操作效率。同时,通过合理设置事务大小和平衡负载,确保大规模并发情况下性能稳定。
- **分页抓取与限流控制**
针对每刻API的分页响应特性,设计了循环调用机制,每次请求下一页的数据直至全部获取完毕。同时,为避免触发限流规则,每间隔一定时间发送请求,从而平衡抓取速度与系统资源利用率。
- **集中式监控与告警**
实现了一套完善的监控体系,通过定期采样分析任务执行状态,并结合日志记录功能,对可能发生的问题如网络延迟、服务错误等给予预警提示。在发现异常后自动启动重试机制以保证任务顺利完成,进一步提高了集成过程中的可靠性。
这样一来,即使面对复杂多变的大容量业务需求,该方案也能保障每日数千笔乃至上万笔记录能够快速、高质量地同步至目标系统,无明显遗漏或延迟现象
![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image)
### 调用每刻接口获取并加工数据的技术案例
在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用每刻接口`/api/openapi/reference/data/detail/query`,并对获取的数据进行加工处理。
#### 接口配置与请求参数
首先,我们需要配置元数据以便正确调用每刻的API接口。以下是元数据配置的详细信息:
```json
{
"api": "/api/openapi/reference/data/detail/query",
"method": "POST",
"number": "name",
"id": "bizCode",
"idCheck": true,
"condition": [
[
{
"field": "enabled",
"logic": "eq",
"value": "true"
}
]
],
"request": [
{
"field": "referenceDataBizCode",
"label": "档案编码",
"type": "string",
"value": "bm"
},
{
"field": "keyword",
"label": "根据选项名称和选项编码模糊查询",
"type": "string"
},
{
"field": "offset",
"label": "分页起始",
"type": "string",
"describe": "默认值0"
},
{
"field": "pageSize",
"label": "分页条数",
"type": "string",
"describe":"默认值50,最大值是100",
“value”: “50”
},
{
“field”: “updatedStartAt”,
“label”: “最近修改时间,时间戳”,
“type”: “string”,
“describe”: “查询在此时间及之后修改的数据”,
“value”: “{LAST_SYNC_TIME}000”
},
{
“field”: “updatedEndAt”,
“label”: “最近修改时间,时间戳”,
“type”: “string”,
“describe”:“查询在此时间及之前修改的数据”,
“value”:“{CURRENT_TIME}000”
}
]
}
```
#### 请求参数解析
1. **referenceDataBizCode**: 档案编码,固定值为"bm"。
2. **keyword**: 用于模糊查询选项名称和选项编码。
3. **offset**: 分页起始位置,默认为0。
4. **pageSize**: 分页条数,默认为50,最大值为100。
5. **updatedStartAt**: 最近修改时间的起始时间戳,用于查询在此时间及之后修改的数据。
6. **updatedEndAt**: 最近修改时间的结束时间戳,用于查询在此时间及之前修改的数据。
#### 数据请求与清洗
在发送请求时,我们需要确保请求体包含上述所有必要参数。以下是一个示例请求体:
```json
{
“referenceDataBizCode”:“bm”,
“keyword”:“部门”,
“offset”:“0”,
“pageSize”:“50”,
“updatedStartAt”:“1633046400000”, // 示例开始时间戳
“updatedEndAt”:“1633132800000” // 示例结束时间戳
}
```
发送请求后,我们会收到一个包含部门信息的响应。接下来,需要对这些数据进行清洗,以确保其符合目标系统的要求。
#### 数据转换与写入
清洗后的数据需要进行转换,以适应目标系统(如金蝶部门)的格式。假设目标系统要求的数据格式如下:
```json
{
”departmentId“:“12345”,
”departmentName“:“销售部”
}
```
我们需要将每刻返回的数据字段映射到目标系统所需的字段。例如:
- `bizCode` -> `departmentId`
- `name` -> `departmentName`
通过轻易云平台提供的数据转换功能,可以轻松实现这一映射过程。以下是一个简单的映射示例:
```json
{
”departmentId“:“{{bizCode}}”,
”departmentName“:“{{name}}”
}
```
#### 实践中的注意事项
1. **分页处理**:确保处理大数据量时正确实现分页逻辑,以避免遗漏或重复数据。
2. **错误处理**:捕获并处理API调用中的错误,如网络问题、无效参数等,以提高系统稳定性。
3. **性能优化**:根据实际需求调整分页大小和请求频率,以优化性能。
通过上述步骤,我们可以高效地调用每刻接口获取并加工数据,为后续的数据集成奠定坚实基础。
![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image)
### 利用轻易云数据集成平台实现ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
#### 配置元数据
首先,我们需要了解元数据配置,这是进行ETL转换和数据写入的基础。以下是针对金蝶云星空API接口的元数据配置:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FName","label":"部门名称","type":"string","value":"{name}"},
{"field":"FNumber","label":"编码","type":"string","value":"{bizCode}"},
{"field":"FCreateOrgId","label":"创建组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{parentCode}"},
{"field":"FUseOrgId","label":"使用组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{parentCode}"},
{"field":"FHelpCode","label":"助记码","type":"string"},
{"field":"FDescription","label":"描述","type":"string"}
],
"otherRequest": [
{"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_Department"},
{"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"},
{"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"},
{"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)", "value": "false"}
]
}
```
#### 数据请求与清洗
在ETL流程中,首先需要从源系统请求数据并进行清洗。这一步确保了数据的一致性和准确性,为后续的转换和写入奠定基础。假设我们已经完成了这一步,接下来进入关键的转换与写入阶段。
#### 数据转换与写入
1. **字段映射**:根据元数据配置,将源系统的数据字段映射到目标系统所需的字段。例如,将源系统中的`name`字段映射到金蝶云星空中的`FName`字段。
2. **数据解析**:对于一些特殊字段,需要进行解析。例如,`FCreateOrgId`和`FUseOrgId`字段使用了`ConvertObjectParser`解析器,通过传递参数`FNumber`来完成解析。这一步确保了复杂结构的数据能够正确转换。
3. **构建请求体**:根据元数据配置构建API请求体。以下是一个示例请求体:
```json
{
"FormId": "BD_Department",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": false,
"array": [
{
"FName": "<部门名称>",
"FNumber": "<编码>",
"FCreateOrgId": {
"FNumber": "<创建组织编码>"
},
"FUseOrgId": {
"FNumber": "<使用组织编码>"
},
"FHelpCode": "<助记码>",
"FDescription": "<描述>"
}
]
}
```
4. **发送请求**:通过HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。以下是一个示例代码片段:
```python
import requests
url = 'https://api.kingdee.com/batchSave'
headers = {'Content-Type': 'application/json'}
data = {
# 构建好的请求体
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Data successfully written to Kingdee Cloud.")
else:
print("Failed to write data:", response.text)
```
#### 实时监控与错误处理
在整个过程中,实时监控和错误处理是不可或缺的部分。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。一旦出现错误,可以迅速定位问题并进行修正。例如,如果某个字段解析失败,可以通过日志查看具体原因,并及时调整元数据配置或源系统的数据格式。
通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入到了金蝶云星空API接口。这不仅提升了业务流程的自动化程度,也确保了数据的一致性和准确性。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)