集成金蝶云星空与MySQL的销售订单数据:技术详解

  • 轻易云集成顾问-谢楷斌
### MOM-XSDD-销售订单-表头-状态刷新:金蝶云星空到MySQL的数据集成实现 在现代企业的运营过程中,数据集成是确保各业务系统高效协同的重要环节。本文将介绍一个具体案例,演示如何通过MOM-XSDD方案,将金蝶云星空中的销售订单数据高效、可靠地集成到MySQL数据库中。 #### 金蝶云星空API调用与数据获取 为了从金蝶云星空系统中获取所需的销售订单表头信息,我们使用了executeBillQuery API接口。该接口支持定时抓取和分页处理,有助于我们应对大量数据带来的压力,并保证不漏单。在此过程中,我们还采用了异常检测机制,以便及时发现并解决潜在问题。 #### 数据转换与质量监控 由于金蝶云星空中的数据格式可能与MySQL存在差异,因此我们设计了一套自定义的数据转换逻辑,以适应不同的业务需求和结构。同时,通过轻易云平台提供的数据质量监控功能,可以实时追踪每个数据处理环节,确保传输过程中的高度准确性。 #### 高吞吐量写入与批量操作 在成功获取并转换好需要的数据后,下一步就是将这些信息快速、安全地写入到MySQL数据库中。借助于轻易云平台强大的高吞吐量支持以及批量操作能力,大规模的数据能够迅速进入目标数据库,从而极大提升整体效率。此外,我们还针对MySQL进行了特殊配置,以优化其性能,包括对分页和限流问题的处理,以及定制化的映射对接。 #### 集中监控与告警系统 为了进一步提高任务执行过程中的可控性,本次集成项目引入了集中监控和告警系统。这一系统不仅能实时跟踪每个任务节点的状态,还可以预先设定告警规则,当发生异常情况时立即通知相关人员进行干预。有了这一保障,即使面对复杂多变的实际应用环境,也能确保整个流程平稳运行。 接下来,让我们深入探讨具体实施步骤及技术细节,通过详细讲解来复现这个案例,实现真正意义上的端到端无缝数据集成。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D3.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取销售订单表头信息,并对数据进行初步加工。 #### 接口配置与请求参数 在轻易云数据集成平台上,配置元数据是实现接口调用的关键步骤。以下是针对金蝶云星空`executeBillQuery`接口的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FID", "name": "FBillNo", "request": [ {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态","value":"FDocumentStatus"}, {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"销售组织","value":"FSaleOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"}, {"field":"FCloseStatus","label":"关闭状态","type":"string","describe":"关闭状态","value":"FCloseStatus"}, {"field":"FCloserId","label":"关闭人","type":"string","describe":"关闭人","value":"FCloserId.fname"}, {"field":"FCloseDate","label":"关闭日期","type":"string","describe":"关闭日期","value":"FCloseDate"}, {"field":"FCancelStatus","label":"作废状态","type":"string","describe":"作废状态","value":"FCancelStatus"}, {"field":"FCancellerId","label":"作废人","type":"","describe":"","value":""}, {"field":"","label":"","type":"","describe":"","value":""} ], "otherRequest":[ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "5000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "", "value": "{PAGINATION_START_ROW}"}, {"field": "", "", "", "", ""}, {"field":"","label":"","type":"","describe":"","value":""} ], ... } ``` #### 请求参数解析 1. **基本字段**: - `FID`: 唯一标识符,用于唯一确定一条记录。 - `FBillNo`: 单据编号,是业务操作中的关键字段。 - `FDocumentStatus`: 单据状态,用于判断当前单据的处理阶段。 - `FSaleOrgId_FNumber`: 销售组织编号,关联到具体的业务部门。 - `FDate`: 单据日期,记录单据生成或修改的时间。 - `FCloseStatus`: 单据关闭状态,标识单据是否已完成或关闭。 - `FCloserId`: 关闭人,记录执行关闭操作的用户。 - `FCloseDate`: 关闭日期,记录单据被关闭的时间。 - `FCancelStatus`: 作废状态,标识单据是否被作废。 2. **其他请求参数**: - `Limit`: 最大行数,用于分页查询时限制返回的数据量。 - `StartRow`: 开始行索引,用于分页查询时指定起始位置。 - `FilterString`: 过滤条件,用于筛选符合特定条件的数据。例如:`"FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and FDocumentStatus='C'"`。 #### 数据请求与清洗 在配置好元数据后,通过轻易云平台发起POST请求,从金蝶云星空系统中获取销售订单表头信息。示例请求体如下: ```json { "FormId": "SAL_SaleOrder", ... } ``` 响应结果会包含多个字段,根据业务需求,可以对这些字段进行初步清洗和转换。例如,将日期格式统一转换为标准格式,将状态码转换为可读文本等。 #### 数据转换与写入 在获取并清洗完数据后,需要将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常包括以下操作: 1. **字段映射**:将源系统字段映射到目标系统字段。例如,将`FBillNo`映射到目标系统中的订单编号字段。 2. **数据类型转换**:确保源系统的数据类型与目标系统匹配。例如,将字符串类型的日期转换为目标系统所需的日期格式。 3. **批量写入**:为了提高效率,可以将处理好的数据批量写入目标系统。 通过上述步骤,可以高效地实现从金蝶云星空获取销售订单表头信息,并将其集成到其他业务系统中。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQL API接口的技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台 MySQL API 接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现过程。 #### 数据请求与清洗 首先,我们从源系统中提取数据。这一步已经完成,现在我们关注如何将这些数据转换为目标系统所需的格式,并通过API接口写入MySQL数据库。 #### 数据转换与写入 在本案例中,我们使用的是一个名为“MOM-XSDD-销售订单-表头-状态刷新”的集成方案。该方案涉及多个字段的数据转换和写入操作。以下是元数据配置: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ {"field": "fbillno", "label": "fbillno", "type": "string", "value": "{FBillNo}"}, {"field": "DATE", "label": "DATE", "type": "string", "value": "{FDate}"}, {"field": "KINGDEE_ID", "label": "KINGDEE_ID", "type": "string", "value": "{FID}"}, {"field": "DOCUMENT_STATUS", "label": "DOCUMENT_STATUS", "type":"string","value":"{FDocumentStatus}"}, {"field":"CLOSE_STATUS","label":"CLOSE_STATUS","type":"string","value":"{FCloseStatus}"}, {"field":"CLOSER_NAME","label":"CLOSER_NAME","type":"string","value":"{FCloserId}"}, {"field":"CLOSE_DATE","label":"CLOSE_DATE","type":"string", "value":"_function case '{FCloseDate}' when '' then null else '{FCloseDate}' end"}, {"field":"CANCEL_STATUS","label":"CANCEL_STATUS","type":"string","value":"{FCancelStatus}"}, {"field":"CANCELLER_NAME","label":"CANCELLER_NAME","type":"string","value":"{FCancellerId}"}, {"field":"CANCEL_DATE","label":"CANCEL_DATE","type":"string", "value":"_function case '{FCancelDate}' when '' then null else '{FCancelDate}' end"}, {"field":"SYNC_FLAG","label":"SYNC_FLAG","type":"string","value":"1"} ] } ], “otherRequest”: [ { “field”: “main_sql”, “label”: “main_sql”, “type”: “string”, “describe”: “111”, “value”: “update ty_mes.mt_so_head set DATE=:DATE,KINGDEE_ID=:KINGDEE_ID,DOCUMENT_STATUS=:DOCUMENT_STATUS,CLOSE_STATUS=:CLOSE_STATUS,CLOSER_NAME=:CLOSER_NAME,CLOSE_DATE=:CLOSE_DATE,CANCEL_STATUS=:CANCEL_STATUS,CANCELLER_NAME=:CANCELLER_NAME,CANCEL_DATE=:CANCEL_DATE,SYNC_FLAG=:SYNC_FLAG where so_number=:fbillno” } ] } ``` #### 元数据解析与配置 1. **API接口配置**:我们使用`POST`方法调用`execute` API接口,确保请求方式和接口名称正确。 2. **字段映射**:根据元数据配置,将源系统中的字段映射到目标系统所需的字段。例如: - `fbillno` 映射到 `{FBillNo}` - `DATE` 映射到 `{FDate}` - `KINGDEE_ID` 映射到 `{FID}` - `DOCUMENT_STATUS` 映射到 `{FDocumentStatus}` - 等等。 3. **特殊处理**:对于日期字段,如`CLOSE_DATE`和`CANCEL_DATE`,需要进行特殊处理。如果原始值为空字符串,则转换为null,否则保留原始值。这通过函数 `_function case '{FCloseDate}' when '' then null else '{FCloseDate}' end` 实现。 4. **同步标志**:添加一个固定值字段 `SYNC_FLAG`,其值为 `1`,用于标识同步状态。 5. **SQL更新语句**:构建用于更新MySQL数据库的SQL语句,通过占位符绑定参数,实现动态更新。例如: ```sql update ty_mes.mt_so_head set DATE = :DATE, KINGDEE_ID = :KINGDEE_ID, DOCUMENT_STATUS = :DOCUMENT_STATUS, CLOSE_STATUS = :CLOSE_STATUS, CLOSER_NAME = :CLOSER_NAME, CLOSE_DATE = :CLOSE_DATE, CANCEL_STATUS = :CANCEL_STATUS, CANCELLER_NAME = :CANCELLER_NAME, CANCEL_DATE = :CANCEL_DATE, SYNC_FLAG = :SYNC_FLAG where so_number = :fbillno ``` #### 实际操作步骤 1. **配置API请求参数**:根据元数据配置,将所有字段及其对应值封装到请求体中。 2. **发送API请求**:通过HTTP POST方法发送请求至MySQL API接口。 3. **处理响应结果**:接收并解析API响应,检查是否成功执行更新操作。如果失败,根据错误信息进行调试和修正。 以上就是将源平台数据经过ETL转换后,通过MySQL API接口写入目标平台的详细技术过程。在实际应用中,根据具体业务需求和系统环境,可以对上述步骤进行适当调整,以实现最佳的数据集成效果。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T19.png~tplv-syqr462i7n-qeasy.image)