采购入库单(委外)OK:金蝶云星空到金蝶云星空的数据集成方案
在当今复杂多变的商业环境中,精准、高效的数据集成是确保企业运营流畅的关键。本文将重点介绍如何利用轻易云数据集成平台,将采购入库单(委外)的数据从一个金蝶云星空系统高效、准确地传输到另一个金蝶云星空系统。
针对大量的采购入库单数据,我们采用了executeBillQuery
接口进行源系统的数据抓取,并通过batchSave
接口实现目标系统的数据写入。整个过程中,我们充分利用了轻易云平台强大的高吞吐量支持和实时监控功能,以保障数据处理的时效性和稳定性。
首先,通过配置轻易云的平台,调用源系统API executeBillQuery
定时可靠地抓取目标表中的最新数据。在这个阶段,我们部署了一整套异常检测和错误重试机制,确保在网络波动或其他不确定因素导致异常时,不会发生数据丢失。此外,自定义转换逻辑被广泛应用于这一环节,用以解决两套金蝶云星空之间可能存在的数据格式差异问题。
为保证批量写入操作的安全稳定,在使用 batchSave
接口时,同样实现了对分页和限流问题的有效管理。我们的设计工具提供了集中化可视化界面,这不仅使整个流程更加直观,同时也能实时展示每个步骤执行情况,使得运维团队可以快速定位并处理潜在异常。
通过以上的一系列技术措施,该方案成功实现了采购入库单(委外)业务场景下,两套金蝶云星空系統之间无缝且高效的大规模数据转移与更新。从而大幅提高整体业务处理效率及精确度,为企业稳健发展提供坚实基础。
调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用金蝶云星空接口executeBillQuery
来获取采购入库单(委外)数据,并进行初步加工。
接口配置与请求参数
为了实现从金蝶云星空获取采购入库单数据,我们需要配置接口和请求参数。以下是元数据配置的关键部分:
{
"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": "FilterString",
"label": "过滤条件",
"type": "string",
"describe": "",
"value":
`FApproveDate>='{{LAST_SYNC_TIME|date}}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )`
},
{"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`
}
]
}
请求与响应处理
-
构建请求: 根据元数据配置,构建POST请求。主要包括以下几个部分:
- API路径:
/executeBillQuery
- 请求方法:
POST
- 表单ID:
STK_InStock
- 分页参数:每页500条记录
- 查询字段:根据需求选择所需字段
- 过滤条件:如
FApproveDate>='{{LAST_SYNC_TIME|date}}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )
- API路径:
-
发送请求: 使用HTTP客户端(如axios、requests等)发送构建好的请求到金蝶云星空API。
-
处理响应: 响应返回的数据需要进行解析和处理。以下是一个示例代码片段,用于发送请求和处理响应:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
'FormId': 'STK_InStock',
'FieldKeys': 'FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FOwnerTypeIdHead,FOwnerIdHead.FNumber',
'FilterString': f"FApproveDate>='{last_sync_time}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )",
'Limit': 500,
'StartRow': start_row
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据处理逻辑
for entry in data:
process_entry(entry)
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换,以便后续的数据写入操作。常见的数据清洗操作包括:
- 字段重命名:将原始字段名转换为目标系统所需的字段名。
- 数据类型转换:确保所有字段的数据类型符合目标系统要求。
- 缺失值处理:填补或删除缺失值。
例如,将原始数据中的日期字符串转换为标准日期格式:
from datetime import datetime
def process_entry(entry):
entry['FDate'] = datetime.strptime(entry['FDate'], '%Y-%m-%d')
# 更多清洗和转换逻辑...
小结
通过调用金蝶云星空接口executeBillQuery
,我们能够高效地获取采购入库单(委外)数据,并对其进行初步加工。这一步骤为后续的数据转换与写入奠定了坚实基础。在实际操作中,细致的元数据配置和灵活的数据处理逻辑是确保集成成功的关键。
轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口
在数据集成过程中,将源平台的数据转换为目标平台可接受的格式,并通过API接口写入目标平台是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将采购入库单(委外)数据转换为金蝶云星空API接口所需的格式,并最终写入目标平台。
API接口配置
我们使用的是金蝶云星空的batchSave
API接口,采用POST请求方式。以下是该接口的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,FDate,FSupplierId_FName,FBillTypeID_FNumber",
"bodyName": "details",
"header": ["FBillNo", "FDate", "FSupplierId_FName", "FBillTypeID_FNumber", "FPurchaseOrgId_FNumber"],
"body": ["FMaterialId_FNumber", "FRealQty", "FTaxPrice", "FAllAmount", "FDiscount", "FPurchaseOrgId_FNumber"]
},
...
}
数据映射与转换
在进行ETL转换时,需要将源数据字段映射到目标平台字段,并进行必要的数据转换。以下是关键字段的映射和转换规则:
-
单据类型 (FBillTypeID):
- 源字段:
FBillTypeID
- 转换:使用
ConvertObjectParser
解析器,将其转换为金蝶云星空所需的格式。 - 配置示例:
{ "field": "FBillTypeID", ... "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, ... }
- 源字段:
-
业务类型 (FBusinessType):
- 固定值:"WW"
- 配置示例:
{ "field": "FBusinessType", ... "value": "WW" }
-
单据编号 (FBillNo):
- 源字段:
FBillNo
- 配置示例:
{ "field": "FBillNo", ... "value": "{FBillNo}" }
- 源字段:
-
入库日期 (FDate):
- 源字段:
FDate
- 配置示例:
{ "field": "FDate", ... "value": "{FDate}" }
- 源字段:
-
采购组织 (FPurchaseOrgId):
- 源字段:
FPurchaseOrgId_FNumber
- 转换规则:根据不同的采购组织编码进行转换。
- 配置示例:
{ ... "_function case when '{FPurchaseOrgId_FNumber}' ='100' then '104' when '{FPurchaseOrgId_FNumber}' ='202' then '120' when '{FPurchaseOrgId_FNumber}' ='204' then '121' else '109' end" }
- 源字段:
-
供应商 (FSupplierId):
- 源字段:
FSupplierId_FName
- 转换规则:当供应商名称为“虚拟组织”时,替换为特定供应商名称。
- 配置示例:
{ ... "_function case when '{FSupplierId_FName}' ='虚拟组织' then '广州市恒绍电子科技有限公司(迪锋)' else '{FSupplierId_FName}' end" }
- 源字段:
明细信息处理
明细信息部分需要特别处理,以下是关键字段的配置:
-
物料编码 (FMaterialId):
- 源字段:
FMaterialId_FNumber
- 配置示例:
{ ... "{FMaterialId_FNumber}" }
- 源字段:
-
实收数量 (FRealQty):
- 源字段:
details.FRealQty
- 配置示例:
{ ... "{{details.FRealQty}}" }
- 源字段:
-
含税单价 (FTaxPrice):
- 源字段:
details.FTaxPrice
- 配置示例:
{ ... "{{details.FTaxPrice}}" }
- 源字段:
-
价税合计 (FAllAmount):
- 源字段:
details.FAllAmount
- 配置示例:
{ ... "{{details.FAllAmount}}" }
- 源字段:
-
折扣额 (FDiscount):
- 源字段:
details.FDiscount
- 配置示例:
{ ... "{{details.FDiscount}}" }
- 源字段:
请求体构建
最终构建请求体时,需要将所有配置好的字段按照金蝶云星空API要求进行组合。以下是一个完整请求体的简化示例:
{
...
{
...,
...,
...,
...,
...,
...,
...,
...,
...,
...,
...,
...,
...,
...,
details: [
{
FMaterialId: "{FMaterialId}",
FRealQty: "{{details.FRealQty}}",
FTaxPrice: "{{details.FTaxPrice}}",
FAllAmount: "{{details.FAllAmount}}",
FDiscount: "{{details.FDiscount}}"
},
// More detail entries...
]
}
}
通过上述配置和处理,我们可以将源平台的数据成功转化为金蝶云星空API所需的格式,并通过轻易云数据集成平台完成最终的数据写入操作。这一过程确保了数据的一致性和准确性,同时提升了业务处理效率。