从API调用到数据清洗:轻易云平台的数据处理全解析
### 吉客云与金蝶云星空系统对接集成案例分享:JY-BDS调拨单
在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现吉客云与金蝶云星空的无缝对接,具体聚焦于JY-BDS调拨单的高效处理。此方案不仅需要关注大量数据的快速写入和读取,还需应对不同系统的数据格式差异和接口调用中的分页、限流等挑战。
首先,通过吉客云API `erp.allocate.get` 定时可靠地抓取所需数据,并确保不漏单是整个流程中至关重要的一环。得益于轻易云平台强大的高吞吐量数据写入能力,大批量的数据能够迅速传输到金蝶云星空系统内,显著提升了业务操作效率。
同时,为了实现顺利的数据映射和转换,我们利用自定义的数据转换逻辑来适应特定的业务需求。这一过程通过可视化的数据流设计工具进行配置,使每个步骤都更加直观、便捷。此外,通过集中监控和告警系统实时跟踪任务状态及性能,及时发现并解决潜在问题,从而确保整个集成流程的稳定性与可靠性。
为了全面掌握API资产使用情况并优化资源配置,我们采用了统一视图和控制台功能,对两套系统之间进行全方位管理。在处理异常及错误重试机制方面,本方案包含详细策略,以保证即使出现意外状况也能及时恢复并继续运行,从而保障业务连续性。
这只是开端,下文我们将详细展开具体实施步骤,包括分页处理技巧以及如何克服接口限流限制,同时介绍相关代码示例以供参考。
![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口erp.allocate.get获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口`erp.allocate.get`来获取并加工调拨单数据。
#### 接口概述
吉客云的`erp.allocate.get`接口主要用于获取调拨单信息。该接口采用POST请求方式,支持分页查询,并提供多种过滤条件以满足不同业务需求。以下是该接口的元数据配置:
```json
{
"api": "erp.allocate.get",
"method": "POST",
"number": "allocateNo",
"id": "allocateId",
"pagination": {
"pageSize": 50
},
"idCheck": true,
"request": [
{"field":"pageIndex","label":"页码(默认从0开始)","type":"string"},
{"field":"pageSize","label":"每页条数(默认50)","type":"string","value":"50"},
{"field":"status","label":"调拨单状态(多个中间逗号隔开)","type":"string","value":"20"},
{"field":"startCreateTime","label":"创建时间的起始时间","type":"string","value":"_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 30 DAY),'%Y-%m-%d 00:00:00')"},
{"field":"endCreateTime","label":"创建时间结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"},
{"field":"inWarehouseCode","label":"调入仓库编号","type":"string"},
{"field":"outSkuCode","label":"外部货品主键(支持批量 例:123,456)","type":"string"},
{"field":"outWarehouseCode","label":"调出仓库编号","type":"string"},
{"label":"调拨单号,多个中间逗号隔开","field":"allocateNos","type":"string"},
{"label":"入库状态 (支持批量查询,多个值逗号隔开 1=入库等待,2=部分入库,3=入库完成)","field":"instatus","type":"string","value":"3"},
{"label":"出库状态(支持批量,多个值逗号隔开 1=出库等待,2=部分出库,3=出库完成)","field":"outstatus","type":"string","value":"3"}
]
}
```
#### 请求参数详解
1. **分页参数**
- `pageIndex`: 页码,从0开始。
- `pageSize`: 每页条数,默认值为50。
2. **过滤条件**
- `status`: 调拨单状态,多个状态使用逗号分隔。
- `startCreateTime`: 创建时间的起始时间,通过函数动态计算过去30天的日期。
- `endCreateTime`: 创建时间结束时间,当前时间。
- `inWarehouseCode`: 调入仓库编号。
- `outSkuCode`: 外部货品主键,可批量查询。
- `outWarehouseCode`: 调出仓库编号。
- `allocateNos`: 调拨单号,可批量查询。
- `instatus`: 入库状态,可批量查询。
- `outstatus`: 出库状态,可批量查询。
#### 数据请求与清洗
在轻易云平台上配置上述元数据后,我们可以通过以下步骤进行数据请求与清洗:
1. **配置API调用**
在轻易云平台上创建一个新的API调用任务,并填写上述元数据配置。确保所有必填字段都已正确配置。
2. **执行API请求**
启动任务后,平台会自动向吉客云发送POST请求,并根据分页参数逐页获取数据。
3. **数据清洗**
获取的数据可能包含冗余或不符合业务需求的信息。我们可以通过轻易云的数据清洗功能,对返回的数据进行过滤、转换和标准化处理。例如:
```json
{
"cleaningRules": [
{
"field": "status",
"operation": "filter",
"condition": ["20"]
},
{
"field": "createTime",
"operation": "format",
"pattern": "%Y-%m-%d %H:%M:%S"
}
]
}
```
4. **存储与转换**
清洗后的数据可以直接写入目标数据库或系统。在写入之前,可以根据业务需求对数据进行进一步转换,例如字段映射、单位转换等。
#### 实践案例
假设我们需要获取过去30天内所有状态为“20”的调拨单,并且这些调拨单必须已经完成出库和入库操作。我们可以按如下方式配置请求参数:
```json
{
"pageIndex": "0",
"pageSize": "50",
"status": "20",
"startCreateTime": "_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 30 DAY),'%Y-%m-%d 00:00:00')",
"endCreateTime": "{{CURRENT_TIME|datetime}}",
"instatus": "3",
"outstatus": "3"
}
```
通过这种方式,我们能够高效地从吉客云获取所需的调拨单信息,并在轻易云平台上进行进一步的数据处理和集成。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成
在轻易云数据集成平台的生命周期中,第二步涉及将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。
#### 元数据配置解析
元数据配置是ETL转换过程中的核心,它定义了如何将源数据映射到目标系统所需的格式。以下是一个典型的元数据配置示例:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 10,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{allocateNo}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"ZJDB01_SYS"},
{"field":"FStockOrgId","label":"调入库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={intWarehouseCode}"},
{"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"下拉列表","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function FROM_UNIXTIME( ( {auditDate} / 1000 ) ,'%Y-%m-%d %T' )"},
{"field":"FStockOutOrgId","label":"调出库存组织","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={outWarehouseCode}"},
{"field":"FOwnerTypeOutIdHead","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""},
{"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}
],
"otherRequest":[
{"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "", "value": ""},
{"field": "", "label": "", "type": "", "describe": "", "value": ""}
]
}
```
#### 数据字段解析与转换
1. **单据编号(FBillNo)**:
- 类型:字符串
- 描述:单据编号
- 值:`{allocateNo}`,表示从源系统中获取的调拨单号。
2. **单据类型(FBillTypeID)**:
- 类型:字符串
- 描述:单据类型
- 转换器:`ConvertObjectParser`,参数为`FNumber`
- 值:固定值`ZJDB01_SYS`,表示标准调拨单。
3. **调入库存组织(FStockOrgId)**:
- 类型:字符串
- 描述:组织
- 转换器:`ConvertObjectParser`,参数为`FNumber`
- 值:通过SQL查询获取,如 `_findCollection find textField_l2ib4q9s from ... where textField_l2ib4q9p={intWarehouseCode}`。
4. **日期(FDate)**:
- 类型:字符串
- 描述:日期
- 值:使用函数转换,如 `_function FROM_UNIXTIME( ( {auditDate} / 1000 ) ,'%Y-%m-%d %T' )`。
#### 明细信息处理
对于明细信息(FBillEntry),需要处理多个子字段:
1. **物料编码(FMaterialId)**:
- 类型:字符串
- 描述:基础资料
- 转换器:`ConvertObjectParser`,参数为`FNumber`
- 值:从源系统获取,如 `{{stockAllocateDetailViews.goodsNo}}`。
2. **实发数量(FQty)**:
- 类型:字符串
- 描述:数量
- 值:从源系统获取,如 `{{stockAllocateDetailViews.skuCount}}`。
3. **调出仓库(FSrcStockId)**:
- 类型:字符串
- 描述:基础资料
- 转换器:`ConvertObjectParser`,参数为`FNumber`
- 值:如 `{outWarehouseCode}`。
4. **调入仓库(FDestStockId)**:
- 类型:字符串
- 描述:维度关联字段
- 转换器:`ConvertObjectParser`,参数为`FNumber`
- 值:如 `{intWarehouseCode}`。
#### API调用与其他请求参数
1. **业务对象表单ID(FormId)**:
- 必须填写金蝶的表单ID,如 `STK_TransferDirect`
2. **提交并审核(IsAutoSubmitAndAudit)**:
- 布尔值,默认为 `true`
3. **验证基础资料有效性(IsVerifyBaseDataField)**:
- 布尔值,默认为 `true`
通过上述配置,我们可以实现对源数据的有效转换,并通过金蝶云星空API接口将数据写入目标平台。这一过程确保了不同系统间的数据无缝对接,并提高了业务处理的效率和准确性。
![打通企业微信数据接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)