数据集成与转换:将吉客云采购退料信息写入金蝶云星空

  • 轻易云集成顾问-彭亮
### 案例分享:吉客云数据集成到金蝶云星空——采购退料对接 在企业的采购退料管理中,高效、准确的数据流转至关重要。本次案例聚焦于使用轻易云数据集成平台,将吉客云中的采购退料信息高效地同步到金蝶云星空,实现系统间无缝对接。具体方案名称为“采购退料对接--正数--已测试”。 #### 1. 系统概述与技术要点 为了实现这一目标,我们利用了多个核心特性: - **API接口调用**:通过`erp.storage.goodsdocout.v2`从吉客云获取采购退料数据,再通过`batchSave`接口将处理后的数据写入金蝶云星空。 - **批量集成与快速写入**:支持高吞吐量的数据写入能力,使得大量数据能够快速被集成,明显提升了整体时效性。 - **实时监控与日志记录**:确保每个环节都能透明可视,并提供集中监控和告警系统以追踪任务状态和性能。 #### 2. 数据获取与转换逻辑 首先,通过调用吉客云的`erp.storage.goodsdocout.v2` API接口,抓取需要处理的采购退料数据。在这个过程中,需要特别关注分页及限流问题,以确保大规模数据提取过程中的稳定性。获取到原始数据后,还需根据业务需求进行格式转换,以适应金蝶云星空的数据结构。 #### 3. 数据质量控制与异常处理机制 为了保证传输过程中不漏单、不出错,每条记录都会经过严格的数据质量检测。同时,当遇到异常情况或者错误时,会有相应的重试机制以及详细的日志记录,这不仅方便调试,也保障了业务持续不中断。 #### 4. 数据写入操作优化 通过自定义批量提交策略,使得大量采集来的订单可以一次性批量写入至金蝶云星空,大幅降低API调用次数,提高效率。此外,在实际运行中会根据业务需求定制化映射字段,确保每一条记录都精准无误地映射至对应表单字段,从根本上提高了录入正确率和一致性。这套方案成功证明,无论是技术实现还是实际应用效果,都达到了预期目标,为企业在数字化管理方面提供了强有力支撑。 下一部分将继续深入分析具体实现步骤,包括代码实例及相关配置细节,请保持关注。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步加工。本文将详细探讨如何通过调用吉客云的`erp.storage.goodsdocout.v2`接口来实现这一目标,并分享具体的技术实现案例。 #### 接口配置与请求参数 首先,我们需要配置接口及其请求参数。根据元数据配置,`erp.storage.goodsdocout.v2`接口采用POST方法进行数据查询,主要参数如下: - `pageIndex`: 分页页码,类型为字符串。 - `pageSize`: 分页页数,类型为字符串,默认值为50。 - `goodsDocNo`: 入库单号,类型为字符串。 - `startDate`: 创建时间的起始时间,类型为字符串,使用动态变量`{{LAST_SYNC_TIME|datetime}}`。 - `endDate`: 创建时间的结束时间,类型为字符串,使用动态变量`{{CURRENT_TIME|datetime}}`。 - `inouttype`: 出库类型,类型为字符串,此处固定值为205(退料入库)。 - `selelctFields`: 返回参数列表,以逗号分隔。 以下是一个典型的请求示例: ```json { "pageIndex": "1", "pageSize": "50", "goodsDocNo": "", "startDate": "{{LAST_SYNC_TIME|datetime}}", "endDate": "{{CURRENT_TIME|datetime}}", "inouttype": "205", "selelctFields": "goodsdocNo,inOutDate,inouttype,vendCustomerCode,vendCustomerName,warehouseCode,warehouseName,inOutReason,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.estCost,goodsDocDetailList.estPrice,goodsDocDetailList.quantity,goodsDocDetailList" } ``` #### 数据过滤与条件设置 为了确保获取的数据符合业务需求,我们需要设置一些过滤条件。根据元数据配置中的条件部分,我们将应用以下逻辑: - `goodsDocDetailList.quantity > 0` - `warehouseName 不包含 'VMI'` 这些条件可以在请求处理后,通过代码或平台内置功能进行过滤。 #### 数据平铺与自动填充 元数据配置中提到需要对返回的数据进行平铺处理,即将嵌套的`goodsDocDetailList`展开成平铺结构。这一步骤可以通过编写相应的数据处理逻辑来实现。例如: ```python def flatten_goods_doc_detail(response_data): flat_data = [] for record in response_data: for detail in record.get('goodsDocDetailList', []): flat_record = {**record} flat_record.update(detail) flat_record.pop('goodsDocDetailList', None) flat_data.append(flat_record) return flat_data ``` 此外,自动填充响应(autoFillResponse)功能可以简化数据处理过程,使得返回的数据结构更加一致和易于使用。 #### 异常处理与补偿机制 在实际操作中,不可避免地会遇到各种异常情况,如网络中断、接口超时等。为了确保数据集成过程的稳定性和可靠性,我们需要设计相应的异常处理和补偿机制。 元数据配置中提供了一个补偿机制示例,通过定时任务(crontab)来接管请求,并重新拉取过去三天的数据: ```json { "crontab": "1 2 * * *", "takeOverRequest": [ { "field": "startDate", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )" } ] } ``` 该配置表示每天凌晨2:01执行一次任务,从当前时间往前推三天重新拉取数据,以确保没有遗漏。 #### 实际应用案例 假设我们需要集成采购退料数据,并且已经完成了上述配置和准备工作。以下是一个实际应用案例: 1. **初始化请求参数**:根据当前时间和上次同步时间生成请求参数。 2. **调用接口**:通过POST方法向吉客云接口发送请求。 3. **处理响应**:接收并解析响应数据,根据条件进行过滤和平铺处理。 4. **异常处理**:捕获可能出现的异常情况,并触发补偿机制重新拉取数据。 通过这种方式,我们可以高效地从吉客云获取所需的数据,并进行初步加工,为后续的数据转换与写入做好准备。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:采购退料对接至金蝶云星空API接口的ETL转换 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。 #### API接口与元数据配置解析 在本次集成方案中,我们使用了金蝶云星空的`batchSave` API接口。该接口通过POST方法提交请求,支持批量保存采购退料单据。以下是关键元数据配置项及其技术解析: 1. **API基本信息** ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true } ``` - `api`: 指定调用的API接口名称。 - `effect`: 操作类型,这里为执行操作。 - `method`: HTTP请求方法,这里为POST。 - `idCheck`: 是否进行ID校验。 2. **操作定义** ```json { "operation": { "method": "merge", "field": "goodsDocDetailList_ownerName,goodsdocNo", "bodyName": "Fentity", "header": ["goodsdocNo", "inOutDate", "vendCustomerCode", "warehouseCode", "goodsDocDetailList_ownerName"], "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "goodsDocDetailList_estPrice", "goodsDocDetailList_estCost"] } } ``` - `method`: 操作方法,这里为合并(merge)。 - `field`: 合并依据字段。 - `bodyName`: 主体名称。 - `header`和`body`: 定义了请求头和请求体中的字段映射关系。 3. **请求参数映射** 请求参数映射用于将源平台的数据字段转换为目标平台所需的格式。例如: ```json { "field": "FJKYNo", "label": "吉客云单号", "type": "string", "describe": "单据编号", "value": "{goodsdocNo}", ... } ``` 该配置将源平台中的`goodsdocNo`字段映射为金蝶云星空中的`FJKYNo`字段。 4. **基础资料解析器** 在处理基础资料时,我们使用了自定义解析器,例如: ```json { ... "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, ... } ``` 该解析器将源平台中的基础资料编码转换为目标平台所需格式。 5. **明细信息处理** 明细信息通过嵌套数组结构进行处理: ```json { ... { ... “children”: [ { “field”: “FMATERIALID”, “label”: “物料编码”, “type”: “string”, “describe”: “基础资料”, “parser”: {“name”: “ConvertObjectParser”,“params”:“FNumber”}, “value”:“{{Fentity.goodsDocDetailList_goodsNo}}” }, ... ] } ... } ``` 这里定义了物料编码、实退数量、仓库、含税单价、价税合计等明细信息的映射关系和解析方式。 6. **其他请求参数** ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"PUR_MRB"}, {"field":"Operation","label":"执行的操作","type":"string","value":"batchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"}, {"field":"SubSystemId","label":"系统模块","type":"string","describe":"默认仓库模块","value":"21"}, {"field":"InterationFlags","label":"允许负库存","type":"string","value":"STK_InvCheckResult"} ... } ``` 这些参数用于控制API调用过程中的特定行为,例如自动提交并审核、验证基础资料有效性等。 #### 数据转换与写入流程 1. **数据提取与清洗** 2. **数据转换** 3. **数据写入** 在实际操作中,通过上述元数据配置,可以实现从源平台到金蝶云星空的数据无缝对接。每个字段的映射和解析都经过精心设计,以确保数据准确无误地传输到目标系统中。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)