使用轻易云平台进行ETL转换及数据写入金蝶云星空

  • 轻易云集成顾问-林峰
### 吉客云数据集成到金蝶云星空案例分享:其他出库-翻新出库 在实现"其他出库-翻新出库"业务场景中,吉客云的数据需要高效且准确地写入到金蝶云星空系统。这一过程涉及两大关键API的使用,即吉客云的`erp.storage.goodsdocout.v2`接口和金蝶云星空的`batchSave`接口。为了确保整个数据流动过程中不存在漏单现象,并提高数据处理效率,我们采用了一系列技术手段来保障这一目标。 首先,为了能够高吞吐量地获取吉客云中的数据,我们设计了一个可靠的定时抓取机制,通过调用`erp.storage.goodsdocout.v2`接口进行批量的数据提取。在这个过程中,我们特别关注分页和限流的问题。一方面,在调用API时,每次请求都携带适当数量的数据,以避免单次请求返回过多信息导致超时或性能瓶颈;另一方面,通过实时监控系统追踪每一次 API 调用状态,如遇异常立即告警,并在必要时进行重试操作。 其次,对于从吉客云获取的大规模订单及相关业务数据,需要支持自定义转换逻辑以适应金蝶云星空的数据结构差异。例如,在处理不同字段映射关系、格式转换以及日期时间等复杂类型转换问题上,统一设定规则,使得这些转化在可视化配置界面上变得直观易管理。这些措施不仅减少了流程中的人工干预,更保证了数据的一致性和准确性。 然后,将清理后并已转换完成的数据快速写入到金蝶云星空则是下一个重点工作。通过合理利用其 `batchSave` 接口,高频率、大批量地将符合业务需求的数据上传至目标系统。同时,为确保每次上传任务进展顺利,我们专门设置了集中监控与告警模块,对每个任务运行状态及性能指标进行实时跟踪。如果发生意外情况,例如网络波动或服务短暂不可用,则触发错误重试机制,及时恢复失败任务继续执行,从而确保整体集成稳定无误。 最后,为提高全程透明度并方便后期审计与维护,我们记录所有重要节点日志信息,包括但不限于各 API 请求响应详细内容、具体实施步骤时间戳等。此外,通过可视化工具展示完整处理流程示意图,使集成人员对整个过程一目了然,有助于更好把握项目进度与质量控制细节。 总之,这些技术策略有效保障了“其他出库-翻新出库”方案平稳、高效运作,实现精准、灵活与高效地将吉客云中丰富多样的信息资源成功迁移至 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D20.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`,并对获取的数据进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用吉客云的接口。以下是元数据配置的关键字段及其含义: - **api**: `erp.storage.goodsdocout.v2`,表示我们要调用的具体API。 - **method**: `POST`,HTTP请求方法。 - **effect**: `QUERY`,表示该API用于查询操作。 - **number**和**id**: `goodsdocNo`,用于唯一标识每条记录。 - **idCheck**: `true`,表示需要检查ID的唯一性。 请求参数配置如下: ```json [ {"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":"201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲出库 212 包材出库 215维修还厂 231成本调整出库","value":"208"}, {"field":"sourceBillNo","label":"来源单号","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field":"outBillNo","label":"外部单号(全模糊匹配)","type":"string"}, {"field":"gmtModifiedStart","label":"主表更新时间起始","type":""}, {"field":""} ] ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以确保数据质量和一致性。以下是一些关键步骤: 1. **过滤无效数据**:根据条件配置,过滤掉数量小于等于0的数据。 ```json "condition":[[{"field": "goodsDocDetailList.quantity", "logic": "gt", "value": "0"}]] ``` 2. **展开嵌套结构**:将嵌套的`goodsDocDetailList`字段平铺展开,以便后续处理。 ```json "beatFlat":["goodsDocDetailList"] ``` 3. **自动填充响应字段**:确保返回的数据包含所需的所有字段。 ```json "autoFillResponse": true, ``` #### 数据写入 经过清洗和转换后的数据可以直接写入目标系统。在此过程中,可以使用轻易云平台提供的实时监控功能,确保每个环节都透明可视,并且能够及时发现和解决问题。 #### 异常处理与补救机制 为了应对可能出现的数据遗漏或异常情况,我们设置了补救机制: ```json "omissionRemedy":{ "crontab": "1 2 * * *", "takeOverRequest":[ { "field": "startDate", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )", "type": "string", "label": "接管字段" } ] } ``` 该机制通过定时任务(每天凌晨2点1分)重新拉取过去三天的数据,以确保数据完整性。 通过以上步骤,我们实现了从吉客云接口获取、清洗、转换到写入目标系统的完整流程。这不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现数据ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### 配置元数据 首先,我们需要配置元数据,以确保从源平台提取的数据能够正确映射到金蝶云星空API接口所需的字段格式。以下是元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "merge", "field": "goodsDocDetailList_ownerName,inOutMonth", "bodyName": "items", "bodySum": ["goodsDocDetailList_quantity"], "header": ["inOutMonth", "goodsDocDetailList_ownerName"], "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"] }, "request": [ {"field":"FJKYNo","label":"吉客云单号","type":"string","describe":"单据编号","value":"{goodsdocNo}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKD93_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{goodsDocDetailList_ownerName}","mapping":{"target":"6441f0214af70a2f240adb22","direction":"positive"}}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{inOutMonth}"}, {"field":"FDeptId","label":"领料部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000029"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"","describe":"","parser":{"name":"","params":"","value":"","mapping":{"target":"","direction":""}}}, {"field":"","label":"","type":"","children":[{"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":"","parent":""},{"field":"","label":"","type":"","value":"","parser":{"name":"","params":""}},{"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value","","parent"],"value"}], ], ... } ``` #### 数据请求与清洗 在ETL过程的第一步,我们需要从源平台提取原始数据,并进行必要的数据清洗和预处理。这一步确保了数据的一致性和准确性,为后续的数据转换打下基础。 #### 数据转换与映射 接下来,我们将清洗后的数据按照金蝶云星空API接口的要求进行字段映射和格式转换。以下是具体字段映射示例: - **吉客云单号 (FJKYNo)**: 映射到 `{goodsdocNo}` - **单据类型 (FBillTypeID)**: 固定值 `QTCKD93_SYS` - **库存组织 (FStockOrgId)**: 映射到 `{goodsDocDetailList_ownerName}`,并通过 `ConvertObjectParser` 转换为 `FNumber` - **库存方向 (FStockDirect)**: 固定值 `GENERAL` - **日期 (FDate)**: 映射到 `{inOutMonth}` - **领料部门 (FDeptId)**: 固定值 `BM000029` - **货主类型 (FOwnerTypeIdHead)**: 固定值 `BD_OwnerOrg` - **货主 (FOwnerIdHead)**: 映射到 `{goodsDocDetailList_ownerName}`,并通过 `ConvertObjectParser` 转换为 `FNumber` 对于明细信息(`FEntity`),我们需要进一步配置子字段: - **物料编码 (FMATERIALID)**: 映射到 `{{items.goodsDocDetailList_goodsNo}}` - **库存状态 (FStockStatusId)**: 固定值 `KCZT01_SYS` - **发货仓库 (FSTOCKID)**: 映射到 `{{items.warehouseCode}}` - **实发数量 (FQty)**: 映射到 `{{items.goodsDocDetailList_quantity}}` #### 数据写入目标平台 完成数据转换后,我们使用POST方法将处理后的数据发送至金蝶云星空API接口。以下是请求示例: ```json { "FormId": "STK_MisDelivery", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, ... } ``` 通过上述步骤,我们实现了从源平台到金蝶云星空API接口的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)