数据集成与ETL:从旺店通调拨单到金蝶云星空的技术实现
### 案例分享:旺店通·企业奇门数据集成到金蝶云星空
在本案例中,我们将解析一个具体的系统对接集成任务,涉及将旺店通·企业奇门中的调拨单数据高效同步至金蝶云星空。该方案名为“旺店通调拨单同步--114”,通过特定API接口实现数据的可靠抓取和批量写入。
#### 接口概述
为了实现这一目标,我们主要使用两个关键API:
- 旺店通·企业奇门获取数据的API:`wdt.stock.transfer.query`
- 金蝶云星空写入数据的API:`batchSave`
#### 数据获取与处理
首先,通过调用`wdt.stock.transfer.query`接口从旺店通·企业奇门系统中提取调拨单数据。为了确保高吞吐量的数据处理能力,并应对分页与限流问题,需要设计合理的数据抓取策略,例如按批次进行请求,同时使用可靠的日志记录来跟踪每次接口调用状态。
```python
import requests
def get_transfer_data(offset, limit):
url = "https://api.wdt.com/enterprise/query"
params = {
"method": "wdt.stock.transfer.query",
"offset": offset,
"limit": limit,
# 其他必要参数如认证信息等...
}
response = requests.get(url, params=params)
if response.status_code == 200:
return response.json()
else:
# 错误处理逻辑
pass
# 示例调用
transfer_data = get_transfer_data(0, 100)
```
#### 数据转换与映射
在获得原始数据后,需要通过自定义的数据转换逻辑,将其格式调整为金蝶云星空所需的格式。这一步骤至关重要,特别是要注意字段类型和命名规范之间的差异,通过可视化的数据流设计工具,可以直观地管理这些转换规则。
```python
def transform_to_kingdee_format(raw_data):
transformed_data = []
for item in raw_data["data"]:
transformed_item = {
"field1_in_kingdee": item["field1_in_wdt"],
# 更多字段映射...
}
transformed_data.append(transformed_item)
return {"data": transformed_data}
# 示例转换过程
transformed_result = transform_to_kingdee_format(transfer_data)
```
#### 数据写入及监控配置
最后,经由转化后的数据需要利用`batchSave` API批量写入至金蝶云星空。在此过程中,为了确保不漏单且所有操作均有据可查,应设置实时监控机制及错误重试机制,以应对可能出现的问题,如网络波动或接口响应异常
![如何对接钉钉API接口](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`,并对获取的数据进行初步加工。
#### 接口调用配置
首先,我们需要配置元数据以便正确调用`wdt.stock.transfer.query`接口。以下是元数据配置的关键部分:
```json
{
"api": "wdt.stock.transfer.query",
"method": "POST",
"number": "transfer_no",
"id": "transfer_id",
"pagination": {
"pageSize": 100
},
"idCheck": true,
"request": [
{"field":"start_time","label":"开始时间","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"end_time","label":"结束时间","type":"datetime","value":"{{CURRENT_TIME|datetime}}"},
{"field":"from_warehouse_no","label":"源仓库","type":"string"},
{"field":"to_warehouse_no","label":"目标仓库","type":"string"},
{"field":"status","label":"调拨单状态","type":"string","value":"90"}
],
"otherRequest": [
{"field":"page_size","label":"分页大小","type":"string","value":"{PAGINATION_PAGE_SIZE}"},
{"field":"page_no","label":"页号","type":"string","value":"{PAGINATION_START_PAGE}"}
],
"condition_bk": [
[{"field": "remark", "logic": "like", "value": "114"}]
]
}
```
#### 请求参数详解
- **开始时间和结束时间**:通过`start_time`和`end_time`字段,我们可以指定查询的时间范围。这里使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`,确保每次同步时都能获取最新的数据。
- **源仓库和目标仓库**:通过`from_warehouse_no`和`to_warehouse_no`字段,可以指定调拨单的源仓库和目标仓库。
- **调拨单状态**:通过设置状态为90,过滤出特定状态的调拨单。
- **分页参数**:为了处理大批量数据,设置了分页参数,包括每页大小(page_size)和页号(page_no)。
#### 数据请求与清洗
在成功调用接口并获取数据后,需要对数据进行初步清洗。这一步骤包括但不限于以下操作:
1. **去除冗余字段**:只保留必要的字段,如调拨单号(transfer_no)、调拨单ID(transfer_id)等。
2. **格式转换**:将日期格式统一转换为标准格式,以便后续处理。
3. **数据过滤**:根据业务需求进一步过滤不符合条件的数据。例如,通过条件备份(condition_bk)中的逻辑条件,只保留备注包含“114”的记录。
#### 实际案例
假设我们需要从2023年1月1日到2023年1月31日之间,查询所有状态为90、备注包含“114”的调拨单。具体请求参数如下:
```json
{
"start_time": "2023-01-01T00:00:00",
"end_time": "2023-01-31T23:59:59",
"status": "90",
"remark_like": "%114%",
"page_size": 100,
"page_no": 1
}
```
通过上述配置,我们可以顺利调用接口并获取所需数据。接下来,我们需要对返回的数据进行清洗和转换,以便后续写入目标系统。
#### 数据转换与写入
在完成数据请求与清洗后,将清洗后的数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作:
1. **字段映射**:将源系统字段映射到目标系统对应字段。
2. **数据验证**:确保所有必填字段都有值,并符合目标系统的数据规范。
3. **批量写入**:为了提高效率,可以采用批量写入的方式,将处理好的数据一次性写入目标系统。
通过以上步骤,我们可以实现从旺店通·企业奇门接口到目标系统的数据无缝对接,提高业务透明度和效率。
以上就是使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据的详细技术流程。希望这些技术细节能为您的实际项目提供有价值的参考。
![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image)
### 数据集成与ETL转换:从旺店通调拨单到金蝶云星空API接口
在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将旺店通调拨单的数据通过ETL转换,最终写入金蝶云星空API接口。
#### API接口配置与调用
首先,我们需要了解金蝶云星空API接口的配置。根据元数据配置,目标API为`batchSave`,请求方法为`POST`。我们需要确保请求中的字段和数据格式符合金蝶云星空的要求。
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","value":"{transfer_no}-TC"},
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"ZJDB01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FBizType","label":"业务类型","type":"string","value":"NORMAL"},
{"field":"FTransferDirect","label":"调拨方向","type":"string","value":"GENERAL"},
{"field":"FTransferBizType","label":"调拨类型","type":"string","value":"InnerOrgTransfer"},
{"field":"FStockOutOrgId","label":"调出库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"},
{"field":"FOwnerOutIdHead","label":"调出货主","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"},
{"field":"FStockOrgId","label":"调入库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"114"},
{"field":"FDate","label":"日期","type":"string","value":"{created}"},
{"field":"FNote","label":"备注","type":"string","value":"{remark}"},
{
"field": "FBillEntry",
"label": "明细信息",
"type": "array",
"children": [
{"field": "FMaterialId", "label": "物料编码", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{details_list.spec_no}}", "parent": "FBillEntry"},
{"field": "FCMKBarCode", "label": "零售条形码", "type": "string", "parent": "FBillEntry"},
{"field": "FQty", "label": "调拨数量", "type": "string", "value": "{{details_list.num}}", "parent": "FBillEntry"},
{"field": "FSrcStockId", "label": "调出仓库", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{from_warehouse_no}", "parent": "FBillEntry"},
{"field": "FDestStockId", "label": "调入仓库", "type": "string", "value: "{to_warehouse_no}", parser: {name: ConvertObjectParser, params: FNumber}, parent: FBillEntry},
{ field: FNoteEntry, label: 备注, type: string, value: {{details_list.remark}}, parent: FBillEntry },
{ field: FISFREE, label: 赠品, type: string, parent: FBillEntry }
],
value: details_list
}
],
otherRequest:[
{ field:"FormId", label:"业务对象表单Id", type:"string", value:"STK_TransferDirect"},
{ field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", value:"true"},
{ field:"IsVerifyBaseDataField", label:"验证基础资料", type:"bool", value:"true"},
{ field:"Operation", label:"执行的操作", type:"string", value:"Save"}
]
}
```
#### 数据转换与清洗
在数据转换过程中,我们需要对源平台的数据进行清洗和格式化,以满足目标平台的需求。例如,将旺店通的字段映射到金蝶云星空所需的字段,并进行必要的格式转换。
1. **单据编号(FBillNo)**:
- 来源字段:`transfer_no`
- 转换规则:在原始编号后添加后缀`-TC`
2. **单据类型(FBillTypeID)**:
- 固定值:`ZJDB01_SYS`
- 使用解析器`ConvertObjectParser`进行对象转换
3. **业务类型(FBizType)**:
- 固定值:`NORMAL`
4. **调拨方向(FTransferDirect)**:
- 固定值:`GENERAL`
5. **日期(FDate)**:
- 来源字段:`created`
6. **备注(FNote)**:
- 来源字段:`remark`
7. **明细信息(FBillEntry)**:
- 包含多个子字段,如物料编码、零售条形码、调拨数量等,每个子字段都需要对应源数据进行映射和转换。
#### 数据写入
完成数据清洗和转换后,即可将处理后的数据通过API接口写入到金蝶云星空。以下是一个示例请求体:
```json
{
FormId: 'STK_TransferDirect',
IsAutoSubmitAndAudit: true,
IsVerifyBaseDataField: true,
Operation: 'Save',
array:[
{
FBillNo:'12345-TC',
FBillTypeID:{ FNumber:'ZJDB01_SYS'},
FBizType:'NORMAL',
FTransferDirect:'GENERAL',
FTransferBizType:'InnerOrgTransfer',
FStockOutOrgId:{ FNumber:'114'},
FOwnerOutIdHead:{ FNumber:'114'},
FStockOrgId:{ FNumber:'114'},
FDate:'2023-10-01',
FNote:'This is a remark.',
FBillEntry:[
{
FMaterialId:{ FNumber:'SPEC001'},
FCMKBarCode:'',
FQty:'100',
FSrcStockId:{ FNumber:'WH001'},
FDestStockId:{ FNumber:'WH002'},
FNoteEntry:'',
FISFREE:''
}
]
}
]
}
```
通过上述步骤,我们实现了从旺店通到金蝶云星空的数据ETL转换,并成功将处理后的数据写入目标平台。这一过程不仅提升了数据处理效率,还确保了数据的一致性和准确性。
![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)