金蝶云星空数据集成到轻易云集成平台——案例分享:[联动]-金蝶销售出库单查询
随着企业数字化转型的不断深入,各部门系统间的数据交互需求日益增多。在这一背景下,如何实现稳定、公正且高效的数据对接成为了各大企业亟待解决的问题。在本文中,我们将详细探讨一个真实运行中的技术方案——通过轻易云集成平台,实现金蝶云星空销售出库单数据的实时、高效同步。该方案的具体名称为:[联动]-金蝶销售出库单查询。
首先,为了确保从金蝶云星空系统获取的数据准确无误,我们调用其提供的executeBillQuery
接口来进行销售出库单数据的抓取。这一步骤不仅涉及到接口调用和分页处理,同时需要注意限流机制,以避免频繁请求导致API服务端过载。此外,为应对潜在的数据格式差异问题,我们通过定制化的数据映射功能,将二者之间不同结构的数据转换为相同格式并进行后续操作。
接下来,在数据写入阶段,通过轻易云集成平台提供的写入API,把从金蝶云星空获取到的大量销售信息快速、批量地导入至目标数据库。为了增强可靠性,该过程中还引入了异常处理与错误重试机制,一旦出现网络延迟或其他不可预见的问题,可自动重新尝试连接并恢复传输,从而保障整个流程的不间断性。
最后,整个过程将在透明可视化的平台上监控,每个环节、每条数据流都能实时查看和跟踪。不仅有效提升业务透明度,还使得问题定位与解决变得更加直观迅速。
在此案例开头部分我们重点讲述了应用于[联动]-金蝶销售出库单查询项目中的关键技术点,其核心内容包括:如何利用executeBillQuery
接口高效获取源数据、大规模快速写入、以及针对分页与限流等技术挑战提出解决方案。在接下来的部分中,我们会更详细地描述具体实施步骤及代码示例,以便读者能够参考借鉴实际操作经验。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取销售出库单数据并进行加工处理。
接口配置与调用
首先,我们需要配置元数据以便正确调用金蝶云星空的executeBillQuery
接口。以下是元数据配置的详细信息:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FEntity_FENTRYID",
"name": "FBillNo",
"idCheck": true,
"request": [
{"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"},
{"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"销售组织","value":"FSaleOrgId.FNumber"},
{"field":"FCustomerID_FNumber","label":"客户编码","type":"string","describe":"客户编码","value":"FCustomerID.F.Number"},
{"field":"FCustomerID_FName","label":"客户名称","type":"string","describe":"客户名称","value":"FCustomerID.FName"},
{"field":"FStockOrgId_FNumber","label":"发货组织","type":"string","describe":"发货组织","value":"FStockOrgId.FNumber"},
{"field":"FMaterialID_FNumber","label":"物料编码","type":"string","describe":"物料编码","value":"FMaterialID.F.Number"},
{"field": "FMustQty", "label": "应发数量", "type": "string", "describe": "应发数量", "value": "FMustQty"},
{"field": "FRealQty", "label": "实发数量", "type": "string", "describe": "实发数量", "value": "FRealQty"},
{"field": "FPrice", "label": "单价", "type": "string", "describe": "单价", "value": "FPrice"},
{"field": “FTaxPrice”, “label”: “含税单价”, “type”: “string”, “describe”: “含税单价”, “value”: “FTaxPrice”},
{"field”: “FIsFree”, “label”: “是否赠品”, “type”: “string”, “describe”: “是否赠品”, “value”: “FIsFree”},
{"field”: “FLot”, “label”: “批号”, “type”: “string”, “describe”: “批号”, “value”:“FLot”},
{"field”:“FProduceDate”,“label”:“生产日期”,“type”:“string”,“describe”:”生产日期”,”value”:” FProduceDate”},
{“field”:” FExpiryDate”,” label”:”有效期至”,” type”:” string”,” describe”:”有效期至”,” value”:” FExpiryDate”},
{“ field ”:” FEntryTaxRate ”,” label ”:”税率%”,” type ”:” string ”,” describe ”:”税率%”,” value ”:” FEntryTaxRate ”},
{“ field ”:” FEntryTaxAmount ”,” label ”:”税额”," type ":" string "," describe ":"税额"," value ":" FEntryTaxAmount "},
{“ field ”:" FAmount "," label ":"金额"," type ":" string "," describe ":"金额"," value ":" FAmount "},
{“ field ”:“ FAllAmount”,“ label ”:“价税合计”,“ type ”:“ string”,“ describe ”:“价税合计”,“ value ”:“ FAllAmount "},
{“ field ”:“ FStockID_FNumber”,“ label ”:“仓库”,“ type ”:“ string”,“ describe :”“仓库”,“ value :”“ FStockID.F.Number "},
{“ field :”“ FEntrynote”,“ label :”“备注”,“ type :”“ string”,“ describe :”“备注”,“ value :”“ FEntrynote "},
{“ field :”“ FSrcType”,“ label :”“源单类型”,“ type :”“ string”,“ describe :”“源单类型”,“ value :”“ FSrcType "},
{“ field :”“ FSrcBillNo”,“ label :”“源单编号”,“ type :”“ string”,“ describe :”“源单编号”,“ value :”“ FSrcBillNo "},
{“ field :”“ FSoorDerno”,“ label :”“订单单号”,“ type :”“ string”,“ describe :”“订单单号”," value ":" FSoorDerno "},
{“ field :"" FDiscountRate "," label ":"折扣率% "," type ":" string "," describe ":"折扣率% "," value ":" FDiscountRate "},
{“ field :"" FDiscount "," label ":"折扣额 "," type ":" string "," describe ":"折扣额 "," value ":"" FDiscount "},
{“ field :"" FPriceDiscount "," label ":"单价折扣 "," type ":"" string "," describe ":"" single price discount ", "" value ": "" PriceDiscount ""} ,
{""字段"": ""材料名称"", ""标签"": ""材料名称"", ""类型"": ""字符串"", ""描述"": ""材料名称"", ""值"": ""材料名称""} ,
{""字段"": ""FID"", ""标签"": ""主键 ID"", ""类型"": ""字符串"", ""描述"": ""主键 ID"", ""值"": ""FID""} ,
{""字段"": ""实体 _ENTRYID "", 标签:"明细 id",类型:"字符串",描述:"明细 id",值:"实体_ENTRYID"} ,
{"字段":"_TLWD_文本",标签:"平台订单号",类型:"字符串",值:"_TLWD_文本"}
],
其他请求:[{
字段:限制,标签:最大行数,类型:字符串,描述:金蝶的查询分页参数,值:"{PAGINATION_PAGE_SIZE}" },
字段: StartRow, 标签: 开始行索引, 类型: 字符串, 描述: 金蝶的查询分页参数, 值: "{PAGINATION_START_ROW}" },
字段: TopRowCount, 标签: 返回总行数, 类型: 字符串, 描述: 金蝶的查询分页参数 },
字段: FilterString, 标签: 过滤条件, 类型: 字符串, 描述: 示例写法 FSupplierId.F.Number = 'VEN00010' and ApproveDate>=," 值:" ApproveDate>='{{LAST_SYNC_TIME|datetime}}'" },
字段: FieldKeys, 标签: 需查询的字段 key 集合, 类型: 字符串, 描述: 金蝶分录主键 ID 格式:FPOOrderEntry_FEntryId ,其它格式 PurchaseOrgId.Number },
字段:FormId,标签:业务对象表单 Id,类型:字符串,描述:必须填写金蝶的表单 ID 如:PUR_PurchaseOrder,值:SAL_OUTSTOCK }
],
autoFillResponse:true
}
请求参数解析
在上述配置中,我们定义了多个请求参数,这些参数用于指定我们希望从金蝶云星空获取的数据字段。以下是几个关键字段及其作用:
FBillTypeID_FNumber
: 单据类型编号,用于标识不同类型的销售出库单。FBillNo
: 单据编号,是每个销售出库单的唯一标识。FDate
: 日期,用于筛选特定时间范围内的销售出库单。FSaleOrgId_FNumber
: 销售组织编号,用于区分不同销售部门的数据。FCustomerID_FNumber
和FCustomerID_FName
: 客户编码和客户名称,用于标识和显示客户信息。FMaterialID_FNumber
: 物料编码,用于标识销售出库中的具体物料。FMustQty
和FRealQty
: 应发数量和实发数量,用于记录计划与实际发货量。
此外,还有一些辅助参数如Limit
、StartRow
、FilterString
等,用于控制查询结果的分页和过滤条件。
数据请求与清洗
在完成元数据配置后,我们可以通过轻易云平台发送POST请求来调用金蝶云星空接口。示例请求如下:
{
"_apiName_": "/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc",
"_method_": {
"_post_":{
"_url_":"",
"_data_":{
"_formid_":"",
"_data_":{
"_FieldKeys_":"",
"_FilterString_":"",
"_TopRowCount_":"",
"_Limit_":"",
"_StartRow_" :""
}
}
}
}
}
在接收到响应后,我们需要对数据进行清洗和转换,以确保其符合目标系统或业务需求。例如,可以对日期格式进行标准化处理,对数值字段进行单位转换等。
数据转换与写入
清洗后的数据可以进一步转换为目标系统所需的数据格式,并通过轻易云平台写入到目标数据库或应用系统中。这一步通常包括将JSON格式的数据映射到关系数据库表结构中,并执行插入或更新操作。
通过上述步骤,我们实现了从金蝶云星空获取销售出库单数据并进行加工处理,为后续的数据分析和业务决策提供了可靠的数据支持。
使用轻易云数据集成平台进行ETL转换与写入的技术案例
在数据集成生命周期的第二步,我们重点关注将已经集成的源平台数据进行ETL转换,转为目标平台所能够接收的格式,并最终写入目标平台。本文将通过一个具体的技术案例来详细说明这一过程。
数据请求与清洗
首先,我们需要从源平台获取销售出库单的数据。假设我们已经完成了这一阶段,获取到了原始数据。接下来,我们将重点放在如何将这些数据进行转换,以符合轻易云集成平台API接口所需的格式。
数据转换与写入
在这个阶段,我们需要使用ETL(Extract, Transform, Load)工具对数据进行处理和转换。以下是一个具体的技术案例,展示如何配置和使用元数据,将数据转换并写入目标平台。
元数据配置
根据提供的元数据配置,我们可以看到以下关键信息:
{
"api": "写入空操作",
"effect": "EXECUTE",
"method": "POST",
"number": "number",
"id": "id",
"name": "编码",
"idCheck": true
}
这些信息指示我们需要通过POST方法调用“写入空操作”API,将处理后的数据发送到目标平台。以下是具体步骤:
- 提取(Extract):从源平台提取销售出库单的数据。
- 转换(Transform):根据目标API接口要求,对提取的数据进行格式化和转换。
- 加载(Load):通过API接口将转换后的数据写入目标平台。
实际操作步骤
-
提取销售出库单数据
假设我们从源系统中提取到了以下JSON格式的数据:
[ { "number": "SO12345", "id": 1001, "name": "产品A" }, { "number": "SO12346", "id": 1002, "name": "产品B" } ]
-
数据清洗与验证
在清洗过程中,我们需要确保每条记录都包含必要的字段,如
number
、id
和name
。如果某些记录缺少这些字段,则需要进行补全或剔除。同时,根据元数据配置中的idCheck: true
,我们需要确保每个ID都是唯一且有效的。 -
数据转换
根据元数据配置,我们需要将上述JSON格式的数据转换为符合目标API接口要求的格式。假设目标API接口要求如下:
{ "operationType": "EXECUTE", "data": [ { "number": "SO12345", "id": 1001, "codeName": "产品A" }, { "number": "SO12346", "id": 1002, "codeName": "产品B" } ] }
在这个过程中,我们将原始字段
name
重命名为codeName
,并添加一个新的字段operationType
,其值为"EXECUTE"。 -
加载到目标平台
最后一步,通过POST方法调用“写入空操作”API,将处理后的数据发送到目标平台。以下是Python代码示例:
import requests import json url = 'https://api.qingyiyun.com/write' headers = {'Content-Type': 'application/json'} data = { 'operationType': 'EXECUTE', 'data': [ {'number': 'SO12345', 'id': 1001, 'codeName': '产品A'}, {'number': 'SO12346', 'id': 1002, 'codeName': '产品B'} ] } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to the target platform.') else: print('Failed to write data:', response.text)
通过上述步骤,我们成功地将源平台的数据进行了ETL处理,并通过轻易云集成平台API接口将其写入到目标平台。这一过程不仅保证了数据的一致性和完整性,还提升了整体业务流程的效率和透明度。