使用轻易云实现ETL转换和数据写入旺店通API的技术详解
### 案例分析:金蝶云星空数据集成到旺店通·企业奇门
在本案例中,我们探讨了如何将金蝶云星空的数据高效、精准地集成到旺店通·企业奇门,实现组装父项入库同步。采用的方法主要涉及API接口调用、数据格式处理以及分页和限流问题的解决。
首先,通过调用金蝶云星空的`executeBillQuery`接口,我们能够定时且可靠地抓取所需的入库单据数据。在实现过程中,确保了对接口请求频次的有效控制,以避免超出限流限制。此外,为应对大规模数据传输需求,我们设计了一套批量集成机制,使得大量订单能迅速写入旺店通·企业奇门。
为了保证数据不漏单并能快速定位问题,我们在接收端——即旺店通·企业奇门——构建了一套异常处理与错误重试机制。该机制结合实时监控与日志记录功能,不仅提高了系统稳定性,还进一步提升了业务透明度。一旦出现异常,可以通过自动触发预设的重试逻辑来尽快恢复正常操作,其中包括使用`wdt.stockin.order.push` API进行再次推送,从而最大程度减少因网络波动或其他突发情况带来的影响。
此外,在具体实施过程中,对两系统之间存在的数据格式差异进行了详细分析和处理。例如,针对某些字段需要进行特殊转换或映射,这要求我们在配置阶段精细化定义每个字段对应关系,并对边界情况做好充分考虑。
每一个步骤都经过严格验证以确保最终方案的可靠性和稳定性,使得整个集成过程能顺利完成,并达到预期目标。这一技术方案不仅适用于本案例,同样也可为其他类似需求提供借鉴。
![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工数据。
#### 接口配置与请求
首先,我们需要配置元数据,以便正确调用`executeBillQuery`接口。以下是关键的元数据配置:
```json
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FEntity_FEntryID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"日期","type":"string","value":"FDate"},
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"},
{"field":"FOwnerTypeIdHead","label":"成品货主类型","type":"string","value":"FOwnerTypeIdHead"},
{"field":"FOwnerIdHead_FNumber","label":"成品货主","type":"string","value":"FOwnerIdHead.FNumber"},
{"field":"FAffairType","label":"事务类型","type":"string","value":"FAffairType"},
{"field":"FEE","label":"费用","type":"string","value":"FEE"},
{"field":"FDeptID_FNumber","label":"部门","type":"string","value":"FDeptID.FNumber"},
{"field":"FNote","label":"","备注"type:""string"value:""FNote""},
// ...省略部分字段
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "TopRowCount", "label": "",返回总行数"type:""int"value:""describe:金蝶的查询分页参数""},
// ...省略部分字段
]
}
```
#### 请求参数解析
在上述配置中,`api`字段指定了要调用的接口为`executeBillQuery`,请求方法为`POST`。分页参数设置为每页500条记录,并启用了ID检查功能。
关键字段包括:
- `FID`: 实体主键
- `FBillNo`: 单据编号
- `FDocumentStatus`: 单据状态
- `FStockOrgId_FNumber`: 库存组织编码
- `FAffairType`: 事务类型
这些字段将用于构建请求体,以获取所需的数据。
#### 构建请求体
根据元数据配置,我们需要构建一个包含所有必要字段的请求体。以下是一个示例请求体:
```json
{
"FormId": "STK_AssembledApp",
"FieldKeys": [
// 列出所有需要查询的字段key集合
// 示例:["FID", "FBillNo", ...]
],
"FilterString": "{{LAST_SYNC_TIME|datetime}} and FAFFAIRTYPE = 'Assembly' and FStockOrgId.FNumber='102'",
// 分页参数
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}"
}
```
在这个请求体中:
- `FormId`指定了业务对象表单ID。
- `FieldKeys`列出了所有需要查询的字段。
- `FilterString`用于过滤条件,例如根据上次同步时间、事务类型和库存组织编码进行过滤。
- 分页参数确保我们能够处理大量数据。
#### 数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以符合目标系统(如旺店通)的要求。这一步通常包括:
1. **字段映射**:将源系统字段映射到目标系统字段。例如,将金蝶云星空中的`FBillNo`映射到旺店通中的订单编号。
2. **数据格式转换**:例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
3. **数据验证**:确保所有必填字段都有值,并且值符合业务规则。
以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
cleaned_record = {
'order_no': record['FBillNo'],
'status': record['FDocumentStatus'],
'org_code': record['FStockOrgId_FNumber'],
'date': convert_date_format(record['FDate']),
# ...其他字段处理
}
cleaned_data.append(cleaned_record)
return cleaned_data
def convert_date_format(date_str):
# 假设源日期格式为YYYY-MM-DD,目标格式为DD/MM/YYYY
return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y')
```
通过上述步骤,我们可以确保从金蝶云星空获取的数据经过清洗和转换后,能够无缝对接到目标系统中。
#### 总结
本文详细介绍了如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,并对获取的数据进行清洗和转换。通过合理配置元数据和构建请求体,可以高效地实现不同系统间的数据集成。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现ETL转换并写入旺店通·企业奇门API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台——旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。以下是具体的技术实现过程。
#### 元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其对应的意义:
- **api**: `wdt.stockin.order.push`,表示调用的API接口。
- **effect**: `EXECUTE`,表示执行操作。
- **method**: `POST`,表示使用HTTP POST方法。
- **idCheck**: `true`,表示需要进行ID检查。
- **request**: 包含具体请求参数的数组,每个参数都有详细的字段说明。
#### 请求参数解析与映射
请求参数包括以下几个主要部分:
1. **外部单号 (outer_no)**:
- 字段:`outer_no`
- 类型:`string`
- 映射值:`{FBillNo}`,即源数据中的单据编号。
2. **仓库编号 (warehouse_no)**:
- 字段:`warehouse_no`
- 类型:`string`
- 映射值:`{FStockID_FNumber}`,即源数据中的仓库编号。
3. **备注 (remark)**:
- 字段:`remark`
- 类型:`string`
- 固定值:`组装单父项入库`
4. **是否审核 (is_check)**:
- 字段:`is_check`
- 类型:`string`
- 固定值:`1`
5. **货品明细节点 (goods_list)**:
- 字段:`goods_list`
- 类型:`array`
- 映射值:`{FEntity}`,即源数据中的货品明细列表。
#### 货品明细节点解析
货品明细节点包含多个子字段,每个子字段都需要进行相应的映射:
1. **商家编码 (spec_no)**:
- 字段:`spec_no`
- 类型:`string`
- 映射值:`{FMaterialID_FNumber}`,即源数据中的物料编码。
2. **入库数量 (stockin_num)**:
- 字段:`stockin_num`
- 类型:`string`
- 映射值:`{FQty}`,即源数据中的数量。
3. **原价 (src_price)** 和 **入库价 (stockin_price)**:
- 字段分别为 `src_price`, `stockin_price`
- 类型均为 `string`
- 固定值均为 `1`
#### 其他请求参数
此外,还有一个额外的请求参数:
- **stockin_info**:
- 字段:`stockin_info`
- 类型:`string`
- 描述信息
- 固定值为 `1`
#### 实现ETL转换
在轻易云平台上,我们可以通过可视化界面配置上述元数据,将源平台的数据按需提取、清洗并转换为目标格式。具体步骤如下:
1. **提取(Extract)**:
从源系统中提取相关的数据字段,如单据编号、仓库编号、物料编码和数量等。
2. **转换(Transform)**:
根据元数据配置,将提取的数据映射到目标格式。例如,将 `{FBillNo}` 映射到 `outer_no`, 将 `{FStockID_FNumber}` 映射到 `warehouse_no`, 等等。同时,对于固定值字段如 `remark`, `is_check`, `src_price`, 和 `stockin_price`, 直接赋予预定义的固定值。
3. **加载(Load)**:
将转换后的数据通过HTTP POST方法提交到旺店通·企业奇门API接口,实现数据写入。确保每个请求参数都符合API要求,以保证数据能够正确接收和处理。
#### 数据写入示例
以下是一个示例请求体,通过POST方法提交到API接口:
```json
{
"outer_no": "123456",
"warehouse_no": "WH001",
"remark": "组装单父项入库",
"is_check": "1",
"goods_list": [
{
"spec_no": "MAT001",
"stockin_num": "100",
"src_price": "1",
"stockin_price": "1"
},
{
"spec_no": "MAT002",
"stockin_num": "200",
"src_price": "1",
"stockin_price": "1"
}
],
"stockin_info": "1"
}
```
通过上述步骤和配置,我们成功地将源平台的数据进行了ETL转换,并将其写入了旺店通·企业奇门API接口。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。
![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T19.png~tplv-syqr462i7n-qeasy.image)