使用轻易云实现盘亏出库单数据ETL转换及写入金蝶云星空
### 吉客云数据集成到金蝶云星空
在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现吉客云盘亏出库单与金蝶云星空盘亏单的无缝对接。在实际操作中,我们命名此次方案为“(吉客云->金蝶)盘亏出库单(吉客云)->盘亏单(金蝶云)”,旨在确保两大系统间的数据同步高效且可靠。
#### 1. 数据抓取与接口调用
我们的首要任务是在吉客云系统内实现精准的数据抓取。为此,我们使用了`erp.storage.goodsdocout.v2` API接口进行定时抓取。这一过程需要特别关注接口的分页和限流问题,确保每次调用都能顺利完成,同时不影响系统性能。我们设置了合理的分页机制,并采用并发控制措施,以尽量减少API请求失败率。
#### 2. 批量写入到金蝶云星空
从吉客云成功获取到数据后,下一步是将这些数据快速、准确地写入金蝶云星空。我们利用其提供的`batchSave` API,在批量处理上解决了大规模数据传输可能导致的延迟和错误。同时,通过设定重试机制,可以应对偶发性的网络或服务器故障,大幅提升对接过程中的稳定性。
#### 3. 数据格式差异处理
考虑到两个系统之间可能存在的数据格式差异,我们专门设计了一套映射规则,这些规则能够自动转换不同字段类型及值,使得输入输出格式相匹配,从而在最大程度上降低因此产生的潜在风险。此外,该映射规则具有高度可扩展性,可根据业务需求进行调整或添加新的对应关系。
#### 4. 实时监控与日志记录
为了保证整个集成流程可以透明、高效地运作,通过轻易平台自身强大的实时监控功能,对每一次交互进行状态跟踪,并记录详细日志信息。这不仅方便后续审计,也有助于快速定位和排除任何异常情况,提高整体运行效率及安全性。
![如何对接用友BIP接口](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image)
### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`,并对返回的数据进行初步加工处理。
#### 接口调用配置
首先,我们需要配置元数据,以便正确调用吉客云的API接口。以下是元数据配置的详细内容:
```json
{
"api": "erp.storage.goodsdocout.v2",
"effect": "QUERY",
"method": "POST",
"number": "goodsdocNo",
"id": "recId",
"idCheck": true,
"request": [
{"field":"pageIndex","label":"pageIndex","type":"string","describe":"111","value":"{PAGINATION_START_PAGE}"},
{"field":"pageSize","label":"pageSize","type":"string","describe":"111","value":"{PAGINATION_PAGE_SIZE}"},
{"field":"inouttype","label":"出入库类型","type":"string","describe":"出入库类型(201-销售出库 202调拨出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲领料 212 包材出库 215维修还厂 299可用库存修正 231成本调整出库)","value":"203"},
{"field":"selelctFields","label":"selelctFields","type":"string","value":"recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerCode,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,applyCompanyId,applyCompanyName,applyCompanyCode,applyDepartId,applyDepartName,departCode,applyUserId,applyUserName,outBillNo,gmtModified,companyCode,vendCustomerId,..."}
{"field":"gmtModifiedStart","label":"gmtModifiedStart","type":"string","value":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"gmtModifiedEnd","label":"gmtModifiedEnd","type":"string","value":"{{CURRENT_TIME|datetime}}"}
],
"otherRequest": [
{"field":"method","label":"方法名称","type":"string","value":"erp.storage.goodsdocout.v2"},
{"field":"appkey","label":"应用编号","type":"string"},
{"field":"version","label":"版本号","type":"string","value":"v1.0"},
{"field":"contenttype","label":"返回格式(暂时只支持json)","type":"string","value":"json"},
{"field":"timestamp","label":"时间","type":"string"},
{"field":"bizcontent","label":"业务参数","type":""},
{"field":""sign" ,"label" :"签名" ," type" :" string"}
],
"autoFillResponse":true,
"condition":[
[{" field ":" memo "," logic ":" neqv2 "," value ":" 产品编码调整 "}],
[{" field ":" memo "," logic ":" neqv2 "," value ":" 批号调整 "}]]
}
```
#### 请求参数详解
- **pageIndex** 和 **pageSize**:用于分页请求,确保可以分批次获取大量数据。
- **inouttype**:指定为`203`,表示盘亏出库类型。
- **selelctFields**:定义了需要从响应中提取的字段列表,包括基本信息和详细信息。
- **gmtModifiedStart** 和 **gmtModifiedEnd**:用于限定查询时间范围,确保只获取在特定时间段内修改的数据。
#### API请求示例
通过上述配置,我们可以构建一个POST请求来调用吉客云的API:
```http
POST /api/erp.storage.goodsdocout.v2 HTTP/1.1
Host: api.jikecloud.com
Content-Type: application/json
{
"method": "erp.storage.goodsdocout.v2",
"appkey": "<your_app_key>",
"version": "v1.0",
"contenttype": "json",
"timestamp": "<current_timestamp>",
"bizcontent": {
"pageIndex": "{PAGINATION_START_PAGE}",
"pageSize": "{PAGINATION_PAGE_SIZE}",
"inouttype": "203",
...
// other fields as defined in the metadata
...
"gmtModifiedStart": "{{LAST_SYNC_TIME|datetime}}",
"gmtModifiedEnd": "{{CURRENT_TIME|datetime}}"
},
// sign and other necessary fields
}
```
#### 数据处理与清洗
在成功获取到数据后,需要对数据进行初步清洗和加工。以下是一些关键步骤:
1. **字段映射与转换**:
- 将吉客云返回的数据字段映射到目标系统所需的字段。
- 对于日期、金额等字段进行格式转换。
2. **过滤无效数据**:
- 根据条件过滤掉不需要的数据,例如memo字段值为“产品编码调整”或“批号调整”的记录。
3. **数据校验与补全**:
- 检查关键字段是否为空或无效,并根据业务需求进行补全或修正。
#### 示例代码
以下是一个简单的数据处理示例代码(Python):
```python
import requests
import json
# 构建请求参数
payload = {
'method': 'erp.storage.goodsdocout.v2',
'appkey': '<your_app_key>',
'version': 'v1.0',
'contenttype': 'json',
'timestamp': '<current_timestamp>',
'bizcontent': {
'pageIndex': '{PAGINATION_START_PAGE}',
'pageSize': '{PAGINATION_PAGE_SIZE}',
'inouttype': '203',
# other fields...
'gmtModifiedStart': '{{LAST_SYNC_TIME|datetime}}',
'gmtModifiedEnd': '{{CURRENT_TIME|datetime}}'
}
}
# 发起请求
response = requests.post('https://api.jikecloud.com/api/erp.storage.goodsdocout.v2', json=payload)
data = response.json()
# 数据处理与清洗
processed_data = []
for record in data['result']:
if record['memo'] not in ['产品编码调整', '批号调整']:
processed_record = {
# 字段映射与转换
'单据编号': record['goodsdocNo'],
'客户名称': record['vendCustomerName'],
# 更多字段...
}
processed_data.append(processed_record)
# 输出处理后的数据
print(json.dumps(processed_data, ensure_ascii=False))
```
通过上述步骤,我们可以高效地从吉客云获取盘亏出库单的数据,并对其进行初步清洗和加工,为后续的数据转换与写入奠定基础。
![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现盘亏出库单到金蝶云星空的ETL转换
在数据集成过程中,将源平台的数据转换为目标平台可接受的格式是关键步骤。本文将深入探讨如何通过轻易云数据集成平台,将吉客云的盘亏出库单数据转换并写入金蝶云星空API接口。
#### 数据请求与清洗
首先,我们需要从吉客云获取盘亏出库单的数据。假设我们已经完成了数据请求与清洗阶段,接下来我们将重点放在如何将这些数据进行ETL转换,并最终写入金蝶云星空。
#### 数据转换与写入
为了实现这一目标,我们需要配置元数据,确保数据能够正确地映射到金蝶云星空API接口所需的格式。以下是详细的元数据配置及其解析:
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"value": "PK01_SYS",
"parser": {
"name": "ConvertObjectParser",
"params": "FNUMBER"
}
},
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"value": "{goodsdocNo}"
},
{
"field": "FDate",
"label": "日期",
"type": "string",
"value": "{inOutDate}"
},
{
...
}
],
...
}
```
#### 元数据解析
1. **API接口和方法**:
- `api`: `"batchSave"` 表示调用金蝶云星空的批量保存接口。
- `method`: `"POST"` 指定HTTP请求方法为POST。
2. **操作配置**:
- `idCheck`: `true` 表示需要进行ID校验。
- `operation`: 配置了批量保存的相关操作,其中`rowsKey`指定数组键名为`array`,`rows`表示每次操作一行,`method`使用的是批量数组保存方法。
3. **请求字段映射**:
- `FBillTypeID`: 单据类型固定为"PK01_SYS",使用`ConvertObjectParser`解析器将其转换为目标系统所需格式。
- `FBillNo`: 单据编号映射自源系统字段`goodsdocNo`。
- `FDate`: 日期字段映射自源系统字段`inOutDate`。
4. **子项明细**:
- `FBillEntry`: 定义了一个数组结构,用于包含多个物料明细项。
- `FMaterialId`: 物料编码映射自源系统字段`goodsDocDetailList.goodsNo`,并使用解析器进行转换。
- `FStockId`: 仓库编码映射自源系统字段`warehouseCode`,并使用解析器进行转换。
- `FCountQty`, `FLossQty`, `FBaseCountQty`, `FBaseLossQty`: 均映射自源系统字段`goodsDocDetailList.quantity`,表示盘点数量和损失数量等。
5. **其他请求参数**:
- `FormId`: 固定值"STK_StockCountLoss",表示业务对象表单ID。
- `IsVerifyBaseDataField`: 设置为false,不验证基础资料。
- `Operation`: 操作类型为"Save"。
- `IsAutoSubmitAndAudit`: 设置为true,表示自动提交并审核。
#### 实际应用
在实际应用中,通过上述元数据配置,可以确保从吉客云获取的数据经过ETL转换后,能够准确无误地写入金蝶云星空。这一过程不仅提高了数据处理的效率,也保证了数据的一致性和准确性。
通过轻易云数据集成平台,我们能够实现不同系统间的数据无缝对接,使得业务流程更加顺畅和高效。在未来的数据集成项目中,这种方法可以广泛应用于各种异构系统的数据对接需求。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)