使用轻易云实现销售出库单同步到金蝶云星空的ETL过程详解
### 旺店通·企业奇门销售出库单数据同步到金蝶云星空的集成方案
在本案例中,我们将详细分析如何通过轻易云数据集成平台,实现旺店通·企业奇门(以下简称“旺店通”)销售出库单数据高效、可靠地同步至金蝶云星空。此方案旨在确保数据不漏单,快速写入并实现实时监控与智能错误重试。
#### 1. 接口调用与数据抓取
首先,需要从旺店通系统获取销售出库单的数据。为此,我们需要使用API接口`wdt.stockout.order.query.trade`进行定时抓取。为了避免因接口限流和分页所带来的问题,可以采用分批次抓取,并结合调度策略来保证每次请求都有条不紊且高效执行。
- **分页处理**:由于通常情况下,每一次API调用返回的数据量有限制,因此需要管理好请求中的分页参数,以确保所有记录都被完整获取。
- **限流机制**:设置适当的频率限制以避免超出接口访问频次,使得整个抓取过程顺畅无阻,同时留意异常状况,通过日志记录备查。
#### 2. 数据格式转换与映射
接下来,需解决的是如何将从旺店通取得的数据格式化并映射到金蝶云星空可以接受的结构。这一过程中我们将涉及到字段匹配、类型转换等细节处理:
- **字段对应关系映射**:定义清晰准确的字段映射规则,将源系统(旺店通)传输过来的JSON或XML结构转化为目标系统(金蝶云星空)的标准输入形式。
- **类型转换及校验**:例如,对于整型日期时间字段,需要考虑字符串解析,然后转化为目标数据库支持的日期时间对象。此外,还要对大小写敏感的数据内容进行核对。
#### 3. 批量操作与性能优化
为了提高效率,本案例设计了一种批量集成模式,将大量订单信息打包后通过金蝶云星空提供的`batchSave` API统一提交:
- **批量写入机制**:设定合适的批大小,以平衡网络负载和服务器处理能力,从而实现最佳写入效率。
- **事务控制**:确保每一个批次操作符合事务一致性原则,即便某些订单出现问题,也不会影响整个流程。同时引入失败回滚机制,对未成功记录进行重新尝试提交以提升成功率。
#### 4. 异常处理与监控
最后,为了保证整个流程安全稳定运行,必须配置健全完善的异常检测和恢复策略:
- **错误重试机制**:如若某个环节发生故障
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取销售出库单数据,并进行初步加工。
#### 接口调用配置
首先,我们需要配置接口调用的元数据。以下是关键的元数据配置参数:
- **api**: `wdt.stockout.order.query.trade`
- **effect**: `QUERY`
- **method**: `POST`
- **number**: `order_no`
- **id**: `stockout_id`
- **idCheck**: `true`
这些参数定义了我们要调用的具体API、请求方法以及用于标识和检查数据唯一性的字段。
#### 请求参数设置
为了实现增量数据获取,我们需要设置请求参数。以下是主要的请求参数及其配置:
1. **start_time** 和 **end_time**:
- 用于指定数据查询的时间范围。
- 配置示例:
```json
{
"field": "start_time",
"label": "开始时间",
"type": "datetime",
"describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "end_time",
"label": "结束时间",
"type": "datetime",
"describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{CURRENT_TIME|datetime}}"
}
```
2. **status**:
- 用于过滤特定状态的订单。
- 配置示例:
```json
{
"field": "status",
"label": "状态",
"type": "string",
"describe": "5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货",
"value": "95,110"
}
```
3. **warehouse_no**:
- 用于指定仓库编号,以便获取特定仓库的数据。
- 配置示例:
```json
{
"field": "warehouse_no",
"label": "仓库编号",
"type": "string",
"describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"
}
```
4. **is_by_modified**:
- 用于指示是否按修改时间查询。
- 配置示例:
```json
{
"label": "is_by_modified",
"field": "is_by_modified",
"type": "string"
}
```
#### 分页处理
为了处理大批量的数据,我们需要进行分页查询。以下是分页相关的请求参数:
1. **page_size**:
- 每页返回的数据条数。
- 配置示例:
```json
{
"field": "page_size",
"label": "page_size",
"type": "string",
"describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40。",
'value': "{PAGINATION_PAGE_SIZE}"
}
```
2. **page_no**:
- 当前页码。
- 配置示例:
```json
{
'field': 'page_no',
'label': 'page_no',
'type': 'string',
'describe': '不传值默认从0页开始',
'value': '{PAGINATION_START_PAGE}'
}
```
#### 数据过滤条件
在获取到原始数据后,我们可能需要对其进行进一步过滤。例如,可以根据发货时间和商品编号进行过滤:
```json
{
'condition': [
[
{'field': 'consign_time', 'logic': 'egt', 'value': '2023-02-18 00:00:00'},
{'field': 'consign_time', 'logic': 'egt', 'value': '2023-02-21 00:00:00'},
{'field': 'goods_no', 'logic': 'notlike', 'value': 'xnhp-sd', strictMode:true}
]
]
}
```
#### 数据自动填充
为了简化后续的数据处理步骤,可以启用自动填充响应功能:
```json
{
autoFillResponse:true
}
```
通过上述配置,我们可以高效地从旺店通·企业奇门接口`wdt.stockout.order.query.trade`中获取销售出库单的数据,并为后续的数据转换与写入阶段做好准备。这一步骤不仅确保了数据的完整性和准确性,还为整个集成过程奠定了坚实基础。
![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image)
### 利用轻易云数据集成平台实现销售出库单同步到金蝶云星空
在数据集成的过程中,ETL(Extract, Transform, Load)转换是关键的一步。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
#### 数据转换与写入配置
我们将以销售出库单同步到金蝶云星空为例,详细解析元数据配置和具体操作步骤。
##### 1. API接口配置
首先,我们需要配置金蝶云星空的API接口。根据元数据配置,目标API为`batchSave`,请求方法为`POST`。在这个过程中,我们需要确保每个字段都能正确映射到金蝶云星空所需的格式。
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true
}
```
##### 2. 请求参数配置
请求参数是数据转换的核心部分。我们需要将源平台的数据字段映射到目标平台的字段,并进行必要的转换和处理。以下是主要字段的配置示例:
- **单据类型** (`FBillTypeID`): 固定值 `XSCKD01_SYS`
- **单据编号** (`FBillNo`): 映射自 `{order_no}`
- **日期** (`FDate`): 映射自 `{consign_time}`
- **销售组织** (`FSaleOrgId`): 固定值 `102`
- **客户** (`FCustomerID`): 映射自 `{shop_no}`
- **发货组织** (`FStockOrgId`): 固定值 `100`
- **销售员** (`FSalesManID`): 映射自 `{salesman_no}`
- **结算币别** (`FSettleCurrID`): 固定值 `PRE001`
- **备注** (`F_kdd_Text3`): 根据条件设置 `_function IF('{shop_no}'='010','旺店通销售出库单对接线下','旺店通销售出库单对接线上')`
这些字段通过 `ConvertObjectParser` 进行解析和转换。例如:
```json
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"value": "XSCKD01_SYS",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
}
}
```
##### 3. 明细信息配置
对于明细信息,我们使用数组形式进行批量处理,每个明细项包含多个字段,如物料编码、实发数量、单价等。这些字段同样需要进行映射和转换。
```json
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"value": "details_list",
"children": [
{
"field": "FMaterialID",
"label": "物料编码",
"type": "string",
"value": "{spec_no}",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
}
},
{
"field": "FRealQty",
"label": "实发数量",
"type": "string",
...
}
// 更多明细字段
]
}
```
##### 4. 附加请求参数
除了主要字段外,还需要配置一些附加参数,以确保请求能够被正确处理。例如:
```json
{
...
{"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"},
{"field":"Operation","label":"Operation","type":"string","value":"Save"},
{"field":"IsVerifyBaseDataField","label":"IsVerifyBaseDataField","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"},
{"field":"SubSystemId","label":"SubSystemId","type":"string","describe":"默认仓库模块","value":"21"},
{"field":"StepBySubmitAndAudit","label":"StepBySubmitAndAudit","type":"string","value":"true"}
}
```
#### 数据转换与写入流程
1. **提取源数据**: 从源平台提取销售出库单的数据。
2. **数据清洗与转换**: 根据元数据配置,将提取的数据进行清洗和转换,使其符合金蝶云星空API接口要求。
3. **构建请求体**: 将转换后的数据构建成符合API要求的JSON格式。
4. **发送请求**: 使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。
5. **处理响应**: 接收并处理API响应,根据返回结果进行相应操作,如记录日志或错误处理。
通过以上步骤,我们可以高效地将销售出库单从源平台同步到金蝶云星空,实现不同系统间的数据无缝对接。这不仅提高了业务效率,还确保了数据的一致性和准确性。
![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)