利用轻易云平台进行数据ETL:从旺店通到金蝶云

  • 轻易云集成顾问-吕修远
### 案例分享:旺店通入库单-金蝶其他入库单【预入库】 在企业信息化系统的集成项目中,如何高效、稳定地实现各个业务管理模块的数据互通,是技术团队面临的重要课题。在本案例中,我们将具体探讨如何通过轻易云数据集成平台,将旺店通·企业奇门的入库单数据,可靠且实时地集成到金蝶云星空的其他入库单模块。 实际操作过程中,我们采用了API接口对接的方法。首先,通过调用旺店通·企业奇门提供的 `wdt.stockin.order.query` 接口,实现定时抓取其最新的入库单数据。这一过程需要处理分页和限流问题,以确保大规模数据传输中的完整性和高效性。为此,我们设计了一套机制,能够在每次API调用后记录当前返回的数据标记,并依据该标记进行后续的数据抓取,从而避免漏单现象。 取得旺店通·企业奇门的数据后,需要考虑其与金蝶云星空系统之间的数据格式差异。我们利用轻易云平台提供的灵活映射功能,根据特定规则对获取到的数据进行转换,再通过批量写入功能快速导入金蝶云星空对应模块。在这一环节中,为了保证数据的一致性与正确性,对每条记录都进行了严密校验和异常捕捉,如遇错误则自动重试,直至成功提交或反馈明确错误原因。 此外,本架构中特别注重实时监控及日志记录,通过透明化视图展示出每一步骤的执行状态,让运维人员能及时发现并处理潜在问题,大幅提高系统运行效率与稳定性。 下一节内容将详细描述具体实施步骤,包括参数配置、接口调用细节,以及异常处理策略等关键环节,从全方位解析整个技术方案与实践经验。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口 `wdt.stockin.order.query` 获取并加工数据。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用 `wdt.stockin.order.query` 接口。以下是元数据配置的关键部分: ```json { "api": "wdt.stockin.order.query", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "order_no", "name": "order_type_name", "idCheck": true, "condition_bk": [ [ { "field": "warehouse_name", "logic": "notlike", "value": "百媚" } ] ], ... } ``` 该配置定义了API的基本信息,包括请求方法、主键字段以及一些条件过滤。特别注意的是 `condition_bk` 中的过滤条件,它确保了我们只获取不包含特定仓库名称的数据。 #### 请求参数设置 为了实现按时间增量获取数据,我们需要设置请求参数: ```json { "request": [ { "field": "start_time", "label": "开始时间", "type": "datetime", "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "datetime", "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, ... ] } ``` 这些参数确保了我们能够按需获取最新的数据,避免重复处理。 #### 数据过滤与条件应用 在实际应用中,我们可能需要进一步过滤数据。例如,我们可以根据入库单状态和仓库编号进行筛选: ```json { ... { "field": "status", "label": "入库单状态", "type": "string", ... {"value":"80"} }, { ... {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据信息(不支持一次推送多个仓库编号)"} } ``` 此外,还可以通过 `condition` 字段进行更复杂的逻辑过滤,例如: ```json { ... { {"field":"stockin_reason","logic":"notlike","value":"生产"}, {"field":"warehouse_name","logic":"like","value":"七遇"} }, ... } ``` 这些条件确保了我们只处理符合业务需求的数据,提高了数据处理效率。 #### 分页处理 为了处理大规模数据,我们需要使用分页机制: ```json { ... { {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"50"}, {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始"} } } ``` 通过设置 `page_size` 和 `page_no` 参数,我们可以逐页获取并处理数据,避免一次性加载过多数据导致性能问题。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在轻易云平台上,可以通过可视化操作界面对数据进行清洗和转换,例如去除无效字段、格式化日期等操作。 总之,通过合理配置元数据和请求参数,并结合有效的过滤和分页机制,可以高效地从旺店通·企业奇门接口获取所需的数据,为后续的数据转换与写入打下坚实基础。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将旺店通入库单转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一环。本文将详细探讨如何利用轻易云数据集成平台将旺店通的入库单数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。 #### 数据转换与写入配置 我们使用的元数据配置如下: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"QTRKD01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mappingDirection":"positive"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouse_no}","mapping":{"target":"6448b8978ae83f3ed8347076","direction":"positive"}}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{stockin_time|datetime}}"}, {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","value":"'function case when '{warehouse_no}' = '07' then '006' when '{warehouse_no}' = '06' then '006' when '{warehouse_no}' = '02' then '01201' when '{warehouse_no}' = 'QYYC-JSQY-WDT' then '01201' when '{warehouse_no}' = 'QYYC-JSQY-WDT-cc' then '01201' when '{warehouse_no}' = 'wdt01_CC' then '01202' when '{warehouse_no}' = 'wdt01' then '01202' end'", "mappingDirection": "positive", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}}, {"field": "FOwnerTypeIdHead", "label": "货主类型", "type": "string", "describe": "多类别基础资料列表", "value": "BD_OwnerOrg"}, {"field": "FOwnerIdHead", "label": "货主", "type": "string", "describe": "多类别基础资料",  "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "100"}, {"field": "FNOTE", "label": "备注", "type": "string", "describe": "多行文本", "value": "{remark}"}, { field: 'FEntity', label: '明细信息', type: 'array', children: [ { field: 'FInStockType', label: '入库类型', type: 'string', describe: '下拉列表', parent: 'FEntity'}, { field: 'FMATERIALID', label: '物料编码', type: 'string', describe: '基础资料', parser: { name: 'ConvertObjectParser', params: 'FNumber'}, value: '{{details_list.spec_no}}', parent: 'FEntity'}, { field: 'FCMKBarCode', label: '零售条形码', type: 'string', describe: '文本', parent: 'FEntity'}, { field: ‘FSTOCKID’, label:'收货仓库’, type:'string’, describe:'基础资料’, parser:{ name:'ConvertObjectParser’, params:'FNumber’}, value:'{warehouse_no}’, parent:'FEntity’}, { field:' FStockLocId ', label:' 仓位 ', type:' string ', describe:' 维度关联字段 ', parent:' FEntity ’}, { field:' FQty ', label:' 实收数量 ', type:' string ', describe:' 数量 ', value:' {{details_list.goods_count}} ', parent:' FEntity ’}, { field:' FPrice ', label:' 成本价 ', type:' string ', describe:' 单价 ', parent:' FEntity ’}, { field:" FEntryNote ", label:" 备注 ", type:" string ", describe:" 多行文本 ", value:" {{detail_list.remark}} ", parent:" FEntity ”}, { field:" FSRCBILLNO ", label:" 源单编号 ", type:" string ", describe:" 源单编号 ", parent:" FEntity ”}, { field:" FSRCBILLTYPEID ", label:" 源单类型 ", type:" string ", describe:" 源单类型 ", parent:" FEntity ”}, {parent:“ FEntity ”, label:“货主类型”, field:“ FOWNERTYPEID ”, type:“ string ”, value:“ BD_OwnerOrg” }, {parent:“ FEntity ”, label:“货主”, field:“ FOWNERID ”, type:“ string ”, value:“100”, parser:{ name:“ ConvertObjectParser”, params:“ FNumber”}} ], value:”details_list” } ], “otherRequest”: [ {“field”: “FormId”, “label”: “业务对象表单Id”, “type”: “string”, “describe”: “必须填写金蝶的表单ID如:PUR_PurchaseOrder”, “value”: “STK_MISCELLANEOUS”}, {“field”: “IsVerifyBaseDataField”, “label”: “验证基础资料”, “type”: “bool”, “describe”: “是否验证所有的基础资料有效性,布尔类,默认false(非必录)”, “value”: true}, {“field”: “Operation”, “label”: “执行的操作”, “type”: “string”, “value”:“ Save”}, {“field”:“ IsAutoSubmitAndAudit”,”label”:”提交并审核”,”type”:”bool”,”value”:true} ] } ``` #### 数据字段解析与转换 1. **FBillNo(单据编号)**:直接映射自源数据中的`order_no`。 2. **FBillTypeID(单据类型)**:固定值`QTRKD01_SYS`,通过`ConvertObjectParser`解析为目标系统所需格式。 3. **FStockOrgId(库存组织)**:映射自源数据中的`warehouse_no`,并通过`ConvertObjectParser`解析。 4. **FDate(日期)**:使用模板语法将源数据中的时间字段格式化为目标系统所需格式。 5. **FDEPTID(部门)**:根据不同的仓库编号进行条件判断和映射,并通过`ConvertObjectParser`解析。 6. **FOwnerTypeIdHead(货主类型)**和**FOwnerIdHead(货主)**:分别固定为`BD_OwnerOrg`和`100`,通过解析器进行格式转换。 7. **备注字段(FNOTE、FEntryNote等)**:直接映射自源数据中的相应字段。 #### 明细信息处理 明细信息部分包含多个子字段,如物料编码、实收数量等。这些字段需要逐一映射和解析: 1. **FMATERIALID(物料编码)**:映射自源数据中的规格编号,通过解析器进行转换。 2. **FCMKBarCode(零售条形码)**:直接映射自源数据。 3. **FSTOCKID(收货仓库)**:同样需要通过解析器进行转换。 4. **实收数量(FQty)**和**成本价(FPrice)**等其他字段均按照类似方式处理。 #### API调用与写入 最后,将所有处理后的数据通过配置好的API接口调用写入金蝶云星空。主要步骤包括: 1. 设置请求方法为POST。 2. 确认表单ID为`STK_MISCELLANEOUS`。 3. 验证基础资料有效性并自动提交审核。 这些步骤确保了数据从源系统到目标系统的无缝对接,实现了高效的数据集成。 以上就是利用轻易云数据集成平台将旺店通入库单转换并写入金蝶云星空API接口的详细技术实现过程。希望这些技术干货能对您的项目实施有所帮助。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)