金蝶云星空组装拆卸单的数据集成实现方案与实践

  • 轻易云集成顾问-胡秀丛
### 案例分享:金蝶云星空数据集成到MySQL之`zzcx-金蝶查询组装拆卸单-->mysql` 在企业系统建设中,如何有效实现业务系统与数据库的无缝对接是一个常见且重要的技术难题。本案例将聚焦于利用轻易云数据集成平台,将金蝶云星空中的"组装拆卸单"数据高效、稳定地写入到MySQL数据库,并在此过程中确保数据不丢失、处理及时。 要实现这个目标,我们主要使用了两种API接口: 1. **金蝶云星空获取数据的API:executeBillQuery** 2. **MySQL写入数据的API:execute** **方法论概述** 我们的方案分为几个关键步骤: 1. **定时抓取与监控** 使用定时任务可靠地从金蝶云星空接口拉取最新的数据,通过配置相关参数确保分页和限流问题。该过程不仅可以批量抓取大量业务记录,还能通过轻易云提供的监控工具实时跟踪任务执行状态,从而及时发现并解决潜在的问题。 2. **自定义转换逻辑** 抓取到的数据可能包含复杂且多样化的信息,需要进行适当的格式转换以便能够正确写入到MySQL。这一环节我们利用轻易云支持自定义转换逻辑功能,根据业务需求调整字段映射及格式,达到预期的数据结构要求。 3. **高吞吐量写入与异常处理** 数据量大时,高吞吐量的数据写入能力尤为关键,此处我们优化了批次请求频率和每次提交的数据量。此外,为保障整个流程稳健运行,还设置了完善的错误重试机制,一旦出现异常情况(如网络波动或服务器超载),能够自动重新尝试直至成功,使得整个集成过程更具有鲁棒性和可靠性。 4. **实时监控与日志记录** 在所有操作中,持续性的监控和全面日志纪录不可或缺。它们帮助我们了解各个阶段输出结果及内部状态变化,有助于快速定位问题并作出相应调整。在这一点上,我们借力轻易云集中监控与告警系统,不仅能掌握所有任务进展情况,还可以预设告警条件以应对突发状况。 通过上述几步,我们实现了金蝶云星空至MySQL之间高效、安全、可靠的数据传输,这使得后续分析、存储以及应用变得更加快捷顺畅。在接下来的文章中将详细探讨具体实施细节,包括各环节涉及的重要配置参数以及注意事项,以帮助大家更好理解这套集成方案。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用金蝶云星空接口`executeBillQuery`是数据集成生命周期的第一步。该接口用于从金蝶云星空系统中获取原始业务数据,并进行初步加工,为后续的数据转换与写入奠定基础。 #### 接口配置与请求参数 根据元数据配置,我们需要通过POST方法调用`executeBillQuery`接口。以下是主要的请求参数及其配置: - **FormId**: 表单ID,必须填写,例如`STK_AssembledApp`。 - **FieldKeys**: 查询字段列表,格式为数组,例如`FPOOrderEntry_FEntryId, FPurchaseOrgId.FNumber`。 - **FilterString**: 过滤条件,用于筛选符合条件的数据。例如,`FDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZZCX%' or FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZZCX%'`。 - **Limit**和**StartRow**: 分页参数,用于控制查询结果的分页。 - **TopRowCount**: 查询结果的最大行数。 请求示例如下: ```json { "FormId": "STK_AssembledApp", "FieldKeys": ["FEntity_FEntryID", "FBillNo", "FDocumentStatus", "FDate", "FQty"], "FilterString": "FDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZZCX%' or FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZZCX%'", "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}", "TopRowCount": 100 } ``` #### 数据格式化与响应处理 在获取到原始数据后,我们需要对部分字段进行格式化处理。例如,将日期字段`FDate`转换为新的格式,并命名为`FDate_new`。这是通过元数据中的`formatResponse`配置实现的: ```json "formatResponse": [ { "old": "FDate", "new": "FDate_new", "format": "date" } ] ``` 此外,元数据配置还支持自动填充响应字段(autoFillResponse),这意味着我们可以直接使用API返回的数据进行下一步处理,而无需手动解析和映射。 #### 实践案例:组装拆卸单查询与加工 假设我们需要从金蝶云星空系统中查询组装拆卸单,并将其写入MySQL数据库。以下是具体的实现步骤: 1. **调用API获取数据**: 使用上述配置,通过POST请求调用金蝶云星空的`executeBillQuery`接口,获取组装拆卸单的数据。 2. **格式化响应数据**: 根据元数据中的格式化规则,将日期字段转换为新的格式,并重命名为`FDate_new`。 3. **数据清洗与转换**: 对获取的数据进行必要的清洗和转换,例如过滤掉无效记录、处理缺失值等。 4. **写入MySQL数据库**: 将清洗和转换后的数据写入MySQL数据库,以便后续分析和使用。 以下是一个简单的Python示例代码,展示了如何调用API并处理响应数据: ```python import requests import json from datetime import datetime # API URL url = 'https://api.kingdee.com/executeBillQuery' # 请求头 headers = { 'Content-Type': 'application/json' } # 请求体 payload = { 'FormId': 'STK_AssembledApp', 'FieldKeys': ['FEntity_FEntryID', 'FBillNo', 'FDocumentStatus', 'FDate', 'FQty'], 'FilterString': "FDate>='2023-01-01' and FBillNo NOT LIKE '%ZZCX%'", 'Limit': 100, 'StartRow': 0, 'TopRowCount': 100 } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 格式化日期字段 for record in data: record['FDate_new'] = datetime.strptime(record['FDate'], '%Y-%m-%d').strftime('%d/%m/%Y') # 打印处理后的数据 print(json.dumps(data, indent=4)) else: print(f"Error: {response.status_code}") ``` 通过上述步骤,我们能够高效地从金蝶云星空系统中获取并加工组装拆卸单的数据,为后续的数据集成和分析提供坚实基础。这种方法不仅提高了业务透明度和效率,还确保了数据的一致性和准确性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQLAPI接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台MySQL API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台进行这一过程。 #### 数据请求与清洗 首先,我们需要从源系统中提取数据。假设我们从金蝶系统中提取了组装拆卸单的数据,这些数据包括明细ID、单号、状态、数量、金额和时间等字段。在轻易云数据集成平台中,我们可以通过配置元数据来实现这一过程。 #### 数据转换与写入 接下来,我们需要将这些提取到的数据进行转换,以符合目标平台MySQL API接口的格式要求。以下是元数据配置示例: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "children": [ {"field": "FEntity_FEntryID", "label": "明细id", "type": "string", "value":"{FEntity_FEntryID}"}, {"field": "order_no_new", "label": "单号", "type": "string", "value":"{FBillNo}"}, {"field": "FDocumentStatus", "label": "状态", "type": "string", "value":"{FDocumentStatus}"}, {"field": "qty_count", "label":"数量","type":"string","value":"{FQty}"}, {"field":"sales_count","label":"金额","type":"string"}, {"field":"datetime_new","label":"时间","type":"date","value":"{FDate_new}"}, {"field":"Document_Type","label":"单据类型","type":"string","value":"组装拆卸"} ] } ], otherRequest: [ { field: 'main_sql', label: 'main_sql', type: 'string', describe: '111', value: 'INSERT INTO `kd_zzcx`(`FEntity_FEntryID`,`order_no_new`,`FDocumentStatus`,`qty_count`,`sales_count`,`datetime_new`,`Document_Type`) VALUES (:FEntity_FEntryID,:order_no_new,:FDocumentStatus,:qty_count,:sales_count,:datetime_new,:Document_Type)' } ] } ``` #### 配置解析 1. **API配置**: - `api`: 指定要执行的操作,这里是`execute`。 - `effect`: 操作类型,这里是`EXECUTE`。 - `method`: HTTP方法,这里是`POST`。 - `idCheck`: 是否检查ID,设置为`true`。 2. **请求参数**: - `request`: 包含一个对象数组,每个对象定义一个字段及其属性。 - `field`: 字段名。 - `label`: 字段标签。 - `type`: 字段类型,如`string`, `date`, 等。 - `value`: 字段值,可以使用占位符从源数据中获取。 3. **其他请求参数**: - `otherRequest`: 包含SQL语句,用于将转换后的数据插入到目标数据库中。 #### 实际操作 1. **提取数据**:通过轻易云的数据请求功能,从金蝶系统中提取组装拆卸单的数据。 2. **转换数据**:根据配置,将提取到的数据字段映射到目标数据库字段。例如,将金蝶系统中的`FBillNo`映射到MySQL中的`order_no_new`。 3. **写入数据库**:使用配置的SQL语句,将转换后的数据插入到MySQL数据库中的表`kd_zzcx`。 通过以上步骤,我们实现了从金蝶系统到MySQL数据库的ETL过程。这不仅简化了跨系统的数据集成,还确保了数据的一致性和准确性。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)