如何利用轻易云平台进行数据ETL并写入管易云

  • 轻易云集成顾问-林峰
### 金蝶云星空与管易云的数据集成案例分享:物料方案 在企业信息系统中,金蝶云星空和管易云分别在ERP管理和电商平台数据处理方面占据重要地位。然而,在多系统运营环境中,不同平台间的数据对接问题成为影响业务流畅运行的关键瓶颈。本文将聚焦于如何通过轻易云数据集成平台,实现金蝶云星空到管易云之间高效、稳定的数据交互,具体探讨“物料”方案的实际应用。 首先,我们需要解决从金蝶云星空获取数据并确保不漏单的问题。在这一过程中,调用了executeBillQuery接口来提取最新生成的物料数据信息。为确保每次抓取到的信息完整且无遗漏,我们引入了定时任务机制设置可靠抓取,并利用日志记录实时监控接口调用情况及返回结果,加以二次确认,有效避免了因网络波动或请求失败导致的数据丢失。 其次,大量实时写入操作对目标系统(即管易云)的压力也是一大挑战。在这部分工作中,我们使用gy.erp.item.add接口批量导入数据,通过在轻易云配置中的批处理功能,将多个API请求合并成一次性传输执行,从而显著提高写入效率。同时,为应对突发错误或异常情况,实现自动重试机制,以保证数据最终一致性。 最后,两大不同平台之间的数据格式差异,也是不可忽视的一环。我们采用自定义映射规则,将金蝶云星空输出的字段转化为符合管易云南北标准的结构进行适配。此外,还设计了一套限流策略,以应对金蝶API可能出现的频率限制,对分页拉取的大规模物料信息分段处理,提高整体传输稳定性。 这只是整个“物料”集成方案的一小部分内容,后续章节将详细解析不同模块间交互细节及优化实践,希望能给有类似需求的用户提供参考价值。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取物料数据,并进行初步加工。 #### 配置元数据 首先,我们需要配置元数据,以便正确地调用金蝶云星空的API接口。以下是我们使用的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FNumber", "id": "FMATERIALID", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FMATERIALID","label":"实体主键","type":"string","value":"FMATERIALID"}, {"field":"FNumber","label":"编码","type":"string","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","value":"FName"}, {"field":"FSpecification","label":"规格型号","type":"string","value":"FSpecification"}, {"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":"FForbidStatus","label":"禁用状态","type":"string","value":"FForbidStatus"}, {"field":...} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": ...} ] } ``` #### 调用API接口 在轻易云平台上,我们通过配置上述元数据来调用金蝶云星空的`executeBillQuery`接口。具体步骤如下: 1. **设置请求参数**: - `FormId`: 设置为`BD_MATERIAL`,表示我们要查询的是物料信息。 - `FieldKeys`: 包含所有需要查询的字段,例如`FMATERIALID`, `FNumber`, `FName`等。 - `FilterString`: 用于设置过滤条件,例如根据最后同步时间过滤记录。 - `Limit`和`StartRow`: 用于分页查询,确保每次请求的数据量适中。 2. **发送请求**: 使用POST方法将请求发送到金蝶云星空的API端点。请求体包含上述设置的参数。 3. **处理响应**: 接收到响应后,对返回的数据进行初步加工。例如,可以对字段进行重命名、类型转换等操作,以便后续处理。 #### 示例代码 以下是一个示例代码片段,展示如何在轻易云平台上配置和调用该API: ```python import requests import json # 设置请求URL和头部信息 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} # 配置请求体 payload = { 'FormId': 'BD_MATERIAL', 'FieldKeys': 'FMATERIALID,FNumber,FName,FSpecification,FOldNumber,FBARCODE,FDescription,...', 'FilterString': f"FApproveDate>='{last_sync_time}'", 'Limit': page_size, 'StartRow': start_row } # 发送POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 对返回的数据进行初步加工 processed_data = [] for item in data: processed_item = { 'MaterialID': item['FMATERIALID'], 'Number': item['FNumber'], 'Name': item['FName'], # 更多字段处理... } processed_data.append(processed_item) else: print(f"Error: {response.status_code}, {response.text}") ``` #### 数据加工 在获取到原始数据后,我们可以根据业务需求对其进行进一步加工。例如,可以对字段进行重命名、类型转换、计算衍生字段等操作。这些操作可以通过轻易云平台提供的数据清洗和转换功能来实现。 #### 小结 通过以上步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对获取到的数据进行了初步加工。这为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作,以实现更复杂的数据集成任务。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源平台数据写入管易云 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终将其写入目标平台——管易云。本文将详细探讨如何利用轻易云数据集成平台配置元数据,将物料信息转化为管易云API接口所能接收的格式。 #### 1. 数据提取与清洗 首先,我们需要从源平台提取原始数据,并进行必要的清洗和预处理。这一步骤确保了数据的一致性和准确性,为后续的转换与加载奠定基础。 假设我们从源平台提取到的原始数据如下: ```json { "FNumber": "MAT001", "FName": "物料A", "FMaterialGroup_FNumber": "CAT001", "FBaseUnitId_FNumber": "PCS", "FLENGTH": "100", "FWIDTH": "50", "FHEIGHT": "30", "FVOLUME": "150000" } ``` #### 2. 数据转换 接下来,我们根据管易云API接口要求,对上述原始数据进行转换。根据提供的元数据配置,我们需要将字段名和格式进行相应调整,以符合目标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"}, {"field":"simple_name","label":"商品简称","type":"string"}, {"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":"false"}, {"field":"item_add_attribute","label":"商品附加属性","type":"string"}, {"field":"pic_url","label":"图片url","type":"string"}, {"field":"tax_code","label":"税收分类编码","type":"string"}, {"field":"tax_no","label":"商品税号","type":"string"}, {"field":"tax_rate","label":"商品税率","type":"string"}, {"field":"unit_code","label":"商品单位code","type":"string", "value": "{FBaseUnitId_FNumber}"}, {"field": "supplier_outer_id", "label": "供应商货号", "type": "string" }, {"field": "weight", "label": "商品重量", "type": "string" }, {"field": "length", "label": "长", "type": "string", value: "{FLENGTH}" }, {"field": "width", label: “宽”, type: “string”, value: “{FWIDTH}”}, {“field”: “height”, label: “高”, type: “string”, value: “{FHEIGHT}”}, {“field”: “volume”, label: “商品体积”, type: “string”, value: “{FVOLUME}”}, {“field”: “package_point”, label: “打包积分”, type: “string”}, {“field”: “sales_point”, label: “销售积分”, type: “string”}, {“field”: “sales_price”, label: “标准售价”, type: “string”}, {“field”: “purchase_price”, label: “标准进价”, type: “string”}, {“field”: “cost_price”, label: “成本价”, type: “string”}, {“field”: ”agent_price”, label: ”代理售价”, type: ” string ” }, {“ field”: ”stock_status_code”, label: ”库存状态代码”, type: ” string ” } ] } ``` 根据以上配置,转换后的数据如下: ```json { "code": "{FNumber}", ... } ``` #### 3. 数据加载 最后一步是将转换后的数据通过管易云API接口写入目标平台。我们使用HTTP POST请求,将JSON格式的数据发送到指定的API端点。 以下是一个示例代码片段,用于执行这一操作: ```python import requests import json url = 'https://api.guanyiyun.com/gy.erp.item.add' headers = {'Content-Type': 'application/json'} data = { 'code': 'MAT001', 'name': '物料A', 'category_code': 'CAT001', 'unit_code': 'PCS', 'length': '100', 'width': '50', 'height': '30', 'volume': '150000', ... } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to Guanyi Cloud') else: print('Failed to write data:', response.text) ``` 通过上述步骤,我们实现了从源平台到目标平台的数据ETL过程,确保了数据在不同系统间的无缝对接和高效传输。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)