吉客云数据集成到金蝶云星空:VMI以销定采采购入库方案分享
在企业进行供应链管理过程中,确保各系统之间的数据无缝对接是其高效运营的关键所在。本文将聚焦于如何将吉客云(JikeCloud)中的数据通过API接口集成到金蝶云星空(KingDee Cloud Sky)。具体案例为实施“VMI以销定采采购入库”的解决方案。
本次项目中,我们主要利用了两个关键API接口:吉客云用于获取出库单据数据的erp.storage.goodsdocout.v2
接口,以及金蝶云星空用于批量保存数据的batchSave
接口。以下是该解决方案的一些技术要点:
-
高吞吐量的数据写入能力: 在处理从吉客云导出的大量订单数据时,我们强调了系统对高吞吐量需求的支持。这套方案保证了大量数据信息能够快速、稳定地传输至金蝶云星空,实现实时性与准确性的兼容。
-
分页和限流问题处理: 由于吉客云在提供API服务时存在分页与流控机制,设计了一种智能化分页抓取策略,使得后台任务能够持续、高效地拉取所需数据信息,而不会被限流困扰。这部分内容格外重要,因为通过合理设计,可以避免请求超载或因频繁调用而导致失败。
-
自定义数据转换逻辑及格式差异处理: 面对不同平台间的数据结构差异,通过自定义的数据转换逻辑,将获取到的原始出库单据数据整理并映射至符合金蝶云星空要求的格式。在实际操作过程中,我们利用轻易云的平台特性,实现这种跨平台、跨结构的数据适配工作,高效且低风险地进行二次开发调优。
-
集中监控和异常检测机制: 为保障整个集成过程透明化且可追溯,在轻易云上启用了全面的监控及告警功能。不仅能实时查看每个节点上的状态,还能及时发现并处理潜在异常,从而提高整体可靠性。例如,在出现网络不稳定等情况时,自动触发重试机制,以确保未成功发送的数据包重新提交。
-
灵活定制化映射及错误重试策略: 针对某些业务场景下需要特别关注字段匹配的问题,建立了一套灵活可调整的信息映射表。同时,为应对意外发生,如调用失败或返回错误码等情况,则运用重试机制加以补救,进一步提升了响应速度与用户体验满意度。
这几个核心技术要点
调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口erp.storage.goodsdocout.v2
,并对获取的数据进行初步加工。
接口配置与请求参数
首先,我们需要配置调用接口的元数据。根据提供的元数据配置,我们可以看到该接口采用POST方法进行数据请求,主要参数如下:
pageIndex
:分页页码pageSize
:分页页数,默认值为50goodsDocNo
:出库单号startDate
:创建时间的起始时间,动态值为上次同步时间endDate
:创建时间的结束时间,动态值为当前时间inouttype
:类型(例如201代表销售出库)- 其他字段如来源单号、仓库编号、供应商编号等
请求示例:
{
"pageIndex": "1",
"pageSize": "50",
"startDate": "{{LAST_SYNC_TIME|datetime}}",
"endDate": "{{CURRENT_TIME|datetime}}",
"inouttype": "201",
"selelctFields": "goodsdocNo,inOutDate,gmtCreate,sourceBillNo,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.quantity,goodsDocDetailList"
}
数据过滤与条件设置
为了确保获取的数据符合业务需求,我们需要设置相应的过滤条件。根据元数据配置中的条件部分,可以看到以下过滤逻辑:
- 主表更新时间起始和截至
- 出库数量大于0
- 仓库名称包含“VMI”
- 出库类型不在202(调拨出库)和205(采购退货)之内
这些条件确保了我们只获取到有效且相关的数据。
自动填充与扁平化处理
轻易云平台支持自动填充响应和扁平化处理。在本案例中,我们启用了自动填充响应功能,并对嵌套字段goodsDocDetailList
进行了扁平化处理。这使得复杂的嵌套结构变得更加简单易用。
例如,原始响应中的嵌套结构:
{
"goodsdocNo": "12345",
"goodsDocDetailList": [
{
"goodsNo": "A001",
"quantity": 10
},
{
"goodsNo": "A002",
"quantity": 5
}
]
}
经过扁平化处理后,将变为:
[
{
"goodsdocNo": "12345",
"goodsNo": "A001",
"quantity": 10
},
{
"goodsdocNo": "12345",
"goodsNo": "A002",
"quantity": 5
}
]
异常处理与补偿机制
在实际操作中,可能会遇到各种异常情况,如网络故障或接口返回错误。为此,我们配置了补偿机制,通过定时任务(crontab)来重新发起请求,以确保数据完整性。
补偿机制示例:
{
"crontab": "9 2 * * *",
"takeOverRequest": [
{
"label": "接管字段",
...
"field":"startDate",
...
"value":"_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )"
}
]
}
该配置表示每天凌晨2:09分执行一次补偿任务,将起始时间设置为当前时间前3天,以确保遗漏的数据能够被重新获取。
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换,以满足下游系统的需求。例如,可以根据业务规则对某些字段进行格式转换或单位换算。具体操作可以通过轻易云平台提供的可视化工具实现,无需编写复杂代码。
综上所述,通过合理配置元数据和利用轻易云平台的强大功能,我们能够高效地调用吉客云接口并对获取的数据进行初步加工,为后续的数据转换与写入奠定坚实基础。
轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。
API接口配置
在配置过程中,我们使用了batchSave
API接口,该接口通过POST方法执行,并且需要进行ID校验。以下是主要的元数据配置:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FBillTypeID",
"label": "单据类型",
"type": "string",
"describe": "单据类型",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "CGDD01_SYS"
},
{
"field": "FDate",
"label": "采购日期",
"type": "string",
"describe": "日期",
"value": "{Date}"
},
{
...
}
],
...
}
数据请求与清洗
首先,我们需要从源系统中请求数据并进行清洗。在这个过程中,我们使用了轻易云的数据请求功能,通过配置相应的字段和解析器,将原始数据转化为符合目标平台要求的数据格式。例如:
FBillTypeID
字段使用了ConvertObjectParser
解析器,将源系统中的单据类型编号转换为目标系统可识别的编号。FDate
字段直接从源系统中获取日期,并以字符串形式传递。
数据转换
在数据转换阶段,我们需要确保每个字段的数据格式和内容都符合金蝶云星空API的要求。以下是几个关键字段的转换示例:
-
采购组织(FPurchaseOrgId):
{ "field": "FPurchaseOrgId", "label": "采购组织", ... "value": "{warehouseCode}", ... }
在这里,我们将源系统中的仓库代码映射到目标系统中的采购组织。
-
供应商(FSupplierId):
{ ... "field": "FSupplierId", ... "value": "{warehouseCode}", ... }
同样地,供应商信息也通过仓库代码进行映射和解析。
-
明细信息(FPOOrderEntry):
{ ... { ... {"field":"FMaterialId","label":"物料编码","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{Fentity.goodsDocDetailList_goodsNo}}","parent":"FInStockEntry"}, {"field":"FQty","label":"采购数量","type":"string","describe":"数量","value":"{{Fentity.goodsDocDetailList_quantity}}","parent":"FInStockEntry"}, ... } ... }
明细信息部分包含多个子字段,如物料编码、采购数量等,这些字段通过解析器和模板变量进行动态填充。
数据写入
在完成数据转换后,下一步是将这些数据写入金蝶云星空。我们使用了API接口的POST方法来提交这些数据,并且设置了一些额外的参数以确保操作成功:
-
业务对象表单Id:
{ ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"PUR_PurchaseOrder"}, ... }
-
提交并审核:
{ ... {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, ... }
这些参数确保了数据在写入目标平台后能够自动提交并审核,提高了操作效率。
操作配置
最后,我们对整个操作进行了详细配置,包括行键、合并方法、主体名称等,以确保数据能够正确地被处理和写入:
{
...
{"rowsKey":"array","rows":50,"method":"merge","field":"warehouseCode,Date","bodyName":"Fentity","bodySum":["goodsDocDetailList_quantity"],"header":["Date","warehouseCode"],"body":["goodsDocDetailList_goodsNo","warehouseCode","Date","goodsDocDetailList_quantity"]}
}
通过以上步骤,我们成功实现了从源平台到金蝶云星空的ETL转换和数据写入。这不仅提高了数据处理效率,也确保了各环节的数据准确性和一致性。