利用轻易云平台将数据转换为金蝶云星空格式的实用指南

  • 轻易云集成顾问-孙传友
### 吉客云数据集成到金蝶云星空的技术案例分享:其他入库109v2报废入库 在本文中,我们将详细探讨如何通过轻易云数据集成平台实现吉客云(Geek Cloud)与金蝶云星空(Kingdee Cloud)的高效对接,具体案例为"其他入库109v2报废入库"。这个过程不仅需要确保数据准确无误地传递,还需处理分页、限流以及两套系统间的数据格式差异等问题。 #### 确保吉客云数据不漏单 为了保证从吉客云获取的数据完整且无遗漏,我们使用了`erp.storage.goodsdocin.v2`接口。该接口支持定时抓取功能,可以设定固定时间间隔自动获取最新数据,同时利用日志记录和实时监控来追踪每次请求的执行情况。一旦检测到任何异常,如网络抖动导致的请求失败,会触发错误重试机制,以确保所有应处理的数据都被正确捕获。 #### 处理分页和限流 在面对大规模的数据量时,吉客云API返回的结果可能会受到分页限制。这就要求我们实现一个健壮的分页机制,通过控制参数页码(pageNum)与每页条数(pageSize),细化请求策略,有效规避因服务器临时性负载高峰导致的响应延迟或失败。此外,为避免触及API调用频率上限而遭受封禁,对每次请求进行频率控制也至关重要,这可以通过设置合理的时间间隔来达成。 #### 数据快速写入金蝶云星空 在成功获取并处理好来自吉客云的大量数据信息后,下一个关键步骤是利用金蝶云星空提供的`batchSave`接口,实现批量快速写入。在这个过程中,必须对不同结构化标准下的数据格式进行映射转化,确保字段对应关系明确无误。例如,将原始JSON格式转换为符合XML规范,使得双方系统能够顺利理解和接受彼此的信息。同时,通过使用合适缓冲批量上传策略,大幅提升了整体写入效率,并减少了单笔操作带来的潜在性能瓶颈。 #### 异常处理与错误重试机制 针对在对接过程中可能出现的一系列异常情况,例如网络中断或者服务器宕机等,我们设计了一套完善的异常捕捉与错误重试机制。它包括多级别告警通知、重复尝试逻辑以及自动回滚,从而有效降低由于突发故障给业务流程带来的负面影响。例如,当一次写入操作失败后,会先记录于日志,并依据预设规则再次尝试;如果多次尝试依然未果,则发送告 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步处理。本文将深入探讨如何通过调用吉客云接口`erp.storage.goodsdocin.v2`来实现这一过程。 #### 接口调用配置 首先,我们需要根据元数据配置来设置接口调用参数。以下是关键参数及其配置说明: - **api**: `erp.storage.goodsdocin.v2` - **method**: `POST` - **number**: `goodsdocNo` - **id**: `recId` - **pagination**: `{"pageSize":10}` - **idCheck**: `true` 请求参数包括分页信息、时间范围、入库类型等,具体配置如下: ```json { "pageIndex": 1, "pageSize": 100, "goodsDocNo": "", "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "startDate": "", "endDate": "", "inouttype": "109", "sourceBillNo": "", "warehouseCode": "", "outBillNo": "", "vendCode": "", "billNo": "", "userName": "", "selelctFields": "vendCustomerCode,companyName,memo,redStatus,inouttypeName,outBillNo,billNo,logisticCode,companyCode,applyCompanyCode,inouttype,sourceBillNo,applyCompanyId,applyDepartId,applyUserName,companyId,financeBillStatus,vendCustomerId,recId,inOutDate,goodsdocNo,logisticNo,logisticType,gmtModified,warehouseName,warehouseCode,applyUserId,channelId,channelCode,gmtCreate,userName,inOutReason,..." } ``` #### 数据请求与清洗 在数据请求阶段,我们通过POST方法向吉客云接口发送上述请求参数。接口返回的数据包含了入库单的详细信息,包括但不限于供应商编号、仓库编号、创建人名称等。 为了确保数据的准确性和完整性,我们需要对返回的数据进行清洗和过滤。例如,过滤掉数量为零的记录: ```json "condition_bk":[[{"field":"goodsDocDetailList.quantity","logic":"gt","value":"0"}]] ``` #### 数据转换与写入 在完成数据清洗后,我们需要将数据转换为目标系统所需的格式,并写入目标数据库。这一步通常涉及字段映射和格式转换。例如,将吉客云返回的`goodsDocDetailList`中的字段映射到目标系统的相应字段。 #### 异常处理与补偿机制 为了确保数据集成过程的稳定性和可靠性,我们还需要考虑异常处理和补偿机制。元数据配置中提供了一个定时任务(crontab)用于异常情况下的数据补偿: ```json "omissionRemedy":{ "crontab":"2 */5 * * *", "takeOverRequest":[ {"field":"gmtModifiedStart","value":"_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')"}, {"field":"gmtModifiedEnd","value":"_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')} ] } ``` 该定时任务每5分钟执行一次,确保在异常情况下能够及时重新获取并处理数据。 #### 实践案例 以下是一个实际调用吉客云接口并处理返回数据的示例代码(伪代码): ```python import requests import json from datetime import datetime, timedelta # 配置请求参数 params = { "pageIndex": 1, "pageSize": 100, # 使用函数计算时间范围 "gmtModifiedStart": (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'), "gmtModifiedEnd": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), # 固定入库类型为报废入库 "inouttype": '109', # 返回字段列表 "selelctFields": "...", } # 发起POST请求 response = requests.post('https://api.jikexyun.com/erp.storage.goodsdocin.v2', data=json.dumps(params)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗:过滤数量为零的记录 cleaned_data = [item for item in data['goodsDocDetailList'] if item['quantity'] > 0] # 数据转换与写入(示例) for record in cleaned_data: transformed_record = transform(record) # 自定义转换函数 write_to_target_system(transformed_record) # 自定义写入函数 else: print(f"Error: {response.status_code}") ``` 以上代码展示了如何调用吉客云接口获取数据,并对返回的数据进行清洗、转换和写入目标系统。 通过上述步骤,我们可以高效地实现从源系统获取并加工数据,为后续的数据集成工作打下坚实基础。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成 在轻易云数据集成平台中,将源平台的数据转换为目标平台所需的格式是一个关键步骤。本文将详细探讨如何将已经集成的源平台数据进行ETL(提取、转换、加载)处理,转为金蝶云星空API接口能够接收的格式,并最终写入目标平台。 #### API接口配置 在进行数据转换和写入之前,首先需要了解金蝶云星空API接口的配置。以下是一个典型的API接口配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{companyCode}"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"_function IF( {redStatus}<>9 , \"GENERAL\" , \"RETURN\")"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')"}, {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000016"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","value":""} ], "otherRequest":[ {"field":"","label":"","type":"","describe":"","value":""}, {"field":"","label":"","type":"","describe":"","value":""} ] } ``` #### 数据字段解析与转换 在上述配置中,每个字段都有特定的解析和转换规则。例如: - **FBillNo**: 单据编号,通过`{goodsdocNo}`占位符从源数据中提取。 - **FBillTypeID**: 单据类型,通过`ConvertObjectParser`解析器将固定值`QTRKD01_SYS`转换为目标系统所需的格式。 - **FStockOrgId**: 库存组织,同样通过`ConvertObjectParser`解析器将公司代码`{companyCode}`进行转换。 - **FStockDirect**: 库存方向,根据条件判断库存方向,如果`{redStatus}`不等于9,则返回"GENERAL",否则返回"RETURN"。 - **FDate**: 日期,通过自定义函数将日期格式化为`%Y-%m-%d`。 这些字段的解析和转换确保了数据能够被金蝶云星空API正确接收和处理。 #### 明细信息处理 对于复杂的数据结构,如明细信息,需要使用嵌套数组来表示。例如: ```json { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ { "field": "FMATERIALID", "label": "物料编码", "type": "string", "parser": { "name": "ConvertObjectParser", "params": ["FNumber"] }, "value": "{{goodsDocDetailList.goodsNo}}" }, { // ...其他明细字段 } ], "value": "{goodsDocDetailList}" } ``` 每个明细字段都有其独特的解析和转换规则,例如物料编码通过`ConvertObjectParser`解析器将物料编码转换为目标系统所需的格式。 #### 提交与审核 在完成所有字段的解析和转换后,最后一步是提交并审核数据。这可以通过设置以下参数来实现: ```json { "otherRequest":[ {"field":"","label":"","type":"","describe":"","value":""}, {"field":"","label":"","type":"","describe":"","value":""} ] } ``` 其中,`IsAutoSubmitAndAudit`设置为true表示自动提交并审核,确保数据在写入后立即生效。 #### 实践案例 假设我们有一批待入库的数据需要写入金蝶云星空系统。首先,我们需要根据上述配置准备好源数据,并按照配置中的规则进行解析和转换。然后,通过调用金蝶云星空的API接口,将处理后的数据批量保存到目标系统中。 具体操作步骤如下: 1. **提取源数据**:从源系统中提取待处理的数据。 2. **数据清洗与预处理**:根据业务需求对数据进行清洗和预处理。 3. **字段映射与转换**:按照配置中的规则对每个字段进行映射和转换。 4. **调用API接口**:使用HTTP POST方法调用金蝶云星空的API接口,将处理后的数据批量保存到目标系统中。 通过上述步骤,我们可以高效地将源平台的数据转化为金蝶云星空API能够接收的格式,并成功写入目标平台,实现不同系统间的数据无缝对接。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)