金蝶云星空数据集成到易仓的技术方案分享
在企业物流和供应链管理中,金蝶云星空与易仓系统的无缝对接能够显著提高业务的运营效率。本文将详细分享一个实际案例——将金蝶云星空中的采购退料单自动集成到易仓生成出库单,实现批量处理和实时监控。
为了确保每一笔交易都能准确、快速地从金蝶云星空传输并写入至易仓,我们采用了轻易云数据集成平台进行配置。整个方案主要通过调用金蝶云星空提供的数据获取接口executeBillQuery
来抓取采购退料单,并利用指定的写入API createAndEditServiceTransferPlanOrder
将数据批量导入到易仓系统。同时,通过定时任务保证了数据抓取的可靠性,以及分页和限流策略解决大规模数据处理问题,从而避免漏单现象.
此外,为了解决两个系统之间的数据格式差异,我们进行了细致的数据映射设计,以确保所有关键字段正确对接。在这个过程中,对异常情况进行了周全考量,设置了错误重试机制,以及针对可能出现的问题进行实时日志记录,通过这些措施实现对整个流程状态的透明化监控。
随后章节将进一步探讨这一集成过程中的具体实施步骤、遇到的问题以及相应的解决办法。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,以获取并加工采购退料单的数据。
接口配置与调用
首先,我们需要了解executeBillQuery
接口的基本配置。根据提供的元数据配置,接口采用POST方法进行调用,主要用于查询操作(effect: QUERY)。以下是请求参数的详细配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"idCheck": true,
"request": [
{"field":"FMATERIALID","label":"FMATERIALID","type":"string","describe":"111","value":"FMATERIALID"},
{"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"},
// 省略其他字段
],
"otherRequest": [
{"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"},
{"field":"StartRow","label":"StartRow","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"},
{"field":"TopRowCount","label":"TopRowCount","type":"int","describe":"金蝶的查询分页参数"},
{"field":"FilterString","label":"FilterString","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'"},
{"field":"FieldKeys","label":"FieldKeys","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber","value":"{MAIN_REQUEST}"},
{"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value": "BD_MATERIAL"}
],
"autoFillResponse": true
}
请求参数详解
-
请求字段(request):
FMATERIALID
,FNumber
,FName
, 等等:这些字段代表了我们需要从金蝶系统中获取的数据项。每个字段都有其特定的标签、类型和描述。
-
其他请求参数(otherRequest):
Limit
: 用于分页查询,表示每页返回的数据条数。StartRow
: 用于分页查询,表示从第几行开始返回数据。TopRowCount
: 表示返回前多少行数据。FilterString
: 用于过滤条件,例如根据供应商编号和审批日期进行过滤。FieldKeys
: 指定要返回的字段键值。FormId
: 必须填写金蝶系统中的表单ID,这里为BD_MATERIAL
。
实际调用与数据处理
在实际调用过程中,我们需要构建一个HTTP POST请求,将上述配置作为请求体发送到金蝶云星空系统。以下是一个示例代码片段:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
"FormId": "BD_MATERIAL",
"FieldKeys": ["FMATERIALID", "FNumber", ...], # 根据需求添加更多字段
"FilterString": "FApproveDate>='2023-01-01'",
"Limit": 100,
"StartRow": 0
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据处理逻辑
for item in data:
process_item(item) # 自定义的数据处理函数
数据清洗与转换
获取到原始数据后,我们通常需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台上,可以通过可视化界面配置清洗规则,例如去除空值、格式转换等。
def process_item(item):
# 示例:将物料编号转换为大写
item['FNumber'] = item['FNumber'].upper()
# 示例:检查并填充缺失值
if not item['FDescription']:
item['FDescription'] = '无描述'
# 更多自定义清洗逻辑...
总结
通过上述步骤,我们可以高效地调用金蝶云星空的executeBillQuery
接口,获取所需的数据并进行必要的清洗和转换。这一过程不仅提高了数据集成的效率,也确保了数据的一致性和准确性。在实际项目中,根据具体需求调整请求参数和清洗规则,可以实现更加灵活和精准的数据集成。
将金蝶采购退料单数据转换并写入易仓出库单
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台所能够接收的格式。本文将详细探讨如何将金蝶采购退料单的数据通过ETL转换,最终写入易仓API接口。
API接口配置与元数据解析
在进行数据转换和写入之前,我们需要了解目标平台易仓API接口的具体配置。以下是易仓API createAndEditServiceTransferPlanOrder
的元数据配置:
{
"api": "createAndEditServiceTransferPlanOrder",
"effect": "EXECUTE",
"method": "POST",
"number": "1",
"id": "1",
"name": "1",
"idCheck": true,
"request": [
{"field":"action_type","label":"操作类型","type":"string","describe":"操作类型:\nADD 新增\nEDIT 编辑"},
{"field":"stpo_code","label":"头程计划单号","type":"string","describe":"编辑时必填"},
{"field":"service_code","label":"海外仓服务商代码","type":"string","describe":"备注:可以通过接口getTransferService获取,比如:4PX ,WINIT),注意当想通过货件单号(service_number字段去拉取FBA货件信息时,该字段请填写:OTHER,此功能和页面功能操作保持一致,编辑时不可修改"},
{"field":"stpo_delivery_type","label":"发货方式","type":"int","describe":"1 供应商代发到目的仓\n2 中转仓发货到目的仓"},
{"field":"warehouse_id","label":"中转仓库ID","type":"int","describe":"编辑时不可修改"},
{"field":"to_warehouse_id","label":"发往仓库ID","type":"int","describe":"目的仓在创建时必填 。\n 修改时,只有当接口参数中填写了service_number ,才可以修改。"},
{"field":"stpo_weight","label":"预计总重量(KG)","type":"float","describe":"预计总重量(KG)"},
{"field":"stpo_volume","label":"预计总体积(m³)","type":"float","describe":"预计总体积(m³)"},
{"field":"stpo_date_eta","label":"预计发货日期","type":"date","describe":"格式(2021-03-20)"},
{"field":"sm_code","label":"运输方式","type":"string","describe":"运输方式"},
{"field":"user_account","label":"店铺账号","type":"string","describe":"备注:当货件单号:service_number字段填写了之后,该字段必填"},
{"field": "service_number", "label": "货件单号", "type": "string", "describe": "备注:\n1、即AMAZON的 shipment_id\n\n2、填写了service_number,可以填写参数 to_warehouse_id的,因为拉取货件单号信息需要to_warehouse_id字段,但是如果service_number为空,就不能填写to_warehouse_id\n\n3、填写了service_number的时候,产品信息是以拉取货件的产品信息作为产品信息,不是以在接口中填写的产品信息作为产品信息"},
{"field": "stpo_remark", "label": "备注信息", "type": "string", "describe": "备注信息"},
{
"field": "product_barcode_info",
"label": "产品信息",
"type": "array",
"describe": "当 service_number为空时,该字段必填",
"children":[
{"field": "product_barcode", "label": "产品代码", "type": "string", "describe": "产品代码"},
{"field": "quantity", "label":"产品数量",
![如何对接钉钉API接口](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)