领星ERP数据集成到金蝶云星空案例分享
在企业的日常运营中,精准高效的数据处理和及时的信息流动至关重要。本文将聚焦一个具体的系统对接集成案例,探讨如何通过轻易云数据集成平台实现领星ERP的数据向金蝶云星空批量写入。本次实际运行方案为“领星调整单=>其他入库单(盘盈)”。
确保数据无漏单:接口调用与定时抓取策略
为了确保从领星ERP获取的数据不出现遗漏,我们使用了/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList API进行周期性的定时抓取。不仅如此,还配置了可靠的错误重试机制,以应对网络波动或服务暂时无法响应的问题。
批量快速写入:优化性能提升效率
由于需要处理的大量数据,我们选择使用金蝶云星空提供的batchSave API,通过批次提交数据,提高了写入性能。同时,为避免频繁请求造成接口限流问题,我们特别设计了一套分页处理策略,使得各个批次之间能够平滑过渡,实现稳定高效的数据传输。
数据格式差异转换与映射
在两个系统的数据格式存在差异情况下,通过轻易云提供的数据转换工具,我们制定了一套精细化的映射规则。例如,将领星ERP中的字段名、类型、结构要求分别对应到金蝶云中的相应部分,从而保证了两端系统间的数据兼容性。在这一过程中,实时监控功能发挥了重要作用,帮助我们及时发现并解决潜在的问题。
异常处理与日志记录机制
面对可能出现的异常情况,如网络超时或接口返回错误码等,我们建立了一整套完备的异常捕获和日志记录制度。从每一次API调用开始,到整个流程结束,每一步都进行了详细日志跟踪,这不仅让故障排查更加迅速,也为后续优化奠定了基础。
这个案例展示的不仅仅是技术上的实现,更凸显出精细管理和准确执行对于成功的重要性。接下来,将深入解析具体实施步骤及相关技术要点。
调用源系统领星ERP接口获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统领星ERP接口/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList
来获取并加工数据。以下是详细的技术实现过程。
接口调用配置
首先,我们需要配置API调用的元数据。根据提供的metadata,API调用配置如下:
- API路径:
/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList
- 请求方法:
POST
- 关键字段:
order_sn
(用于唯一标识订单) - 自动填充响应:
true
请求参数包括:
search_date_type
: 时间类型,固定值为2
start_date
: 开始日期,使用上次同步时间{{LAST_SYNC_TIME|date}}
end_date
: 结束日期,使用当前时间{{CURRENT_TIME|date}}
adjust_status
: 单据状态,固定值为20
type
: 调整类型page
: 当前页码,默认值为1
page_size
: 每页记录数,默认值为20
条件过滤:
item_list.adjustment_valid_num > 0
请求参数构建
在实际操作中,我们需要动态生成请求参数。以下是一个示例代码片段,用于构建请求参数:
import requests
from datetime import datetime
# 获取当前时间和上次同步时间
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
last_sync_time = get_last_sync_time() # 假设有一个函数获取上次同步时间
# 构建请求参数
payload = {
"search_date_type": "2",
"start_date": last_sync_time,
"end_date": current_time,
"adjust_status": "20",
"type": "", # 根据具体需求填写调整类型
"page": "1",
"page_size": "20"
}
# 发起POST请求
response = requests.post(
url="https://api.example.com/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList",
json=payload
)
# 检查响应状态
if response.status_code == 200:
data = response.json()
else:
raise Exception(f"API请求失败,状态码:{response.status_code}")
数据清洗与过滤
在获取到原始数据后,需要对数据进行清洗和过滤。根据metadata中的条件配置,我们只保留item_list.adjustment_valid_num > 0
的数据项。以下是一个示例代码片段:
def filter_data(data):
filtered_data = []
for item in data.get('item_list', []):
if item.get('adjustment_valid_num', 0) > 0:
filtered_data.append(item)
return filtered_data
cleaned_data = filter_data(data)
数据转换与写入
清洗后的数据需要进行转换,以符合目标系统的要求。假设目标系统要求的数据格式如下:
{
"order_sn": "",
"adjustment_valid_num": "",
// 其他字段...
}
我们可以通过以下代码进行数据转换:
def transform_data(cleaned_data):
transformed_data = []
for item in cleaned_data:
transformed_item = {
"order_sn": item.get("order_sn"),
"adjustment_valid_num": item.get("adjustment_valid_num"),
# 添加其他字段的转换逻辑...
}
transformed_data.append(transformed_item)
return transformed_data
final_data = transform_data(cleaned_data)
最后,将转换后的数据写入目标系统:
def write_to_target_system(final_data):
for record in final_data:
# 假设有一个函数write_record用于写入单条记录到目标系统
write_record(record)
write_to_target_system(final_data)
通过上述步骤,我们完成了从源系统领星ERP接口获取、清洗、转换并写入目标系统的全过程。这一过程确保了数据的准确性和一致性,为后续的数据处理奠定了坚实基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终转为目标平台金蝶云星空API接口所能够接收的格式,并写入目标平台。本文将详细探讨如何利用轻易云数据集成平台的元数据配置,实现这一过程。
1. API接口配置
我们首先需要了解金蝶云星空API接口的基本配置。根据提供的元数据配置,API接口为batchSave
,请求方法为POST
。以下是具体的请求参数和字段映射:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","value":"{order_sn}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRHLX023"},
{"field":"FStockOrgId","label":"库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"107"},
{"field":"FDate","label":"日期","type":"string","value":"{adjustment_time}"},
{"field":"FEntity","label":"明细信息","type":"array","children":[
{"field":"FMATERIALID","label":"物料编码","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{item_list.sku}}", "parent": "FEntity"},
{"field":"FSTOCKID","label":"收货仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "{wid}", "parent": "FEntity"},
{"field": "FQty", "label": "实收数量", "type": "string", "value": "{{item_list.adjustment_valid_num}}", "parent": "FEntity"}
],"value": "item_list"},
{"field": "FDEPTID", "label": "部门", "type": "object",
"default": "0002",
"children":[
{"field":
"FNumber",
"label":
FNumber",
type":
string",
value":
_mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FDept where={\"content.FName\":{\"$eq\":\"{create_realname}\"}}"
}
]
},
{"field":
FNOTE",
label":
备注",
type":
string",
value":
{remark}"
}
],
otherRequest: [
{ field: FormId, label: 业务对象表单Id, type: string, value: STK_MISCELLANEOUS },
{ field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: true },
{ field: Operation, label: 执行的操作, type: string, value: Save },
{ field: IsAutoSubmitAndAudit, label: 提交并审核, type: bool, value: true }
]
}
2. 数据提取与转换
在ETL过程中,首先需要从源平台提取数据。假设我们从领星调整单中提取了以下数据:
{
order_sn: 'ORD123456',
adjustment_time: '2023-10-01',
item_list: [
{
sku: 'SKU001',
adjustment_valid_num: 100,
wid: 'WID001'
},
{
sku: 'SKU002',
adjustment_valid_num: 200,
wid: 'WID002'
}
],
create_realname: 'John Doe',
remark: '盘盈调整'
}
接下来,我们需要将这些数据转换为金蝶云星空API能够接收的格式。
3. 数据加载与写入
根据元数据配置,我们需要将上述提取的数据映射到目标字段。例如:
FBillNo
映射到{order_sn}
FBillTypeID
固定值QTRHLX023
FStockOrgId
固定值107
FDate
映射到{adjustment_time}
FEntity
是一个数组,包含多个子项,每个子项包括FMATERIALID
,FSTOCKID
, 和FQty
FMATERIALID
映射到{item_list.sku}
FSTOCKID
映射到{wid}
FQty
映射到{item_list.adjustment_valid_num}
FDEPTID
根据创建人姓名查询得到部门编号FNOTE
映射到{remark}
通过轻易云数据集成平台,我们可以利用其内置的解析器和映射功能,将源数据转换为目标格式。例如,使用 ConvertObjectParser
将物料编码、收货仓库等字段解析为金蝶云系统中的编码。
最后,通过调用金蝶云星空API接口,将转换后的数据批量保存到目标系统中。以下是一个示例请求:
{
apiName:"batchSave",
method:"POST",
data:{
FBillNo:"ORD123456",
FBillTypeID:{ FNumber:"QTRHLX023" },
FStockOrgId:{ FNumber:"107" },
FDate:"2023-10-01",
FEntity:[
{ FMATERIALID:{ FNumber:"SKU001" }, FSTOCKID:{ FNumber:"WID001" }, FQty:"100" },
{ FMATERIALID:{ FNumber:"SKU002" }, FSTOCKID:{ FNumber:"WID002" }, FQty:"200" }
],
FDEPTID:{ FNumber:"0002" },
FNOTE:"盘盈调整"
}
}
总结
通过以上步骤,我们成功地将领星调整单的数据经过ETL转换后,写入到了金蝶云星空系统中。利用轻易云数据集成平台的强大功能和灵活配置,可以高效地实现不同系统间的数据无缝对接,大大提升了业务处理效率和准确性。