金蝶云星空数据迁移:高效抓取、批量写入与异常处理

  • 轻易云集成顾问-张妍琪

金蝶云星空数据集成到MySQL的技术实现

在企业数据管理过程中,如何高效、可靠地将金蝶云星空系统的数据集成至MySQL数据库,一直是一个备受关注的话题。本次我们将分享一个称为“zjdb-金蝶查询直接调拨单-->mysql”的实际运行方案,通过使用executeBillQuery API从金蝶云星空获取指定业务数据,并利用execute API快速写入至MySQL,实现了高吞吐量和低延时的数据集成。

高效抓取与分页处理

为了保证对接任务能够稳定执行,我们首先通过定时任务触发调用金蝶云星空API接口executeBillQuery进行数据抓取。考虑到接口的限流策略和返回结果分页问题,我们采用循环迭代方式处理每一页的数据,同时记录上一次成功获取的位置(offset),确保无遗漏地读取所有需要的数据。

def fetch_data_from_kingdee(api_endpoint, params):
    # 示例代码:伪代码,仅展示逻辑框架。
    while True:
        response = call_api(api_endpoint, params)
        if not response['data']:
            break  # 无更多数据,退出循环
        process_data(response['data'])
        update_params_with_offset(params, response['next_offset'])

params = {
    'query': 'select * from DirectTransferOrders where ...',
    ...
}

fetch_data_from_kingdee('https://api.kingdeestar.com/executeBillQuery', params)

批量写入与自定义转换逻辑

在获取到这些分散的大量原始数据后,我们需要高效地将其批量写入MySQL。这不仅能显著提升性能,还能减轻数据库负载。在此过程中,自定义的转换逻辑也必不可少,以应对不同系统之间可能存在的数据格式差异。例如,将日期格式从字符串类型转为datetime类型,或者字段名称做相应调整。

def transform_and_bulk_insert(data_list):
    transformed_data = []

    for data in data_list:
        transformed_record = transform_record(data)  # 自定义转换函数,应按具体需求编写。
        transformed_data.append(transformed_record)

    execute_batch_insert(transformed_data)  # 使用批量插入功能,提高插入效率

transform_and_bulk_insert(fetched_data)

实时监控与异常重试机制

为了确保整个流程平稳运行,我们借助集中化监控系统实时跟踪每个步骤的状态与性能。同时,为了提高鲁棒性,当遇到网络故障或临时API错误等异常情况,会触发自动重试机制,加之全面的日志记录,使得任何环节出现问题都能迅速定位并解决。

try:
    fetch_and
![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image)
### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据

在轻易云数据集成平台中,调用源系统金蝶云星空接口`executeBillQuery`是数据集成生命周期的第一步。该步骤主要涉及从金蝶云星空系统获取原始数据,并进行初步加工,为后续的数据转换与写入奠定基础。本文将详细探讨如何通过元数据配置来实现这一过程。

#### 接口调用配置

首先,我们需要配置调用金蝶云星空接口的相关参数。根据提供的元数据配置,接口调用的基本信息如下:

- **API**: `executeBillQuery`
- **请求方法**: `POST`
- **业务对象表单Id**: `STK_TransferDirect`

#### 请求参数设置

在请求参数部分,我们需要设置多个字段以确保正确获取所需的数据。这些字段包括单据编号、单据状态、FEntryID、日期、调拨数量和总成本等。具体配置如下:

```json
"request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
    {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
    {"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","describe":"FEntryID","value":"FBillEntry_FEntryID"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"},
    {"field":"FQty","label":"调拨数量","type":"string","value":"FQty"},
    {"field":"FAmount","label":"总成本","type":"string","value":"FAmount"}
]

其他请求参数

为了实现分页查询和过滤条件,我们还需要配置一些额外的请求参数:

"otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "1000"},
    {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser": {"name": "ArrayToString", "params": ","}},
    {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"},
    {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", 
        "value": 
        "FDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZJDB%' or FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FBillNo NOT LIKE '%ZJDB%'"
    },
    {"field": "FormId", "label": "业务对象表单Id", "type": "string", 
        "describe": 
        "必须填写金蝶的表单ID如:PUR_PurchaseOrder",
        "value":
        "STK_TransferDirect"
    },
    {"field": 
        "StartRow",
        "label":
        "开始行索引",
        "type":
        "string",
        "describe":
        "金蝶的查询分页参数",
        "value":
        "{PAGINATION_START_ROW}"
    }
]

这些参数确保了我们能够有效地分页获取数据,并通过过滤条件筛选出符合要求的数据记录。

数据响应处理

在获取到原始数据后,我们需要对其进行初步加工。例如,将日期字段FDate格式化为新的字段FDate_new。这一步骤可以通过以下配置实现:

"formatResponse":[
    {
        "old":"FDate",
        "new":"FDate_new",
        "format":"date"
    }
]

此外,自动填充响应功能(autoFillResponse)也被启用,以简化响应数据的处理流程。

实际案例应用

假设我们需要从金蝶云星空系统中查询直接调拨单,并将其导入到MySQL数据库中。在实际应用中,我们会按照上述配置调用executeBillQuery接口,获取符合条件的数据记录,并对其进行必要的格式化处理。然后,这些处理后的数据将被进一步转换并写入到目标数据库中。

通过这种方式,我们不仅能够高效地获取和处理源系统的数据,还能确保整个数据集成过程透明可控,极大提升了业务操作的效率和准确性。

以上是关于如何使用轻易云数据集成平台调用源系统金蝶云星空接口executeBillQuery获取并加工数据的详细技术案例,希望能为您的实际操作提供有价值的参考。 钉钉与ERP系统接口开发配置

数据集成生命周期的ETL转换:从金蝶查询直接调拨单到MySQL API接口

在数据集成过程中,将源平台的数据转换并写入目标平台是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台将金蝶查询直接调拨单的数据转换为MySQL API接口所能接收的格式,并最终写入目标平台。

元数据配置解析

在本案例中,元数据配置如下:

{
  "api": "execute",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "main_params",
      "label": "main_params",
      "type": "object",
      "describe": "111",
      "children": [
        {"field": "FBillEntry_FEntryID", "label": "明细id", "type": "string", "value": "{FBillEntry_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", "value":"{FAmount}"},
        {"field":"datetime_new","label":"时间","type":"date","value":"{FDate_new}"},
        {"field":"Document_Type","label":"单据类型","type":"string","value":"直接调拨"}
      ]
    }
  ],
  ...
}

数据请求与清洗

首先,我们需要从金蝶系统中提取相关数据。这一步通常包括通过API调用或数据库查询来获取原始数据。假设我们已经获取到如下数据:

{
  FBillEntry_FEntryID: '12345',
  FBillNo: 'KD20231001',
  FDocumentStatus: '审核中',
  FQty: '100',
  FAmount: '5000',
  FDate_new: '2023-10-01'
}

数据转换

接下来,我们需要将这些数据转换为目标平台MySQL API接口能够接收的格式。根据元数据配置中的request部分,我们需要构建一个包含main_params字段的对象,其中每个子字段对应于源数据中的一个字段。

{
  main_params: {
    FBillEntry_FEntryID: '12345',
    order_no_new: 'KD20231001',
    FDocumentStatus: '审核中',
    qty_count: '100',
    sales_count: '5000',
    datetime_new: '2023-10-01',
    Document_Type: '直接调拨'
  }
}

数据写入

最后一步是将转换后的数据写入目标平台。在本案例中,我们使用MySQL API接口进行数据写入。根据元数据配置中的otherRequest部分,生成相应的SQL语句:

INSERT INTO `kd_zjdb`(`FBillEntry_FEntryID`, `order_no_new`, `FDocumentStatus`, `qty_count`, `sales_count`, `datetime_new`, `Document_Type`) 
VALUES (:FBillEntry_FEntryID, :order_no_new, :FDocumentStatus, :qty_count, :sales_count, :datetime_new, :Document_Type)

通过轻易云平台的API调用功能,我们可以执行上述SQL语句,将处理好的数据插入到MySQL数据库中。

总结

以上过程展示了如何通过轻易云数据集成平台将金蝶查询直接调拨单的数据进行ETL转换,并最终写入MySQL目标平台。关键步骤包括:

  1. 提取源数据。
  2. 根据元数据配置进行数据转换。
  3. 使用API接口将转换后的数据写入目标数据库。

这种方法确保了不同系统间的数据无缝对接,提高了业务流程的透明度和效率。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案