金蝶云星空与管易云数据集成技术案例分享
在实际业务运作中,如何高效地将金蝶云星空系统中的调出单数据实时、准确地集成到管易云的其它出库单成为了许多企业关注的焦点。通过采用轻易云的数据集成平台,我们实现了一套高效可靠的数据对接方案:金蝶分步式调出单-->管易其它出库单(京东自营)。
本次案例中,我们聚焦于利用金蝶云星空提供的executeBillQuery
API接口来获取调出单数据,并通过调用管易云的gy.erp.stock.other.out.add
API接口将这些数据批量写入到目标系统。
为了确保整个过程稳定和高效运行,我们实施了一系列关键技术措施:
-
定时可靠的数据抓取:我们配置了定时任务,通过周期性调用
executeBillQuery
接口,持续抓取最新调出单记录。结合轻易云的平台特性,实现了短时间内大批量数据快速拉取,提高了整体处理效率。 -
实时监控与日志记录:为确保整个数据传输链路不出现漏单问题,我们启用了全面的监控和日志功能。不仅可以实时跟踪每个API请求和响应状态,还能在异常发生时立即告警并进行自动重试,有效提升了系统稳定性。
-
分页与限流处理:针对金蝶云星空接口返回的大量分页数据,我们设置合理的限流策略,通过按页逐步加载和处理,使得即便在高负载情况下也能保障系统平稳运行,不会遗漏任何一条关键业务数据。
-
自定义映射及转换逻辑:由于两个系统之间存在不同的数据格式要求,特别是字段名称和类型有所差异,因此我们使用平台提供的可视化设计工具,对从金蝶提取出的JSON结构进行了必要转化,以适应管易API所需格式,实现无缝对接。
-
集中监控和告警机制:为了进一步提高透明度并及时发现潜在问题,每一个重要环节都设置了详细的性能指标监控,可以随时查看当前队列积压情况、最近一次成功或失败调用的信息等。同时,一旦检测到任何异常,将立刻触发告警通知相关维护人员进行排查修复。
至此,该案例解决方案已经搭建完成。下面将详细解读各步骤具体实现细节,包括如何配置轻易平台任务、编写ETL脚本及应对常见错误场景的方法。
调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的executeBillQuery
接口来获取并加工数据,以实现从金蝶分步式调出单到管易其它出库单(京东自营)的数据集成。
接口配置与请求参数
首先,我们需要配置元数据以调用executeBillQuery
接口。根据提供的元数据配置,以下是关键参数及其含义:
- api:
executeBillQuery
- method:
POST
- number:
FBillNo
- id:
FSTKTRSOUTENTRY_FEntryID
- idCheck:
true
请求参数包括实体主键、单据编号、备注等字段。这些字段在请求体中作为JSON对象发送给金蝶云星空接口。
{
"FID": "实体主键",
"FBillNo": "单据编号",
"FEntryNote": "备注",
"FSTKTRSOUTENTRY_FEntryID": "FEntryID",
"F_UQRW_BaseProperty1": "仓库外部码",
"F_UQRW_BaseProperty": "物料外部码",
"FQty": "调出数量",
"FMaterialID": "物料编码",
"F_UQRW_DCCKLX": "调出仓库类型"
}
此外,还有一些其他请求参数用于分页和过滤,例如:
- Limit: 最大行数
- StartRow: 开始行索引
- TopRowCount: 返回总行数
- FilterString: 过滤条件
- FieldKeys: 查询字段key集合
- FormId: 表单ID(例如:
STK_TRANSFEROUT
)
数据请求与清洗
在调用API时,我们需要特别注意分页和过滤条件的设置,以确保获取的数据符合业务需求。例如,使用FilterString
可以设置特定时间范围内的数据:
{
"FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'"
}
这段代码表示仅查询审批日期大于上次同步时间的数据。分页参数则确保我们能够处理大量数据而不会遗漏:
{
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}"
}
数据转换与写入
一旦成功获取到数据,我们需要对其进行清洗和转换,以便写入目标系统。在这个过程中,可以利用轻易云平台提供的自动填充响应功能(autoFillResponse),确保返回的数据格式化正确。
例如,将金蝶返回的数据映射到管易系统所需的字段格式:
{
"FBillNo": "{{response.FBillNo}}",
"FMaterialID": "{{response.FMaterialID}}",
...
}
这种映射方式确保了不同系统之间的数据无缝对接。
实际案例分析
假设我们需要从金蝶分步式调出单中提取所有调出数量大于100的记录,并将其写入管易其它出库单。我们可以设置如下过滤条件:
{
"FilterString": "FQty > '100'"
}
然后,通过API调用获取符合条件的数据,并进行必要的转换和清洗,最终写入目标系统。
技术要点总结
- 接口配置:准确配置API接口及其请求参数。
- 分页与过滤:合理设置分页和过滤条件以优化数据请求。
- 数据清洗与转换:利用平台提供的工具进行数据清洗和格式转换。
- 自动填充响应:确保返回的数据格式化正确,便于后续处理。
通过上述步骤,我们可以高效地实现从金蝶分步式调出单到管易其它出库单(京东自营)的数据集成,为业务流程提供强有力的支持。
数据集成:从金蝶调出单到管易云其它出库单的ETL转换
在数据集成生命周期的第二步,我们将重点探讨如何将已经集成的源平台数据(如金蝶分步式调出单)进行ETL转换,转为目标平台(管易云API接口)所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。
API接口配置
我们使用的是管易云提供的gy.erp.stock.other.out.add
API接口,该接口用于新增其它出库单。其请求方法为POST,且需要进行ID校验。以下是元数据配置:
{
"api": "gy.erp.stock.other.out.add",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "warehouse_code",
"label": "仓库代码",
"type": "string",
"describe": "111",
"value": "{F_UQRW_BaseProperty1}"
},
{
"field": "wms_bizcode",
"label": "第三方系统单号",
"type": "string",
"describe": "判断排重的依据",
"value": "{FBillNo}"
},
{
"field": "mail_no",
"label": "物流编号",
"type": "string",
"value": "{FBillNo}"
},
{
"field": "note",
"label": "备注",
"type": "string",
"describe": "111",
"value": "{FEntryNote}"
},
{
"field": "details",
"label": "入库明细",
"type": "array",
...
数据请求与清洗
在数据请求阶段,我们从金蝶系统中提取相关的数据字段,包括仓库代码、系统单号、物流编号、备注和入库明细等。这些字段在后续步骤中会被清洗和转换,以符合目标平台要求。
例如,金蝶系统中的仓库代码字段F_UQRW_BaseProperty1
需要映射到管易云API中的warehouse_code
字段。同样,金蝶系统中的第三方系统单号FBillNo
需要映射到管易云API中的wms_bizcode
字段。
数据转换与写入
在数据转换阶段,我们需要将清洗后的数据按照管易云API接口的要求进行格式化。例如,将金蝶系统中的商品代码和数量分别映射到管易云API中的item_code
和qty
字段。
示例代码片段
import requests
import json
# 定义请求URL和头部信息
url = 'https://api.guanyiyun.com/erp/stock/other/out/add'
headers = {'Content-Type': 'application/json'}
# 构建请求体
payload = {
'warehouse_code': source_data['F_UQRW_BaseProperty1'],
'wms_bizcode': source_data['FBillNo'],
'mail_no': source_data['FBillNo'],
'note': source_data['FEntryNote'],
'details': [
{
'item_code': item['F_UQRW_BaseProperty'],
'qty': item['FQty']
} for item in source_data['details']
]
}
# 将请求体转换为JSON格式
data = json.dumps(payload)
# 发起POST请求
response = requests.post(url, headers=headers, data=data)
# 检查响应状态码
if response.status_code == 200:
print('Data successfully written to Guanyi Cloud')
else:
print(f'Failed to write data: {response.text}')
集成测试与验证
在完成数据转换与写入后,需要进行集成测试以确保数据正确写入目标平台。可以通过调用管易云API查询接口,验证新增的其它出库单是否存在,并检查各字段的数据是否准确无误。
示例验证代码片段
# 定义查询URL和参数
query_url = 'https://api.guanyiyun.com/erp/stock/other/out/get'
query_params = {'wms_bizcode': source_data['FBillNo']}
# 发起GET请求
query_response = requests.get(query_url, headers=headers, params=query_params)
# 检查响应状态码并解析响应内容
if query_response.status_code == 200:
result = query_response.json()
if result and result.get('success'):
print('Data verification successful')
# 可以进一步检查具体字段值是否匹配预期值
else:
print(f'Failed to verify data: {query_response.text}')
通过上述步骤,我们成功地将金蝶分步式调出单的数据经过ETL转换后写入了管易云,并进行了有效的验证。这一过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。