ETL转换:强化系统间数据集成,从吉客云到金蝶云星空

  • 轻易云集成顾问-张妍琪
### 技术案例:吉客云数据集成到金蝶云星空的实现 在本次技术案例中,我们将详细探讨如何将吉客云的数据集成到金蝶云星空系统,方案名称为JY-BDS其他出库单。本案例重点介绍通过API接口`erp.storage.goodsdocout`从吉客云抓取数据,并使用`batchSave`接口批量写入金蝶云星空的具体实现过程。 首先,为了确保整个数据处理链路的高效运转,我们需要解决几个关键性技术问题: 1. **定时可靠的数据抓取**:我们采用定时器任务,每隔固定时间段(如每小时)调用吉客云接口 `erp.storage.goodsdocout`,确保可以及时获取最新的数据。 2. **批量数据快速写入**:利用轻易平台支持的高吞吐量能力,通过优化传输并行度和分区策略,将大批量的数据快速稳定地写入至金蝶云星空。借助其 `batchSave` API 接口,高效完成批量保存操作。 3. **分页与限流处理**:面对大量数据,必须处理好分页与限流问题,以防止API超时或数据库负载过重。针对这一点,我们设计了合理的分页机制,并引入动态速率限制来调节请求频率。 4. **自定义数据转换逻辑**: - 数据格式差异是跨平台集成中的常见挑战之一。在本方案中,通过预先定义好的映射规则,将吉客云输出字段适配为符合金蝶标准的数据结构。 - 利用轻易提供的可视化工具配置转换逻辑,使得开发人员能够直观地管理和调整转换规则,提高开发效率并减少人为错误。 5. **监控与异常处理机制**: - 提供实时监控功能,跟踪各个环节的数据流动和状态,一旦发现异常情况立即告警。 - 实现完整的日志记录体系,不仅记录正常操作,还详尽记载任何错误发生的位置及原因,从而增强系统可维护性。 - 针对可能出现的临时网络异常、服务不可用等问题,引入重试机制保证任务执行成功率,并且在多次失败后进行人工干预提醒。 结合以上几个方面,本次集成实践不仅有效提高了工作效率,而且保障整个流程安全、稳定运行。接下来,我们将深入解析每一个技术细节,以及如何一步步实施这些关键步骤。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口获取并加工数据的技术实现 在轻易云数据集成平台中,生命周期的第一步是调用源系统接口以获取数据。本文将详细探讨如何通过调用吉客云接口`erp.storage.goodsdocout`来获取并加工数据,重点介绍元数据配置和具体实现步骤。 #### 元数据配置解析 首先,我们需要理解元数据配置`metadata`,它定义了如何调用API以及请求参数的细节: ```json { "api": "erp.storage.goodsdocout", "method": "POST", "number": "goodsdocNo", "id": "recId", "pagination": {"pageSize": 50}, "idCheck": true, "request": [ {"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":"204"}, {"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"} ] } ``` #### 调用API获取数据 根据上述元数据配置,我们需要构建一个POST请求来调用吉客云的`erp.storage.goodsdocout`接口。以下是具体步骤: 1. **构建请求体**: 请求体包含分页信息、时间范围、类型等参数。注意,`startDate`和`endDate`使用动态变量来表示上次同步时间和当前时间。 ```json { "pageIndex": "{{PAGE_INDEX}}", "pageSize": "{{PAGE_SIZE}}", ... //其他参数 } ``` 2. **处理分页**: 平台支持分页机制,通过设置每页大小为50条记录,并逐页请求直到没有更多数据为止。 3. **发送请求**: 使用HTTP POST方法发送请求,并接收响应数据。 4. **检查ID重复**: 根据配置中的`idCheck: true`,需要对返回的数据进行ID重复性检查,以确保每条记录唯一。 #### 数据清洗与转换 在获取到原始数据后,需要进行清洗和转换,以便后续处理: 1. **字段映射**: 将API返回的数据字段映射到目标系统所需的字段。例如,将`goodsDocNo`映射为目标系统中的订单编号。 2. **格式转换**: 对日期、数值等字段进行格式转换,确保符合目标系统要求。例如,将日期格式从YYYY-MM-DD转换为YYYYMMDD。 3. **过滤无效数据**: 根据业务需求过滤掉无效或不必要的数据。例如,只保留状态为“已完成”的订单记录。 #### 实现代码示例 以下是一个简化的Python代码示例,用于演示如何调用API并处理返回的数据: ```python import requests import datetime # 配置参数 url = 'https://api.jikexun.com/erp.storage.goodsdocout' headers = {'Content-Type': 'application/json'} params = { 'pageIndex': '1', 'pageSize': '50', 'startDate': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'), 'endDate': datetime.datetime.now().strftime('%Y-%m-%d'), 'inouttype': '204' } # 发起POST请求 response = requests.post(url, json=params, headers=headers) data = response.json() # 数据清洗与转换 cleaned_data = [] for record in data['records']: cleaned_record = { 'order_no': record['goodsDocNo'], 'date': record['createTime'].replace('-', ''), # 更多字段映射... } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(cleaned_data) ``` 通过上述步骤,我们成功地调用了吉客云接口获取原始数据,并进行了必要的数据清洗和转换,为后续的数据写入和处理做好准备。这一过程展示了轻易云平台在异构系统集成中的强大能力。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期的第二步:ETL转换与写入金蝶云星空API接口 在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一环。本文将详细介绍如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空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}" }, { ... } ], ... } ``` #### 数据字段映射与转换 1. **单据编号(FBillNo)**: - 类型:字符串 - 描述:单据编号 - 映射:`{goodsdocNo}` 2. **单据类型(FBillTypeID)**: - 类型:字符串 - 描述:单据类型 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 固定值:`QTCKD01_SYS` 3. **库存组织(FStockOrgId)**: - 类型:字符串 - 描述:组织 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 映射规则: ```sql _findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode} ``` 4. **日期(FDate)**: - 类型:字符串 - 描述:日期 - 转换函数: ```sql _function FROM_UNIXTIME( ( {inOutDate} / 1000 ) ,'%Y-%m-%d %T' ) ``` 5. **货主(FOwnerIdHead)**: - 类型:字符串 - 描述:多类别基础资料 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 映射:`{companyCode}` 6. **明细信息(FEntity)**: 包含多个子字段,如物料编码、零售条形码、实发数量、发货仓库和备注等。 #### API请求构建 根据上述元数据配置,我们可以构建一个完整的API请求体: ```json { "FormId": "STK_MisDelivery", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, "Operation": "Save", ... } ``` 其中,明细信息部分需要特别注意其数组结构和嵌套关系。例如: ```json "FEntity":[ { "FMaterialId":"material_001", ... }, { ... } ] ``` #### 数据写入与验证 在完成ETL转换后,将生成的数据通过POST方法发送到金蝶云星空的`batchSave` API接口。为了确保数据写入的准确性和完整性,需要进行以下步骤: 1. **验证基础资料有效性**: 设置 `IsVerifyBaseDataField` 为 `true`,确保所有基础资料字段有效。 2. **自动提交并审核**: 设置 `IsAutoSubmitAndAudit` 为 `true`,实现自动提交和审核功能。 3. **检查返回结果**: 接收API返回结果,检查是否有错误信息或异常情况,并进行相应处理。 通过上述步骤,我们可以高效地将源平台的数据转换并写入到金蝶云星空系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)