使用轻易云进行金蝶盘亏单与管易云数据同步

  • 轻易云集成顾问-张妍琪
### 金蝶盘亏单数据集成到管易其他出库 在本技术案例中,我们将展示如何利用轻易云数据集成平台高效对接金蝶云星空的数据,并将盘亏单信息准确无误地写入到管易云系统中的‘其他出库’模块。通过这一方案,可以快速、可靠地实现两个系统间的数据流转,确保业务操作的连续性和准确性。 #### 一、获取金蝶盘亏单数据 首先,我们需要调用金蝶云星空提供的`executeBillQuery`接口来抓取所需的盘亏单数据。这一步骤至关重要,因为它直接决定了源数据的完整性和精确度。在配置过程中,需要特别注意处理分页与限流的问题,以避免由于大量请求导致API响应缓慢甚至失败: ```json { "formId": "STK_MISCELLANEOUS", "fieldKeys": ["FBillNo", "FDate", "FMaterialId.FNumber", ...], ... } ``` #### 二、大量数据快速写入管易云 从金蝶云星空成功获取盘亏单后,第二步是将这些数据信息导入到管易云。为此,我们使用其提供的`gy.erp.stock.other.out.add` API进行批量写入,这里同样要考虑如何有效管理大数量级的数据传输。当遇到异常情况时,还应设计合理的错误重试机制,以确保最终所有记录都能被完整写入: ```json { "orders": [ { "warehouse_code": "...", ..., }, ... ] } ``` #### 三、处理数据格式差异与定制化映射 在实际操作过程中,不同系统间往往存在一定的数据格式差异。这就需要我们对接收到的字段进行适配转换,使其符合目标系统(即管易云)的要求。例如,对日期格式、编码规范等字段进行必要调整。此外,根据具体业务需求,也可以在同步过程中加入一些自定义逻辑来完成额外的数据映射和处理,为不同场景下的数据应用提供更大的灵活性。 通过以上步骤以及实时监控日志功能,可全方位保障每个环节顺利执行,同时规避潜在风险,从而实现高效、安全、稳定的一体化数据管理流程。在下一部分内容中,我们将详细解析各个实施细节及优化策略。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D36.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过金蝶云星空接口`executeBillQuery`获取盘亏单数据,并进行必要的数据加工。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据,以便正确调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillEntry_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","value":"FBillEntry_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FStockerId","label":"仓管员","type":"string","value":"FStockerId"}, {"field":"FCreatorId","label":"创建人","type":"string","value":"FCreatorId"}, {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"}, {"field":"FModifierId","label":"最后修改人","type":"string","value":"FModifierId"}, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{"name": "ArrayToString", "params": ","}}, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "STK_StockCountLoss"} ], ... } ``` #### 请求参数解析 1. **API与方法**: - `api`: `executeBillQuery` - `method`: `POST` 2. **分页配置**: - `pagination.pageSize`: 每次请求的数据条数,设置为500。 3. **请求字段**: - `FieldKeys`: 包含所有需要查询的字段,例如`FBillEntry_FEntryID`, `FID`, `FBillNo`等。 - `FormId`: 表单ID,指定为`STK_StockCountLoss`,表示盘亏单。 4. **过滤条件**: - 使用`FilterString`字段来设置查询条件,例如按审核日期过滤:`"FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'"` #### 调用接口 通过上述配置,我们可以构建请求体,并使用HTTP POST方法调用金蝶云星空的`executeBillQuery`接口。以下是一个示例请求体: ```json { "FormId": "STK_StockCountLoss", "FieldKeys": ["FBillEntry_FEntryID", ...], ... } ``` 在实际操作中,可以利用轻易云平台提供的可视化界面,将这些参数填入相应位置,并发起请求。 #### 数据加工 获取到原始数据后,需要对其进行清洗和转换,以满足目标系统(如管易其他出库)的要求。以下是一些常见的数据加工步骤: 1. **字段映射**:将金蝶云星空返回的数据字段映射到目标系统所需字段。例如,将`FBillNo`映射为目标系统中的订单编号。 2. **数据格式转换**:根据目标系统要求,对日期、数值等字段进行格式转换。 3. **数据过滤与校验**:根据业务规则,对数据进行过滤和校验。例如,只保留审核通过的记录。 #### 示例代码 以下是一个简化的Python示例代码,用于调用接口并处理返回的数据: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_StockCountLoss', 'FieldKeys': ['FBillEntry_FEntryID', 'FID', 'FBillNo', ...], 'FilterString': f"FApproveDate>='{last_sync_time}'" } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据加工示例 processed_data = [] for entry in data['Result']: processed_entry = { '订单编号': entry['FBillNo'], '物料编码': entry['FMaterialId.FNumber'], ... } processed_data.append(processed_entry) # 将处理后的数据写入目标系统 ``` 通过上述步骤,我们可以高效地从金蝶云星空获取盘亏单数据,并进行必要的数据加工,为后续的数据集成打下坚实基础。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶盘亏单到管易其他出库的ETL转换 在数据集成的生命周期中,将源平台的数据进行ETL转换并写入目标平台是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台将金蝶盘亏单的数据转换为管易云API接口所能接收的格式,并最终写入管易云系统。 #### API接口配置与元数据映射 在本案例中,我们需要将金蝶盘亏单的数据通过`gy.erp.stock.other.out.add`接口写入管易云。该接口采用POST请求方式,具体的元数据配置如下: ```json { "api": "gy.erp.stock.other.out.add", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FStockId_FNumber", "bodyName": "details", "bodySum": ["FLossQty"], "header": ["FBillNo", "FStockId_FNumber"], "body": ["FMaterialId_FNumber", "FLossQty", "FDate"] }, "request": [ {"field": "warehouse_code", "label": "仓库代码", "type": "string", "value": "{FStockId_FNumber}"}, {"field": "type", "label": "出库类型代码", "type": "string"}, {"field": "note", "label": "备注", "type": "string", "value":"金蝶盘亏单{FBillNo}{FStockId_FNumber}", "parent":"details"}, {"field":"details","label":"出库明细","type":"array","children":[ {"field":"note","label":"备注","type":"string","parent":"details"}, {"field":"item_code","label":"商品代码","type":"string", "describe":"商品代码与商品条码二者必选其一,当两者都提供时,以商品条码为准", "value":"{{details.FMaterialId_FNumber}}","parent":"details"}, {"field":"sku_code","label":"规格代码","type":"string", "describe":"有规格的商品此字段必填", "value":"{{details.FMaterialId_FNumber}}","parent":"details"}, {"field":"barcode","label":"商品条码","type":"string", "describe":"商品条码与商品代码二者必选其一,当两者都提供时,以商品条码为准", "parent":"details"}, {"field":"qty","label":"数量","type":"string", "value":"{{details.FLossQty}}","parent":"details"}, {"field":"uniqueCode","label":"唯一码","type":"string", "describe":"若当前商品为全程唯一码的商品,此参数必填", "parent":"details"}, {"field":"batchNumber","label":"批次号","type":"string", "describe":"若当前商品为批次商品,此参数必填", "parent":"details"}, {"field":"manufacturingDate","label":"生产日期","type":"string", "describe":"若当前商品为批次商品,此参数必填", "parent":"details"}, {"field":"shelfLife","label":"有效期","type":"", "describe":"","parent":"","value":"","children":[]}, {"field":"","label":"","value":"","children":[]}, {"field":"","label":"","value":"","children":[]}, {"field":"","label":"","value":"","children":[]}, {"field":"","label":"","value":"","children":[]}, {"field":"","label":"","value":"","children":[]} ], value:"" }, { field: 'wms_bizcode', label: '第三方系统单号', type: 'string', describe: '判断排重的依据', value: '{FBillNo}{FStockId_FNumber}' } ] } ``` #### 数据清洗与转换 1. **数据清洗**:首先,我们需要从金蝶盘亏单中提取相关字段,如`FBillNo`(单据编号)、`FStockId_FNumber`(仓库代码)、`FMaterialId_FNumber`(物料编号)、`FLossQty`(损失数量)和`FDate`(日期)。这些字段将被映射到目标平台所需的字段中。 2. **数据转换**:根据管易云API接口的要求,我们需要对提取的数据进行格式化处理。例如,将仓库代码映射到`warehouse_code`字段,物料编号映射到`item_code`和`sku_code`字段,损失数量映射到`qty`字段,日期映射到`shelfLife`字段等。 #### 构建请求体 根据元数据配置,我们构建请求体如下: ```json { warehouse_code: "{FStockId_FNumber}", type: "", note: `金蝶盘亏单${FBillNo}${FStockId_FNumber}`, details: [ { note: "", item_code: "{{details.FMaterialId_FNumber}}", sku_code: "{{details.FMaterialId_FNumber}}", barcode: "", qty: "{{details.FLossQty}}", uniqueCode: "", batchNumber: "", manufacturingDate: "", shelfLife: "{FDate}" } ], wms_bizcode: "{FBillNo}{FStockId_FNumber}" } ``` #### 数据写入目标平台 通过轻易云数据集成平台,我们可以使用上述请求体调用管易云API接口,将清洗和转换后的数据写入目标平台。具体步骤如下: 1. **配置API调用**:在轻易云平台上配置API调用,设置请求方法为POST,并指定API路径为`gy.erp.stock.other.out.add`。 2. **设置请求头和请求体**:根据元数据配置,设置请求头和请求体。确保所有必填字段都已正确映射并赋值。 3. **执行API调用**:执行API调用,将构建好的请求体发送至管易云API接口。轻易云平台会自动处理响应结果,并提供实时监控和日志记录功能,方便我们跟踪和调试整个过程。 通过以上步骤,我们成功实现了从金蝶盘亏单到管易其他出库的数据ETL转换,并将处理后的数据无缝写入了目标平台。这不仅提高了数据处理效率,也确保了业务流程的顺畅运行。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)