### 案例分享:金蝶云星空采购订单取消数据集成到旺店通·旗舰版
在进行企业系统的对接和集成过程中,如何有效实现不同平台间的数据同步,是一个至关重要且复杂的问题。本案例将重点展示如何通过轻易云数据集成平台,将金蝶云星空中的采购订单取消数据无缝对接入旺店通·旗舰版。具体方案运行名称为“采购订单取消新-取消参数1”。
#### 确保集成过程中的数据准确与完整
为了确保每一笔从金蝶云星空导出的采购订单取消请求都能精准进入旺店通·旗舰版,我们首先调用了金蝶云星空的executeBillQuery API接口。该接口用于实时抓取需要处理的所有待取消订单,并能按需分页获取,以避免出现单次大流量请求导致的数据漏掉或超时问题。
```plaintext
API: executeBillQuery
功能: 查询并返回指定条件下的业务记录
```
另外,为了提升写入效率,在将抓取到的数据批量写入到旺店通·旗舰版时,我们使用了purchase.PurchaseOrder.cancelByType API,该API支持批量操作,有效减少网络通信次数,提高速度和稳定性。
```plaintext
API: purchase.PurchaseOrder.cancelByType
功能: 依据类型批量执行采购订单的删除或更新操作
```
#### 定时可靠的数据抓取机制
对于定时任务配置,通过轻易云提供的全生命周期管理工具,可以设置周期性任务自动触发executeBillQuery接口,确保及时获取变动信息。同时结合日志监控与错误重试机制,如果某次请求失败,系统会在可设定时间内多次重试,直至成功,从而保证高可靠性的持续运行。
```plaintext
调度策略:
- 周期性触发 task_executeBillQuery (e.g., 每小时)
- 错误重试策略(最大5次,每次间隔10分钟)
```
#### 处理异构系统间的数据格式差异
由于金蝶云星空和旺店通·旗舰版本身所采用的数据模型存在差异,因此我们引入了自定义映射规则。在发送POST请求之前,通过预设好的转换模板,将从executeBillQuery得到的数据结构化为应有格式,再传递给purchase.PurchaseOrder.cancelByType完成最终步骤。这部分工作集中于字段映射、数值转换及单位换算等,使得两端系统能够顺畅沟通。
---
文章开头部分即到此结束,后续内容将在下一步撰写中详细介绍实施细节与技术要点,包括分页处理、限流控制以及异常管理等方面内容。
![如何对接用友BIP接口](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取采购订单数据并进行初步加工。
#### 接口配置与请求参数
首先,我们需要根据元数据配置来设置接口请求参数。以下是关键的元数据字段及其配置:
- **API**: `executeBillQuery`
- **Method**: `POST`
- **Effect**: `QUERY`
- **Request Fields**:
- `FPOOrderEntry_FEntryId`: 采购订单明细ID
- `FID`: 单据ID
- `FBillNo`: 单据编号
- `FSourceBillNo`: 源单编号
- `FBillTypeID.FNumber`: 单据类型
- `FBusinessType`: 业务类型
- `FSupplierId.FNumber`: 供应商编号
- `FSettleModeId.FNumber`: 结算方式
- `FPayConditionId.FNumber`: 付款条件
- `FDate`: 采购日期
- `FDocumentStatus`: 单据状态
- 更多字段...
此外,还有一些其他请求参数,如最大行数、开始行索引、过滤条件等。
#### 构建请求体
根据上述元数据,我们构建一个完整的请求体。以下是一个示例请求体:
```json
{
"FormId": "PUR_PurchaseOrder",
"FieldKeys": "FBillNo,FDate,FSupplierId.FNumber,FDocumentStatus",
"FilterString": "FPurchaseOrgId.FNumber = '100' and FCloseStatus = 'B' and FCloseDate>='{{LAST_SYNC_TIME|datetime}}'",
"Limit": "2000",
"StartRow": "0"
}
```
在这个请求体中:
- `"FormId"` 指定了业务对象表单ID。
- `"FieldKeys"` 是需查询的字段集合,通过逗号分隔。
- `"FilterString"` 是过滤条件,用于筛选符合条件的数据。
- `"Limit"` 和 `"StartRow"` 分别指定了最大行数和开始行索引。
#### 调用接口
使用轻易云平台提供的API调用功能,我们可以发送上述请求体到金蝶云星空的`executeBillQuery`接口。以下是一个示例代码片段:
```python
import requests
url = "https://api.kingdee.com/executeBillQuery"
headers = {
"Content-Type": "application/json"
}
payload = {
"FormId": "PUR_PurchaseOrder",
"FieldKeys": "FBillNo,FDate,FSupplierId.FNumber,FDocumentStatus",
"FilterString": "FPurchaseOrgId.FNumber = '100' and FCloseStatus = 'B' and FCloseDate>='2023-01-01'",
"Limit": "2000",
"StartRow": "0"
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
```
#### 数据处理与清洗
获取到数据后,需要对其进行初步处理和清洗,以便后续的数据转换与写入。常见的数据处理操作包括:
1. **字段映射**:将原始字段映射到目标系统所需的字段。例如,将`FSupplierId.FNumber`映射为供应商编号。
2. **数据格式转换**:将日期格式统一为标准格式,将数值型字段转换为浮点数等。
3. **缺失值处理**:填充或删除缺失值,以确保数据完整性。
以下是一个简单的数据处理示例:
```python
processed_data = []
for record in data:
processed_record = {
"bill_no": record["FBillNo"],
"date": record["FDate"],
"supplier_id": record["FSupplierId.FNumber"],
"status": record["FDocumentStatus"]
}
processed_data.append(processed_record)
```
#### 总结
通过以上步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,获取并初步加工了采购订单数据。这一步骤不仅确保了数据从源系统到目标系统的无缝对接,还为后续的数据转换与写入奠定了坚实基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作,以实现更复杂的数据集成任务。
![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image)
### 数据集成生命周期第二步:ETL转换与写入旺店通·旗舰版API接口
在数据集成过程中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何将已集成的源平台数据进行ETL转换,并最终写入目标平台——旺店通·旗舰版的API接口。
#### API接口配置元数据解析
在进行ETL转换之前,我们需要了解目标平台API接口的元数据配置。以下是针对采购订单取消操作的元数据配置:
```json
{
"api": "purchase.PurchaseOrder.cancelByType",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "operate_type",
"label": "operate_type",
"type": "int",
"describe": "111",
"value": "1"
},
{
"field": "purchase_no_list",
"label": "purchase_no_list",
"type": "string",
"value": "{FBillNo}",
"parser": {
"name": "StringToArray",
"params": ","
}
},
{
"field": "allow_cancel_checked_order",
"label": "allow_cancel_checked_order",
"type": "int",
"value": "1"
}
]
}
```
#### 数据请求与清洗
在进行数据转换之前,首先需要从源平台获取原始数据,并对其进行清洗和预处理。这一步骤确保了数据的准确性和一致性,为后续的转换奠定基础。
#### 数据转换与写入
接下来,我们重点关注如何将清洗后的数据转化为目标平台所需的格式,并通过API接口写入到旺店通·旗舰版。
1. **字段映射与转换**
- `operate_type`: 固定值为`1`,表示操作类型。
- `purchase_no_list`: 源平台提供的采购订单编号列表,需要通过`StringToArray`解析器将逗号分隔的字符串转化为数组。
- `allow_cancel_checked_order`: 固定值为`1`,允许取消已审核订单。
2. **解析器应用**
在元数据配置中,`purchase_no_list`字段使用了`StringToArray`解析器,该解析器将逗号分隔的字符串转化为数组。这一步骤确保了采购订单编号列表能够正确传递给目标平台。
3. **构建请求体**
根据上述字段映射和解析器应用,我们可以构建出符合目标平台API要求的请求体。例如:
```json
{
"operate_type": 1,
"purchase_no_list": ["PO12345", "PO67890"],
"allow_cancel_checked_order": 1
}
```
4. **发送请求**
使用HTTP POST方法,将构建好的请求体发送到目标平台API接口:
```python
import requests
url = 'https://api.wangdian.cn/openapi2/purchase.PurchaseOrder.cancelByType'
headers = {'Content-Type': 'application/json'}
payload = {
'operate_type': 1,
'purchase_no_list': ["PO12345", "PO67890"],
'allow_cancel_checked_order': 1
}
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
print("Data successfully written to the target platform.")
else:
print("Failed to write data:", response.text)
```
#### 实时监控与异常处理
在整个ETL过程中,实时监控和异常处理至关重要。确保每个环节的数据流动和处理状态都能被实时监控,一旦出现异常情况,可以及时采取措施进行修正。
通过以上步骤,我们完成了从源平台数据获取、清洗、ETL转换到最终写入旺店通·旗舰版API接口的全过程。这个过程不仅提升了业务透明度和效率,还确保了数据的一致性和准确性。
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)