使用轻易云平台将采购数据从聚水潭转换并导入金蝶云星空

  • 轻易云集成顾问-卢剑航
### 聚水潭与金蝶云星空数据集成案例分享 在现代商业环境中,不同系统间的数据对接和同步已成为企业高效运营的关键要素之一。本文将详述如何通过轻易云数据集成平台,实现聚水潭采购入库数据到金蝶云星空的自动同步,具体案例以方案[自动]-采购入库同步_不关联-V1.0为基础。 首先,我们需要从聚水潭获取最新的采购入库信息。为了确保数据完整性和及时性,必须定时且可靠地抓取聚水潭接口(/open/purchasein/query)的数据。这要求我们在处理API调用时考虑分页和限流问题,以避免因频繁请求导致的接口响应延迟或请求失败。此外,通过实时监控与日志记录,可以有效追踪各个阶段的数据处理状态,确保无遗漏地捕获所有必要的信息。 当成功获取到所需的数据后,下一步是将这些数据批量写入到金蝶云星空。在这个过程中,我们需要注意几个技术重点: 1. **分页与限流**:由于大多数API都有访问限制,在设计过程中应合理设置分页策略,并通过队列机制控制并发请求数。 2. **格式转换**:两个不同系统之间的数据格式可能存在差异,需要对聚水潭返回的数据进行清洗、转换,使其符合金蝶云星空 batchSave API 所需的结构。 3. **异常处理与重试机制**:针对写入操作,如果出现异常情况,应配置完善的错误重试机制,以保证最终一致性和可靠性。 4. **定制化映射对接**:根据业务需求,对输入输出字段进行灵活匹配,以满足实际操作中的特定条件。 最后,为了最大程度保障此次集成过程中的稳定运行,还要特别关注如何高效实现大量数据快速写入,以及确保每一条记录都能正确无误地进入目标系统。借助轻易云强大的全生命周期管理能力,从源头上提升整个流程透明度及效率,让每一步都清晰可见、准确无误。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/purchasein/query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用聚水潭的`/open/purchasein/query`接口来获取并加工数据。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用聚水潭的接口。以下是元数据配置的详细信息: ```json { "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`接口。以下是一个典型的请求示例: ```json { "page_index": 1, "page_size": 50, ... } ``` 为了确保数据的完整性和准确性,我们需要对返回的数据进行清洗和处理。例如,去除重复的数据、格式化日期字段等。 #### 异常处理与补偿机制 在实际操作中,不可避免地会遇到各种异常情况,例如网络故障、接口超时等。为了应对这些情况,我们可以配置补偿机制(omissionRemedy),例如通过定时任务(crontab)重新发起请求: ```json { ... omissionRemedy: { crontab: '2 6-7 * * *', takeOverRequest: [ { field: 'modified_begin', value: '{{DAYS_AGO_2|datetime}}', type: 'string', label: '接管字段' } ] } } ``` 这种方式可以确保在异常情况下仍能获取到完整的数据。 #### 条件过滤 为了避免获取无效或冗余的数据,我们可以设置条件过滤。例如,通过以下条件过滤掉特定公司ID的数据: ```json { condition_bk: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]], condition: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]] } ``` 这种方式可以有效减少无效数据的传输,提高系统效率。 通过上述步骤,我们可以高效地调用聚水潭接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将采购入库数据转换并写入金蝶云星空API 在数据集成的生命周期中,数据转换与写入是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### API接口配置 为了实现这一目标,我们需要配置金蝶云星空的`batchSave` API接口。该接口采用POST方法,支持批量保存操作。以下是具体的元数据配置: ```json { "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”}, ... ] } ``` #### 数据解析与转换 在上述配置中,我们使用了多种解析器和函数来处理不同字段的数据。例如: 1. **ConvertObjectParser**:用于将源系统中的编码转换为金蝶云星空所需的编码。 ```json {"field": "FOwnerIdHead", ... , "parser":{"name": "ConvertObjectParser", ... }, ... } ``` 2. **Function Case**:用于根据条件动态生成值。 ```json {"field": "FOwnerIdHead", ... , “值”: “_功能案例'{wms_co_id}'时‘13328244’然后‘101’时‘10404759’然后‘101’时‘12612085’然后‘100’时‘13328413’然后‘100’否则‘101’结束”,...} ``` 3. **MongoQuery**:用于从MongoDB数据库中查询特定字段的值。 ```json {"字段“:FSRCBillNo”,“标签“:源单编号”,“类型“:字符串”,“值“:“_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FBillNo where={\"content.FBillNo\":{\"$eq\":\"{remark}\"}}” ,...} ``` #### 数据写入 在所有字段都经过解析和转换后,最终的数据结构将通过POST请求发送到金蝶云星空的`batchSave` API接口。以下是一个示例请求体: ```json { “FormId”: “STK_InStock”, “IsAutoSubmitAndAudit”: true, “操作”: “保存”, “IsVerifyBaseDataField”: true, “模型”: [ { “FBillTypeID”: {“编号”: “RKD01_SYS”}, ... “明细信息”: [ { “物料编码”: {“编号”: “12345”}, ... } ] } ] } ``` 通过这种方式,我们可以确保源平台的数据经过ETL转换后,以正确的格式写入到目标平台金蝶云星空,从而实现系统间的数据无缝对接。 #### 总结 本文详细探讨了如何使用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过配置金蝶云星空API接口,实现数据的最终写入。这一步骤不仅确保了数据格式的一致性,还提高了系统间的数据传输效率和准确性。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)