金蝶采购入库单对接领星ERP:从数据抽取到集成的技术要点
在实际业务场景中,实现金蝶云星空系统与领星ERP的无缝对接,对于确保数据传输准确、高效和稳定至关重要。本文将分享一个实际操作案例,解析如何通过轻易云平台完成金蝶采购入库单到领星ERP入库单的数据集成。
我们使用了金蝶云星空提供的executeBillQuery
API接口获取采购入库单数据,并调用领星ERP的/erp/sc/routing/storage/storage/orderAdd
接口进行数据写入。以下是这个过程中关键技术细节和挑战解决方案:
-
定时抓取与批量处理 通过设置定时任务可靠地抓取金蝶云星空中的采购入库单信息,这是确保实时性和完整性的基础。在高并发环境下,我们需要注意API限流问题,通过分页请求来分段获取大批量数据。
-
自定义转换逻辑 为适应不同系统间的数据结构差异,我们设计了一套自定义的转换逻辑,以满足特定业务需求。例如,针对字段名称差异和枚举值的不一致性进行了映射规则配置,使得两端系统能够正确理解彼此的数据格式。
-
高吞吐量写入能力 借助平台支持的大容量、高性能写入功能,大幅提升了海量数据向领星ERP快速流转效率。这一特性尤其适用于每日交易频繁且需实时更新库存记录等情境,有效缩短了延迟时间。
-
异常处理与重试机制 在对接过程中,如果发生异常情况(如网络波动或外部服务不可用等),实现了一套完备的错误捕捉及自动重试机制,以降低人工干预成本并保证任务最终成功执行。此外,还结合告警通知功能,及时反馈潜在的问题给运维人员。
-
集中监控与日志记录 利用集中式监控及日志记录功能,全程追踪每个集成流程步骤,包括API请求响应、状态变化及性能指标等。不仅使调试更为方便,也为后续优化提供了全面详实的数据支撑。
总而言之,该案例展示了如何利用轻松配置的平台工具,高效、透明地实现跨系统间复杂数据整合。而这些技术要点,将成为您推进类似项目实践的重要参考依据。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取采购入库单数据,并进行初步加工。
接口配置与请求参数
为了成功调用金蝶云星空的executeBillQuery
接口,我们需要配置相应的元数据。以下是关键的配置项:
- API:
executeBillQuery
- Method:
POST
- FormId:
STK_InStock
(业务对象表单ID) - FieldKeys: 需查询的字段key集合
- FilterString: 过滤条件,用于筛选特定的数据
- Pagination: 分页参数,包括每页大小和起始行索引
请求参数示例
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FInStockEntry_FEntryId",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"},
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"入库日期","type":"string","value":"FDate"},
{"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"},
{"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"},
{"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"},
{"field": "FilterString",
"label": "过滤条件",
"type": "string",
"describe":
"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
"value":
"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FPurchaseOrgId.fnumber = '107'"},
{"field":
"FieldKeys",
"label":
"需查询的字段key集合",
"type":
"array",
"describe":
"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber",
"parser":
{"name":
"ArrayToString",
"params":
"}"
}
},
{"field":
FormId,
label:
业务对象表单ID,
type:
string,
describe:
必须填写金蝶的表单ID如:PUR_PurchaseOrder,
value:
STK_InStock}
]
}
数据请求与清洗
在发送请求后,系统会返回一批原始数据。此时,我们需要对这些数据进行清洗和初步加工,以确保其符合目标系统(如领星入库单)的要求。
- 字段映射:将源系统中的字段映射到目标系统中。例如,将
FBillNo
映射为目标系统中的“单据编号”。 - 数据过滤:根据业务需求,过滤掉不必要的数据。例如,只保留状态为“已审核”的单据。
- 格式转换:将日期、金额等字段转换为目标系统所需的格式。
示例代码
以下是一个简单的数据清洗示例代码:
import requests
import json
# 配置请求头和URL
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
# 构建请求体
payload = {
'FormId': 'STK_InStock',
'FieldKeys': 'FBillNo,FDate,FDocumentStatus',
'FilterString': f"FApproveDate>='{last_sync_time}' and FPurchaseOrgId.fnumber = '107'",
'Limit': page_size,
'StartRow': start_row
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for entry in data['Result']:
if entry['FDocumentStatus'] == 'C':
cleaned_entry = {
'bill_no': entry['FBillNo'],
'date': entry['FDate'],
'status': entry['FDocumentStatus']
}
cleaned_data.append(cleaned_entry)
else:
print(f'Error: {response.status_code}')
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))
总结
通过上述步骤,我们可以成功调用金蝶云星空的executeBillQuery
接口获取采购入库单数据,并对其进行初步加工。这为后续的数据转换与写入奠定了坚实基础。在实际应用中,可以根据具体业务需求进一步调整和优化这些步骤。
数据集成与ETL转换:从金蝶采购入库单到领星ERP
在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将金蝶采购入库单的数据转换为领星ERPAPI接口所能接收的格式,并最终写入目标平台。
API接口配置与元数据解析
在本案例中,我们需要将金蝶采购入库单的数据通过ETL(提取、转换、加载)过程,转化为领星ERP系统所需的格式。目标API接口为/erp/sc/routing/storage/storage/orderAdd
,请求方法为POST。
元数据配置如下:
{
"api": "/erp/sc/routing/storage/storage/orderAdd",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo",
"bodyName": "reftables",
"header": ["FBillNo", "FSupplierId_FNumber", "FStockId_FNumber", "FSupplyAddress"],
"body": ["FMaterialId_FNumber", "FRealQty", "FMustQty", "FPrice"]
},
"request": [
{"label":"仓库id","field":"wid","type":"string"},
{"label":"系统仓库","field":"sys_wid","type":"string","value":"{FStockId_FNumber}"},
{"label":"状态","field":"type","type":"string","value":"2"},
{
"label":"product_list",
"field":"product_list",
"type":"array",
"value":"reftables",
"children":[
{"parent":"product_list","label":"sku","field":"sku","type":"string","value":"{{reftables.FMaterialId_FNumber}}"},
{"parent":"product_list","label":"良品数量","field":"good_num","type":"string","value":"{{reftables.FRealQty}}"},
{"parent":"product_list","label":"次品数量","field":"bad_num","type":"string"},
{"parent":"product_list","label":"单价","field":"price","type":"string","value":"{{reftables.FPrice}}"}
]
},
{"label":"备注","field":"remark","type":"string","value":"{FBillNo}\\{FSupplierId_FNumber}"}
]
}
ETL转换过程详解
-
提取(Extract):
- 从金蝶系统中提取采购入库单的数据。此阶段主要涉及对源数据的读取和初步清洗,确保数据完整性和准确性。
-
转换(Transform):
- 根据元数据配置,对提取的数据进行字段映射和格式转换。
- 在此案例中,需特别注意以下字段的处理:
sys_wid
:映射自FStockId_FNumber
。product_list
:这是一个数组类型字段,需要将多个物料信息映射到该数组下,包括SKU、良品数量、次品数量和单价。remark
:由FBillNo
和FSupplierId_FNumber
拼接而成,用于记录备注信息。
-
加载(Load):
- 将转换后的数据通过POST请求写入到领星ERP系统的指定API接口。
- 请求体结构示例如下:
{
"wid": "<仓库ID>",
"sys_wid": "<系统仓库ID>",
"type": "2",
"product_list": [
{
"sku": "<物料编码>",
"good_num": "<良品数量>",
...
}
],
...
}
实际应用中的注意事项
-
字段校验与异常处理: 在实际应用中,需要对每个字段进行严格校验,确保数据符合目标平台的要求。例如,SKU编码必须存在且有效,数量字段必须为正数等。同时,对于异常情况(如网络故障、API返回错误等),需要有相应的处理机制,以保证数据传输的可靠性。
-
性能优化: 对于大批量数据传输,可以考虑分批次处理,以减少单次请求的数据量,从而提高传输效率和成功率。此外,可以利用异步处理机制,提高整体处理速度。
通过以上步骤,我们可以高效地将金蝶采购入库单的数据转换并写入到领星ERP系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,也极大地提高了工作效率。