从金蝶云星空到金蝶云星空的数据集成案例
在本次技术分享中,我们主要探讨如何利用轻易云数据集成平台,将“采购入库单(除了委外,不含艾尔时)OK 目前在用”的数据从一个金蝶云星空实例顺利迁移到另一实例。由于系统的复杂性和业务需求的多样性,确保数据全量、精准、不漏单地完成对接尤为关键。
数据获取与写入配置
首先,使用executeBillQuery API接口从源系统中拉取所需的数据。这个过程需要特别注意分页处理及限流问题,以避免因大量请求而导致接口超载或响应延迟。我们自定义了查询逻辑来适应特定业务场景,并结合API资产管理功能,通过统一控制台全面掌握各个API调用状态,从而进行有效资源优化配置。
接下来是批量数据的快速写入,这一步采用batchSave API接口。在实际操作中,为保证高吞吐量,我们设计了一套并行处理机制,有效提升了数据处理速度和效率。同时,通过可视化界面实时监控整个流程,以便及时发现并解决任何潜在的问题。
实时监控与告警机制
为了确保每一次集成都能成功且不出现遗漏,我们引入了集中式监控和告警系统。不仅可以追踪每个任务的状态,还能实时检测异常情况,一旦发现错误就会触发重试机制。此外,通过细致的日志记录,可以回溯过去发生的问题,为后续优化提供参考依据。
以上简要介绍展示出如何通过合理配置API调用、优化性能以及严谨的监控手段,实现两个金蝶云星空实例间的数据完美对接。在下一节内容中,我们将详细讲解具体步骤及实现方式,包括自定义的数据转换逻辑与映射规则等。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取采购入库单数据并进行初步加工。
接口配置与请求参数
首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,我们可以构建一个完整的API请求。
{
"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":
`示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=`,
`value`: `FDate >='{{LAST_SYNC_TIME|date}}' and FBillTypeID.FNumber <> 'RKD03_SYS' and FBillTypeID.FNumber<>'RKD17_SYS' and FSupplierId.FName NOT LIKE '%虚拟组织%' and FSupplierId.FName<> 'G0175'`
},
{
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'
}
]
}
构建请求体
根据上述元数据配置,我们可以构建一个完整的请求体。以下是一个示例请求体:
{
"FormId": "STK_InStock",
"FieldKeys": [
"FID",
...
],
...
}
调用API并处理响应
使用轻易云平台提供的API调用功能,我们可以发送上述请求,并处理返回的数据。以下是一个示例代码片段:
import requests
url = "<轻易云平台API地址>"
headers = {
'Content-Type': 'application/json'
}
payload = {
# 根据元数据配置构建请求体
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
# 对返回的数据进行处理和清洗
else:
print(f"Error: {response.status_code}")
数据清洗与转换
在获取到原始数据后,我们需要对其进行清洗和转换,以便后续的数据写入操作。以下是一些常见的数据清洗步骤:
- 字段重命名:将原始字段名转换为目标系统所需的字段名。
- 数据类型转换:确保所有字段的数据类型符合目标系统要求。
- 缺失值处理:对缺失值进行填充或删除。
例如:
def clean_data(data):
cleaned_data = []
for record in data:
cleaned_record = {
# 重命名字段
'id': record['FInStockEntry_FEntryId'],
...
}
cleaned_data.append(cleaned_record)
return cleaned_data
cleaned_data = clean_data(response.json())
通过以上步骤,我们可以高效地调用金蝶云星空接口executeBillQuery
,获取并加工采购入库单数据,为后续的数据集成打下坚实基础。
使用轻易云数据集成平台将采购入库单数据转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将采购入库单的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
元数据配置解析
在进行ETL转换之前,必须对元数据配置有深入理解。以下是关键的元数据配置字段及其解析:
-
API和方法
{"api":"batchSave","method":"POST"}
这里指定了要调用的金蝶云星空API接口
batchSave
,并使用HTTP POST方法进行数据提交。 -
ID检查
{"idCheck":true}
表示在处理过程中需要进行ID检查,以确保唯一性和数据完整性。
-
操作定义
{ "method":"merge", "field":"FBillNo,FDate,FSupplierId_FName,FSettleCurrId_FNumber,FPurchaseOrgId_FNumber", "bodyName":"details", "header":["FBillNo","FDate","FSupplierId_FName","FSettleCurrId_FNumber","FPurchaseOrgId_FNumber","FExchangeRate"], "body":["FMaterialId_FNumber","FRealQty","FTaxPrice","FAllAmount","FDiscount","FPurchaseOrgId_FNumber"] }
这里定义了操作方法为
merge
,并指定了头部和主体字段。其中,头部字段包括单据编号、日期、供应商名称、结算货币编号、采购组织编号和汇率;主体字段包括物料编码、实收数量、含税单价、价税合计、折扣额和采购组织编号。 -
请求字段映射
-
单据类型
{"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{FBillTypeID_FNumber}"}
使用
ConvertObjectParser
解析器,将源平台的单据类型编号转换为目标平台所需格式。 -
业务类型
{"field":"FBusinessType","label":"业务类型","type":"string","value":"CG"}
固定值设置为“CG”,表示采购业务类型。
-
单据编号
{"field":"FBillNo","label":"单据编号","type":"string","value":"{FBillNo}-1"}
将源平台的单据编号后加“-1”以确保唯一性。
-
入库日期
{"field":"FDate","label":"入库日期","type":"string","value":"{FDate}"}
直接映射源平台的日期字段。
-
收料组织
{ "field":"FStockOrgId", "label":"收料组织", "type":"string", "parser":{"name":"ConvertObjectParser","params":"FNumber"}, "value": "_function case when '{FPurchaseOrgId_FNumber}' ='100' then '125' when '{FPurchaseOrgId_FNumber}' ='202' then '126' when '{FPurchaseOrgId_FNumber}' ='204' then '127' else '109' end" }
根据采购组织编号动态确定收料组织。
-
-
财务信息和明细信息
财务信息和明细信息是嵌套对象,需要特别注意其结构:
{
"field": "FInStockFin",
"label": "财务信息",
"type": "object",
"children": [
{
"field": "FSettleOrgId",
...
},
...
]
}
财务信息包含结算组织、付款组织和汇率等字段;明细信息则包含物料编码、实收数量、含税单价等多个子字段。
数据转换与写入流程
- 数据请求与清洗:首先从源系统请求原始数据,并进行必要的数据清洗操作,如去除无效记录或修正错误数据。
- 数据转换:根据上述元数据配置,将清洗后的原始数据映射到目标系统所需的格式。使用轻易云提供的解析器(如
ConvertObjectParser
)进行必要的数据转换。 - 构建请求体:根据目标API接口要求,构建HTTP请求体。确保所有必填字段都已正确映射,并且嵌套结构符合目标系统要求。
- 发送请求:通过HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口。处理响应结果,根据需要进行日志记录或错误处理。
技术案例
假设我们有一条来自源系统的采购入库单记录,其部分内容如下:
{
"FBillTypeID_FNumber": "PUR001",
"FBillNo": "PO12345",
"FDate": "2023-10-01",
...
}
经过ETL转换后,我们得到如下格式的数据:
{
"FormId": "STK_InStock",
...
"Model": {
...
"FBillNo": "PO12345-1",
...
"Details": [
{
...
"FMaterialId_FNumber": "...",
...
}
]
}
}
最后,通过HTTP POST方法将该JSON对象发送至金蝶云星空API接口,实现数据写入。
以上就是使用轻易云数据集成平台将采购入库单的数据转换并写入金蝶云星空API接口的详细过程。在实际应用中,可以根据具体需求调整元数据配置,以满足不同业务场景下的数据集成需求。