使用轻易云实现ETL转换与金蝶云星空API数据写入

  • 轻易云集成顾问-孙传友
### 金蝶云星空与金蝶云星空的数据集成方案:审核销售出库单 在企业财务和供应链管理中,数据集成的有效性直接影响到业务流程的顺畅以及决策的准确性。本文将聚焦于一个具体案例:“审核销售出库单”数据从金蝶云星空系统集成到另一端同样为金蝶云星空系统中的解决方案。 #### 数据获取与写入API接口应用 在该案例中,我们主要使用了两个关键API接口: - 从金蝶云星空获取数据的`executeBillQuery` - 向金蝶云星空写入数据并进行审核的`Audit` 首先,通过调用`executeBillQuery`接口来批量抓取未审核的销售出库单。为了确保高效的数据处理,该操作需定时执行,且必须考虑分页和限流问题,以避免对服务器造成过大压力。此外,为保障数据质量,需要实时监控异常情况,并配置错误重试机制。 接下来,当成功获得所需的数据后,将通过自定义转换逻辑,根据特定业务需求对原始数据信息进行格式化调整。这一步对于适应目标系统(也即是另一个金蝶云星空)的输入要求至关重要,它可以利用轻易平台提供的数据映射工具实现可视化设计,使整个过程更加直观和易于维护。 #### 高吞吐量写入与实时监控 借助平台支持的大规模、高吞吐量数据写入功能,可以快速将已格式化好的销售出库单信息通过`Audit` API提交至目标系统。在这一过程中,对任务状态及性能的集中监控尤为重要。一旦出现异常,如网络故障或请求失败等,都能及时触发告警,以便相关人员迅速作出处置,从而保证任务的连续稳定运行。 同时,在实际操作过程中,还涉及多个细节,例如如何处理两套金蝶云系统间可能存在的数据格式差异,以及针对不同业务场景进行灵活配置,以优化整体资源利用率。这些技术点将在后续部分更详细地展开讨论。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成生命周期的第一步中,调用源系统的API接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取销售出库单的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的详细说明: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillNo", "pagination": { "pageSize": 500 }, "request": [ {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"}, {"field":"FID","label":"FID","type":"string","describe":"单据类型","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"}, {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"组织","value":"FSaleOrgId.FNumber"}, {"field":"FCustomerID_FNumber","label":"客户","type":"string","describe":"基础资料","value":"FCustomerID.FNumber"}, {"field":"FStockOrgId_FNumber","label":"发货组织","type":"string","describe":"组织","value":"FStockOrgId.FNumber"}, {"field":"FApproveDate","label":"审核时间","type":"string","describe":"长日期","value":"FApproveDate"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FDOCUMENTSTATUS<>'C' and FBillTypeID.fnumber='XSCKD07_SYS'"}, {"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": "SAL_OUTSTOCK" } ] } ``` #### 请求参数解析 1. **基本请求参数**: - `api`: 接口名称,固定为`executeBillQuery`。 - `method`: 请求方法,使用POST。 - `number`和`id`: 标识字段,均为`FBillNo`。 - `pagination`: 分页配置,每页大小为500。 2. **请求字段**: - 包含了销售出库单所需的各个字段,如单据类型、单据编号、日期、销售组织、客户、发货组织和审核时间等。 3. **其他请求参数**: - `Limit`: 最大行数限制,设为2000。 - `StartRow`: 开始行索引,用于分页。 - `TopRowCount`: 返回总行数,用于统计。 - `FilterString`: 过滤条件,这里设置为未关闭状态且单据类型为“XSCKD07_SYS”的记录。 - `FieldKeys`: 查询字段集合,通过逗号分隔。 - `FormId`: 表单ID,这里设为销售出库单(SAL_OUTSTOCK)。 #### 数据获取与处理 通过上述配置,我们可以构建一个完整的API请求来获取销售出库单的数据。以下是一个示例请求体: ```json { "FormId": "SAL_OUTSTOCK", "_parameters_":{ "_data_":[ { "_key_":"", "_values_":[] } ], "_pagination_":{ "_pageSize_":"", "_currentPageIndex_":"", "_totalPageCount_":"", "_totalRecordCount_":"", "_hasNextPage_":"", "_hasPreviousPage_":"", "_isFirstPage_":"", "_isLastPage_":"", "_startRowIndex_":"", "_endRowIndex_":"", "_pageSizeOptions_":[] }, "_sorts_":[] }, "_filterString_":{ "__filter__":["FDOCUMENTSTATUS<>'C' and FBillTypeID.fnumber='XSCKD07_SYS'"] }, "__fields__":["FBillTypeID.FNumber,FID,FBillNo,FDate,FSaleOrgId.FNumber,FCustomerID.FNumber,FStockOrgId.FNumber,FApproveDate"], } ``` 在实际操作中,我们需要根据业务需求调整分页参数和过滤条件,以确保获取到符合要求的数据。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。常见的数据清洗操作包括: - **去除无效或重复数据**:检查并删除无效记录或重复记录。 - **格式化日期**:将日期字段统一格式化,便于后续分析。 - **字段映射**:将原始字段名映射到目标系统中的标准字段名。 例如,将原始数据中的`FDate`字段转换为标准日期格式: ```python import pandas as pd # 假设df是从API获取的数据框 df['FDate'] = pd.to_datetime(df['FDate'], format='%Y-%m-%d') ``` 通过上述步骤,我们可以确保数据在进入下一阶段处理前已经过初步清洗和转换,为后续的数据写入和进一步分析打下坚实基础。 以上就是调用金蝶云星空接口`executeBillQuery`获取并加工数据的详细技术案例。通过合理配置元数据和精确调用API,我们能够高效地完成数据集成生命周期中的第一步。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二阶段,我们将重点讨论如何将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将通过具体的技术案例,详细探讨这一过程中的关键步骤和技术细节。 #### 配置元数据 首先,我们需要配置元数据,以便能够正确调用金蝶云星空的API接口。以下是我们使用的元数据配置: ```json { "api": "Audit", "method": "POST", "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "idCheck": true, "request": [ {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"}, {"field":"Numbers","label":"编码集合","type":"string"}, {"field":"Ids","label":"id集合","type":"string","value":"{FID}"}, {"field":"InterationFlags","label":"交互标志集合","type":"string","describe":"字符串类型,分号分隔,格式:\"flag1;flag2;...\"(非必录) 例如(允许负库存标识:STK_InvCheckResult)","value":"STK_InvCheckResult"}, {"field":"IgnoreInterationFlag","label":"是否允许忽略交互","type":"string","describe":"布尔类型,默认true(非必录)","value":"true"}, {"field":"NetworkCtrl","label":"是否启用网控","type":"string","describe":"布尔类型,默认false(非必录)","value":"false"}, {"field":"IsVerifyProcInst","label":"检验单据关联运行","type":"string","describe":"是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)","value":"false"} ] } ``` #### 数据提取与清洗 在ETL过程的第一步,我们需要从源系统中提取数据,并对其进行清洗。假设我们从源系统中提取到以下销售出库单数据: ```json { "FID": "12345", "Numbers": ["SO20230001", "SO20230002"], // 更多字段... } ``` 在清洗过程中,我们确保所有必要字段都已填充,并且格式正确。例如,将`Numbers`字段转化为字符串形式。 #### 数据转换 接下来,我们根据金蝶云星空API接口要求,对数据进行转换。根据元数据配置,我们需要构建如下请求体: ```json { "FormId": "SAL_OUTSTOCK", "Numbers": ["SO20230001", "SO20230002"].join(";"), "Ids": "{FID}", "InterationFlags": "STK_InvCheckResult", "IgnoreInterationFlag": true, "NetworkCtrl": false, "IsVerifyProcInst": false } ``` 在这个过程中,需要特别注意以下几点: - `FormId`必须对应金蝶云星空中的具体业务对象表单ID。 - `Numbers`字段需要转化为以分号分隔的字符串。 - `Ids`字段应使用从源系统中提取到的`FID`值。 - `InterationFlags`, `IgnoreInterationFlag`, `NetworkCtrl`, 和 `IsVerifyProcInst`等字段根据业务需求进行设置。 #### 数据写入 最后一步是将转换后的数据通过API接口写入金蝶云星空。我们使用POST方法调用`Audit` API: ```javascript const axios = require('axios'); const requestData = { FormId: 'SAL_OUTSTOCK', Numbers: 'SO20230001;SO20230002', Ids: '12345', InterationFlags: 'STK_InvCheckResult', IgnoreInterationFlag: true, NetworkCtrl: false, IsVerifyProcInst: false }; axios.post('https://api.kingdee.com/Audit', requestData) .then(response => { console.log('Data successfully written to Kingdee Cloud:', response.data); }) .catch(error => { console.error('Error writing data to Kingdee Cloud:', error); }); ``` 通过上述代码,我们实现了从源系统到目标系统的数据转换和写入。在实际应用中,还需考虑错误处理、重试机制以及日志记录等,以确保整个过程的可靠性和可追溯性。 #### 总结 本文详细探讨了如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。通过配置元数据、提取与清洗数据、转换数据以及最终写入目标系统,我们实现了不同系统间的数据无缝对接。这一过程不仅提升了业务效率,还确保了数据处理过程的透明性和可控性。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)