聚水潭与金蝶云星空数据集成案例分享
在现代商业环境中,不同系统间的数据对接和同步已成为企业高效运营的关键要素之一。本文将详述如何通过轻易云数据集成平台,实现聚水潭采购入库数据到金蝶云星空的自动同步,具体案例以方案[自动]-采购入库同步_不关联-V1.0为基础。
首先,我们需要从聚水潭获取最新的采购入库信息。为了确保数据完整性和及时性,必须定时且可靠地抓取聚水潭接口(/open/purchasein/query)的数据。这要求我们在处理API调用时考虑分页和限流问题,以避免因频繁请求导致的接口响应延迟或请求失败。此外,通过实时监控与日志记录,可以有效追踪各个阶段的数据处理状态,确保无遗漏地捕获所有必要的信息。
当成功获取到所需的数据后,下一步是将这些数据批量写入到金蝶云星空。在这个过程中,我们需要注意几个技术重点:
- 分页与限流:由于大多数API都有访问限制,在设计过程中应合理设置分页策略,并通过队列机制控制并发请求数。
- 格式转换:两个不同系统之间的数据格式可能存在差异,需要对聚水潭返回的数据进行清洗、转换,使其符合金蝶云星空 batchSave API 所需的结构。
- 异常处理与重试机制:针对写入操作,如果出现异常情况,应配置完善的错误重试机制,以保证最终一致性和可靠性。
- 定制化映射对接:根据业务需求,对输入输出字段进行灵活匹配,以满足实际操作中的特定条件。
最后,为了最大程度保障此次集成过程中的稳定运行,还要特别关注如何高效实现大量数据快速写入,以及确保每一条记录都能正确无误地进入目标系统。借助轻易云强大的全生命周期管理能力,从源头上提升整个流程透明度及效率,让每一步都清晰可见、准确无误。
调用聚水潭接口/open/purchasein/query获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用聚水潭的/open/purchasein/query
接口来获取并加工数据。
接口配置与调用
首先,我们需要配置元数据以便正确调用聚水潭的接口。以下是元数据配置的详细信息:
{
"api": "/open/purchasein/query",
"effect": "QUERY",
"method": "POST",
"number": "io_id",
"id": "io_id",
"idCheck": true,
"request": [
{
"field": "page_index",
"label": "第几页,从1开始",
"type": "string",
"describe": "第几页,从1开始",
"value": "1"
},
{
"field": "page_size",
"label": "默认30,最大不超过50",
"type": "string",
"describe": "默认30,最大不超过50",
"value": "50"
},
{
"field": "modified_begin",
"label": "修改起始时间",
"type": "string",
"describe":
"
修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空
",
"
value
"
:
"
{{LAST_SYNC_TIME|datetime}}
"
},
{
"
field
"
:
"
modified_end
",
"
label
"
:
"
修改结束时间
",
"
type
"
:
"
string
",
"
describe
:
修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空
,
value
:
{{CURRENT_TIME|datetime}}
}
],
omissionRemedy
:
{
crontab
:
2 6-7 * * *
,
takeOverRequest
:
[
{
field
:
modified_begin
,
value
:
{{DAYS_AGO_2|datetime}}
,
type
:
string
,
label
:
接管字段
,
formModel
:
{
enable
:false}
,
tableModel
:{
enable:false}
,
physicalModel
:{
enable:false}
}
]
,condition_bk:
[[{
field:wms_co_id,
logic:neqv2,
value:10404759}]
],condition:
[[{
field:wms_co_id,
logic:neqv2,
value:10404759}]
]
}
请求参数详解
在请求参数中,我们需要特别注意以下几个字段:
page_index
: 表示当前请求的页码,从1开始。page_size
: 每页返回的数据条数,默认值为30,最大值不超过50。modified_begin
和modified_end
: 分别表示数据修改的起始和结束时间,这两个字段必须同时存在,并且时间间隔不能超过七天。
这些参数确保了我们能够分页获取数据,并且只获取指定时间范围内的数据。
数据请求与清洗
在实际操作中,我们会通过POST方法发送请求到/open/purchasein/query
接口。以下是一个典型的请求示例:
{
"page_index": 1,
"page_size": 50,
...
}
为了确保数据的完整性和准确性,我们需要对返回的数据进行清洗和处理。例如,去除重复的数据、格式化日期字段等。
异常处理与补偿机制
在实际操作中,不可避免地会遇到各种异常情况,例如网络故障、接口超时等。为了应对这些情况,我们可以配置补偿机制(omissionRemedy),例如通过定时任务(crontab)重新发起请求:
{
...
omissionRemedy: {
crontab: '2 6-7 * * *',
takeOverRequest: [
{
field: 'modified_begin',
value: '{{DAYS_AGO_2|datetime}}',
type: 'string',
label: '接管字段'
}
]
}
}
这种方式可以确保在异常情况下仍能获取到完整的数据。
条件过滤
为了避免获取无效或冗余的数据,我们可以设置条件过滤。例如,通过以下条件过滤掉特定公司ID的数据:
{
condition_bk: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]],
condition: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]]
}
这种方式可以有效减少无效数据的传输,提高系统效率。
通过上述步骤,我们可以高效地调用聚水潭接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。
使用轻易云数据集成平台将采购入库数据转换并写入金蝶云星空API
在数据集成的生命周期中,数据转换与写入是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。
API接口配置
为了实现这一目标,我们需要配置金蝶云星空的batchSave
API接口。该接口采用POST方法,支持批量保存操作。以下是具体的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"RKD01_SYS","mappingDirection":"positive"},
{"field":"FBusinessType","label":"业务类型","type":"string","value":"CG"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"{io_id}"},
{"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"BD_OwnerOrg"},
{"field":"FOwnerIdHead","label":"货主","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
{"field":"FDate","label":"入库日期","type":"string","value":"{io_date}"},
{"field":"FStockOrgId","label":"收料组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
{"field":"FDemandOrgId","label":"需求组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
{"field": "FPurchaseOrgId", "label": "采购组织", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_function case '{wms_co_id}' when '13328244' then '101' when '{10404759}' then '{101}' when '{12612085}' then '{100}' else '{101}' end"},
{"field": "FSupplierId", "label": "供应商", "type": "string", "parser":{"name" : "ConvertObjectParser", "params" : "FNumber"}, "value" : "_findCollection find supplier_code from 9a177523-62a5-3767-b094-6897f5abf61e where supplier_id={supplier_id}"},
{"field": "FDeliveryBill", "label" : "送货单号", "type" : "string"},
{"field": "FTakeDeliveryBill", "label" : "提货单号", "type" : "string"},
{"field": "F_TLWD_Assistant", "label" : "出库类型", "type" : "string", "value" : "_function case when '{remark}' like '%返修%' then '{02}' else '{01}' end", "parser":{"name" :"ConvertObjectParser", params: FNumber}},
{
field: FInStockFin,
label: 财务信息,
type: object,
children: [
{
field: FSettleOrgId,
label: 结算组织,
type: string,
parser: { name: ConvertObjectParser, params: FNumber },
value:
_function case { wms_co_id } when { 13328244 } then { 101 } else { 100 } end,
parent: FInStockFin
},
{
field: FPayOrgId,
label: 付款组织,
type: string,
parser: { name: ConvertObjectParser, params: FNumber },
value:
_function case { wms_co_id } when { 13328244 } then { 101 } else { 100 } end,
parent: FInStockFin
}
]
},
{
field: FInStockEntry,
label: 明细信息,
value: items,
type: array,
children: [
{
field:FMaterialId,
label:"物料编码",
type:"string",
parser:{name:"ConvertObjectParser",params:"FNumber"},
value:"{{items.sku_id}}",
parent:"FInStockEntry"
},
{
field:"FMustQty",
label:"应收数量",
type:"string",
value:"{{items.qty}}"
},
{
field:"FRealQty",
label:"实收数量",
type:"string",
value:"{{items.qty}}"
},
{
field:"FTaxPrice",
label:"含税单价",
type:"string",
value:"{{items.cost_price}}"
},
{
field:FEntryTaxRate,
label:“税率(%)”,
type:“字符串”,
值:“_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FEntryTaxRate where={\"content.FBillNo\":{\"$eq\":\"{remark}\"},\"content.FMaterialId\":{\"$eq\":\"{{items.sku_id}}\"}}”,
parent:“FInStockEntry”
},
{
field:FStockId,
label:“仓库”,
类型:“字符串”,
分析器:{名称:“ConvertObjectParser”,参数:“编号”},
值:“{wms_co_id}” ,
parent:“FInStockEntry”
},
{
字段:备注,
标签:备注,
类型:字符串,
值:“{remark}”,
父母:“库存条目”
}
...
]
}
],
otherRequest:[{"字段“:表单ID”,“标签“:业务对象表单ID”,“类型“:字符串”,“值“:STK_InStock”},
...
]
}
数据解析与转换
在上述配置中,我们使用了多种解析器和函数来处理不同字段的数据。例如:
-
ConvertObjectParser:用于将源系统中的编码转换为金蝶云星空所需的编码。
{"field": "FOwnerIdHead", ... , "parser":{"name": "ConvertObjectParser", ... }, ... }
-
Function Case:用于根据条件动态生成值。
{"field": "FOwnerIdHead", ... , “值”: “_功能案例'{wms_co_id}'时‘13328244’然后‘101’时‘10404759’然后‘101’时‘12612085’然后‘100’时‘13328413’然后‘100’否则‘101’结束”,...}
-
MongoQuery:用于从MongoDB数据库中查询特定字段的值。
{"字段“:FSRCBillNo”,“标签“:源单编号”,“类型“:字符串”,“值“:“_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FBillNo where={\"content.FBillNo\":{\"$eq\":\"{remark}\"}}” ,...}
数据写入
在所有字段都经过解析和转换后,最终的数据结构将通过POST请求发送到金蝶云星空的batchSave
API接口。以下是一个示例请求体:
{
“FormId”: “STK_InStock”,
“IsAutoSubmitAndAudit”: true,
“操作”: “保存”,
“IsVerifyBaseDataField”: true,
“模型”: [
{
“FBillTypeID”: {“编号”: “RKD01_SYS”},
...
“明细信息”: [
{
“物料编码”: {“编号”: “12345”},
...
}
]
}
]
}
通过这种方式,我们可以确保源平台的数据经过ETL转换后,以正确的格式写入到目标平台金蝶云星空,从而实现系统间的数据无缝对接。
总结
本文详细探讨了如何使用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过配置金蝶云星空API接口,实现数据的最终写入。这一步骤不仅确保了数据格式的一致性,还提高了系统间的数据传输效率和准确性。