金蝶云星空与聚水潭系统集成案例分享
在某制造企业的运营过程中,如何高效地将金蝶云星空中的采购退料单数据集成到聚水潭其他出库单中,是一个需要解决的重要技术问题。本次案例将详细探讨,在轻易云数据集成平台助力下,实现这一过程的具体方案。
为了确保数据从金蝶云星空到聚水潭之间的无缝对接,我们选用了executeBillQuery API接口来抓取金蝶云星空中的采购退料单,并使用/open/jushuitan/otherinout/upload API将处理后的数据写入到聚水潭系统。由于业务需求复杂,必须充分考虑分页、限流等接口特性,以及两者之间的数据格式差异。
首先,在抓取金蝶云星空采购退料单时,为了保证没有遗漏记录,需定时调用executeBillQuery接口,并且开发可靠的错误重试机制。在实际操作中,通过设置合适的时间间隔及分页参数,可以有效避免API调用超时和频率限制的问题。此外,为了提高吞吐量,我们实现了批量处理逻辑,使得大量数据能够快速传输至目标系统——聚水潭。
在将获取的数据上传至聚水潭之前,需要进行自定义的数据转换,以匹配其对于“其他出库单”的字段和格式要求。这一步由轻易云可视化的数据流设计工具完成,不仅简化了操作,还能实时监控转换过程中的每一个环节。一旦检测到异常数据或其它问题,将采取预设好的告警策略,即时通知相关人员进行干预,从而确保整个流程的顺畅运行。
值得一提的是,我们还利用轻易云的平台优势,实现了一系列集中监控措施,包括任务状态跟踪、性能分析以及日志记录等,使得整个数据集成过程透明且可追溯。这些手段不仅提升了运维效率,也为后续优化提供了宝贵依据。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取采购退料单的数据,并进行初步加工。
接口配置与调用
首先,我们需要配置并调用金蝶云星空的executeBillQuery
接口。以下是元数据配置的关键部分:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FPURMRBENTRY_FEntryID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FPURMRBENTRY_FEntryID","label":"明细信息ID","type":"string","value":"FPURMRBENTRY_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":"FTAKEDELIVERYNO","label":"提货单号","type":"string","value":"FTAKEDELIVERYNO"},
{"field":"FSupplierID_FNumber","label":"供应商","type":"string","value":"FSupplierID.FNumber"},
{"field":"FDESCRIPTION","label":"备注","type":"string","value":"FDESCRIPTION"}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "FilterString", "label": "过滤条件", "type": "string",
"describe": "",
"value": "'FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'"}
],
...
}
请求参数解析
-
API和方法:
api
:executeBillQuery
method
:POST
-
分页设置:
pagination.pageSize
: 每次请求的数据条数,设置为500。
-
请求字段:
FPURMRBENTRY_FEntryID
: 明细信息IDFID
: 实体主键FBillNo
: 单据编号FDocumentStatus
: 单据状态FStockOrgId_FNumber
: 退料组织FDate
: 退料日期- 等等...
-
其他请求参数:
Limit
: 最大行数,使用分页参数。StartRow
: 开始行索引,使用分页参数。FilterString
: 用于过滤条件,例如根据最后同步时间过滤数据。
数据获取与初步加工
通过上述配置,我们可以发送HTTP POST请求到金蝶云星空的executeBillQuery
接口。以下是一个示例请求:
{
"FormId": "PUR_MRB",
...
}
在接收到响应后,我们需要对数据进行初步加工。通常包括以下几个步骤:
- 数据清洗:去除无效或重复的数据。
- 字段映射:将源系统字段映射到目标系统字段。例如,将金蝶的
FBillNo
映射到聚水潭的相应字段。 - 格式转换:将日期、数字等字段转换为目标系统所需的格式。
示例代码
以下是一个简单的Python示例代码,用于调用API并处理响应数据:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
'FormId': 'PUR_MRB',
'FieldKeys': 'FPURMRBENTRY_FEntryID,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FTAKEDELIVERYNO,FSupplierID.FNumber,FDESCRIPTION',
'FilterString': f"FApproveDate>='{last_sync_time}'",
'Limit': pagination_page_size,
'StartRow': pagination_start_row
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 初步加工数据
processed_data = []
for entry in data:
processed_entry = {
'明细信息ID': entry['FPURMRBENTRY_FEntryID'],
'实体主键': entry['FID'],
'单据编号': entry['FBillNo'],
'单据状态': entry['FDocumentStatus'],
'退料组织': entry['FStockOrgId.FNumber'],
'退料日期': entry['FDate'],
# 更多字段...
}
processed_data.append(processed_entry)
# 后续处理...
通过上述步骤,我们可以高效地从金蝶云星空获取采购退料单的数据,并进行初步加工,为后续的数据转换与写入打下基础。
使用轻易云数据集成平台将金蝶采购退料单转换为聚水潭其他出库单的ETL过程
在数据集成生命周期的第二步,我们需要将已经从源平台(金蝶)获取的数据进行ETL转换,并转化为目标平台(聚水潭)所能接收的格式,最终写入目标平台。以下是详细的技术步骤和配置说明。
1. 配置API接口
我们首先需要配置聚水潭API接口,以便将转换后的数据发送到目标平台。根据提供的元数据配置,聚水潭API接口为/open/jushuitan/otherinout/upload
,请求方法为POST。
2. 请求字段配置
在请求中,我们需要映射和转换金蝶采购退料单中的各个字段,使其符合聚水潭其他出库单的要求。以下是具体字段及其配置:
-
is_confirm
:是否确认单据。使用函数判断,如果仓库编号(F_POKM_JSTSTOCKNUMBER)等于10816570,则值为1,否则为0。{"field":"is_confirm","label":"是否确认单据","type":"string","value":"_function IF({F_POKM_JSTSTOCKNUMBER} = 10816570 , 1 , 0 )"}
-
excute_confirming
:是否审核单据。固定值为false。{"field":"excute_confirming","label":"是否审核单据","type":"string","value":"false"}
-
wms_co_id
:仓库编号。直接映射金蝶中的F_POKM_JSTSTOCKNUMBER。{"field":"wms_co_id","label":"仓库编号","type":"int","value":"{F_POKM_JSTSTOCKNUMBER}"}
-
type
:出入库类型。固定值为out。{"field":"type","label":"出入库类型","type":"string","value":"out"}
-
external_id
:外部单号。由金蝶中的FBillNo、F_POKM_JSTSTOCKNUMBER和F_POKM_JSTSTOCKNUMBER2拼接而成。{"field":"external_id","label":"外部单号","type":"string","value":"{FBillNo}{F_POKM_JSTSTOCKNUMBER}{F_POKM_JSTSTOCKNUMBER2}"}
-
remark
:备注。包含固定文本和金蝶中的FBillNo。{"field":"remark","label":"备注","type":"string","value":"金蝶采购退料单据推送,单号:{FBillNo}"}
-
items
:商品明细列表。包括商品编码(sku_id)和入库数量(qty),分别映射金蝶中的FMATERIALID_FNumber和FRMREALQTY。{ "field": "items", "label": "items", "type": "array", "value": "list", "children": [ {"field": "sku_id", "label": "商品编码", "type": "string", "value": "{{list.FMATERIALID_FNumber}}"}, {"field": "qty", "label": "入库数量", "type": "string", "value": "{{list.FRMREALQTY}}"} ] }
-
lc_id
,l_id
,logistics_company
,logistics_company_name
:物流相关字段,根据需求可以选择性填写或留空。 -
drp_co_name
:出库类型。固定值为“采购退料”。{"field":"drp_co_name","label":"出库类型","type":"string","value":"采购退料"}
-
warehouse
:分仓编号。映射金蝶中的F_POKM_JSTSTOCKNUMBER2。{"field":"warehouse","label":"分仓","type":"string","value":"{F_POKM_JSTSTOCKNUMBER2}"}
3. 数据操作配置
为了确保数据能够正确地从源平台转换并写入目标平台,我们需要定义操作方法。在本例中,我们使用merge方法,将金蝶中的FBillNo、F_POKM_JSTSTOCKNUMBER、F_POKM_JSTSTOCKNUMBER2作为合并依据,生成请求体。
{
"operation":{
"method":"merge",
"field":"FBillNo,F_POKM_JSTSTOCKNUMBER,F_POKM_JSTSTOCKNUMBER2",
"bodyName":"list",
"header":["FBillNo","F_POKM_JSTSTOCKNUMBER","F_POKM_JSTSTOCKNUMBER2"],
"body":["FMATERIALID_FNumber","FRMREALQTY"],
"bodySum":["FRMREALQTY"]
}
}
总结技术要点
通过上述配置,我们实现了将金蝶采购退料单数据转换并写入聚水潭其他出库单的全过程。在这个过程中,关键在于准确映射和转换字段,并确保请求体符合目标平台API接口的要求。这种方式不仅提高了数据处理效率,还保证了数据的一致性和准确性,为业务流程的顺利进行提供了可靠保障。