### 案例分享:领星ERP数据集成到金蝶云星空
在实际的企业运营中,实现不同系统间的数据无缝对接是优化业务流程、提升效率的关键步骤。本次案例我们将重点分享如何通过数据集成平台,将领星ERP中的调拨单成功对接入金蝶云星空,并最终形成直接调拨单。整个过程不仅确保了高效的数据传输,还实现了严谨的数据监控和异常处理。
#### 调用领星ERP接口获取数据
为了实时、高效地从领星ERP获取到准确无误的调拨单数据,首先需要调用其提供的API接口`/erp/sc/routing/inventoryReceipt/StorageAllocation/getStorageAllocationList`。这一环节尤为重要,因为它关系到后续所有集成工作的正确性与完整性。
- **分页与限流管理**:
在实际操作中,我们充分考虑了API接口可能存在的分页限制及流量控制,通过合理设计分页逻辑和限流机制,以防止因为一次请求过多或频繁而导致数据遗漏或者服务端响应失败。
- **定时抓取策略**:
为确保新生成或更新的调拨单能够及时被捕捉,我们采用了定时任务来周期性地拉取最新的数据。同时,通过配备日志记录功能,可以精准跟踪每一次拉取任务执行情况,确保无漏单现象发生。
#### 数据格式转换与映射
由于领星ERP和金蝶云星空这两个系统之间使用的数据格式存在差异,需要进行一系列复杂且细致的数据格式转换与字段映射操作。例如:
- **字段名称映射**:
调用后的原始JSON返回结果需根据目标系统要求重新命名各个字段。例如,将原有字段“allocationId”重命名为“transferOrderID”,以符合金蝶云数据库字段定义规范。
- **值域转换**:
对于某些特定值需进行单位转换或者编码替换等处理,如将货物数量由分散存储改为统一标准,再写入目标系统数据库。
通过精心的设计及自动化脚本,高速完成大量数据的批量转化,使得每条数据都能快速且正确地适应新环境要求,顺利写入至金蝶云星空,同时保证过程透明可追溯。
#### 数据批量写入金蝶云星空
在完成上述准备工作后,即可利用轻易云平台提供的大并发批处理能力,通过调用`batchSave` API 将已整理好的海量数据信息同步进入金蝶云。这一步骤严格按设定规则逐步执行,包括错误检测、重试机制以及事务一致性的维护,大大降低了因网络波动
![如何开发用友BIP接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统领星ERP接口获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统领星ERP中调用接口`/erp/sc/routing/inventoryReceipt/StorageAllocation/getStorageAllocationList`,以获取调拨单相关的数据。本文将详细介绍如何通过轻易云数据集成平台配置元数据,并进行数据请求与清洗。
#### 接口配置及调用
首先,我们需要配置API接口的元数据,以便正确地调用领星ERP的接口。以下是元数据配置的具体内容:
```json
{
"api": "/erp/sc/routing/inventoryReceipt/StorageAllocation/getStorageAllocationList",
"method": "POST",
"number": "order_sn",
"id": "order_sn",
"idCheck": true,
"request": [
{"label": "出库仓库ID", "field": "wid", "type": "string"},
{"label": "入库仓库ID", "field": "to_wid", "type": "string"},
{"label": "时间类型", "field": "search_date_type", "type": "string"},
{"label": "日期查询开始时间", "field": "start_date", "type": "string",
"value":"{{LAST_SYNC_TIME|date}}"},
{"label": "日期查询结束时间", "field": "end_date",
"type":"string","value":"{{CURRENT_TIME|date}}"},
{"label": "当前页码",
"field":"page","type":"string","value":"1"},
{"label":"每个记录数","field":"page_size","type":"string","value":"20"}
]
}
```
#### 请求参数详解
- **出库仓库ID(wid)**:表示调拨单中货物出库的仓库ID。
- **入库仓库ID(to_wid)**:表示调拨单中货物入库的仓库ID。
- **时间类型(search_date_type)**:用于指定查询的时间类型,如创建时间、修改时间等。
- **日期查询开始时间(start_date)**:使用模板变量`{{LAST_SYNC_TIME|date}}`,表示上次同步的时间点。
- **日期查询结束时间(end_date)**:使用模板变量`{{CURRENT_TIME|date}}`,表示当前的时间点。
- **当前页码(page)**:分页查询时的当前页码,默认值为1。
- **每个记录数(page_size)**:每页返回的记录数,默认值为20。
这些参数确保了我们可以灵活地控制数据请求范围和分页处理,从而高效地获取所需的数据。
#### 数据请求与清洗
在轻易云数据集成平台上,我们通过配置上述元数据来发起HTTP POST请求。请求成功后,将返回包含调拨单信息的数据列表。接下来,我们需要对这些原始数据进行清洗和转换,以便后续处理。
1. **数据格式化**:
- 将日期字段格式化为标准的ISO8601格式,确保一致性。
- 将数值字段转换为适当的数据类型,如整数或浮点数。
2. **字段映射与重命名**:
- 根据业务需求,将源系统中的字段名称映射到目标系统中的标准字段名称。例如,将`wid`映射为`source_warehouse_id`,将`to_wid`映射为`destination_warehouse_id`。
3. **异常处理与日志记录**:
- 对于可能出现的数据异常,如缺失字段或格式错误,进行必要的校验和处理,并记录日志以便后续排查。
#### 示例代码
以下是一个示例代码片段,用于演示如何在轻易云平台上实现上述步骤:
```python
import requests
import json
from datetime import datetime
# 配置API请求参数
url = 'https://api.lingxing.com/erp/sc/routing/inventoryReceipt/StorageAllocation/getStorageAllocationList'
headers = {'Content-Type': 'application/json'}
payload = {
'wid': '12345',
'to_wid': '67890',
'search_date_type': 'created_at',
'start_date': '{{LAST_SYNC_TIME|date}}',
'end_date': '{{CURRENT_TIME|date}}',
'page': '1',
'page_size': '20'
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据清洗与转换
for record in data['data']:
record['source_warehouse_id'] = record.pop('wid')
record['destination_warehouse_id'] = record.pop('to_wid')
record['created_at'] = datetime.strptime(record['created_at'], '%Y-%m-%dT%H:%M:%S').isoformat()
# 输出清洗后的数据
print(json.dumps(data, indent=4, ensure_ascii=False))
```
通过上述步骤和示例代码,我们可以高效地从领星ERP系统中获取并加工调拨单数据,为后续的数据转换与写入打下坚实基础。这一过程不仅提高了数据处理效率,还确保了业务流程的透明度和可追溯性。
![系统集成平台API接口配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将调拨单数据转换并写入金蝶云星空API接口
在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将重点探讨如何利用轻易云数据集成平台,将已经集成的源平台调拨单数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。
#### 数据转换配置解析
在本案例中,我们需要将调拨单数据转换为金蝶云星空API接口所需的格式,并通过POST请求将其写入目标系统。以下是元数据配置的详细解析:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "{order_sn}"
},
{
"field": "FBillTypeID",
...
}
],
...
}
```
1. **API接口和方法**:
- `api`: `batchSave`,表示使用批量保存接口。
- `method`: `POST`,表示使用HTTP POST方法提交数据。
2. **操作配置**:
- `idCheck`: `true`,表示启用ID检查。
- `operation`: 配置了批量保存的方式,其中`rowsKey`指定数组键名,`rows`指定每次提交的行数。
3. **请求字段映射**:
- 每个字段都包含以下属性:
- `field`: 对应金蝶云API中的字段名。
- `label`: 字段标签。
- `type`: 字段类型,如字符串、数组等。
- `describe`: 字段描述。
- `value`: 映射到源数据中的值或固定值。
#### 数据转换与写入示例
假设我们从源系统获取了以下调拨单数据:
```json
{
"order_sn": "DB20231001",
...
}
```
根据元数据配置,我们需要将这些数据转换为金蝶云星空API所需的格式。以下是部分字段的转换示例:
1. **单据编号(FBillNo)**:
```json
{
"field": "FBillNo",
"value": "{order_sn}"
}
```
转换后:
```json
{
"FBillNo": "DB20231001"
}
```
2. **单据类型(FBillTypeID)**:
```json
{
...
"parser": {"name":"ConvertObjectParser","params":"FNumber"},
...
"value":"ZJDB01_SYS"
}
```
转换后:
```json
{
...
"FBillTypeID": {"FNumber":"ZJDB01_SYS"}
}
```
3. **明细信息(FBillEntry)**:
明细信息通常是一个数组,需要逐条处理。假设源系统中有如下明细信息:
```json
"item_list":[
{"sku":"1001", ...},
{"sku":"1002", ...}
]
```
根据元数据配置,转换后的结构如下:
```json
"FBillEntry":[
{
...
{"FMaterialId":{"FNumber":"1001"}, ...},
{"FMaterialId":{"FNumber":"1002"}, ...}
}
]
```
#### 提交并写入目标平台
在完成所有字段的映射和转换后,我们通过HTTP POST请求将转换后的JSON数据提交到金蝶云星空API接口:
```http
POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave HTTP/1.1
Host: api.kingdee.com
Content-Type: application/json
{
...
}
```
通过轻易云数据集成平台,我们可以实时监控整个ETL过程,确保每个环节的数据处理都准确无误。这样不仅提高了业务透明度,还显著提升了效率。
以上就是利用轻易云数据集成平台,将调拨单数据转换并写入金蝶云星空API接口的完整技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,为企业的信息化管理提供强有力的支持。
![打通用友BIP数据接口](https://pic.qeasy.cloud/T25.png~tplv-syqr462i7n-qeasy.image)