ETL转换:强化系统间数据集成,从吉客云到金蝶云星空
### 技术案例:吉客云数据集成到金蝶云星空的实现
在本次技术案例中,我们将详细探讨如何将吉客云的数据集成到金蝶云星空系统,方案名称为JY-BDS其他出库单。本案例重点介绍通过API接口`erp.storage.goodsdocout`从吉客云抓取数据,并使用`batchSave`接口批量写入金蝶云星空的具体实现过程。
首先,为了确保整个数据处理链路的高效运转,我们需要解决几个关键性技术问题:
1. **定时可靠的数据抓取**:我们采用定时器任务,每隔固定时间段(如每小时)调用吉客云接口 `erp.storage.goodsdocout`,确保可以及时获取最新的数据。
2. **批量数据快速写入**:利用轻易平台支持的高吞吐量能力,通过优化传输并行度和分区策略,将大批量的数据快速稳定地写入至金蝶云星空。借助其 `batchSave` API 接口,高效完成批量保存操作。
3. **分页与限流处理**:面对大量数据,必须处理好分页与限流问题,以防止API超时或数据库负载过重。针对这一点,我们设计了合理的分页机制,并引入动态速率限制来调节请求频率。
4. **自定义数据转换逻辑**:
- 数据格式差异是跨平台集成中的常见挑战之一。在本方案中,通过预先定义好的映射规则,将吉客云输出字段适配为符合金蝶标准的数据结构。
- 利用轻易提供的可视化工具配置转换逻辑,使得开发人员能够直观地管理和调整转换规则,提高开发效率并减少人为错误。
5. **监控与异常处理机制**:
- 提供实时监控功能,跟踪各个环节的数据流动和状态,一旦发现异常情况立即告警。
- 实现完整的日志记录体系,不仅记录正常操作,还详尽记载任何错误发生的位置及原因,从而增强系统可维护性。
- 针对可能出现的临时网络异常、服务不可用等问题,引入重试机制保证任务执行成功率,并且在多次失败后进行人工干预提醒。
结合以上几个方面,本次集成实践不仅有效提高了工作效率,而且保障整个流程安全、稳定运行。接下来,我们将深入解析每一个技术细节,以及如何一步步实施这些关键步骤。
![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口获取并加工数据的技术实现
在轻易云数据集成平台中,生命周期的第一步是调用源系统接口以获取数据。本文将详细探讨如何通过调用吉客云接口`erp.storage.goodsdocout`来获取并加工数据,重点介绍元数据配置和具体实现步骤。
#### 元数据配置解析
首先,我们需要理解元数据配置`metadata`,它定义了如何调用API以及请求参数的细节:
```json
{
"api": "erp.storage.goodsdocout",
"method": "POST",
"number": "goodsdocNo",
"id": "recId",
"pagination": {"pageSize": 50},
"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":
"201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货
206生产领料 207组装拆卸出库 208翻新出库 209报废出库
210残次品出库 211倒冲出库 212 包材出库
215维修还厂 231成本调整出库","value":"204"},
{"field":"sourceBillNo","label":"来源单号","type":"string"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"}
]
}
```
#### 调用API获取数据
根据上述元数据配置,我们需要构建一个POST请求来调用吉客云的`erp.storage.goodsdocout`接口。以下是具体步骤:
1. **构建请求体**:
请求体包含分页信息、时间范围、类型等参数。注意,`startDate`和`endDate`使用动态变量来表示上次同步时间和当前时间。
```json
{
"pageIndex": "{{PAGE_INDEX}}",
"pageSize": "{{PAGE_SIZE}}",
...
//其他参数
}
```
2. **处理分页**:
平台支持分页机制,通过设置每页大小为50条记录,并逐页请求直到没有更多数据为止。
3. **发送请求**:
使用HTTP POST方法发送请求,并接收响应数据。
4. **检查ID重复**:
根据配置中的`idCheck: true`,需要对返回的数据进行ID重复性检查,以确保每条记录唯一。
#### 数据清洗与转换
在获取到原始数据后,需要进行清洗和转换,以便后续处理:
1. **字段映射**:
将API返回的数据字段映射到目标系统所需的字段。例如,将`goodsDocNo`映射为目标系统中的订单编号。
2. **格式转换**:
对日期、数值等字段进行格式转换,确保符合目标系统要求。例如,将日期格式从YYYY-MM-DD转换为YYYYMMDD。
3. **过滤无效数据**:
根据业务需求过滤掉无效或不必要的数据。例如,只保留状态为“已完成”的订单记录。
#### 实现代码示例
以下是一个简化的Python代码示例,用于演示如何调用API并处理返回的数据:
```python
import requests
import datetime
# 配置参数
url = 'https://api.jikexun.com/erp.storage.goodsdocout'
headers = {'Content-Type': 'application/json'}
params = {
'pageIndex': '1',
'pageSize': '50',
'startDate': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'),
'endDate': datetime.datetime.now().strftime('%Y-%m-%d'),
'inouttype': '204'
}
# 发起POST请求
response = requests.post(url, json=params, headers=headers)
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data['records']:
cleaned_record = {
'order_no': record['goodsDocNo'],
'date': record['createTime'].replace('-', ''),
# 更多字段映射...
}
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(cleaned_data)
```
通过上述步骤,我们成功地调用了吉客云接口获取原始数据,并进行了必要的数据清洗和转换,为后续的数据写入和处理做好准备。这一过程展示了轻易云平台在异构系统集成中的强大能力。
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image)
### 轻易云数据集成平台生命周期的第二步:ETL转换与写入金蝶云星空API接口
在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一环。本文将详细介绍如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。
#### 接口配置与元数据解析
在轻易云数据集成平台中,我们需要配置元数据以便正确调用金蝶云星空的API接口。以下是元数据配置的详细解析:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "{goodsdocNo}"
},
{
...
}
],
...
}
```
#### 数据字段映射与转换
1. **单据编号(FBillNo)**:
- 类型:字符串
- 描述:单据编号
- 映射:`{goodsdocNo}`
2. **单据类型(FBillTypeID)**:
- 类型:字符串
- 描述:单据类型
- 转换器:`ConvertObjectParser`
- 参数:`FNumber`
- 固定值:`QTCKD01_SYS`
3. **库存组织(FStockOrgId)**:
- 类型:字符串
- 描述:组织
- 转换器:`ConvertObjectParser`
- 参数:`FNumber`
- 映射规则:
```sql
_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}
```
4. **日期(FDate)**:
- 类型:字符串
- 描述:日期
- 转换函数:
```sql
_function FROM_UNIXTIME( ( {inOutDate} / 1000 ) ,'%Y-%m-%d %T' )
```
5. **货主(FOwnerIdHead)**:
- 类型:字符串
- 描述:多类别基础资料
- 转换器:`ConvertObjectParser`
- 参数:`FNumber`
- 映射:`{companyCode}`
6. **明细信息(FEntity)**:
包含多个子字段,如物料编码、零售条形码、实发数量、发货仓库和备注等。
#### API请求构建
根据上述元数据配置,我们可以构建一个完整的API请求体:
```json
{
"FormId": "STK_MisDelivery",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"Operation": "Save",
...
}
```
其中,明细信息部分需要特别注意其数组结构和嵌套关系。例如:
```json
"FEntity":[
{
"FMaterialId":"material_001",
...
},
{
...
}
]
```
#### 数据写入与验证
在完成ETL转换后,将生成的数据通过POST方法发送到金蝶云星空的`batchSave` API接口。为了确保数据写入的准确性和完整性,需要进行以下步骤:
1. **验证基础资料有效性**:
设置 `IsVerifyBaseDataField` 为 `true`,确保所有基础资料字段有效。
2. **自动提交并审核**:
设置 `IsAutoSubmitAndAudit` 为 `true`,实现自动提交和审核功能。
3. **检查返回结果**:
接收API返回结果,检查是否有错误信息或异常情况,并进行相应处理。
通过上述步骤,我们可以高效地将源平台的数据转换并写入到金蝶云星空系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。
![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)