从金蝶到管易的数据转换与ETL过程详解

  • 轻易云集成顾问-陈洁琳
### 金蝶云星空数据集成到管易云的技术案例:金蝶物料=>管易商品 在系统对接和数据集成领域,实现不同平台的数据无缝传输是关键的一环。本文分享一个具体的案例,通过轻易云数据集成平台将金蝶云星空的数据成功对接到管易云,方案名称为“金蝶物料=>管易商品”。 首先,我们需要解决如何从金蝶云星空高效且全面地获取物料信息。这一步骤利用了`executeBillQuery`接口,该接口允许我们通过标准化的API调用精确提取所需的业务数据。在实际操作中,为了保障不会漏单并提高抓取效率,我们设置了定时任务来自动执行这个接口,并使用分页策略应对大规模数据量。同时,还必须处理好API限流问题,以避免请求失败或服务器响应缓慢。 一旦成功获取原始数据,下一步就是将这些数据快速写入到管易云的平台上。这里使用的是`gy.erp.item.add` API接口实现批量添加功能。为了确保每笔交易都能被正确记录并反映,我们设置了严格的数据映射规则,解决不同系统之间的数据格式差异。此外,为实时监控和日志记录提供了一整套机制,这样可以在异常发生时即时通知相关人员采取措施。 此外,考虑到可能出现的网络波动或其它不可预测问题,本次实施还特别注重错误重试机制。当某些请求未能成功发送或者响应超时时,系统会自动进行多次尝试。这种设计显著提升了整体流程的可靠性和平稳性。 最后,对接完成后,我们再通过轻易云强大的可视化界面实时监控整个过程中各个节点的数据流向、状态及任何可能存在的问题,从而进一步保证系统运行透明可视。 总而言之,由于采用上述优化策略,本方案不仅确保金蝶与管易两大平台间完美对接,还实现了稳定、高效、大量的数据传输。详细方案将在后续章节中逐步展开。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取物料数据,并进行初步加工。 #### 接口配置与请求 首先,我们需要配置`executeBillQuery`接口的元数据。以下是一个典型的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FNumber", "id": "FMasterId", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FMasterId","label":"id","type":"string","value":"FMasterId"}, {"field":"FNumber","label":"编码","type":"string","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","value":"FName"}, {"field":"FSpecification","label":"规格型号","type":"string","value":"FSpecification"}, {"field":"FMnemonicCode","label":"助记码","type":"string","value":"FMnemonicCode"}, {"field":"FOldNumber","label":"旧物料编码","type":"string","value":"FOldNumber"}, {"field":"FBARCODE","label":"条码","type":"string","value":"FBARCODE"}, {"field":"FDescription","label":"描述","type":"string","value":"FDescription"}, {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","value":"FMaterialGroup.FNumber"}, {"field":"FErpClsID","label":"物料属性","type":"string","value":"FErpClsID"}, {"field":"FDocumentStatus","label":"数据状态","type":"string","value":"FDocumentStatus"}, {"field": "Limit", "label": "最大行数", "type": "string", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "value": "{PAGINATION_START_ROW}"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "value": "FApproveDate >='{{LAST_SYNC_TIME|datetime}}'"}, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "parser":{"name": "ArrayToString", "params": "," } }, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "value": "BD_MATERIAL" } ] } ``` #### 请求参数解析 1. **API和方法**:我们使用的是`POST`方法调用`executeBillQuery` API。 2. **分页设置**:每次请求的数据量为100条,通过`pageSize`参数控制。 3. **字段映射**:请求中包含多个字段,如`FMasterId`, `FNumber`, `FName`, `FMnemonicCode`等,这些字段将从金蝶云星空系统中提取相应的数据。 4. **过滤条件**:通过`FilterString`参数设置过滤条件,例如只提取最近同步时间之后的数据。 5. **业务对象表单ID**:通过设置`FormId`为`BD_MATERIAL`来指定业务对象。 #### 数据请求与处理 在配置好元数据后,我们可以发起HTTP请求来获取数据。以下是一个示例请求体: ```json { "FormId": "BD_MATERIAL", "FieldKeys": ["FMasterId", ..., ...], ... } ``` 通过轻易云平台,我们可以自动化地处理这些请求,并将返回的数据进行初步清洗和转换。例如,将返回的数据格式化为目标系统所需的结构,去除冗余字段,或根据业务需求进行合并和拆分。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换。这一步骤包括但不限于: 1. **字段映射**:将源系统中的字段映射到目标系统中的对应字段。例如,将金蝶云星空中的`FMasterId`映射到管易商品中的商品ID。 2. **数据格式转换**:根据目标系统的要求,对日期、数字等字段进行格式转换。 3. **数据验证**:检查关键字段是否为空或不符合业务规则,如果发现问题则记录日志或抛出异常。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for item in raw_data: cleaned_item = { '商品ID': item['FMasterId'], '编码': item['FNumber'], '名称': item['FName'], '规格型号': item['FSpecification'], '助记码': item['FMnemonicCode'], ... } cleaned_data.append(cleaned_item) return cleaned_data ``` #### 实时监控与日志记录 为了确保数据集成过程的透明度和可靠性,轻易云平台提供了实时监控和日志记录功能。每次API调用、数据清洗和转换操作都会被记录下来,以便于后续审计和问题排查。 通过上述步骤,我们可以高效地从金蝶云星空系统中获取并加工物料数据,为后续的数据写入和进一步处理打下坚实基础。在实际操作中,根据具体业务需求可能还需要进行更多定制化处理,但总体流程大致如此。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:从金蝶物料到管易商品 在数据集成生命周期的第二步中,重点是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,确保数据能够被目标平台——管易云API接口所接收并正确写入。本文将详细探讨这一过程中的技术细节和实现方案。 #### 数据请求与清洗 首先,从金蝶系统中提取原始物料数据。这一步通常涉及调用金蝶的API接口,获取所需的物料信息。假设我们已经完成了这一步,并获得了以下原始数据: ```json { "FNumber": "MAT001", "FName": "电子元件", "F_mhgj_Assistant": "BRD001", "FDescription": "电元件", "FMaterialGroup_FNumber": "CAT001", "FBaseUnitId_FNumber": "PCS", "FNETWEIGHT": "0.5", "F_BCYS_SalePrice": "100" } ``` #### 数据转换 接下来,我们需要将上述原始数据转换为管易云API接口所能接收的格式。根据提供的元数据配置,我们可以确定目标平台所需的数据字段及其对应关系: ```json { "api": "gy.erp.item.add", "method": "POST", "idCheck": true, "request": [ {"field":"code","label":"商品代码","type":"string","value":"{FNumber}"}, {"field":"name","label":"商品名称","type":"string","value":"{FName}"}, {"field":"item_brand_id","label":"商品品牌id","type":"string"}, {"field":"item_brand_code","label":"商品品牌代码","type":"string","value":"{F_mhgj_Assistant}"}, {"field":"simple_name","label":"商品简称","type":"string","value":"{FDescription}"}, {"field":"category_code","label":"商品分类code","type":"string","value":"{FMaterialGroup_FNumber}"}, {"field":"supplier_code","label":"供应商code","type":"string"}, {"field":"note","label":"备注","type":"string"}, {"field":"minusStock","label":"是否启用负库存","type":"string","value":"true"}, {"field":"unit_code","label":"商品单位code","type":"string","value":"{FBaseUnitId_FNumber}"}, {"field":"weight","label":"商品重量","type":"string","value":"{FNETWEIGHT}"}, {"field":"length","label":"长","type":"string"}, {"field":"width","label":"宽","type":"string"}, {"field":"height","label":"高","type":"string"}, {"field":"volume","label":"商品体积","type":"","value":""}, {"field":"sales_price", ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)