数据集成与ETL转换:轻易云平台至金蝶云星空的完整解决方案

  • 轻易云集成顾问-何语琴
### 简道云数据集成到金蝶云星空:仓库盘点单(月盘)=> 其他入库单(盘盈) 在复杂的企业业务环境中,不同系统间的数据对接和集成常常带来极大的挑战。本文将详细探讨如何通过简道云获取仓库盘点单,并将其高效、准确地映射到金蝶云星空中的其他入库单(盘盈)。这一过程中,我们采用了轻易云数据集成平台,利用其提供的灵活、高性能的数据处理能力,实现了从数据抓取、转换到写入的一系列自动化流程。 为了实现这个目标,我们首先需要调用简道云的API接口`/api/v2/app/{app_id}/entry/{entry_id}/data`,以获取仓库盘点的相关数据。这里我们使用定时任务可靠抓取简道云接口的数据,并确保处理分页和限流问题。此外,通过自定义数据转换逻辑,以便将源系统中的信息格式化为目标系统所需的结构。 在数据成功提取并经过必要转换后,就可以进行下一步——批量写入金蝶云星空。为此,我们采用了金蝶API `batchSave`进行大规模、高吞吐量的数据同步操作。在这一环节里,通过严密的监控和异常检测机制,确保所有待写入的数据无遗漏且一致性得到保障,同时设置错误重试机制以应对可能出现的问题。 我们还特别关注在两套系统之间如何解决因不同格式或规范产生的不兼容问题,以及针对特定场景下API调用频率限制等技术难题。借助可视化工具设计清晰直观的数据流,使得整个集成过程透明且易于管理。 在这次具体案例中,从初始仓库盘点单(月盘)的生成,到最后进入其他入库单(盘盈)的每一步都充分体现了精细化控制与优化配置的重要性。这不仅是一次系统性的整合工作,更是一个不断提高业务效率、增强整体运营透明度的重要尝试。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D36.png~tplv-syqr462i7n-qeasy.image) ### 使用简道云接口获取并加工数据的技术案例 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用简道云提供的接口`/api/v2/app/{app_id}/entry/{entry_id}/data`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置API调用的元数据。根据提供的元数据配置,可以看到以下关键参数: - `api`: `/api/v2/app/{app_id}/entry/{entry_id}/data` - `method`: `POST` - `number`: `_widget_1688538649501` - `id`: `_id` - `idCheck`: `true` 请求参数包括: 1. **应用ID (appId)**: `"642307c010703500087839ac"` 2. **表单ID (entryId)**: `"64a3bc03392c700008450082"` 3. **需要查询的字段 (fields)**: 多个字段以逗号隔开,默认不传入则输出所有字段。 4. **每页返回数量 (limit)**: 默认值为100。 5. **过滤参数 (filter)**: 包含逻辑关系和具体条件。 #### 请求示例 以下是一个完整的请求示例: ```json { "appId": "642307c010703500087839ac", "entryId": "64a3bc03392c700008450082", "fields": "_widget_1688538649501,_id", "limit": "100", "filter": { "rel": "and", "cond_1": { "field": "updateTime", "type": "datetime", "method": "range", "value": ["2023-01-01T00:00:00Z", "{{LAST_SYNC_TIME|datetime}}"] }, "cond_2": { "field": "flowState", "type": "flowState", "method": "in", "value": ["1"] } } } ``` #### 数据处理 在获取到数据后,需要进行清洗和转换。以下是一些常见的数据处理步骤: 1. **数据清洗**: - 检查并移除空值或无效值。 - 格式化日期和时间字段。 - 标准化数值字段(如金额、数量等)。 2. **数据转换**: - 将源系统的数据结构转换为目标系统所需的数据结构。 - 根据业务需求进行字段映射和计算。 例如,对于仓库盘点单(月盘)到其他入库单(盘盈)的集成,可以进行如下处理: ```python def process_data(raw_data): processed_data = [] for record in raw_data: if record['flowState'] == '1': processed_record = { 'inventory_check_date': record['updateTime'], 'item_number': record['_widget_1688538649501'], 'quantity': calculate_quantity(record) } processed_data.append(processed_record) return processed_data def calculate_quantity(record): # 根据业务逻辑计算数量 return int(record['quantity_field']) - int(record['previous_quantity_field']) ``` #### 自动填充响应 在元数据配置中,`autoFillResponse`设置为`true`,这意味着平台会自动填充响应结果。这一功能极大地简化了数据处理过程,使得开发者可以专注于业务逻辑,而无需过多关注底层实现细节。 #### 条件过滤 条件过滤是确保只获取符合特定条件的数据的重要手段。在本案例中,我们使用了两个条件: 1. 更新时间在指定范围内 (`updateTime` 字段)。 2. 流程状态为特定值 (`flowState` 字段)。 这些条件通过组合逻辑 (`rel`) 来实现复杂的查询需求。 #### 实时监控与调试 在实际操作中,实时监控和调试是确保数据集成顺利进行的重要环节。通过轻易云平台提供的可视化界面,可以实时查看API调用状态、数据流动情况以及处理结果,从而快速定位并解决问题。 综上所述,通过合理配置和调用简道云接口,可以高效地获取并加工源系统的数据,为后续的数据转换与写入奠定坚实基础。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:轻易云数据集成平台至金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式。本文将详细探讨如何通过轻易云数据集成平台,将仓库盘点单(月盘)的数据转换为金蝶云星空API接口所能接收的其他入库单(盘盈)格式,并最终写入目标平台。 #### API接口配置 在进行数据转换之前,我们需要了解金蝶云星空API接口的具体配置。根据提供的元数据配置,以下是具体的API接口细节: - **API名称**: `batchSave` - **请求方法**: `POST` - **验证基础资料**: `true` - **操作类型**: `Save` - **自动提交并审核**: `true` #### 请求字段解析 1. **单据类型 (`FBillTypeID`)** - 类型: `string` - 描述: 单据类型 - 解析器: `ConvertObjectParser` (参数: `FNumber`) - 固定值: `QTRKD02_SYS` 2. **库存组织 (`FStockOrgId`)** - 类型: `string` - 描述: 组织 - 解析器: `ConvertObjectParser` (参数: `FNumber`) - 值来源: `{_widget_1706800675381}` 3. **单据编号 (`FBillNo`)** - 类型: `string` - 描述: 单据编号 - 值来源: `{_widget_1688538649501}` 4. **库存方向 (`FStockDirect`)** - 类型: `string` - 描述: 下拉列表 - 固定值: `GENERAL` 5. **日期 (`FDate`)** - 类型: `string` - 描述: 日期 - 值来源(日期格式化):`{{_widget_1602228805094|datetime}}` 6. **货主类型 (`FOwnerTypeIdHead`)** - 类型: `string` - 描述: 多类别基础资料列表 - 固定值: `BD_OwnerOrg` 7. **部门 (`FDEPTID`)** - 类型: `string` - 解析器:`ConvertObjectParser` (参数:`FNumber`) - 值来源:`{_widget_1709344810365}` 8. **货主 (`FOwnerIdHead`)** - 类型:`string` - 描述:多类别基础资料 - 解析器:`ConvertObjectParser` (参数:`FNumber`) - 值来源:`{_widget_1706800675381}` 9. **备注 (`FNOTE`)** - 类型:`string` - 描述:多行文本 - 值来源:`{_widget_1688952271153}` 10. **明细信息 (`FEntity`)** 明细信息包含多个子字段: 1. **物料编码 (`FMATERIALID`)** - 类型:`string` - 描述:基础资料 - 解析器:`ConvertObjectParser` (参数:`FNumber`) - 值来源:`{{_widget_1602228805384._widget_1682160091458}}` 2. **收货仓库 (`FSTOCKID`)** - 类型:`string` - 描述:基础资料 - 解析器:`ConvertObjectParser` (参数:`FNumber`) - 值来源: `{_widget_1704938691341}` 3. **实收数量 (`FQty`)** - 类型:`string` - 描述:数量 - 值来源:`{{_widget_1602228805384._widget_1688953083818}}` 4. **备注 (`FEntryNote`)** - 类型:`string` - 描述:多行文本 - 值来源:`{{_widget_1602228805384._widget_1682643030220}}` 5. **批号 (`FLot`)** – 类型:`string` – 固定值:`123` – 解析器:`ConvertObjectParser`(参数:`FNumber`) #### 数据转换与写入过程 在了解了API接口配置和请求字段后,我们可以开始进行ETL转换和数据写入过程。以下是具体步骤: 1. **提取源数据**: 从仓库盘点单(月盘)中提取相关字段的数据。 2. **数据清洗与转换**: 使用轻易云提供的元数据配置,对提取的数据进行清洗和格式转换。例如,将日期字段格式化,将物料编码、库存组织等字段通过解析器转换为目标系统可识别的编码。 3. **构建请求报文**: 根据金蝶云星空API接口要求,构建POST请求报文。确保所有必填字段均已填充,并且字段值符合目标系统的要求。 4. **发送请求并处理响应**: 将构建好的请求报文通过HTTP POST方法发送至金蝶云星空API接口。处理返回的响应,确认数据是否成功写入,并处理可能出现的错误。 #### 示例代码片段 以下是一个简化的Python示例代码,用于展示如何构建和发送请求: ```python import requests import json # 构建请求报文 payload = { "FormId": "STK_MISCELLANEOUS", "IsVerifyBaseDataField": True, "Operation": "Save", "IsAutoSubmitAndAudit": True, "Model": { "FBillTypeID": {"FNumber": "QTRKD02_SYS"}, "FStockOrgId": {"FNumber": extract_value("_widget_1706800675381")}, "FBillNo": extract_value("_widget_1688538649501"), "FStockDirect": "GENERAL", "FDate": format_date(extract_value("_widget_1602228805094")), "FOwnerTypeIdHead": {"FNumber": "BD_OwnerOrg"}, "FDEPTID": {"FNumber": extract_value("_widget_1709344810365")}, "FOwnerIdHead": {"FNumber": extract_value("_widget_1706800675381")}, "FNOTE": extract_value("_widget_1688952271153"), "FEntity": [ { "FMATERIALID": {"FNumber": extract_value("_widget_1602228805384._widget_1682160091458")}, "FSTOCKID": {"FNumber": extract_value("_widget_1704938691341")}, "FQty": extract_value("_widget_1602228805384._widget_1688953083818"), "FLot": {"123"}, "FEntryNote": extract_value("_widget_1602228805384._widget_1682643030220") } # 可以添加更多明细项... ] } } # 发送请求并处理响应 response = requests.post("https://api.kingdee.com/batchSave", data=json.dumps(payload), headers={"Content-Type":"application/json"}) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Error occurred: {response.text}") ``` 以上代码片段展示了如何从源系统提取数据、进行必要的数据清洗与转换、构建符合目标系统要求的请求报文,并通过HTTP POST方法将其发送至金蝶云星空API接口。 通过这种方式,我们可以高效地完成从仓库盘点单(月盘)到其他入库单(盘盈)的数据集成与ETL转换过程,实现不同系统间的数据无缝对接。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)