审核销售出库单(金蝶->金蝶)数据集成案例
在本文中,我们将详细探讨如何实现金蝶云星空之间的销售出库单数据审核与对接。本项目通过轻易云数据集成平台,利用executeBillQuery接口抓取待审核的销售出库单,并使用Audit接口完成相应的数据写入操作。
API调用与分页处理
为了确保从源系统(即首个金蝶云星空实例)获取到完整且精准的数据,我们采用了executeBillQuery接口。考虑到API返回结果可能会因为数据量大而被分页,因此我们设计了一套高效的分页机制,每次请求特定数量的数据并逐页获取,直至所有待审核记录全部抓取完毕。这种做法不仅提升了抓取效率,还有效避免了因限流策略造成的数据遗漏问题。
# 示例代码:调用executeBillQuery并处理分页
def fetch_data():
page = 1
data_list = []
while True:
response = call_execute_bill_query_api(page)
if not response['data']:
break
data_list.extend(response['data'])
page += 1
return data_list
批量快速写入与格式转换
由于两端都是金蝶云星空系统,在批量写入时需要特别注意两者之间可能存在细微的格式差异。我们创建了一套自动化的数据映射规则,确保每条记录在传输和存储过程中格式统一。在这一环节,通过优化批量导入技术,我们可以极大提高数据写入速度,从而缩短整体流程时间。
# 示例代码:调用Audit API进行批量写入,并处理响应结果
def batch_audit(data_list):
mapped_data = map_data_to_audit_format(data_list)
response = call_audit_api(mapped_data)
handle_response(response)
实时监控与异常重试机制
为了实时跟踪整个对接过程中的每一个环节,我们构建了一整套监控和日志记录体系。同时,为应对偶发性的网络波动或系统错误,实现了针对性强、灵活度高的异常重试机制。当某一阶段发生故障时,通过捕获和分析错误信息,可迅速定位问题所在并进行自动化重试,极大增强了整个流程的稳定性和可靠性。
# 示例代码:简要展示如何实现简单的一次失败重试逻辑
def safe_call(func, retries=3):
for _ in range(retries):
try:
return func()
except Exception as e:
log_error(e)
audit_result = safe_call(lambda: batch_audit(sales_outbound_orders))
上述步骤为本案例提供了
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统获取数据。在本案例中,我们将重点讨论如何通过调用金蝶云星空的executeBillQuery
接口来获取销售出库单的数据,并进行初步加工。
接口调用配置
首先,我们需要了解executeBillQuery
接口的基本配置。根据提供的元数据配置,接口的请求方法为POST
,主要参数包括单据编号(FBILLNO)和唯一标识(FID)。此外,还需要设置分页参数和过滤条件。
以下是具体的元数据配置:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBILLNO",
"id": "FID",
"pagination": {
"pageSize": 500
},
"request": [
{"field": "FID", "label": "FID", "type": "string", "value": "FID"},
{"field": "FBILLNO", "label": "单据编号", "type": "string", "value": "FBILLNO"}
],
"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":"FSaleOrgId.FNumber='102' and FDocumentStatus <>'C'"},
{"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":"SAL_OUTSTOCK"}
]
}
请求构建
基于上述配置,我们可以构建一个完整的请求体。假设我们希望查询销售组织编号为102且单据状态不等于C的销售出库单,且每次请求返回最多500条记录。请求体示例如下:
{
"FormId": "SAL_OUTSTOCK",
"FieldKeys": ["FID", "FBILLNO"],
"FilterString": "(FSaleOrgId.FNumber='102' and FDocumentStatus <>'C')",
"Limit": 500,
"StartRow": 0,
// 可选项,如果需要返回总行数
// TopRowCount: true
}
数据处理
一旦成功获取到数据,需要对其进行初步加工。通常包括以下几个步骤:
- 数据清洗:去除无效或重复的数据。
- 数据转换:将原始数据转换为目标系统所需格式。
- 字段映射:根据业务需求映射字段,例如将金蝶中的字段名转换为目标系统中的字段名。
例如,假设我们从金蝶获取到以下数据:
[
{"FID":12345,
"FBILLNO":"SO20231001"},
{"FID":12346,
"FBILLNO":"SO20231002"}
]
我们可以将其转换为目标系统所需格式:
[
{"id":12345,
"billNo":"SO20231001"},
{"id":12346,
"billNo":"SO20231002"}
]
实践案例
在实际操作中,我们可以使用轻易云平台提供的可视化工具来配置和执行上述步骤。通过拖拽组件和设置参数,可以快速完成从数据请求到初步加工的一系列操作。
- 配置API调用:在平台上选择“API调用”组件,输入接口地址和请求体。
- 设置分页:使用“分页”组件设置每页大小和起始行索引。
- 添加过滤条件:通过“过滤器”组件添加自定义过滤条件。
- 映射字段:使用“字段映射”组件,将源系统字段映射到目标系统字段。
通过这些步骤,我们可以高效地完成从金蝶云星空获取销售出库单并进行初步加工,为后续的数据转换与写入奠定基础。
轻易云数据集成平台:ETL转换与金蝶云星空API接口集成案例
在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL转换,转为目标平台——金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何通过轻易云数据集成平台实现这一过程。
API接口配置与元数据解析
在本案例中,我们需要将销售出库单的数据从源系统转换并写入金蝶云星空。根据提供的元数据配置,目标API接口为Audit
,使用POST方法进行数据传输。以下是详细的元数据配置解析:
{
"api": "Audit",
"method": "POST",
"idCheck": true,
"request": [
{"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "SAL_OUTSTOCK"},
{"field": "Numbers", "label": "编码集合", "type": "string"},
{"field": "Ids", "label": "id集合", "type": "string", "value": "{FID}"},
{"field": "InterationFlags", "label": "交互标志集合", "type": "string", "describe": "字符串类型,分号分隔,格式:\"flag1;flag2;...\"(非必录) 例如(允许负库存标识:STK_InvCheckResult)"},
{"field": "IgnoreInterationFlag", "label": "是否允许忽略交互", "type": "string", "describe": "布尔类型,默认true(非必录)", "value":"true"},
{"field":"NetworkCtrl","label":"是否启用网控","type":"string","describe":"布尔类型,默认false(非必录)","value":"false"},
{"field":"IsVerifyProcInst","label":"检验单据关联运行","type":"string","describe":"是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)","value":"false"}
]
}
数据转换与映射
- FormId: 固定值
SAL_OUTSTOCK
,表示销售出库单。 - Numbers: 编码集合,需要从源系统提取并映射到此字段。
- Ids: id集合,对应源系统中的
FID
字段。 - InterationFlags: 可选字段,用于设置交互标志。
- IgnoreInterationFlag: 默认为
true
,表示允许忽略交互。 - NetworkCtrl: 默认为
false
,表示不启用网控。 - IsVerifyProcInst: 默认为
false
,表示不检验单据关联运行中的工作流实例。
实际操作步骤
-
提取源系统数据 首先,从源系统提取销售出库单相关的数据。假设源系统提供了一个包含多个销售出库单信息的JSON文件,我们需要对其进行解析和处理。
-
数据清洗 对提取的数据进行清洗和规范化处理,以确保所有必要字段都符合目标API接口要求。例如,将源系统中的日期格式转换为金蝶云星空所需的格式。
-
构建请求体 根据元数据配置构建请求体。例如,对于一个包含多个出库单的数据,可以构建如下请求体:
{
![如何对接钉钉API接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)