管易云·奇门数据集成到金蝶云星空:销售出库同步(线上买赠)
在实际企业业务操作中,不同系统之间的数据对接和集成往往面临很多挑战,尤其是对于高并发、高吞吐量的场景。本文将具体分享如何通过轻易云数据集成平台,实现管易云·奇门与金蝶云星空的无缝数据对接,以"管易销售发货单-->金蝶销售出库单(线上买赠)"为例。
技术背景
为了确保在订单处理过程中,各个环节的数据都能够及时、准确地传递,我们调用了管易云·奇门接口gy.erp.trade.deliverys.get
来获取最新的发货单信息,并使用金蝶云星空API batchSave
将这些信息导入到金蝶系统中。这一过程面临以下几个技术挑战:
- 高效的数据抓取与写入:面对大量订单数据,需要确保快速从管易获取并实时写入到金蝶。
- 分页和限流管理:管控API请求频率,避免超载及提供稳定性。
- 异常检测和处理机制:保证在出现问题时能及时发现并解决,提供一个可靠的数据传输渠道。
集成实施方案概述
我们采用了定时任务机制,通过定期调用gy.erp.trade.deliverys.get
接口拉取新生成或更新的发货单数据。在这一过程中,我们配置了一套流式处理Pipeline,支持批量化存储至缓冲区,再通过批量操作接口,将其一次性提交至金蝶系统,有效提升整体性能。
数据抓取与初步转换
首先,通过轻易云内置的可视化工具设计了一个基础数据流,用于周期性调度触发,从管易端获取必要字段。借助轻易云的平台优势,可以清晰看到每一步骤执行情况,有利于监控整个生命周期中的各类可能异常,并以最快速度做出响应调整。
页面限流策略应用
由于API存在请求速率限制,我们应该合理安排页面大小以及重试机制。在这里,可以利用模块自带的一些高级功能,例如动态参数设置和自动分页功能,对不同页面进行动态请求,将结果拼接后统一处理,大大提高工作效率,同时也避免了因频繁访问而导致的封禁风险。
以上步骤确保我们可以从根本上保证完整准确抓取源头数据,为之后复杂的逻辑转换打下坚实基础。接下来会详细讲解如何进一步完成转化、映射及错误容错等关键细节。
管易云·奇门接口gy.erp.trade.deliverys.get的调用与数据加工
在数据集成生命周期的第一步中,调用源系统接口获取并加工数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用管易云·奇门接口gy.erp.trade.deliverys.get
,并对获取的数据进行有效的加工处理。
接口调用配置
首先,我们需要配置接口调用的元数据。以下是关键的元数据配置项:
- API:
gy.erp.trade.deliverys.get
- 请求方法:
POST
- 分页设置: 每页50条记录
- ID字段:
code
- 格式化响应: 将
delivery_statusInfo.delivery_date
字段格式化为delivery_date_new
请求参数配置
为了确保我们能够准确地获取所需的数据,需要设置一系列请求参数。这些参数包括创建时间、发货时间、修改时间等。以下是详细的请求参数配置:
{
"request": [
{"field": "start_create", "label": "创建时间开始段", "type": "string"},
{"field": "end_create", "label": "创建时间结束段", "type": "string"},
{"field": "start_delivery_date", "label": "发货时间开始段", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"},
{"field": "end_delivery_date", "label": "发货时间结束段", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
{"field": "start_modify_date", "label": "修改时间开始段", "type": "string"},
{"field": "end_modify_date", "label": "修改时间结束段", "type": "string"},
{"field": "del", "label": "返回是否作废的单据", "type": "string"},
{"field": "delivery", "label": "发货状态", "type":"string","value":"1"},
{"field":"code","label":"单据编号","type":"string"}
],
...
}
这些参数确保了我们可以灵活地控制数据提取的范围和条件。例如,通过设置start_delivery_date
和end_delivery_date
,我们可以限定只获取特定时间段内的发货单据。
数据分页处理
为了处理大量数据,分页机制是必不可少的。我们在元数据中定义了分页大小为30条记录,并通过以下配置实现分页:
{
...
“otherRequest”: [
{"field":"page_size","label":"分页大小","type":"string","value":"30"},
{"field":"page_no","label":"页号","type":"string"}
]
}
在实际调用过程中,需要动态调整page_no
以遍历所有页面的数据。
数据格式化与转换
在获取到原始数据后,需要对部分字段进行格式化处理。例如,将原始响应中的delivery_statusInfo.delivery_date
字段格式化为新的字段名delivery_date_new
,并转换其日期格式:
{
...
“formatResponse”: [
{"old":"delivery_statusInfo.delivery_date","new":"delivery_date_new","format":"date"}
]
}
这种格式化操作不仅提升了数据的一致性,还简化了后续的数据处理步骤。
异常处理与补偿机制
在实际操作中,可能会遇到网络波动或系统故障导致的数据丢失问题。为此,我们配置了补偿机制,通过定时任务(crontab)定期重新拉取前一天的数据,以确保数据完整性:
{
...
“omissionRemedy”: {
“crontab”: “20 0 * * *”,
“takeOverRequest”: [
{
“field”: “start_delivery_date”,
“label”: “发货时间结束段”,
“type”: “string”,
“value”: “{{DAYS_AGO_1|datetime}}”
},
{
“field”: “end_delivery_date”,
“value”: “{{LAST_SYNC_TIME|datetime}}”,
“type”: “string”
}
]
}
}
通过这种方式,可以有效地弥补由于各种原因导致的数据缺失问题。
条件过滤与业务逻辑
最后,为了满足特定业务需求,我们可以在元数据中定义条件过滤。例如,仅同步线上买赠订单类型的销售出库单:
{
...
“condition_bk”: [
[{"field":"details.order_type","logic":"eqv2","value":"gift"}]
],
...
}
这种条件过滤确保了我们只提取符合业务逻辑的数据,从而提高了数据处理效率和准确性。
综上所述,通过合理配置元数据和请求参数,并结合分页、格式化、异常处理等机制,可以高效地调用管易云·奇门接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。
轻易云数据集成平台ETL转换至金蝶云星空API接口
在数据集成的生命周期中,将源平台的数据转换为目标平台可接收的格式是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台,将管易销售发货单的数据转换为金蝶云星空API接口所能接收的销售出库单格式,并最终写入目标平台。
API接口配置与元数据解析
在本案例中,我们使用的是金蝶云星空的batchSave
API接口。以下是具体的元数据配置及其解析:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {"name":"ConvertObjectParser","params":"FNumber"},
"value": "XSCKD09_SYS"
},
{
"field": "FBillNo",
"label": "单据编号",
...
}
],
...
}
数据字段解析与转换
-
单据类型(FBillTypeID):
- 配置:
"value":"XSCKD09_SYS"
- 转换:使用
ConvertObjectParser
将值转换为目标系统所需的格式。
- 配置:
-
日期(FDate):
- 配置:
"value":"{{delivery_statusInfo.delivery_date}}"
- 转换:直接从源数据中的
delivery_date
字段获取并填充。
- 配置:
-
发货组织(FStockOrgId)和销售组织(FSaleOrgId):
- 配置:根据不同的
shop_code
进行条件判断。 - 转换:使用SQL CASE语句实现多种条件下的值映射。
- 配置:根据不同的
-
客户(FCustomerID):
- 配置:通过查找集合
_findCollection find FNumber from dc704b79-f3da-309a-9d2d-88456a5cbcd9 where F_352_waibuma={shop_code}
- 转换:根据
shop_code
查找对应的客户编号。
- 配置:通过查找集合
-
货主类型(FOwnerTypeIdHead)和货主(FOwnerIdHead):
- 配置:固定值
BD_OwnerOrg
- 转换:同样使用SQL CASE语句进行多条件值映射。
- 配置:固定值
-
平台单号、销售订单单号、销售发货单号、OMS单号等字段:
- 配置:直接映射源数据中的相应字段,如
{platform_code}
,{{details.trade_code}}
,{code}
等。
- 配置:直接映射源数据中的相应字段,如
-
财务信息(SubHeadEntity):
- 包含结算组织和结算币别。
- 配置和转换类似于前述组织字段,使用SQL CASE语句和固定值映射。
-
明细信息(FEntity):
- 包含物料编码、库存单位、仓库、实发数量等子字段。
- 转换:通过
_findCollection
查找对应物料编码和库存单位,并计算含税单价{{details.amount_after}}/{{details.qty}}
.
-
物流明细信息(FOutStockTrace):
- 包含物流公司、物流单号、寄件人手机号等子字段。
- 转换:使用
ConvertObjectParser
和字符串函数如RIGHT()
实现所需格式。
操作配置
在操作部分,我们定义了业务对象表单ID、执行操作、是否提交并审核等参数:
{
...
"otherRequest":[
{"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"},
{"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"Save"},
{"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"},
{"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"},
{"field":"SubSystemId","label":"系统模块","type":"string","describe":"默认仓库模块","value":"21"},
{"field":"InterationFlags","label":"允许负库存","type":"string","describe":"允许负库存","value":"STK_InvCheckResult"}
],
...
}
这些配置确保了在将数据写入目标平台时,能够自动提交并审核,同时验证基础资料的有效性,避免因数据不一致导致的问题。
实际应用与监控
在实际应用中,通过轻易云数据集成平台,我们可以实时监控整个ETL过程,确保每个环节的数据处理状态清晰可见。这不仅提升了业务透明度,还大大提高了效率,使得跨系统的数据集成变得更加顺畅无缝。
通过上述步骤,我们成功地将管易销售发货单的数据转换为金蝶云星空API接口所能接收的格式,并顺利写入目标平台,实现了跨系统的数据无缝对接。