数据转换与写入:实现金蝶云星空API接口对接

  • 轻易云集成顾问-胡秀丛
### 吉客云数据集成到金蝶云星空的仓库方案-I0110技术案例分享 在吉客云和金蝶云星空系统对接的过程中,仓库方案-I0110旨在高效、安全地实现大规模数据同步,如库存信息与出入库记录等。通过轻易云的数据集成平台,我们成功构建了一套稳定、高效的数据流处理机制,确保吉客云中的关键业务数据能够自动、快速地写入到金蝶云星空中。 此次对接任务主要借助了两个核心API:从吉客云获取数据的`erp.warehouse.get`接口,以及向金蝶云星空写入数据的`batchSave`接口。以下是具体的技术实施细节: #### 数据抓取及ETL流程 为了保证大量实时库存更新不漏单,我们采用定时任务方式可靠抓取吉客云提供的数据。通过调度器按设定时间间隔调用`erp.warehouse.get`接口,从而批量获取最新库存变化。 由于不同系统对数据格式有着各自特定要求,我们利用轻易云的平台功能,对获取的数据进行自定义转换逻辑处理。在此过程中,使用可视化设计工具设置了清晰、直观的数据转化规则,将原始JSON格式转变为适用于金蝶云接受的标准格式。 #### 数据质量监控与异常管理 一个稳健的数据集成方案需要有效应对可能出现的问题。例如,当网络波动导致部分请求失败时,通过重试机制可以避免长时间等待或丢失重要信息。同时,为保障整体流程健康运行,集中监控和告警系统及时捕捉并汇报任何异常情况,例如API限流超标或响应延迟,从而便于迅速采取纠正措施。 此外,为进一步提升操作透明度,我们添加了详细日志记录功能,在每次ETL过程结束后生成详尽报告。这一措施不仅帮助开发者追踪问题根源,也为优化下一阶段工作提供了宝贵参考依据。 #### 重点难点解析与优化策略 在实际运作中,分页机制是提高API效率的重要手段之一,但同时也带来了额外复杂度,需要精确控制请求参数以维护一致性。此外,两套系统之间存在一定程度上的字段映射差异,这就要求我们针对特定值进行二次加工,以满足目标数据库条件。而对于较大规模、多批次写入场景,则需特别关注性能瓶颈,通过批量提交(Batch Processing)减少网络往返次数,提高整体吞吐量。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.warehouse.get获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用吉客云的`erp.warehouse.get`接口来获取并加工仓库数据。 #### 接口配置与请求参数 根据元数据配置,我们需要通过POST方法调用`erp.warehouse.get`接口。以下是具体的请求参数配置: - **页码 (pageIndex)**: 用于分页查询,类型为字符串。 - **页大小 (pageSize)**: 每页返回的数据条数,类型为字符串,默认值为50。 - **起始开始时间 (gmtModifiedStart)**: 数据修改的起始时间,类型为字符串,使用模板变量`{{LAST_SYNC_TIME|datetime}}`自动填充上次同步时间。 - **结束修改时间 (gmtModifiedEnd)**: 数据修改的结束时间,类型为字符串,使用模板变量`{{CURRENT_TIME|datetime}}`自动填充当前时间。 这些参数确保了我们能够高效地分页获取在特定时间范围内修改过的数据。 #### 请求示例 ```json { "pageIndex": "1", "pageSize": "50", "gmtModifiedStart": "{{LAST_SYNC_TIME|datetime}}", "gmtModifiedEnd": "{{CURRENT_TIME|datetime}}" } ``` #### 数据过滤与条件设置 为了确保我们获取的数据符合业务需求,我们需要对返回的数据进行过滤。根据元数据配置,我们设置了两个过滤条件: 1. `condition_bk`: 用于备份条件,字段 `isBlockup` 的值必须等于0。 2. `condition`: 主条件,同样要求字段 `isBlockup` 的值必须等于0。 这两个条件确保了我们只获取未被封存的仓库数据。 #### 自动填充响应 元数据配置中的 `autoFillResponse` 设置为 `true`,这意味着平台会自动处理响应数据,并将其填充到相应的数据表中。这一步骤极大简化了开发者的工作量,使得数据集成过程更加高效和可靠。 #### 实际操作步骤 1. **初始化请求**:根据元数据配置构建请求参数,并调用吉客云接口。 2. **接收响应**:平台自动接收并解析响应数据。 3. **数据过滤**:应用预设的过滤条件,对响应数据进行筛选。 4. **自动填充**:将筛选后的数据自动填充到目标数据库中。 #### 技术要点总结 - **异步调用**:轻易云平台支持全异步调用,提高了系统性能和响应速度。 - **模板变量**:使用模板变量如 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成请求参数,确保数据同步的实时性和准确性。 - **自动化处理**:通过设置 `autoFillResponse=true` 实现响应数据的自动化处理,大幅减少手动干预,提高效率。 通过上述步骤,我们成功实现了从吉客云获取仓库数据并进行加工处理。这一过程不仅展示了轻易云平台强大的集成能力,也体现了其在提升业务透明度和效率方面的重要作用。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 数据转换与写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现过程。 #### 配置元数据 根据提供的元数据配置,我们需要将源数据映射到金蝶云星空API接口所需的数据格式。以下是元数据配置的详细内容: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FName", "label": "仓库名称", "type": "string", "value": "{warehouseName}"}, {"field": "FNumber", "label": "编码", "type": "string", "value": "{warehouseCode}"}, {"field": "FStockProperty", "label": "仓库属性", "type": "string", "value":"1"}, {"field":"FCreateOrgId","label":"FCreateOrgId","type":"string","value":"I0110","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FUseOrgId","label":"FUseOrgId","type":"string","value":"I0110","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FAllowMinusQty","label":"允许即时库存","type":"string","value":"true"} ], "otherRequest":[ {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_STOCK"}, {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"} ], "operation":{"method": "batchArraySave", "rows": 100, "rowsKey": "array"} } ``` #### 数据请求与清洗 在ETL转换过程中,首先需要从源系统中获取原始数据,并进行必要的数据清洗和预处理。假设我们从源系统中获取了以下原始数据: ```json [ { "warehouseName": "主仓库", "warehouseCode": "WH001" }, { "warehouseName": "分仓库", "warehouseCode": "WH002" } ] ``` #### 数据转换 根据元数据配置,将原始数据转换为金蝶云星空API接口所需的数据格式。具体步骤如下: 1. **字段映射**:将原始数据中的字段映射到目标平台所需字段。例如,将`warehouseName`映射到`FName`,将`warehouseCode`映射到`FNumber`。 2. **固定值填充**:根据元数据配置,为某些字段填充固定值。例如,`FStockProperty`固定为"1",`FAllowMinusQty`固定为"true"。 3. **使用解析器**:对于需要解析的字段,如`FCreateOrgId`和`FUseOrgId`,使用指定的解析器进行处理。 转换后的数据如下: ```json [ { "FName": "主仓库", "FNumber": "WH001", "FStockProperty": "1", "FCreateOrgId": { "$refType$" : "$object$", "$refValue$" : { "$refField$" : "$number$", "$refData$" : ["I0110"] } }, “FUseOrgId”: { "$refType$" : "$object$", "$refValue$" : { "$refField$" : "$number$", "$refData$" : ["I0110"] } }, “FAllowMinusQty”: “true” }, { “FName”: “分仓库”, “FNumber”: “WH002”, “FStockProperty”: “1”, “FCreateOrgId”: { "$refType$" : "$object$", "$refValue$" : { "$refField$" : "$number$", "$refData$" : ["I0110"] } }, “FUseOrgId”: { "$refType$" : "$object$", "$refValue$" : { "$refField$" : "$number$", "$refData$" : ["I0110"] } }, “FAllowMinusQty”: “true” ] ``` #### 数据写入 最后一步是将转换后的数据通过API接口写入金蝶云星空系统。根据元数据配置,我们使用批量保存接口(batchSave),通过POST方法发送请求。具体请求示例如下: ```http POST /k3cloud/api/batchSave HTTP/1.1 Host: your-k3cloud-host.com Content-Type: application/json Authorization: Bearer your-access-token { "_model_":{ "_rows_":[ { "_data_":{ "_rows_":[ { ... 转换后的第一个仓库记录 ... }, { ... 转换后的第二个仓库记录 ... } ] } } ] }, "_operation_":{ "_method_":["batchArraySave"], "_rowsKey_":["array"], "_rows_":[100] } } ``` 在实际应用中,需要确保正确设置API请求头信息,包括认证信息等。同时,根据业务需求,可以调整批量处理的行数(如每次处理100行)。 通过以上步骤,我们完成了从源系统获取原始数据、进行ETL转换、并最终写入目标平台金蝶云星空API接口的全过程。这一过程充分利用了轻易云平台提供的全异步、多异构系统集成能力,实现了不同系统间的数据无缝对接。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)