利用轻易云进行ETL转换:写入金蝶云星空API接口
### 吉客云数据集成到金蝶云星空案例分享:其他出库-包材出库
在本技术案例中,我们探讨如何通过轻易云平台实现吉客云与金蝶云星空的无缝对接,以实现“其他出库-包材出库”业务场景下的数据集成。整个过程涉及从吉客云获取数据、进行必要的数据转换,并最终将处理后的大量数据快速可靠地写入到金蝶云星空系统中。
#### 数据获取与接口调用
首先,通过调用吉客云API `erp.storage.goodsdocout.v2` 来抓取需要集成的数据信息。在实际操作中,为确保数据不漏单和接口稳定,必须考虑分页及限流问题。这些问题可以通过分批次请求并设置适当的延迟来解决,从而保障高吞吐量的数据处理能力。
```python
def fetch_data_from_jike_cloud(api_endpoint, api_params):
data = []
while True:
response = requests.post(api_endpoint, data=api_params)
if not response.ok:
handle_api_failure(response) # 实现错误重试机制
break
new_data = response.json().get('data', [])
if not new_data:
break
data.extend(new_data)
api_params['page'] += 1
return data
```
#### 数据转换与质量监控
为了保证被写入到金蝶云星空的数据符合目标系统的格式需求,需要在轻易云平台上配置自定义的数据转换逻辑。这一过程中,使用可视化的数据流设计工具对数据字段进行映射和格式调整。同时,通过内置的集中监控和告警系统,实时跟踪各项任务状态,并检测异常情况以立即干预修正。
例如:
```python
def transform_jike_to_kingdee(jike_data):
transformed_data = []
for record in jike_data:
transformed_record = {
"GoodsDocOutId": record["id"],
"MaterialCode": record["material_code"],
"Quantity": record["quantity"],
...
}
transformed_data.append(transformed_record)
check_for_quality_issues(transformed_data) # 确保数据质量的一致性
return transformed_data
def check_for_quality_issues(data):
issues_found = False
for item in data:
if not item.get("Quantity") > 0 or not validate_material_code(item.get("MaterialCode")):
issues_found = True
log_issue(item) # 实时日志记录
if issues_found:
raise DataQualityError("Data quality checks failed")
```
#### 数据写入与异常处理
最后,将经过转化后的大量数据批量写入至金蝶云
![金蝶云星空API接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口获取并加工数据的技术案例
在轻易云数据集成平台中,调用源系统吉客云接口`erp.storage.goodsdocout.v2`是数据生命周期的第一步。本文将详细探讨如何通过该接口获取并加工数据,以实现其他出库-包材出库的集成方案。
#### 接口调用配置
首先,我们需要配置调用吉客云接口的元数据。以下是关键配置项:
- **API**: `erp.storage.goodsdocout.v2`
- **请求方法**: `POST`
- **分页参数**: `pageIndex` 和 `pageSize`
- **过滤条件**:
- `goodsDocNo`: 出库单号
- `startDate`: 创建时间的起始时间
- `endDate`: 创建时间的结束时间
- `inouttype`: 类型(值为212,表示包材出库)
- 其他可选过滤条件如:`sourceBillNo`, `warehouseCode`, `vendCode`, 等等。
#### 请求参数配置
在请求参数中,我们使用了一些动态变量来确保数据的实时性和准确性:
```json
{
"pageIndex": "1",
"pageSize": "50",
"startDate": "{{LAST_SYNC_TIME|datetime}}",
"endDate": "{{CURRENT_TIME|datetime}}",
"inouttype": "212"
}
```
- **startDate** 和 **endDate** 分别使用了上次同步时间和当前时间,确保我们只获取最新的数据。
- **inouttype** 固定为212,表示包材出库。
#### 数据过滤与清洗
为了保证数据质量,我们在元数据配置中加入了过滤条件和自动填充响应功能:
```json
"condition_bk": [
[
{"field": "goodsDocDetailList.quantity", "logic": "gt", "value": "0"}
]
]
```
这段配置确保了只有数量大于0的出库记录才会被处理。此外,我们还设置了自动填充响应字段,以简化后续的数据处理步骤:
```json
"autoFillResponse": true,
"beatFlat": ["goodsDocDetailList"]
```
#### 数据转换与写入
在获取并清洗完数据后,我们需要将其转换为目标系统所需的格式,并写入目标数据库或系统。在这个过程中,可以利用轻易云平台提供的数据转换工具,如映射、聚合、拆分等功能。
例如,将吉客云返回的数据字段映射到目标系统所需字段:
```json
{
"goodsdocNo": "{{goodsdocNo}}",
"inOutDate": "{{inOutDate}}",
"gmtCreate": "{{gmtCreate}}",
...
}
```
#### 异常处理与补偿机制
为了应对可能出现的数据遗漏或异常情况,我们设置了定时任务和补偿机制:
```json
"omissionRemedy": {
"crontab": "1 2 * * *",
"takeOverRequest": [
{
"field": "startDate",
"value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )",
"type": "string"
}
]
}
```
这段配置表示每天凌晨2点执行一次补偿任务,回溯三天内的数据,确保没有遗漏。
#### 实时监控与日志记录
最后,通过轻易云平台提供的实时监控和日志记录功能,可以随时查看数据流动状态和处理结果,及时发现并解决问题,提高整体业务透明度和效率。
通过上述步骤,我们成功实现了调用吉客云接口获取并加工包材出库数据的集成方案。这不仅提高了数据处理效率,还保证了数据的一致性和准确性。
![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。
#### 元数据配置解析
首先,我们需要理解元数据配置,以便正确地进行ETL操作。以下是元数据配置的主要部分:
```json
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "merge",
"field": "goodsDocDetailList_ownerName,inOutMonth",
"bodyName": "items",
"bodySum": ["goodsDocDetailList_quantity"],
"header": ["inOutMonth", "goodsDocDetailList_ownerName"],
"body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"]
},
...
}
```
该配置定义了如何将源平台的数据映射到金蝶云星空API所需的格式。具体包括以下几个方面:
1. **API信息**:
- `api`: 指定调用的API名称,如`batchSave`。
- `method`: HTTP请求方法,这里使用`POST`。
- `idCheck`: 是否检查ID字段。
2. **操作定义**:
- `rowsKey`: 数据行的关键字段,这里是`array`。
- `rows`: 每次处理的数据行数。
- `method`: 数据处理方法,这里是`merge`。
- `field`: 用于合并的字段。
- `bodyName`: 请求体中的数组名称,这里是`items`。
- `bodySum`: 用于汇总计算的字段。
3. **请求字段映射**:
- 定义了从源数据到目标API字段的映射关系。例如,源数据中的`goodsdocNo`映射到目标API中的`FJKYNo`。
#### 数据转换与写入
在明确了元数据配置后,我们可以开始实际的数据转换与写入过程。以下是具体步骤:
1. **提取源数据**:
从源系统中提取需要处理的数据,例如某些出库单据的信息。这些信息通常包括单据编号、日期、物料编码、数量等。
2. **数据清洗与预处理**:
对提取的数据进行必要的清洗和预处理,包括去除无效记录、格式化日期等。例如,将日期格式化为金蝶云星空所需的格式。
3. **构建请求体**:
根据元数据配置,将清洗后的数据构建为符合金蝶云星空API要求的请求体。以下是一个示例请求体:
```json
{
"FormId": "STK_MisDelivery",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"Operation": "Save",
...
"Model": {
...
"FEntity": [
{
...
"FMATERIALID": {
...
},
...
}
]
}
}
```
4. **发送请求**:
使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。确保请求头和认证信息正确设置,以便成功调用API。
5. **处理响应**:
接收并处理金蝶云星空返回的响应,检查是否有错误发生。如果有错误,需要根据错误信息进行相应调整和重试。
#### 实际案例
假设我们有一个包材出库单据,需要将其写入金蝶云星空系统。以下是具体实现步骤:
1. 提取出库单据信息,包括单据编号、日期、物料编码、数量等。
2. 清洗并格式化这些信息,使其符合目标系统要求。
3. 根据元数据配置构建请求体,例如:
```json
{
...
{
...
{
...
{
...
{
...
}
}
}
}
}
}
```
4. 使用HTTP POST方法将请求体发送至金蝶云星空API接口,并处理响应结果。
通过上述步骤,可以高效地完成从源系统到目标系统的数据转换与写入,实现不同系统间的数据无缝对接。这不仅提升了业务效率,还保证了数据的一致性和准确性。
![打通企业微信数据接口](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)