轻易云平台实现吉客云与金蝶云的数据交互

  • 轻易云集成顾问-潘裕
### 集成吉客云数据到金蝶云星空的技术解决方案分享 在实现吉客云与金蝶云星空的数据集成过程中,我们采用了轻易云数据集成平台,实现了一套高效、可靠的对接方案。此次案例重点介绍如何通过调用吉客云API接口`erp.storage.goodsdocin.v2`获取其他入库单的数据,并利用金蝶云星空的批量写入API `batchSave`将这些数据准确无误地同步至目标系统。 #### 确保集成过程中的关键环节 1. **定时可靠的数据抓取** 利用轻易云提供的调度功能,我们设置了定时任务,每小时自动调用吉客云接口获取最新的其他入库单信息,从而确保数据及时更新。这一步骤不仅提高了效率,还避免了人工操作可能带来的延迟和错误。 2. **处理分页和限流问题** 吉客云接口返回的大量数据往往需要分页处理。我们设计了一种循环机制,通过逐页请求,确保每一条记录都不遗漏。同时,为防止触发API调用限制,加入限流控制,智能判断当前请求频率并适当调整访问速度。 3. **格式差异转换** 数据格式的一致性是成功对接的重要前提之一。在实际应用中,吉客云和金蝶云星空使用不同的数据结构。因此,在抓取完成后,需要进行字段映射及格式转换。例如,将某些字段名进行统一,以及处理日期格式等特定要求,以保证两端系统完整通信。 4. **异常处理与重试机制** 在对接过程中不可避免会遇到网络波动、服务器超时或其他不可预见的问题。对此,我们引入异常捕获策略,一旦出现错误,会立即记录相关日志并启动重试机制。多次尝试仍未成功则自动告警通知运维人员介入,保障整体流程不中断。 5. **实时监控与日志记录** 为达到全透明管理,我们设立了实时监控程序,对整个数据流动过程进行全程跟踪,并详细记录各个环节的操作日志。一方面确保每一笔交易都有据可依;另一方面便于出现问题时快速定位原因,高效解决故障。 综上所述,通过上述步骤配置后的元数据信息,不仅能够高效整合吉客云及金蝶系统间的数据互动,也为企业在复杂业务场景下提供了一套行之有效且安全稳定的数据传递渠道。在具体实施细节中,还有更多针对性的优化点将在后续内容详解阐述。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将深入探讨如何通过调用吉客云接口`erp.storage.goodsdocin.v2`来获取并加工数据。 #### 接口配置与请求参数 根据元数据配置,我们需要向吉客云发送一个POST请求,以获取其他入库单的数据。以下是请求参数的详细配置: - **api**: `erp.storage.goodsdocin.v2` - **effect**: `QUERY` - **method**: `POST` - **number**: `goodsdocNo` - **id**: `recId` - **idCheck**: `true` 请求参数包括分页信息、时间范围和出入库类型等。具体字段如下: 1. **pageIndex**: 当前页码,类型为int,值为`{PAGINATION_START_ROW}`。 2. **pageSize**: 每页记录数,类型为int,值为`{PAGINATION_PAGE_SIZE}`。 3. **startDate**: 开始日期,类型为string,值为`{{LAST_SYNC_TIME|datetime}}`。 4. **endDate**: 结束日期,类型为string,值为`{{CURRENT_TIME|datetime}}`。 5. **inouttype**: 出入库类型,类型为int,此处固定值为104(其他入库)。 6. **selelctFields**: 需要返回的字段列表,包括单据号、创建时间、仓库信息等。 #### 请求示例 以下是一个示例请求体: ```json { "pageIndex": 1, "pageSize": 100, "startDate": "2023-01-01T00:00:00", "endDate": "2023-12-31T23:59:59", "inouttype": 104, "selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerCode,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,applyCompanyId,applyCompanyName,applyCompanyCode,applyDepartId,applyDepartName,departCode,applyUserId,applyUserName,outBillNo,gmtModified,companyCode,vendCustomerId" } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。主要步骤包括: 1. **字段映射与重命名**:根据目标系统的要求,对字段进行映射和重命名。例如,将`goodsdocNo`映射为目标系统中的单据号字段。 2. **数据格式转换**:将日期、金额等字段转换为目标系统所需的格式。例如,将日期格式从`yyyy-MM-ddTHH:mm:ss`转换为`yyyy-MM-dd HH:mm:ss`。 3. **数据过滤与校验**:根据业务规则过滤无效数据,并进行必要的校验。例如,确保所有必填字段都有值。 #### 示例代码 以下是一个简单的数据清洗与转换示例代码(Python): ```python import datetime def clean_and_transform(data): transformed_data = [] for record in data: transformed_record = { "单据号": record["goodsdocNo"], "创建时间": datetime.datetime.strptime(record["gmtCreate"], "%Y-%m-%dT%H:%M:%S").strftime("%Y-%m-%d %H:%M:%S"), "仓库名称": record["warehouseName"], # 更多字段映射... } # 校验必填字段 if not transformed_record["单据号"]: continue transformed_data.append(transformed_record) return transformed_data ``` #### 数据写入 完成数据清洗与转换后,即可将处理后的数据写入目标系统(金蝶云)。这一步通常涉及调用目标系统的API接口,并处理响应结果。 通过上述步骤,我们实现了从吉客云获取其他入库单数据并进行加工,为后续的数据写入奠定了基础。在实际操作中,还需根据具体业务需求进行更多细节调整和优化。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现吉客云到金蝶云星空的其他入库单数据转换与写入 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将吉客云的其他入库单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据转换与写入流程 1. **定义API接口和请求方法** - API接口:`batchSave` - 请求方法:`POST` - 表单ID:`STK_MISCELLANEOUS` - 操作类型:`Save` - 自动提交并审核:`true` 2. **元数据配置解析** 元数据配置是整个数据转换过程的核心,以下是具体字段及其映射关系: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{goodsdocNo}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FDate","label":"日期","type":"string","value":"{inOutDate}"}, {"field":"FSUPPLIERID","label":"供应商","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{vendCustomerCode}"}, {"field":"FDEPTID","label":"部门","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"02"}, {"field":"FNOTE","label":"备注","type":"string","value":"入库原因:{inOutReason}"}, { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ {"field": "FMATERIALID", "label": "物料编码", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{goodsDocDetailList.goodsNo}}", "parent": "FEntity"}, {"field": "FSTOCKID", "label": "收货仓库", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{goodsDocDetailList.warehouseCode}}", "parent": "FEntity"}, {"field": "FQty", "label": "实收数量", "type": "string", "value": "{{goodsDocDetailList.quantity}}", "parent": "FEntity"}, {"field": "FEntryNote", "label": "备注", "type": "string", "value": "{{goodsDocDetailList.rowRemark}}", "parent": "FEntity"}, {"field": "FLOT", "label": "批次号", "type": string, parser: {name: ConvertObjectParser, params: FNumber}, value: {{goodsDocDetailList.batchNo}}, parent: FEntity} ], value: goodsDocDetailList } ], otherRequest: [ { field: FormId, label: 业务对象表单Id, type: string, value: STK_MISCELLANEOUS }, { field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: false }, { field: Operation, label: 执行的操作, type: string, value: Save }, { field: IsAutoSubmitAndAudit, label: 提交并审核, type: bool, value: true } ] } ``` 3. **字段解析与转换** - **FBillNo**(单据编号):直接从源数据中获取 `{goodsdocNo}`。 - **FBillTypeID**(单据类型):固定值 `QTRKD01_SYS`,通过 `ConvertObjectParser` 转换为目标系统可识别的格式。 - **FStockOrgId**(库存组织):固定值 `100`,同样通过 `ConvertObjectParser` 转换。 - **FDate**(日期):直接从源数据中获取 `{inOutDate}`。 - **FSUPPLIERID**(供应商):从源数据中获取 `{vendCustomerCode}`,并通过 `ConvertObjectParser` 转换。 - **FDEPTID**(部门):固定值 `02`,通过 `ConvertObjectParser` 转换。 - **FNOTE**(备注):拼接字符串 `入库原因:{inOutReason}`。 4. **明细信息处理** 明细信息字段 `FEntity` 是一个数组,需要逐项处理每个子字段: - **FMATERIALID**(物料编码):从明细列表中获取 `{{goodsDocDetailList.goodsNo}}`,并通过 `ConvertObjectParser` 转换。 - **FSTOCKID**(收货仓库):从明细列表中获取 `{{goodsDocDetailList.warehouseCode}}`,并通过 `ConvertObjectParser` 转换。 - **FQty**(实收数量):从明细列表中获取 `{{goodsDocDetailList.quantity}}`。 - **FEntryNote**(备注):从明细列表中获取 `{{goodsDocDetailList.rowRemark}}`。 - **FLOT**(批次号):从明细列表中获取 `{{goodsDocDetailList.batchNo}}`,并通过 `ConvertObjectParser` 转换。 5. **其他请求参数** 除了主要字段外,还需要设置一些额外的请求参数: - 表单 ID (`FormId`):固定值 `STK_MISCELLANEOUS` - 验证基础资料 (`IsVerifyBaseDataField`):设置为 `false` - 执行操作 (`Operation`):设置为 `Save` - 自动提交并审核 (`IsAutoSubmitAndAudit`):设置为 `true` #### 实际应用案例 在实际应用中,我们可以利用上述元数据配置,通过轻易云的数据集成平台将吉客云的其他入库单数据无缝地转换并写入金蝶云星空。以下是一个具体示例: ```json { api:"batchSave", method:"POST", idCheck:true, operation:{ rowsKey:"array", rows:1, method:"batchArraySave" }, request:[ { field:"FBillNo", label:"单据编号", type:"string", value:"RK20231001-001"}, { field:"FBillTypeID", label:"单据类型", type:"string", parser:{ name:"ConvertObjectParser", params:"FNumber"}, value:"QTRKD01_SYS"}, { field:"FStockOrgId", label:"库存组织", type:"string", parser:{ name:"ConvertObjectParser", params:"FNumber"}, value:"100"}, { field:"FDate", label:"日期", type:"string", value:"2023-10-01"}, { field:"FSUPPLIERID", label:"供应商代码 ", type :" string ", parser :{ name :" ConvertObjectParser ", params :" FNumber"}, value :" SUPP001"}, { field :" FDEPTID ", label :" 部门 ", type :" string ", parser :{ name :" ConvertObjectParser ", params :" FNumber"}, value :" 02"}, { field :" FNOTE ", label :" 备注 ", type :" string ", value :" 入库原因 : 新品上架 "} ], otherRequest:[ { field : FormId , label : 业务对象表单 Id , type : string , value : STK_MISCELLANEOUS }, { field : IsVerifyBaseDataField , label : 验证基础资料 , type : bool , value : false }, { field : Operation , label : 执行的操作 , type : string , value : Save }, { field : IsAutoSubmitAndAudit , label : 提交并审核 , type : bool , value : true } ] } ``` 通过上述配置,我们可以确保吉客云的数据被正确转换,并无缝写入金蝶云星空系统。这种自动化的数据处理方式不仅提高了效率,还减少了人工操作带来的错误风险。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)