使用轻易云平台实现金蝶云星空API的数据转换与写入
### 金蝶云星空数据集成技术案例:收款单-新20231120_腾晖
在我们这次的系统对接项目中,目标是实现金蝶云星空与金蝶云星空之间的无缝数据集成。具体方案为“收款单-新20231120_腾晖”。该方案重点解决大量业务数据快速写入、接口调用与处理以及监控和异常处理等问题。
首先,为了高效获取和写入数据,利用executeBillQuery API从源系统检索收款单据的数据,并通过batchSave API将其存储到目标系统。这一过程要求我们必须考虑以下几个核心技术点:
#### 高吞吐量的数据写入
为了确保大量数据能够迅速且准确地存储在目标金蝶云星空系统中,我们采用了批量处理机制。这个机制利用batchSave API支持一次性传递多条记录,大幅提高了吞吐效率。同时,通过定制化的数据映射逻辑,有效处理了两套系统间的数据格式差异。
#### 接口调用优化
针对executeBillQuery接口进行分页处理,以应对潜在的大规模数据量,同时避免触发限流机制。在实践过程中,为每个请求设置合理的分页参数,这不仅提高了响应速度,还确保所有必要的数据都被成功抓取。
#### 数据质量监控与异常检测
实时监控任务执行状态,以及相应的告警反馈,是保障集成流程顺畅的重要环节之一。集中式的监控平台,不仅能实时捕获各类操作日志,还能及时识别并报告数据异常情况,从而使运维人员可以迅速做出反应。
#### 错误重试机制
由于网络波动或服务不可用等原因导致API调用失败时,需设立有效的错误重试策略。对此,我们设计了一套完善的错误重试和回滚机制,能够按预先设定好的规则来重新尝试无法完成的操作。同时,将相关信息详细记录到日志文件中,以供后续分析查证。
通过这些关键措施,“收款单-新20231120_腾晖”方案成功完成,实现了两个独立金蝶云星空实例间高效、可靠的数据交换。这不仅提升了业务透明度,也大大简化了日常维护工作。在下文里,我们将进一步探讨具体实施细节及其效果评估。
![打通企业微信数据接口](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来实现这一过程。
#### 接口配置与调用
首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置中的关键参数:
- **API**: `executeBillQuery`
- **Method**: `POST`
- **FormId**: `AR_RECEIVEBILL`
- **FieldKeys**: 需查询的字段key集合
- **FilterString**: 过滤条件
- **Pagination**: 分页参数
#### 请求参数配置
根据元数据配置,我们需要构建请求参数。以下是一个示例请求参数:
```json
{
"FormId": "AR_RECEIVEBILL",
"FieldKeys": "FID,FBillNo,FDOCUMENTSTATUS,FCreatorId,FAPPROVERID,FCreateDate,FSETTLEORGID.FNumber,FApproveDate,FSALEORGID.FNumber,FEXCHANGETYPE,FRECEIVEAMOUNTFOR_H,FMAINBOOKCURID,FRECEIVEAMOUNT_H,FCURRENCYID.FNumber,FDATE,FModifyDate,FModifierId,FEXCHANGERATE,FWRITTENOFFSTATUS,FSALEERID.FNumber,FSALEGROUPID.FNumber,FSALEDEPTID.FNumber,FBillTypeID.FNumber,FREALRECAMOUNTFOR,FREALRECAMOUNT_H,FACCOUNTSYSTEM,FCancelDate,FCancelStatus,FCancellerId,FCONTACTUNITTYPE,FCONTACTUNIT.FNumber,FPAYUNITTYPE,FPAYUNIT.FNumber,FBUSINESSTYPE,FCreditCheckResult,FISINIT",
"FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'",
"Limit": 2000,
"StartRow": 0,
"TopRowCount": true
}
```
#### 数据请求与清洗
通过上述请求参数,我们可以向金蝶云星空发送POST请求以获取所需的数据。接收到响应后,需要对数据进行初步清洗和处理。
1. **数据校验**:检查返回的数据是否符合预期格式,确保每个字段都有正确的值。
2. **数据转换**:根据业务需求,对某些字段进行转换。例如,将日期字符串转换为标准日期格式。
3. **去重处理**:如果返回的数据中存在重复记录,需要进行去重处理。
以下是一个简单的数据清洗示例:
```python
import json
import requests
# 定义请求头和URL
headers = {'Content-Type': 'application/json'}
url = 'https://api.kingdee.com/executeBillQuery'
# 构建请求体
payload = {
"FormId": "AR_RECEIVEBILL",
"FieldKeys": ",".join([
"FID", "FBillNo", "FDOCUMENTSTATUS", "FCreatorId",
# ...其他字段...
]),
"FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'",
"Limit": 2000,
"StartRow": 0,
"TopRowCount": True
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据校验和清洗
cleaned_data = []
for record in data:
if record['FDOCUMENTSTATUS'] == 'A':
cleaned_record = {
'单据编号': record['FBillNo'],
'创建日期': record['FCreateDate'],
# ...其他字段...
}
cleaned_data.append(cleaned_record)
# 去重处理(假设单据编号唯一)
unique_data = {record['单据编号']: record for record in cleaned_data}.values()
else:
print(f"Error fetching data: {response.status_code}")
```
#### 数据转换与写入
在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作:
1. **字段映射**:将源系统的字段映射到目标系统的字段。
2. **格式转换**:根据目标系统的要求,对数据格式进行调整。
3. **批量写入**:将处理后的数据批量写入目标系统,以提高效率。
例如,将清洗后的收款单数据写入ERP系统,可以使用类似如下代码:
```python
def write_to_erp(cleaned_data):
erp_url = 'https://api.erp.com/writeData'
headers = {'Content-Type': 'application/json'}
for record in cleaned_data:
payload = {
'bill_no': record['单据编号'],
'create_date': record['创建日期'],
# ...其他字段映射...
}
response = requests.post(erp_url, headers=headers, data=json.dumps(payload))
if response.status_code != 200:
print(f"Error writing data for bill_no {record['单据编号']}: {response.status_code}")
# 调用写入函数
write_to_erp(unique_data)
```
通过以上步骤,我们实现了从金蝶云星空获取收款单数据,并进行初步清洗、转换和写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的自动化程度。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实施过程。
#### 1. 配置元数据
首先,我们需要根据金蝶云星空API接口的要求,配置相应的元数据。以下是我们使用的元数据配置:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillTypeID,FBillNo,FDATE,FPAYORGI",
"bodyName": "details",
"header": ["FBillNo", "FSETTLEORGID", "FDATE", "FCURRENCYID", "FBillTypeID", "FCONTACTUNITTYPE", "FCONTACTUNIT", "FPAYUNITTYPE", "FPAYUNIT", "FBUSINESSTYPE", "FPAYORGID", "FSETTLECUR"],
"body": ["FSETTLETYPEID", "FRECTOTALAMOUNTFOR", "FACCOUNTID", "FPURPOSEID", "FRECEIVEITEMTYPE", "FSALEORDERNO"]
},
...
}
```
#### 2. 数据请求与清洗
在进行ETL转换之前,我们首先需要从源系统请求数据并进行清洗。这一步骤确保我们获取的数据是准确且符合目标系统要求的。
#### 3. 数据转换
接下来,我们根据金蝶云星空API接口的要求,对数据进行转换。以下是具体字段的转换规则:
- **单据编号(FBillNo)**: 从源系统直接获取 `{FBillNo}`。
- **结算组织(FSETTLEORGID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **汇率类型(FEXCHANGETYPE)**: 固定值 `HLTX01_SYS`。
- **币别(FCURRENCYID)**: 固定值 `PRE001`。
- **业务日期(FDATE)**: 从源系统直接获取 `{FDATE}`。
- **单据类型(FBillTypeID)**: 固定值 `SKDLX01_SYS`,并使用 `ConvertObjectParser` 转换。
- **往来单位类型(FCONTACTUNITTYPE)**: 从源系统直接获取 `{FCONTACTUNITTYPE}`。
- **往来单位(FCONTACTUNIT)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **付款单位类型(FPAYUNITTYPE)**: 从源系统直接获取 `{FPAYUNITTYPE}`。
- **付款单位(FPAYUNIT)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **业务类型(FBUSINESSTYPE)**: 从源系统直接获取 `{FBUSINESSTYPE}`。
- **收款组织(FPAYORGID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **结算币别(FSETTLECUR)**: 固定值 `PRE001`。
对于收款单明细部分,我们按照以下规则进行转换:
- **结算方式(FSETTLETYPEID)**: 从源系统直接获取 `{FSETTLETYPEID}`,并使用 `ConvertObjectParser` 转换。
- **表体应收金额(FRECTOTALAMOUNTFOR)**: 从源系统直接获取 `{FRECTOTALAMOUNTFOR}`。
- **我方银行账号(FACCOUNTID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **收款用途(FPURPOSEID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。
- **预收项目类型(FRECEIVEITEMTYPE)**: 从源系统直接获取 `{FRECEIVEITEMTYPE}`。
- **销售订单号(FSALEORDERNO)**: 从源系统直接获取 `{FSALEORDERNO}`。
#### 4. 数据写入
完成数据转换后,我们将其按照金蝶云星空API接口要求,通过POST方法批量保存到目标平台。以下是请求示例:
```json
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
...
}
}
}
}
}
}
}
}
```
通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入到目标平台金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/T25.png~tplv-syqr462i7n-qeasy.image)