### 金蝶云星空数据集成到聚水潭的系统对接案例分析
在企业信息化建设过程中,跨平台的数据集成往往是一个复杂而关键的环节。本文将分享一个具体的系统对接案例,通过轻易云数据集成平台,将金蝶云星空中的业务数据高效、可靠地导入聚水潭,实现对其他入库单的数据管理。
#### 方案概述:金蝶分步式调入 => 聚水潭其他入库单
在这个项目中,我们主要解决了以下几个技术挑战:
1. **确保金蝶云星空数据不漏单**:为了防止遗漏任何一条重要的数据记录,我们采用了定时可靠抓取机制,利用executeBillQuery接口从金蝶获取所有必要的订单信息,并实现分页和限流处理,以应对大规模数据查询带来的压力。
2. **批量写入到聚水潭**:通过调用聚水潭的数据写入API `/open/jushuitan/otherinout/upload`,我们设计了一套高效且稳定的大量数据快速写入方案,保证了与数据库之间的同步操作能够无缝进行。
3. **异常处理与重试机制**:在整个数据传输过程中,各种网络或者业务逻辑上的错误不可避免。为此,我们构建了一套完善的异常处理与错误重试机制,从日志记录到实时监控,全方位保障每一条业务流水都能被安全处理。
4. **定制化映射及格式转换**:针对两者不同的平台接口规范,在实际应用中难免会遇到一些字段名称、格式以及结构上的差异。我们开发了一系列脚本及配置用于动态调整这些差异,使其符合目标系统要求。
#### 技术细节解析
为了实现上诉目标,本案例重点探讨以下技术策略:
- 实时监控与日志记录:详细阐释如何使用轻易云提供的平台工具,对整个流程进行细粒度追踪和审计。
- 高效分页: 在executeBillQuery请求配合下,通过合理设定开始时间点、结束时间点以及查询条数来减少服务器负载,提高查询效率并防范前端超时问题。
- 重试功能: 自定义设置最大失败次数和间隔时间,一旦检测出某次传输失败,即自动启动重试任务有效提升容错率。
在接下来的内容中,将深入讲解各个步骤实施过程中遇到的问题及其优化过程,包括但不限于如何灵活调用API、安全性考量等方面。
![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。
#### 接口配置与请求参数
首先,我们需要了解`executeBillQuery`接口的基本配置和请求参数。根据提供的元数据配置,我们可以看到该接口使用POST方法进行调用,主要用于查询操作(effect: QUERY)。
请求参数包括多个字段,这些字段涵盖了单据编号、单据状态、调入库存组织、日期等关键信息。以下是部分关键字段及其描述:
- `FBillNo`: 单据编号
- `FDocumentStatus`: 单据状态(暂存:Z,创建:A,审核中:B,已审核:C,重新审核:D)
- `FStockOrgID_FNumber`: 调入库存组织
- `FDate`: 日期
- `FTransferDirect`: 调拨方向(普通: GENERAL,退货: RETURN)
- `FQty`: 调入数量
- `FPrice`: 成本价
- `FAmount`: 总成本
这些字段在实际请求中将作为查询条件或返回结果的一部分。
#### 构建请求体
为了调用`executeBillQuery`接口,我们需要构建一个完整的请求体。以下是一个示例请求体,其中包含了必要的查询条件和分页参数:
```json
{
"FormId": "STK_TRANSFERIN",
"FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount",
"FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'",
"Limit": 100,
"StartRow": 0,
"TopRowCount": true
}
```
在这个请求体中:
- `FormId`指定了业务对象表单ID。
- `FieldKeys`定义了需要查询的字段集合。
- `FilterString`设置了过滤条件,例如修改日期大于某个时间点、库存组织编号在特定范围内且单据状态不为已审核。
- `Limit`和`StartRow`用于分页控制。
#### 调用接口并处理响应
通过轻易云数据集成平台,我们可以方便地发起上述请求,并获取响应数据。以下是一个示例代码片段,用于调用接口并处理响应:
```python
import requests
url = "https://api.kingdee.com/executeBillQuery"
headers = {
"Content-Type": "application/json"
}
payload = {
"FormId": "STK_TRANSFERIN",
"FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount",
"FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'",
"Limit": 100,
"StartRow": 0,
"TopRowCount": True
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
# 数据处理逻辑
for entry in data:
bill_no = entry.get("FBillNo")
document_status = entry.get("FDocumentStatus")
stock_org_id = entry.get("FStockOrgID.FNumber")
date = entry.get("FDate")
transfer_direct = entry.get("FTransferDirect")
qty = entry.get("FQty")
price = entry.get("FPrice")
amount = entry.get("FAmount")
# 数据加工逻辑,例如转换格式、计算总成本等
```
在这个代码片段中,我们使用Python的requests库发起POST请求,并解析返回的JSON数据。随后,我们可以根据业务需求对数据进行进一步加工,例如格式转换、计算总成本等。
#### 自动填充与响应处理
轻易云数据集成平台支持自动填充响应,这意味着我们可以预先定义好需要填充的数据结构,并在接收到响应后自动映射到相应的数据模型中。这极大地简化了开发工作,提高了效率。
例如,在元数据配置中,我们可以设置`autoFillResponse: true`,这样平台会自动将返回的数据填充到预定义的模型中,无需手动解析每个字段。
通过以上步骤,我们实现了从金蝶云星空获取并加工数据的全过程。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。
![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台:ETL转换与聚水潭API接口集成
在数据集成的生命周期中,第二步是将已经从源平台(金蝶)获取的数据进行ETL转换,并转为目标平台(聚水潭API接口)所能够接收的格式,最终写入目标平台。本文将深入探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
#### API接口配置
我们使用的聚水潭API接口为`/open/jushuitan/otherinout/upload`,该接口支持POST方法,用于上传其他入库单。以下是具体的元数据配置:
```json
{
"api": "/open/jushuitan/otherinout/upload",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "excute_confirming",
"label": "是否审核单据",
"type": "string",
"describe": "是否审核单据;默认false",
"value": "false"
},
{
"field": "wms_co_id",
"label": "分仓编号",
"type": "int",
"describe": "分仓编号",
"value": "{FDestStockID_FNumber}",
"mapping": {
"target": "6479b78d40ac5e714f39f40a",
"direction": "reverse"
}
},
{
"field": "type",
"label": "出入库类型",
"type": "string",
"describe": "出入库类型:in是入库(其它退货)out是出库(其它出库)",
"value": "in"
},
{
"field": "remark",
"label": "备注",
"type": "string",
"describe": "备注,不能传空值",
"value": "{FNOTE}"
},
{
...
```
#### 数据字段映射与转换
1. **审核单据**:字段`excute_confirming`设置为`false`,表示默认不审核单据。
2. **分仓编号**:字段`wms_co_id`映射自金蝶系统中的`FDestStockID_FNumber`,并通过反向映射确保正确的仓库编号。
3. **出入库类型**:字段`type`固定为`in`,表示这是一个入库操作。
4. **备注**:字段`remark`从金蝶系统中的`FNOTE`获取,并确保不能为空值。
5. **确认单据**:字段`is_confirm`设置为布尔类型,默认值为`false`。
6. **出库类型**:字段`drp_co_name`固定为“金蝶调拨入库”。
7. **外部单号**:字段`external_id`从金蝶系统中的单据编号字段(FBillNo)获取。
8. **仓库类型**:字段`warehouse`固定为1,表示主仓。
#### 商品列表处理
商品列表通过数组形式传递,每个商品项包含以下字段:
- **商品编码**:字段`sku_id`, 映射自金蝶系统中的物料编码(FMaterialID_FNumber)。
- **备注**:字段 `remark`, 映射自金蝶系统中的条目备注(FEntryNote)。
- **数量**:字段 `qty`, 映射自金蝶系统中的数量(FQty)。
```json
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
}
]
}
]
}
]
}
]
}
]
}
]
}
]
```
#### 数据组计算
在数据组计算部分,我们定义了头部和体部的数据组:
- **头部数据组**:
- 单据编号(FBillNo)
- 分仓编号(FDestStockID_FNumber)
- 备注(FNOTE)
- **体部数据组**:
- 商品编码(FMaterialID_FNumber)
- 数量(FQty)
体部数据组命名为 `list`, 并且没有额外的计算逻辑。
```json
"groupCalculate":{
"headerGroup":["FBillNo","FDestStockID_FNumber","FNOTE"],
"bodyGroup":["FMaterialID_FNumber","FQty"],
"bodyName":"list",
"calculate":[]
}
```
通过上述配置,我们可以确保从金蝶系统获取的数据经过ETL转换后,符合聚水潭API接口的要求,并顺利写入目标平台。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接。
![用友BIP接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)