利用轻易云平台实现销售数据ETL转换并写入金蝶云星空
### 管易云数据集成到金蝶云星空的技术探索:销售出库单案例
在本次系统对接项目中,我们聚焦于将管易云中的销售出库单数据无缝集成至金蝶云星空。这个任务不仅要求高效的数据处理能力,还涉及复杂的数据转换逻辑和接口调用管理,目的是确保每一条业务数据都能及时准确地写入目标系统。
为了实现这一目标,我们使用了轻易云数据集成平台来构建和部署整个解决方案。该平台提供强大的可视化设计工具,使得我们能够直观地配置并监控整个数据流动过程,从而确保各环节都能透明、稳定运行。在此次技术实践中,我们主要依赖以下几个关键特性:
1. **API接口调用与处理:** 我们通过调用管易云的gy.erp.trade.deliverys.get API获取销售出库单数据,并利用金蝶云星空的batchSave API进行批量写入。这需要仔细处理分页与限流问题,以保证大量数据的成功转移。
2. **实时监控与异常检测:** 实时跟踪每个集成任务的状态,通过轻易云的平台集中监控和告警功能,及时发现并处理潜在的问题,如网络波动或第三方服务延迟。
3. **自定义数据转换逻辑:** 基于业务需求,自定义了一系列的数据转换规则,以适应源端(管易云)和目标端(金蝶云星空)之间不同的数据结构,比如字段映射、格式调整等。
4. **高吞吐量写入能力:** 确保大量销售出库单能够快速、高效地被写入金蝶云星空,对于大规模零售企业尤其重要。此外,将批量操作分解为多个小批次提交,可以进一步提升事务处理效率,并降低失败几率。
5. **错误重试机制:** 在实际操作过程中,不可避免会遇到某些不可预见的错误,例如网络超时或API限制等。因此,为这些关键操作设定了自动重试策略,确保不会因为临时故障导致完整性丧失。
通过精心设计和合理配置,这个案例有效展示了如何利用先进的平台优势,实现复杂的数据对接任务。同时,本项目中的经验也为后续类似集成工作提供了有价值的参考模板。
![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image)
### 调用管易云接口gy.erp.trade.deliverys.get获取并加工数据
在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用管易云接口`gy.erp.trade.deliverys.get`来获取销售出库单数据,并进行初步的数据加工。
#### 接口配置与请求参数
我们首先需要配置元数据,以便正确调用管易云的API接口。以下是元数据配置的详细内容:
```json
{
"api": "gy.erp.trade.deliverys.get",
"method": "POST",
"number": "code",
"id": "code",
"pagination": {
"pageSize": 100
},
"idCheck": true,
"request": [
{"field":"start_create","label":"创建时间开始段","type":"string"},
{"field":"end_create","label":"创建时间结束段","type":"string"},
{"field":"start_delivery_date","label":"发货时间开始段","type":"string","value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"end_delivery_date","label":"发货时间结束段","type":"string","value":"{{CURRENT_TIME|datetime}}"},
{"field":"start_modify_date","label":"修改时间开始段","type":"string"},
{"field":"end_modify_date","label":"修改时间结束段","type":"string"},
{"field":"del","label":"返回是否作废的单据","type":"string"},
{"label":"发货状态","field":"delivery","type":"string","value":"1"}
],
"otherRequest": [
{"field": "page_size", "label": "分页大小", "type": "string", "describe": "默认为10", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "page_no", "label": "页号", "type": "string", "describe": "默认1", "value": "{PAGINATION_START_PAGE}"}
]
}
```
#### 请求参数解析
1. **基本请求参数**:
- `start_create` 和 `end_create`:用于指定创建时间的范围。
- `start_delivery_date` 和 `end_delivery_date`:用于指定发货时间的范围,其中使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`,分别表示上次同步时间和当前时间。
- `start_modify_date` 和 `end_modify_date`:用于指定修改时间的范围。
- `del`:用于返回是否作废的单据。
- `delivery`:固定值为1,表示只获取发货状态为已发货的单据。
2. **分页参数**:
- `page_size`:每页返回的数据条数,默认值为10,可以通过配置调整。
- `page_no`:当前请求页码,默认值为1。
#### 数据请求与清洗
在配置好元数据后,我们可以通过轻易云平台发送POST请求来获取销售出库单的数据。以下是一个示例请求体:
```json
{
"start_create": "",
"end_create": "",
"start_delivery_date": "{{LAST_SYNC_TIME|datetime}}",
"end_delivery_date": "{{CURRENT_TIME|datetime}}",
"start_modify_date": "",
"end_modify_date": "",
"del": "",
"delivery": "1",
"page_size": "{PAGINATION_PAGE_SIZE}",
"page_no": "{PAGINATION_START_PAGE}"
}
```
在实际操作中,我们需要根据具体业务需求填充这些字段。例如,如果我们只想获取最近一天内的发货单据,可以设置相应的时间范围。
#### 数据转换与写入
一旦成功获取到数据,我们需要对其进行初步清洗和转换,以便后续处理。这包括但不限于:
- **字段映射**:将API返回的数据字段映射到目标系统所需的字段。例如,将管易云返回的订单编号映射到目标系统中的订单ID。
- **数据格式转换**:将日期、金额等字段转换为目标系统所需的格式。
- **异常处理**:过滤掉无效或不完整的数据记录。
以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
cleaned_record = {
'order_id': record['code'],
'delivery_status': record['delivery'],
'create_time': convert_to_target_format(record['create_time']),
'modify_time': convert_to_target_format(record['modify_time']),
# 添加更多字段映射和转换
}
cleaned_data.append(cleaned_record)
return cleaned_data
```
在这个示例中,我们定义了一个函数`clean_data`,用于将原始数据转换为目标系统所需的数据格式。具体实现可以根据实际需求进行调整。
通过以上步骤,我们完成了从调用管易云接口获取销售出库单数据,到初步清洗和转换的一系列操作。这是轻易云数据集成平台生命周期中的关键一步,为后续的数据处理和分析奠定了基础。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行销售出库单ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,将源平台的数据转换为目标平台可接受的格式是关键步骤之一。本文将深入探讨如何使用轻易云数据集成平台将销售出库单数据进行ETL转换,并最终通过金蝶云星空API接口写入目标系统。
#### 元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其对应的解析方式。以下是我们将使用的元数据配置:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 10,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{code}"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{create_date}"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{shop_code}"},
{"field":"FCarriageNO","label":"运输单号","type":"string","describe":"文本","value":"{code}"},
{"field":"FStockOrgId","label":"发货组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FLinkPhone","label":"联系电话","type":""},
{"field":""},
{"field":""},
{"field":"","children":[{"field":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]},{"parent":"","children":[]}]
}
```
#### 数据请求与清洗
在进行ETL转换之前,首先需要从源系统请求并清洗数据。假设我们已经获取到如下结构的源数据:
```json
{
"code": "SO20231001",
"create_date": "2023-10-01",
"shop_code": "CUST001",
"details": [
{
"item_code": "ITEM001",
"qty": 10,
"amount_after": 1000
},
{
"item_code": "",
""
}
```
#### 数据转换与写入
根据元数据配置,将上述源数据转换为金蝶云星空API接口可接受的格式。以下是具体步骤:
1. **设置基本信息**:
- 单据类型 (`FBillTypeID`): 固定值 `XSCKD01_SYS`
- 单据编号 (`FBillNo`): 从源数据中提取 `code`
- 日期 (`FDate`): 从源数据中提取 `create_date`
- 销售组织 (`FSaleOrgId`): 固定值 `100`
- 客户 (`FCustomerID`): 从源数据中提取 `shop_code`
- 运输单号 (`FCarriageNO`): 从源数据中提取 `code`
- 发货组织 (`FStockOrgId`): 固定值 `100`
2. **设置财务信息**:
- 财务信息包含收货人地址、收货人姓名、收货人手机等字段,这些字段从相应的子对象中提取。
3. **设置明细信息**:
- 明细信息包含物料编码、实发数量、含税单价、仓库等字段,这些字段从 `details` 数组中逐项提取和计算。
4. **构建最终请求体**:
根据上述步骤构建最终的请求体,如下所示:
```json
{
"FormId": "SAL_OUTSTOCK",
"Operation": "Save",
...
}
```
#### 调用金蝶云星空API接口
最后,通过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转换,并成功将销售出库单写入金蝶云星空系统。这一过程不仅确保了数据的一致性和完整性,还大大提高了业务处理效率。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)