轻易云平台ETL方案:从仓库调拨单到金蝶云销售出库单

  • 轻易云集成顾问-曹润
### 案例分享:简道云数据集成到金蝶云星空 在系统对接与数据集成领域,如何高效、稳定地实现不同平台之间的数据迁移和转换是一个关键课题。本案例着眼于将简道云的数据集成至金蝶云星空的具体实现过程,方案名称为:“v2仓库调拨单 => 销售出库单”。通过API接口技术,我们成功地构建了一个无缝、高效的数据传输通道。 为了确保整个数据流转过程的严密性和准确性,我们首先考虑如何避免漏单现象。在调用简道云API(/api/v2/app/{app_id}/entry/{entry_id}/data)时,对分页处理与限流问题进行了详细设计。通过批量抓取简道云中的大量库存调拨单据,并实时监控API调用状况,提高了数据获取的可靠性。 随后面临的一大挑战是快速而精准地将这些数据写入到金蝶云星空中。在使用其batchSave API时,我们不仅考虑到性能瓶颈,还制定了一套详尽的错误重试机制来应对可能出现的异常情况。对于每一次写入操作,都通过日志记录进行跟踪,以便及时发现并解决潜在问题。 除此之外,由于两端系统间存在显著的数据格式差异,需要定制化生成符合金蝶云星空要求的映射规则。这一过程中,也涉及到了必要字段验证、类型转换等环节,确保所有字段能够正确对应,实现真正意义上的业务闭环。 总之,通过上述几项核心策略,从源头上保障了整个数据集成流程的完整性和高效执行,为企业提供了可靠且先进的信息互联方案。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用简道云接口获取并加工数据的技术实现 在数据集成生命周期的第一步,我们需要调用源系统简道云的接口`/api/v2/app/{app_id}/entry/{entry_id}/data`来获取数据,并对其进行初步加工。本文将详细探讨如何利用元数据配置来实现这一过程。 #### 接口调用与请求参数配置 首先,我们需要明确接口的基本信息和请求参数。根据元数据配置,接口为`POST`请求,路径为`/api/v2/app/{app_id}/entry/{entry_id}/data`。以下是主要的请求参数: - `appId`: 应用ID,固定值为`642307c010703500087839ac` - `entryId`: 表单ID,固定值为`64a3bc11b423c20007e804b2` - `fields`: 需要查询的字段,多个字段以逗号隔开,不传则输出所有字段 - `limit`: 每页返回数量,范围1~100,默认值为100 - `filter`: 过滤参数,用于指定查询条件 #### 过滤参数详解 过滤参数是请求中的重要部分,它决定了我们从简道云获取的数据范围和条件。以下是具体的过滤条件配置: 1. **逻辑关系**: ```json { "rel": "and" } ``` 表示多个条件之间采用“与”的关系。 2. **自定义字段过滤**: - **更新时间过滤**: ```json { "field": "updateTime", "type": "datetime", "method": "range", "value": "{{LAST_SYNC_TIME|datetime}},{{CURRENT_TIME|datetime}}" } ``` 这里使用了时间范围过滤,从上次同步时间到当前时间的数据。 - **流程状态过滤**: ```json { "field": "flowState", "type": "flowState", "method": "eq", "value": "1" } ``` 仅查询流程状态等于1的数据。 - **自定义文本字段过滤**: ```json { "field": "_widget_1704942803617", "type": "text", "method": "eq", "value": "是" } ``` 查询特定文本字段值为“是”的记录。 #### 请求示例 结合上述配置,我们可以构造一个完整的请求体: ```json { "appId": "642307c010703500087839ac", "entryId": "64a3bc11b423c20007e804b2", "fields": "_widget_1688950262699,_id", "limit": 100, "filter": { "rel": "and", "cond_1": { "field": "updateTime", "type": "datetime", "method": "range", "value": ["2023-01-01T00:00:00Z", "{{CURRENT_TIME|datetime}}"] }, ... // 其他条件省略 } } ``` #### 数据加工与处理 获取到数据后,需要对其进行初步加工,以便后续的数据转换与写入阶段。常见的数据加工操作包括: 1. **数据清洗**: 去除无效或重复的数据。 2. **格式转换**: 将日期、数值等字段转换为目标系统所需的格式。 3. **数据合并**: 将多条记录合并为一条,或将一条记录拆分为多条。 例如,对于获取到的仓库调拨单数据,可以根据业务需求进行如下处理: ```python def process_data(raw_data): processed_data = [] for record in raw_data: if validate_record(record): transformed_record = transform_record(record) processed_data.append(transformed_record) return processed_data def validate_record(record): # 校验记录有效性,例如检查必填字段是否存在 return '必填字段' in record def transform_record(record): # 转换记录格式,例如日期格式转换 record['日期字段'] = convert_date_format(record['日期字段']) return record def convert_date_format(date_str): # 日期格式转换逻辑 return date_str.replace('-', '/') ``` 通过上述步骤,我们可以确保从简道云获取的数据经过清洗和加工后,符合目标系统的要求,为后续的数据转换与写入打下坚实基础。 以上就是调用简道云接口获取并加工数据的详细技术实现过程。在实际应用中,根据具体业务需求调整和优化这些步骤,可以进一步提升数据集成效率和质量。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将仓库调拨单转换为金蝶云星空销售出库单 在数据集成过程中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能接收的格式,最终写入目标平台。 #### 数据请求与清洗 在这个阶段,我们已经从源系统中获取了仓库调拨单的数据,并进行了必要的清洗操作。接下来,我们需要将这些数据转换为金蝶云星空销售出库单所需的格式。 #### 数据转换与写入 我们使用金蝶云星空的`batchSave` API接口来实现数据写入。以下是元数据配置的详细解析: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "number": "FBillNo", "id": "FBillNo", "name": "FBillNo", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSCKD01_SYS" }, { ... } ], ... } ``` ##### 核心字段解析 1. **FBillTypeID(单据类型)** - 类型:`string` - 描述:指定单据类型,这里固定为`XSCKD01_SYS`。 - 转换器:`ConvertObjectParser`,参数为`FNumber`。 2. **FBillNo(单据编号)** - 类型:`string` - 描述:唯一标识单据的编号。 - 值:从源系统中获取,例如 `{_widget_1688950262699}`。 3. **FDate(日期)** - 类型:`datetime` - 描述:单据生成日期。 - 值:通过模板引擎转换,例如 `{{_widget_1689379751254|DATETIME}}`。 4. **FSaleOrgId(销售组织)** - 类型:`string` - 描述:销售组织标识。 - 转换器:`ConvertObjectParser`,参数为 `FNumber`。 - 值:从源系统中获取,例如 `{_widget_1704942803610}`。 5. **FCustomerID(客户)** - 类型:`string` - 描述:客户标识。 - 转换器:`ConvertObjectParser`,参数为 `FNumber`。 - 值:从源系统中获取,例如 `{_widget_1708659701589}`。 6. **FEntity(明细信息)** - 类型:`array` - 描述:包含多个明细行的信息。 - 子字段包括: * **FMaterialID(物料编码)**: 使用 `ConvertObjectParser` 转换。 * **FRealQty(实发数量)**: 实际发货数量。 * **FTaxPrice(含税单价)**: 单价信息。 * **FOwnerTypeId(货主类型)**: 固定值 `BD_OwnerOrg`。 * **FOwnerId(货主)**: 使用 `ConvertObjectParser` 转换。 * **FStockID(仓库)**: 使用 `ConvertObjectParser` 转换。 ##### 其他请求参数 1. **FormId** - 值为 `SAL_OUTSTOCK`, 表示业务对象表单Id。 2. **Operation** - 值为 `BatchSave`, 表示执行批量保存操作。 3. **IsAutoSubmitAndAudit** - 自动提交并审核,根据条件判断是否自动提交和审核。 4. **IsVerifyBaseDataField** - 验证基础资料,值为 `true`. 5. **SubSystemId** - 系统模块标识,值为 `21`. 6. **InterationFlags** - 允许负库存,值为 `STK_InvCheckResult`. #### 实现步骤 1. 配置元数据 2. 调用轻易云平台提供的API接口,将清洗后的数据按照上述配置进行转换。 3. 使用HTTP POST方法,将转换后的数据发送到金蝶云星空的API接口进行保存操作。 通过以上步骤,我们能够高效地将仓库调拨单的数据转换并写入到金蝶云星空的销售出库单中。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)