使用轻易云进行ETL转换并写入金蝶云星空的实现方案

  • 轻易云集成顾问-张妍琪
### 标准调拨入库对接分布式调入-已测试 在企业日常运营中,数据集成是实现系统间高效协同的关键环节。本案例聚焦于吉客云与金蝶云星空的系统对接,通过详细介绍标准调拨入库对接分布式调入-已测试方案,展示如何利用API接口技术实现高效、可靠的数据集成。 为了确保吉客云数据到金蝶云星空的无缝转移,本方案采用了轻易云数据集成平台。首先,借助吉客云提供的`erp.storage.goodsdocin.v2`接口,实现定时可靠地抓取与分页处理;其次,通过自定义的数据转换逻辑和可视化的数据流设计,将获取的数据按照金蝶云星空要求进行格式调整,并使用其批量写入API `batchSave`完成数据存储。这种方法能够大幅提升数据处理效率,并具备优秀的吞吐能力,即使面对大量的信息也能从容应对。 为保障任务执行期间的一切顺畅,本方案特别注重监控和告警机制。通过实时跟踪数据集成任务状态及性能指标,及时发现并响应异常情况。同时,还设置了错误重试机制,以确保即便发生意外,也不至于导致漏单或信息丢失。此外,为解决分页限流问题,我们还进一步优化了接口调用策略,使得整个过程稳定而高效。 总之,这一案例充分体现了先进数据集成技术在企业系统中的实际应用价值,从设计开始每个步骤都经过周密考虑,为复杂业务场景下的数据同步操作提供了一套行之有效的方法。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D14.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据的技术实现 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocin.v2`,获取并加工数据。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用吉客云的接口。以下是元数据配置的关键部分: ```json { "api": "erp.storage.goodsdocin.v2", "effect": "QUERY", "method": "POST", "number": "goodsdocNo", "id": "recId", "idCheck": true, "request": [ {"field": "pageIndex", "label": "分页页码", "type": "string"}, {"field": "pageSize", "label": "分页页数", "type": "string", "value":"50"}, {"field": "goodsDocNo", "label": "入库单号", "type": "string"}, {"field": "startDate", "label": "创建时间的起始时间", "type":"string","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "endDate", "label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存...)", "value":"102"}, {"field":"warehouseId","label":"仓库ID","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendId","label":"供应商ID(往来单位)","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"}, {"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"}, {"field" : “selelctFields”, “label” : “返回参数”, “type” : “string”, “value” : “goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,sourceBillNo,billNo,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList”} ], ... } ``` #### 请求参数解析 1. **分页参数**: - `pageIndex`:当前请求的页码。 - `pageSize`:每页的数据条数,默认设置为50。 2. **时间参数**: - `startDate` 和 `endDate`:用于限定查询的数据范围,分别表示创建时间的起始和结束时间。使用模板变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`动态生成。 3. **过滤条件**: - `inouttype`:指定为102,表示调拨入库。 - `warehouseId`, `warehouseCode`, `vendId`, `vendCode`, `billNo`, `userName`, `gmtModifiedStart`, `gmtModifiedEnd`等字段用于进一步过滤数据。 4. **返回字段**: - 配置了多个返回字段,如`goodsdocNo`, `inOutDate`, `gmtCreate`, 等等,以确保获取到所需的详细信息。 #### 数据清洗与转换 在获取到原始数据后,需要进行清洗和转换。以下是一些关键步骤: 1. **条件过滤**: 根据元数据中的条件配置,对返回的数据进行过滤。例如: ```json "condition":[ [{"field":“goodsDocDetailList.quantity”,“logic”:“gt”,“value”:“0”}, {"field”:“fromWarehouse”,“logic”:“notlike”,“value”:“VMI”}, ... ] ] ``` 这些条件确保只保留符合业务需求的数据,例如数量大于0且不属于特定仓库的数据。 2. **平铺处理**: 使用`beatFlat`将嵌套结构的数据平铺处理,例如将`goodsDocDetailList`中的详细信息展开为平级字段。 3. **自动填充响应**: 设置`autoFillResponse:true`,自动填充响应结果,使得后续处理更加简便。 #### 异常处理与补救措施 为了保证数据集成过程的稳定性,需要设置异常处理和补救措施。例如,通过定时任务(crontab)定期检查并接管未成功的数据请求: ```json "omissionRemedy":{ “crontab”:”39 2 * * *”, “takeOverRequest”:[ {“field”:”startDate”,“value”:”_function FROM_UNIXTIME( unix_timestamp() -259200 , ‘%Y-%m-%d %H:%i:%s’ )”, "type”:”string”,”label”:”接管字段” } ] } ``` 此配置确保在每天凌晨2:39分执行一次检查,并重新发起未成功的请求,从而提高数据同步的可靠性。 通过上述步骤,我们可以高效地调用吉客云接口获取并加工所需数据,为后续的数据写入和业务应用打下坚实基础。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个详细的技术案例,展示如何使用轻易云数据集成平台完成这一过程。 #### API接口配置与元数据解析 首先,我们需要了解金蝶云星空API接口的基本配置和元数据结构。在本案例中,我们使用的是`batchSave` API接口,通过POST方法提交请求。以下是该接口的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "goodsDocDetailList_ownerName,goodsdocNo", "bodyName": "items", "bodySum": ["goodsDocDetailList_quantity"], "header": ["goodsdocNo", "inOutDate", "goodsDocDetailList_ownerName", "sourceBillNo"], "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode", "outWarehouseCode"] }, ... } ``` #### 数据请求与清洗 在进行数据转换之前,首先需要从源系统中请求并清洗数据。假设我们已经完成了这一阶段,获取到的数据结构如下: ```json { "goodsdocNo": "123456", "inOutDate": "2023-10-01", ... } ``` #### 数据转换 在数据转换阶段,我们需要将源数据映射到金蝶云星空API所需的格式。根据元数据配置,我们需要处理以下字段: 1. **调入库存组织** (`FStockOrgID`) 2. **调入货主类型** (`FOwnerTypelnldHead`) 3. **调入货主** (`FOwnerlnldHead`) 4. **日期** (`FDate`) 5. **单据类型** (`FBillTypeID`) 6. **调拨方式** (`FTransferMode`) 7. **调拨方向** (`FTransferDirect`) 8. **携带在途归属** (`FVESTONWAY`) 9. **调拨类型** (`FTransferBizType`) 10. **调出货主类型** (`FOwnerTypeOutIdHead`) 11. **调出货主** (`FOwnerOutIdHead`) 12. **调出库存组织** (`FStockOutOrgID`) 13. **吉客云单号** (`FJKYNo`) 14. **吉客云关联单号调拨单号** (`FJKYLinkNo`) 此外,还有明细信息字段 `FSTKTRSINENTRY`,包括物料编码、计划调拨数量、调入数量等。 #### 数据写入 将转换后的数据通过API接口写入目标平台。以下是一个示例请求体: ```json { "FormId": "STK_TRANSFERIN", "IsVerifyBaseDataField": true, ... "Model": { ... "FSTKTRSINENTRY": [ { ... "FMATERIALID": {"FNumber":"1001"}, ... } ] } } ``` #### 技术要点解析 1. **字段映射与解析器** - 使用 `ConvertObjectParser` 将源系统字段值转换为目标系统可接受的格式。例如,将 `goodsDocDetailList_ownerName` 转换为 `FNumber` 格式。 2. **多层级嵌套结构** - 明细信息 `FSTKTRSINENTRY` 包含多个子字段,需要逐层映射和解析。例如,物料编码 `FMATERIALID` 和计划调拨数量 `FPlanTransferQty` 等。 3. **动态查询与映射** - 使用 `_mongoQuery` 和 `_findCollection` 等动态查询语法,从数据库中获取相关信息并进行映射。例如,通过 `sourceBillNo` 查询对应的仓库编码和物料信息。 通过上述步骤和技术要点,我们可以高效地将源平台的数据进行ETL转换,并通过轻易云数据集成平台无缝对接至金蝶云星空,实现业务流程的自动化和高效管理。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)