ETL实践:金蝶生产订单向新宝产业链平台的数据转化与加载

  • 轻易云集成顾问-林峰

金蝶云星空数据集成到新宝-产业链协同平台:生产订单与排程的无缝对接

在进行企业内部系统和外部合作伙伴平台的数据集成过程中,如何确保准确、高效、及时的业务数据同步是一个关键挑战。本技术案例将详细解析金蝶云星空中的生产订单数据,如何通过轻易云数据集成平台实现与新宝-产业链协同平台进行高效对接,从而保证生产计划的实时更新。

确保不漏单:接口调用与分页处理

为保障所有金蝶云星空上的生产订单都能被无遗漏地获取到,我们采用了executeBillQuery这个API接口。为了应对其返回结果的大量数据,我们使用了分页机制来循序渐进地抓取整个数据集合。例如,通过指定查询起始点和每页条目数,可以确保全量订单逐一被拉取,并完成后续的数据传输处理,这样即便面对海量的数据,也不会出现遗漏或丢失的问题。

大量数据快速写入新宝-产业链协同平台

当从金蝶云星空提取出大量生产订单后,需要迅速将这些信息写入到新宝-产业链协同平台中对应的/production/scheduling API接口。鉴于可能出现批次多、各类字段众多等特点,我们选择批量操作模式,大大提高了效率。同时,为防止因网络波动或系统故障导致的数据传输失败,实施了一套异常处理与重试机制,以确保所有传输请求最终成功执行。

解决异构系统间的数据格式差异

由于金蝶云星空和新宝-产业链协同平台之间存在不同的数据格式约定,因此,在进行两者之间的信息流转时,需要一套灵活且精确的映射方案。轻易云配置工具允许用户自定义规则,将原始读取出来的JSON或者XML结构转换为目标端所需的标准形式。这不仅简化了开发工作,更显著降低了错误发生概率,使得整个过程流畅可控。

定时可靠抓取及实时监控日志记录

考虑到业务需求的不确定性以及重要时间节点上的突发任务,该集成流程设置了定时调度器,每隔固定周期自动触发一次生产订单抓取,并即时推送至排程管理系统。此外,还启用了实时监控功能,对每一步骤操作进行日志记录。一旦出现异常,可根据详细日志快速定位并解决问题,提高整体运维效率,同时也提供历史追溯依据以备审计之用。

通过以上步骤,本案例展示了一种行之有效的方法,实现复杂环境下两个截然不同的软件系统间的数据互通,不仅强化了企业资源规划 数据集成平台API接口配置

调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的executeBillQuery接口来获取并加工生产订单数据。

接口配置与请求参数

首先,我们需要配置调用金蝶云星空接口的元数据。以下是关键的元数据配置:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FTreeEntity_FEntryId",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "request": [
    {"field":"FID","label":"实体主键","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FTreeEntity_FEntryId","label":"FTreeEntity_FEntryId","type":"string","value":"FTreeEntity_FEntryId"},
    {"field":"FTreeEntity_Fseq","label":"FTreeEntity_Fseq","type":"string","value":"FTreeEntity_Fseq"},
    {"field":"FCREATORID","label":"创建人","type":"string","value":"FCREATORID.FName"},
    {"field":"FAPPROVERID","label":"审核人","type":"string","value":"FAPPROVERID.FName"},
    {"field":"FCREATEDATE","label":"创建日期","type":"string","value":"FCREATEDATE"},
    {"field":"FMATERIALID_FName","label":"物料客户编码","type":"string","value":"FMATERIALID.FName"},
    {"field":"FAPPROVEDATE","label":"审核日期","type":"string","value":"FAPPROVEDATE"},
    {"field":"FMATERIALID_FDescription","label":"物料规格型号","type":"string","value":"FMATERIALID.FDescription"},
    {"field":"FWorkShopID_FName","label":"生产车间","type":"string","value":"FWorkShopID.FName"},
    {"field":"FQty","label":"数量","type": "string", "value": "FQty"},
    {"field": "FPlanStartDate", "label": "计划开工时间", "type": "string", "value": "FPlanStartDate"},
    {"field": "FPlanFinishDate", "label": "计划完工时间", "type": "string", "value": "FPlanFinishDate"},
    {"field": "FSaleOrderNo", "label": "需求订单号", "type": "string", "value": "FSaleOrderNo"},
    {"field": "FStartDate", "label": "开工时间", "type": "string", "value": 
![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行金蝶生产订单到新宝生产排程的ETL转换

在使用轻易云数据集成平台进行数据处理时,ETL(提取、转换、加载)是一个关键步骤。本文将详细探讨如何将金蝶生产订单的数据转换为新宝-产业链协同平台API接口所能接收的格式,并最终写入目标平台。

#### 1. 数据提取与清洗

首先,我们需要从金蝶系统中提取生产订单相关的数据。假设我们已经完成了数据请求与清洗阶段,现在我们拥有了结构化的源数据。这些数据包括但不限于采购订单行ID、采购订单行号、生产工单号、采购订单号、工单状态等。

#### 2. 数据转换

接下来,我们需要将这些源数据按照新宝-产业链协同平台API接口的要求进行转换。以下是元数据配置中的主要字段及其对应关系:

- `poRowId`(采购订单行ID):通过查询金蝶系统获取。
- `poRowNo`(采购订单行号):通过查询金蝶系统获取。
- `productionNo`(生产工单号):由`FBillNo`和`FTreeEntity_Fseq`组合而成。
- `poNo`(采购订单号):直接映射自金蝶系统的`F_GZHQ_Text_KHDDH`字段。
- `openStatus`(工单状态):直接映射自源数据。
- `openDate`(开单时间):直接映射自源数据的`FStartDate`字段。
- `materialNo`(物料编码-供应商侧):映射自源数据的`FMATERIALID_FName`字段。
- `materialName`(物料名称-供应商侧):映射自源数据的`FMATERIALID_FDescription`字段。
- `materialSpecification`(规格型号):映射自源数据的`FMATERIALID_FSpecification`字段。
- `materialNum`(物料数量):映射自源数据的`FQty`字段。
- `planStartTime`(计划开工日期):映射自源数据的`FPlanStartDate`字段。
- `planEndTime`(计划完工日期):映射自源数据的`FPlanFinishDate`字段。
- `realStartTime`(实际开工日期):映射自源数据的`FStartDate`字段。
- `realEndTime`(实际完工日期):映射自源数据的`FFinishDate`字段。
- `lineTeam`(产线/班组):映射自源数据的`FWorkShopID_FName`.
- `createBy`(创建人):映射自源数据的创建人ID,即为金蝶系统中的用户ID (`FCREATORID`)。
- `remark`: 映射自备注信息 (`FMemoItem`)。

#### 3. 数据写入

完成上述转换后,我们需要将处理后的数据通过API接口写入到新宝产业链协同平台。根据元数据配置,目标API接口为:

```json
{
    "api": "/production/scheduling",
    "method": "POST",
    "idCheck": true,
    "sdk": "\\Adapter\\Donlim\\SDK\\DonlimSDK",
    "errorMsgKey": "msg"
}

我们需要构建一个符合该接口要求的数据对象,并使用HTTP POST方法提交。以下是一个示例请求体:

{
    "data": {
        "poRowId": "123456",
        "poRowNo": "001",
        "productionNo": "PO12345-001",
        "poNo": "PO12345",
        "openStatus": "Open",
        "openDate": "2023-10-01T08:00:00Z",
        "materialNo": "MAT001",
        "materialName": "Material Name",
        "materialSpecification": "Spec001",
        "materialNum": "1000",
        "planStartTime": "2023-10-05T08:00:00Z",
        "planEndTime": "2023-10-15T18:00:00Z",
        "realStartTime": null,
        "realEndTime": null,
        "lineTeam": null,
        "createBy": null,
        "remark": null,
        ...
    }
}

4. 错误处理

在执行API调用时,需要特别注意错误处理机制。根据元数据配置中的sdk, 我们可以利用轻易云提供的SDK进行错误捕获和处理。如果API返回错误信息,我们可以通过解析响应中的错误消息键(errorMsgKey)来获取具体错误原因,并进行相应处理。

import requests
from Adapter.Donlim.SDK import DonlimSDK

def post_data_to_api(data):
    url = 'https://target-platform.com/production/scheduling'
    headers = {'Content-Type': 'application/json'}

    response = requests.post(url, json=data, headers=headers)

    if response.status_code != 200:
        error_msg = response.json().get('msg', 'Unknown error')
        raise Exception(f"API call failed with error: {error_msg}")

    return response.json()

# Example usage
try:
    data = {
       # Constructed data object as shown above
    }
    result = post_data_to_api(data)
except Exception as e:
    print(f"Error occurred: {e}")

通过以上步骤,我们成功地将金蝶生产订单的数据经过ETL转换后写入到新宝产业链协同平台,实现了不同系统间的数据无缝对接。这一过程不仅提高了业务流程自动化程度,也确保了数据的一致性和准确性。 金蝶与外部系统打通接口

更多系统对接方案