基于轻易云平台的ETL技术:从数据获取到高效写入的完整流程

  • 轻易云集成顾问-孙传友

查询星空销售订单方案:金蝶云星空到轻易云集成平台的实践

在系统对接与数据集成领域,确保业务流程顺畅和数据零漏失至关重要。本文将详细探讨如何通过轻易云集成平台,将金蝶云星空的数据高效且精准地集成到统一的数据处理环境中,以实现对销售订单信息的全方位管理。我们的具体实施案例——“查询星空销售订单方案”,聚焦解决这一实际业务需求。

调用API接口executeBillQuery获取数据

为了从金蝶云星空中提取销售订单数据,我们首先需要调用其提供的API接口executeBillQuery。此过程涉及到以下几点关键技术:

  • 分页机制:由于销售订单量大,通过单次请求无法获取全部数据,我们采用分页方式抓取每一页的数据。
  • 限流处理:为防止触发API访问限制,需要在多次请求之间预留时间间隔,同时监控接口返回状态,自动调整请求频率。

这些措施保证了我们能够稳定且完整地获得所有所需的销售订单信息。

将大量数据快速写入到轻易云平台

当取得金蝶云星空中的原始数据后,下一个步骤是快速、可靠地将这些数据批量写入到轻易云集成平台。在这里,“批量操作”和“异常重试机制”是两个关键要素:

  • 批量写入: 使用轻易云提供的批量接口,可以一次性提交大量记录,提高效率并减少网络传输开销。
  • 错误重试: 在写入过程中,如果发生任何网络或系统故障,则会启动错误重试机制,确保最终所有有效记录都成功存储。

通过这样的设计,有效提高了整个操作流程的稳健性和效率,并最小化可能存在的数据丢失风险。

处理两者之间的数据格式差异

不同系统间的数据格式通常存在显著差异。这就要求在进行系统对接时,实现精确而灵活的数据映射与转换。在本案例中主要包含以下步骤:

  • 字段映射转换:根据目标数据库体系结构,对来自金蝶云星空的字段逐一进行匹配和验证。
  • 自定义规则应用:若某些字段需特殊处理(如单位换算、日期格式变化等),则使用定制化脚本完成相应变换工作,再输入至目标数据库。

这种细粒度控制使得异构系统间的数据交互更加便捷,同时保证了各类数据信息的一致性与准确性。

这只是“查询星空销售订单方案”项目中的一些核心实践方法,下一步我们将深入探讨具体实现流程及所 泛微OA与ERP系统接口开发配置

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

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

接口配置与请求参数

首先,我们需要配置调用金蝶云星空接口的元数据。以下是一个完整的元数据配置示例:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FSaleOrderEntry_FEntryID",
  "pagination": {
    "pageSize": 500
  },
  "request": [
    {"field":"FSaleOrderEntry_FEntryID","label":"FSaleOrderEntry_FEntryID","type":"string","value":"FSaleOrderEntry_FEntryID"},
    {"field":"FID","label":"FID","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
    {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","value":"FSaleOrgId.FNumber"},
    {"field":"FDate","label":"日期","type":"string","value":"FDate"},
    {"field":"FCustId_FNumber","label":"客户","type":"string","value":"FCustId.FNumber"},
    {"field":"FSaleDeptId_Fnumber","label":"销售部门","type":"string","value":"FSaleDeptId.Fnumber"},
    // ...省略部分字段...
    {"field":"FTailDiffFlag","label":"尾差处理标识","type":"string","value":"FTailDiffFlag"}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
    {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"},
    {"field": "FilterString", 
        "label": "过滤条件", 
        "type": "string", 
        "describe": 
        "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", 
        "value":
        "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FDocumentStatus='C'"},
    {"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_SaleOrder"
      }
   ]
}

请求构建与发送

在轻易云平台上,我们可以通过配置上述元数据来构建请求。关键步骤包括:

  1. 设置请求方法和URL:根据元数据中的apimethod字段,确定请求方法为POST,请求URL为/executeBillQuery
  2. 构建请求体:根据request字段中的配置,构建包含所有需要查询字段的JSON对象。
  3. 分页处理:利用pagination字段中的信息,设置每次请求的数据量,并处理分页逻辑。

以下是一个示例代码片段,用于发送请求并处理响应:

import requests
import json

url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
  'FormId': 'SAL_SaleOrder',
  'FieldKeys': ','.join([item['value'] for item in metadata['request']]),
  'FilterString': metadata['otherRequest'][3]['value'],
  'Limit': metadata['pagination']['pageSize'],
  'StartRow': 0
}

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

数据清洗与转换

获取到原始数据后,需要对其进行清洗和转换,以便后续的数据写入操作。常见的数据清洗操作包括:

  • 字段重命名:将原始字段名转换为目标系统所需的字段名。
  • 数据类型转换:确保所有字段的数据类型符合目标系统要求。
  • 缺失值处理:填补或删除缺失值,以保证数据完整性。

以下是一个简单的数据清洗示例:

def clean_data(raw_data):
    cleaned_data = []

    for record in raw_data:
        cleaned_record = {
            'SaleOrderID': record['FID'],
            'BillNo': record['FBillNo'],
            'CustomerID': record['FCustId_FNumber'],
            # ...其他字段...
        }
        cleaned_data.append(cleaned_record)

    return cleaned_data

cleaned_data = clean_data(data)

小结

通过以上步骤,我们成功地调用了金蝶云星空的executeBillQuery接口,获取了销售订单数据,并进行了初步的数据清洗和转换。这一步骤为后续的数据写入和进一步处理奠定了基础。在实际应用中,还可以根据具体需求添加更多复杂的数据处理逻辑,以满足业务需求。 数据集成平台API接口配置

基于轻易云数据集成平台的ETL转换与写入技术案例

在数据集成的生命周期中,ETL(Extract, Transform, Load)是一个至关重要的环节。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,并转为目标平台轻易云集成平台API接口所能够接收的格式,最终写入目标平台。

数据请求与清洗

在进行数据转换之前,首先需要从源系统中请求并清洗数据。假设我们已经从星空销售订单系统中获取了原始数据,并进行了必要的数据清洗操作。清洗后的数据结构如下:

[
    {"number": "12345", "id": "001", "name": "产品A"},
    {"number": "67890", "id": "002", "name": "产品B"}
]

数据转换与写入

接下来,我们将重点放在如何使用轻易云集成平台API接口,将上述清洗后的数据进行转换并写入目标平台。

配置元数据解析

根据提供的元数据配置,我们需要将清洗后的数据映射到目标API接口所需的字段格式。元数据配置如下:

{
    "api": "写入空操作",
    "effect": "EXECUTE",
    "method": "POST",
    "number": "number",
    "id": "id",
    "name": "编码",
    "idCheck": true
}
构建API请求

根据元数据配置,我们需要构建POST请求,将每条记录发送到目标API接口。以下是Python代码示例,展示如何进行这一操作:

import requests
import json

# 清洗后的数据
data = [
    {"number": "12345", "id": "001", "name": "产品A"},
    {"number": "67890", "id": "002", "name": "产品B"}
]

# 目标API URL
api_url = 'https://api.qingyiyun.com/execute'

# 遍历每条记录并发送POST请求
for record in data:
    payload = {
        'number': record['number'],
        'id': record['id'],
        '编码': record['name']
    }

    # 检查ID是否存在,如果不存在则跳过该记录
    if not payload['id']:
        continue

    response = requests.post(api_url, data=json.dumps(payload), headers={'Content-Type': 'application/json'})

    # 打印响应结果
    print(response.status_code, response.text)
处理响应结果

在实际应用中,我们不仅需要发送请求,还需要处理响应结果,以确保每次操作都成功执行。以下是对响应结果的处理示例:

# 发送POST请求并处理响应结果
response = requests.post(api_url, data=json.dumps(payload), headers={'Content-Type': 'application/json'})

if response.status_code == 200:
    print(f"Record {payload['id']} successfully written.")
else:
    print(f"Failed to write record {payload['id']}. Status code: {response.status_code}, Response: {response.text}")

通过上述步骤,我们实现了从源系统到目标平台的数据ETL转换和写入。整个过程包括了从源系统请求和清洗数据、根据元数据配置进行字段映射、构建并发送API请求以及处理响应结果等关键环节。

技术要点总结

  1. 元数据配置解析:通过解析元数据配置,确定字段映射关系。
  2. API请求构建:根据映射关系构建符合目标平台要求的API请求。
  3. 响应处理:对每次API调用的响应结果进行处理,确保操作成功。

以上技术案例展示了如何利用轻易云集成平台实现高效的数据ETL转换和写入,为企业的数据集成提供了可靠保障。 如何开发用友BIP接口

更多系统对接方案