### 案例分享:吉客云数据集成到金蝶云星空
在本案例中,我们将深入探讨如何利用轻易云数据集成平台实现吉客云与金蝶云星空的高效对接。特别是针对采购退料流程,通过API接口`erp.storage.goodsdocout.v2`从吉客云获取相关数据,并使用金蝶云星空的`batchSave` API将处理后的数据写入其系统。本方案被命名为"采购退料对接--红冲--已测试"。
#### 任务背景及技术挑战
在整个对接过程中,面临的主要技术挑战包括:
1. **确保无损、高吞吐量的数据传输**:需要大量且快速地将吉客云中的采购退料单据批量导入到金蝶云星空,实现高时效性的数据处理。
2. **统一管理API资产**:通过集中视图和控制台全面掌握API的使用情况,以满足企业资源优化配置的需求。
3. **实时监控与异常检测**:通过实时跟踪和告警机制,及时发现并处理潜在的数据问题,保证每个环节的稳定运行。
4. **自定义数据转换逻辑**:适应不同业务需求和复杂数据结构之间的差异,同时处理分页和限流问题确保接口调用效率最大化。
#### 对策与实施方案
基于上述挑战,本次集成具体采用了以下几步策略:
- 利用可视化的数据流设计工具,对从吉客云提取出来的数据进行转换调整,使其符合金蝶云星空要求的数据格式。这一过程中也解决了两者间存在的数据结构差异。
- 在获取阶段,通过定时任务可靠抓取并汇总多个分页结果,有效应对大规模数据同步时可能遇到的问题。
- 数据写入过程则借助轻易平台提供的大容量高速写入能力,将加工后的信息批量推送至金蝶系统,大幅提高整体操作效率。此外,还设置了多层级日志记录机制来监控关键步骤及状态变化,以便出现错误时能够及时重试或修复。
通过以上策略,实现了从源头到目标端全生命周期内透明、稳定、高效的大规模数据信息传递,为后续业务运作提供坚实保障。在后文中我们会详细拆解每一步骤所涉及的方法、代码实现与实际效果。
![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过配置元数据调用吉客云接口`erp.storage.goodsdocout.v2`来获取并加工数据。
#### 接口配置与请求参数
根据提供的元数据配置,我们需要向吉客云接口发送一个POST请求。请求参数包括分页信息、时间范围、出库类型等。以下是具体的请求参数配置:
- **pageIndex**: 分页页码,类型为字符串。
- **pageSize**: 分页页数,类型为字符串,默认值为50。
- **goodsDocNo**: 入库单号,类型为字符串。
- **startDate**: 创建时间的起始时间,类型为字符串,使用模板变量`{{LAST_SYNC_TIME|datetime}}`。
- **endDate**: 创建时间的结束时间,类型为字符串,使用模板变量`{{CURRENT_TIME|datetime}}`。
- **inouttype**: 出库类型,类型为字符串,此处固定值为205(退料入库)。
- **selelctFields**: 返回参数列表,类型为字符串,包括多个字段,如`goodsdocNo`, `inOutDate`, `inouttype`, `vendCustomerCode`, `vendCustomerName`, `warehouseCode`, `warehouseName`, `inOutReason`, `financeBillStatus`, 以及嵌套字段`goodsDocDetailList.goodsNo`, `goodsDocDetailList.goodsName`, `goodsDocDetailList.estCost`, `goodsDocDetailList.estPrice`, `goodsDocDetailList.quantity`等。
#### 数据清洗与转换
在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。以下是具体步骤:
1. **自动填充响应数据**:根据元数据配置中的`autoFillResponse`设置,将响应中的嵌套字段自动展开。例如,将`goodsDocDetailList`中的字段平铺到顶层结构中。
2. **条件过滤**:
- 基于数量字段进行过滤:仅保留数量小于0的数据(即退料记录)。
- 排除特定仓库名称:过滤掉仓库名称包含"VMI"的记录。
3. **遗漏补救机制**:
- 使用定时任务(crontab)定期检查和补救遗漏的数据请求。例如,每天凌晨2点执行一次任务,通过计算过去三天的时间范围来重新发起请求。
#### 示例代码
以下是一个示例代码片段,用于展示如何通过轻易云平台配置和调用吉客云接口,并对返回的数据进行清洗和转换:
```json
{
"api": "erp.storage.goodsdocout.v2",
"effect": "QUERY",
"method": "POST",
"number": "goodsdocNo",
"id": "goodsdocNo",
"idCheck": true,
"request": [
{"field": "pageIndex", "label": "分页页码", "type": "string"},
{"field": "pageSize", "label": "分页页数", "type": "string", "value": "50"},
{"field": "goodsDocNo", "label": "入库单号", "type": "string"},
{"field": "startDate", "label": "创建时间的起始时间", "type": "string",
"value":"{{LAST_SYNC_TIME|datetime}}"},
{"field": "endDate",
"label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"},
{"field":"inouttype","label":"出库类型","type":"string","describe":"入库类型(100-期初库存101-采购入库102-调拨入库103-盘盈入库104-其他入库105-销售退货106-完工入库107-组装拆卸入库108-翻新入库109-报废入库110-残次品入库111-成本调整112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"205"},
{"field":"selelctFields","label":"返回参数","type":"string","value":
"goodsdocNo,inOutDate,inouttype,vendCustomerCode,vendCustomerName,warehouseCode,warehouseName,inOutReason,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.estCost,goodsDocDetailList.estPrice,goodsDocDetailList.quantity,goodsDocDetailList"}
],
...
}
```
通过上述配置,可以实现对吉客云接口的有效调用,并对返回的数据进行必要的清洗和转换,为后续的数据处理奠定基础。这一步骤在整个数据集成生命周期中至关重要,因为它确保了从源系统获取的数据是准确且可用的。
![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二阶段,重点在于将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终写入目标平台。在本文中,我们将深入探讨如何利用轻易云数据集成平台,将采购退料对接的数据转换为金蝶云星空API接口所能接收的格式,并成功写入目标平台。
#### 数据请求与清洗
首先,我们从源平台获取原始数据,并对其进行必要的清洗和预处理。这个过程确保了数据的一致性和准确性,为后续的转换和写入打下基础。
#### 数据转换与写入
在完成数据清洗后,我们进入关键的ETL转换阶段。以下是具体的元数据配置及其应用:
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "RKD01_SYS"
},
{
...
}
],
...
}
```
##### 配置解析
1. **API接口配置**:
- `api`: 指定调用的API接口,这里是`batchSave`。
- `effect`: 设置为`EXECUTE`,表示执行操作。
- `method`: 使用`POST`方法提交数据。
- `idCheck`: 启用ID检查,确保数据唯一性。
2. **请求字段配置**:
- **单据类型** (`FBillTypeID`): 使用`ConvertObjectParser`解析器,将值转换为金蝶云星空所需格式。
- **业务类型** (`FBusinessType`): 固定值为`CG`,表示采购业务。
- **吉客云单号** (`FJKYNo`): 动态获取源数据中的单据编号 `{goodsdocNo}`。
- **入库日期** (`FDate`): 动态获取源数据中的日期 `{inOutDate}`。
- **收料组织、货主、采购组织** (`FStockOrgId`, `FOwnerIdHead`, `FPurchaseOrgId`): 使用相同的动态值 `{goodsDocDetailList_ownerName}` 并通过 `ConvertObjectParser` 转换。
3. **明细信息配置**:
- 明细信息字段以数组形式存在,每个字段如物料编码(`FMaterialId`)和仓库(`FStockId`)都通过解析器进行转换。
- 特别注意数量(`FRealQty`)和价税合计(`FAllAmount`)字段,这里使用了 `_function` 标签来动态计算负值,以适应红冲操作需求。
4. **其他请求参数**:
- 表单ID (`FormId`) 设置为 `STK_InStock`,指定业务对象表单ID。
- 自动提交并审核 (`IsAutoSubmitAndAudit`) 设置为 `true`,确保流程自动化。
- 验证基础资料 (`IsVerifyBaseDataField`) 设置为 `true`,保证所有基础资料有效性。
##### 数据写入
经过上述配置后,我们可以通过轻易云平台将处理后的数据提交到金蝶云星空。以下是一个示例请求体:
```json
{
"FormId": "STK_InStock",
...
"Model": {
...
"FBillTypeID": {
...
},
...
"FInStockEntry": [
{
...
"FMaterialId": {
...
},
...
}
]
}
}
```
在实际操作中,通过POST方法将上述JSON结构的数据发送至金蝶云星空API接口,实现最终的数据写入。
#### 总结
通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并通过轻易云平台高效地写入到金蝶云星空。这一过程不仅保证了数据的一致性和准确性,也极大提升了业务流程的自动化水平。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)