金蝶云星空数据集成到管易云的采购入库对接案例
在实施数字化供应链管理时,系统间的数据交换至关重要。本文将分享如何通过轻易云平台,实现金蝶云星空与管易云之间的无缝数据集成,以“采购入库对接-已测试”为实际案例。本案集中解决了以下关键问题:确保数据不漏单、大量数据快速写入、接口分页及限流处理,以及异常处理与错误重试机制。
一、API调用与实现
为了从金蝶云星空获取准确的采购入库信息,我们使用其提供的executeBillQuery
接口。此接口能高效地抓取并传递所需业务数据。另一方面,在向管易云提交这些批量集中的采购入库记录时,则调用其gy.erp.stock.other.in.add
API完成录入操作。
二、避免漏单和快速写入
保证每条记录都完整无误地由金蝶端写入到管易端,是本次集成的重要目标之一。这要求我们不仅要实时监控整个流程,还需在出现任何网络波动或服务中断时,能够自动进行错误重试。此外,为了应对大批量、高频率的数据写操作,我们设计了一套高效的数据缓冲策略,使得大量记录可以迅速而稳定地被录入到目的系统中。
三、定制化映射及格式差异处理
由于金蝶和管易两大平台各自采用不同的数据结构和字段定义,这就需要我们在执行过程中做适当的数据转换和字段映射工作。利用轻易云的平台特性,可以灵活配置规则,通过脚本等方式改变源数据格式,使之符合目标系统要求,从而减少人工干预,提高整体效率。
以上是本次技术分享案例的核心开篇内容。在后续部分,将具体介绍每一个步骤与细节,帮助大家全面了解实际应用过程中的各种最佳实践方法以及潜在问题解决方案。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取采购入库数据,并进行初步加工。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用金蝶云星空的executeBillQuery
接口。以下是关键的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FInStockEntry_FEntryId",
"name": "FBillNo",
"idCheck": true,
"request": [
{"field":"FInStockEntry_FEntryId","label":"id","type":"string","describe":"id","value":"FInStockEntry_FEntryId"},
{"field":"FID","label":"实体主键","type":"string","describe":"实体主键","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FDate","label":"入库日期","type":"string","describe":"入库日期","value":"FDate"},
{"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"},
{"field":"FSupplierId_FNumber","label":"供应商","type":"string","describe":"供应商","value":"FSupplierId.FNumber"},
{"field":"FStockDeptId_FNumber","label":"收料部门","type":"string","describe":"收料部门","value":"FStockDeptId.FNumber"},
{"field":"FCancelDate","label":"作废日期","type":"string","describe":"作废日期","value":"FCancelDate"},
{"field":"FApproveDate","label":"审核日期","type":"string","describe":"审核日期","value":"FApproveDate"},
{"field":...}
],
...
}
请求参数解析
-
基本字段:
FInStockEntry_FEntryId
: 入库分录ID,用于唯一标识每条记录。FID
: 实体主键。FBillNo
: 单据编号。FDate
: 入库日期。
-
业务字段:
FBillTypeID_FNumber
: 单据类型。FSupplierId_FNumber
: 供应商编号。FStockDeptId_FNumber
: 收料部门编号。
-
金额相关字段:
FTaxPrice
: 含税单价。FAmount
: 金额。FAllAmount
: 价税合计。
-
其他字段:
FMATERIALID_FBARCODE
: 条码。F_recipient
: 收件人。F_Receiving_phone_number
: 手机号码。
请求示例
为了从金蝶云星空获取采购入库的数据,我们需要构建一个POST请求。以下是一个示例请求体:
{
"FormId": "STK_InStock",
"FieldKeys": ["FID", "FBillNo", "FDate", ...],
"FilterString": "FApproveDate>='2023-01-01' and FBillTypeID.FNUMBER in('RKD12_SYS','RKD11_SYS')",
"Limit": 100,
"StartRow": 0
}
数据处理与清洗
在获取到原始数据后,我们需要对其进行清洗和初步加工。这一步通常包括以下几个方面:
- 数据格式转换:将日期、金额等字段转换为标准格式,确保后续处理的一致性。
- 缺失值处理:填补或删除缺失值,保证数据完整性。
- 字段映射:根据业务需求,将原始字段映射到目标系统的字段。
例如,对于日期字段,可以使用以下代码进行格式转换:
import datetime
def convert_date(date_str):
return datetime.datetime.strptime(date_str, '%Y-%m-%d').date()
data['FDate'] = data['FDate'].apply(convert_date)
数据写入准备
在完成数据清洗后,我们可以将其写入目标系统。在这一步中,需要确保数据格式和目标系统要求一致。例如,可以使用轻易云平台提供的API进行写入操作:
{
"api": "/targetSystem/writeData",
...
}
通过以上步骤,我们成功实现了从金蝶云星空获取采购入库数据并进行初步加工,为后续的数据集成奠定了基础。
数据请求与清洗
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,以便转为目标平台管易云API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。
API接口配置
根据提供的元数据配置,我们需要对接管易云的gy.erp.stock.other.in.add
接口。该接口用于处理采购入库的数据写入操作,支持POST请求。以下是主要字段和其对应的配置:
- 仓库代码(warehouse_code):对应金蝶系统中的
FStockId_FNumber
字段。 - 备注(note):格式为“金蝶采购入库-{FBillNo}”,其中
FBillNo
是金蝶系统中的单据编号。 - 入库类型代码(type):固定值为“001”。
- 第三方系统单号(wms_bizcode):由金蝶系统中的单据编号和一个随机数拼接而成,用于判断排重。
- 发货人信息:包括发货人姓名、手机、地址、省、市、区等,分别对应金蝶系统中的相关字段。
数据转换与写入
在数据转换过程中,我们需要将源平台的数据映射到目标平台所需的格式。这一过程主要涉及字段映射和数据清洗。
字段映射
字段映射是ETL过程中的关键步骤。以下是一些重要字段的映射关系:
-
仓库代码(warehouse_code)
{ "field": "warehouse_code", "value": "{FStockId_FNumber}" }
-
备注(note)
{ "field": "note", "value": "金蝶采购入库-{FBillNo}" }
-
第三方系统单号(wms_bizcode)
{ "field": "wms_bizcode", "value": "{FBillNo}-{random}" }
-
发货人信息
{ "field": "sender_name", "value": "{F_recipient}" }, { "field": "sender_mobile", "value": "{F_Receiving_phone_number}" }, { "field": "sender_address", "value": "{F_Shipping_address}" }, { "field": "sender_province", "value": "{F_economize}" }, { "field": "sender_city", "value": "{F_market}" }, { "field": "sender_district", "value": "{F_distinguish}" }
商品列表处理
商品列表是一个复杂的数据结构,需要特别注意其子项的处理。以下是商品列表中各个字段的映射关系:
-
商品代码(item_code)
{ "field": "item_code", "value": "{{items.FMaterialId_FNumber}}" }
-
规格代码(sku_code)
{ "field": "sku_code", "value": "{{items.FMaterialId_FNumber}}" }
-
数量(qty)
{ "field": "qty", "value": "{{items.FRealQty}}" }
-
入库日期(stockDate)
{ "field": "stockDate", "value": "{{items.FDate}}" }
数据清洗
在数据转换过程中,数据清洗也是一个重要环节。需要确保所有必填字段都有值,并且值的格式符合目标平台的要求。例如:
- 确保
warehouse_code
、note
、type
等字段不为空。 - 对于商品列表中的每一项,确保
item_code
和qty
等关键字段有值。
请求示例
最终生成的请求示例如下:
{
"api":"gy.erp.stock.other.in.add",
"method":"POST",
...
// 其他必要配置项
...
,"details":[
{
...
// 商品列表子项配置
...
,"item_code":"12345"
,"sku_code":"12345"
,"qty":"10"
,"stockDate":"2023-10-01"
}
]
}
通过上述步骤,我们可以实现从源平台到目标平台的数据无缝对接,确保数据准确、高效地传输到管易云系统中。在实际操作中,还需根据具体业务需求进行适当调整,以满足不同场景下的数据集成需求。