吉客云数据集成到金蝶云星空实例:调拨退回负数对接其他出库
在企业信息化系统日益复杂的背景下,如何高效、准确地进行不同平台之间的数据对接成为了一项至关重要的问题。本文将重点分享一个实际运行的系统集成案例,即通过轻易云数据集成平台,实现吉客云中的"调拨退回负数"与金蝶云星空中的“其他出库”过程无缝连接。
本次方案实施中,我们利用了轻易云强大的可视化数据流设计工具和集中监控告警系统,以确保整个流程从源头到目标都能精确控制并及时发现和处理可能出现的异常。具体来说,通过调用吉客云API接口erp.storage.goodsdocin.v2
来获取所需的数据,再通过自定义转换逻辑,适配金蝶云星空的数据结构,并最终写入到金蝶API batchSave
中。
为了保障大量数据能够快速且不漏单地从吉客云传输至金蝶,我们特别重视以下几个关键点:
-
高吞吐量支持:充分利用平台提供的大量数据快速写入能力,将批量获取的数据迅速推送至目标端。
-
分页与限流处理:针对吉客云接口存在的分页及限流问题,我们采用了定时抓取机制和可靠性校验来优化请求频率,提高接口响应效率。
-
实时监控与日志记录:基于集中监控和告警功能,全程跟踪每一步操作状态,一旦出现任何错误,立即启动重试机制以保证任务顺利完成。
-
格式差异处理与映射定制化:由于两套系统在数据格式上的不一致性,通过自定义字段映射规则实现精准匹配,进一步增强整体数据链路的稳定性和一致性。
初步验证结果显示,该种方式下不仅有效提升了业务透明度,还显著减少了人工干预需求,大大提高工作效率。下面我们将详细解析此方案各环节具体技术要点及实现方法。
调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据
在轻易云数据集成平台中,调用吉客云接口erp.storage.goodsdocin.v2
是数据生命周期的第一步。本文将详细探讨如何配置和调用该接口,以实现数据的获取和初步加工。
接口配置与请求参数
首先,我们需要配置元数据来定义接口的请求参数和响应处理逻辑。以下是具体的元数据配置:
{
"api": "erp.storage.goodsdocin.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","value":"114"},
{"field":"warehouseId","label":"仓库ID","type":"string"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendId","label":"供应商ID(往来单位)","type":"string"},
{"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"},
{"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"},
{"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"},
{"field":"selelctFields","label":"返回参数",
"type":"string",
"value":
"goodsdocNo,inOutDate,userName,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList"}
],
"autoFillResponse": true,
"condition":[
[{"field":
"goodsDocDetailList.quantity",
"logic":
"lt",
"value":
"0"}]
],
"beatFlat":["goodsDocDetailList"]
}
请求参数解析
-
分页参数:
pageIndex
:当前页码。pageSize
:每页记录数,默认设置为50。
-
时间范围:
startDate
:数据同步的起始时间,使用变量{{LAST_SYNC_TIME|datetime}}
动态填充。endDate
:数据同步的结束时间,使用变量{{CURRENT_TIME|datetime}}
动态填充。
-
过滤条件:
inouttype
:入库类型,固定值为114。warehouseId
、warehouseCode
、vendId
、vendCode
等字段用于进一步过滤数据。
-
返回字段:
- 配置了多个字段,如
goodsdocNo
,inOutDate
,userName
, 等等,用于指定需要返回的数据内容。
- 配置了多个字段,如
数据处理逻辑
在获取到原始数据后,需要对其进行初步加工。根据元数据配置中的条件部分,我们仅选择那些数量为负数(即退回)的记录:
"condition":[
[{"field":
"goodsDocDetailList.quantity",
"logic":
"lt",
"value":
"0"}]
]
这一步骤确保我们只处理符合特定业务需求的数据,从而提高了后续处理的效率和准确性。
数据扁平化处理
为了便于后续的数据转换与写入操作,我们需要对嵌套结构的数据进行扁平化处理。通过配置:
"beatFlat":["goodsDocDetailList"]
将嵌套在goodsDocDetailList
中的详细信息展开为平级结构,这样可以更方便地进行后续的数据转换和写入操作。
实际调用示例
以下是一个实际调用该接口并处理响应数据的示例代码片段:
import requests
import json
url = 'https://api.jikexyun.com/erp/storage/goodsdocin/v2'
headers = {'Content-Type': 'application/json'}
payload = {
'pageIndex': '1',
'pageSize': '50',
'startDate': '2023-01-01T00:00:00',
'endDate': '2023-12-31T23:59:59',
'inouttype': '114'
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 扁平化处理
flat_data = []
for item in data['data']:
for detail in item['goodsDocDetailList']:
if detail['quantity'] < 0:
flat_item = {**item, **detail}
flat_data.append(flat_item)
# 后续处理逻辑...
通过上述步骤,我们成功地从吉客云获取了所需的数据,并进行了初步加工,为下一步的数据转换与写入打下了坚实基础。这种方法不仅提高了数据处理效率,还确保了业务流程的准确性和一致性。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步中,重点是将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。
API接口配置与调用
在本案例中,我们使用了金蝶云星空的batchSave
API接口,通过POST方法提交数据。以下是元数据配置的具体细节:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"number": "1",
"id": "1",
"name": "1",
"idCheck": true,
"operation": {
"method": "merge",
"field": "goodsDocDetailList_ownerName,goodsdocNo",
"bodyName": "Fentity",
"header": ["goodsdocNo", "inOutDate", "goodsDocDetailList_ownerName"],
"body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"]
},
...
}
请求参数配置
请求参数部分包括了对单据类型、库存组织、库存方向、日期、部门等字段的配置,并通过解析器(Parser)将源数据转换为目标系统所需的数据格式。
- 单据类型:固定值
QTCKD94_SYS
- 库存组织:通过解析器
ConvertObjectParser
将goodsDocDetailList_ownerName
字段转换为对应的编号。 - 库存方向:固定值
GENERAL
- 日期:直接从源数据中的
inOutDate
字段获取。 - 部门:固定值
BM000029
- 货主类型:固定值
BD_OwnerOrg
- 货主:同样通过解析器将
goodsDocDetailList_ownerName
字段转换为编号。
以下是部分请求参数配置示例:
{
"request": [
{"field":"FJKYNo","label":"吉客云单号","type":"string","value":"{goodsdocNo}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"QTCKD94_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FStockOrgId","label":"库存组织","type":"string","value":"{goodsDocDetailList_ownerName}","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mapping":{"target":"6441f0214af70a2f240adb22","direction":"positive"}},
{"field":"FStockDirect","label":"库存方向","type":"string","value":"GENERAL"},
{"field":"FDate","label":"日期","type":"string","value":"{inOutDate}"},
{"field":"FDEPTID","label":"部门","type":"string","value":"BM000029","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
...
]
}
明细信息处理
明细信息部分通过嵌套数组形式进行处理,每个子项包括物料编码、库存状态、收货仓库和实收数量等字段。特别需要注意的是实收数量,这里需要对原始数量取负值,以符合退回负数的业务逻辑。
{
"children":[
{"field":"FMATERIALID","label":"物料编码","type":"string","value":"{{Fentity.goodsDocDetailList_goodsNo}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FStockStatusId","label":"库存状态","type":"string","value":"KCZT01_SYS"},
{"field":"FSTOCKID","label":"收货仓库","type":"","value":"","parser":{"name":"","params":""}},
{"field":"","label":"","type":"","value":"","parser":{"name":"","params":""}},
...
]
}
执行操作
为了确保数据成功写入并完成业务流程,还需要配置其他请求参数,如业务对象表单Id、是否验证基础资料、执行操作(保存)、是否自动提交并审核等。
{
...
"otherRequest":[
{"field":""},
...
]
}
通过上述元数据配置,我们可以实现从源平台到金蝶云星空API接口的数据无缝对接。轻易云数据集成平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,极大提升了业务的透明度和效率。