ETL案例:从金蝶云星空到轻易云的全过程详解

  • 轻易云集成顾问-杨嫦

金蝶云星空数据集成到轻易云数据集成平台的技术案例分享

在本次技术案例中,我们重点探讨如何将金蝶云星空系统中的收料通知单,通过API接口executeBillQuery,高效地集成到轻易云数据集成平台。该方案名为【仅查询】金蝶收料通知单。

此次项目面临的主要挑战是确保从金蝶云星空获取的数据完整、无漏,同时在快速处理大量数据的前提下,实时监控任务状态和性能。我们借助轻易云提供的一系列特性,包括支持高吞吐量的数据写入能力、集中式监控与告警系统、自定义数据转换逻辑,以及可视化的数据流设计工具,实现了目标解决方案。

首先,通过定时调度机制,我们可靠地调用了金蝶云星空的接口executeBillQuery,以批量抓取其收料通知单数据。在此过程中,为应对分页和限流问题,我们采用了多线程并发请求,并依据API返回的分页信息动态调整读取策略,从而保证每一条记录不被遗漏。同时,借助轻易云平台强大的自定义映射功能,对接收到的数据进行了格式转换,使其符合目的端的要求。

为了进一步提升整个流程的透明度与稳定性,该解决方案还集成了实时监控与日志记录模块。这不仅帮助我们及时发现异常情况,也能自动触发错误重试机制,从而极大提高整体运行效率和成功率。在实际操作中,这些技术手段有效保障了业务连续性的同时,还显著降低了人工干预成本。

接下来,将详细介绍具体实现步骤及相关代码示例,以便更好地理解此集成过程中的关键环节与最佳实践。 钉钉与CRM系统接口开发配置

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

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

接口配置与请求参数

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

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FDetailEntity_FEntryID",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"String","value":"FBillNo"},
    {"field":"FDocumentStatus","label":"单据状态","type":"String","value":"FDocumentStatus"},
    {"field":"FMaterialId","label":"物料编码","type":"String","value":"FMaterialId.fnumber"},
    {"field":"FStockOrgId","label":"收料组织","type":"String","value":"FStockOrgId.FNumber"},
    {"field":"FMaterialName","label":"物料名称","type":"String","value":"FMaterialName"},
    {"field":"FDate","label":"收料日期","type":"String","value":"FDate"},
    {"field":"FMateriaModel","label":"规格型号","type":"String","value":"FMateriaModel"},
    {"field":"FBillTypeID","label":"单据类型","type":"String","value":"FBillTypeID.FNumber"},
    {"field":"FAuxPropId","label":"辅助属性","type":"String","value":"FAuxPropId"},
    {"field":"FOwnerTypeIdHead","label":"货主类型","type":"String","value":"FOwnerTypeIdHead"},
    {"field":"FOwnerIdHead","label":"货主","type":"String","value":"FOwnerIdHead.FNumber"}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
    {"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: 'PUR_ReceiveBill'
      }
   ]
}

请求与响应处理

在配置好元数据后,我们可以通过轻易云平台发起HTTP POST请求来调用executeBillQuery接口。以下是一个典型的请求示例:

{
  api: 'executeBillQuery',
  method: 'POST',
  data: {
      FormId: 'PUR_ReceiveBill',
      FieldKeys: 'FBillNo,FDocumentStatus,FMaterialId.fnumber,FStockOrgId.FNumber,FMaterialName,FDate,FMateriaModel,FBillTypeID.FNumber,FAuxPropId,FOwnerTypeIdHead,FOwnerIdHead.FNumber',
      FilterString: `FApproveDate>='${LAST_SYNC_TIME}' and FDocumentStatus='C'`,
      Limit: PAGINATION_PAGE_SIZE,
      StartRow: PAGINATION_START_ROW
   }
}

在这个请求中,FormId指定了业务对象表单ID为PUR_ReceiveBillFieldKeys列出了需要查询的字段集合,FilterString用于设置过滤条件,确保只获取符合条件的数据。

数据清洗与转换

从源系统获取到的数据往往需要进行一定程度的清洗和转换,以便后续处理和存储。常见的数据清洗操作包括:

  1. 字段映射:将源系统字段映射到目标系统字段。
  2. 数据格式转换:例如,将日期字符串转换为标准日期格式。
  3. 数据过滤:去除不必要的数据记录。

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

function cleanData(rawData) {
   return rawData.map(record => ({
       billNo: record.FBillNo,
       documentStatus: record.FDocumentStatus,
       materialCode: record.FMaterialId_fnumber,
       stockOrgCode: record.FStockOrgId_FNumber,
       materialName: record.FMaterialName,
       receiveDate: new Date(record.FDate),
       materialModel: record.FMateriaModel,
       billTypeCode: record.FBillTypeID_FNumber,
       auxPropCode: record.FAuxPropId,
       ownerTypeCode: record.FOwnerTypeIdHead,
       ownerCode: record.FOwnerIdHead_FNumber
   }));
}

数据写入

经过清洗和转换后的数据可以写入目标数据库或其他存储系统。在轻易云平台上,可以通过配置相应的数据写入任务来实现这一过程。

{
   targetDatabase: 'myDatabase',
   targetTable: 'receiveBills',
   dataMapping: {
       billNo: 'bill_no',
       documentStatus: 'document_status',
       materialCode: 'material_code',
       stockOrgCode: 'stock_org_code',
       materialName: 'material_name',
       receiveDate: 'receive_date',
       materialModel: 'material_model',
       billTypeCode:'bill_type_code',
       auxPropCode:'aux_prop_code',
       ownerTypeCode:'owner_type_code',
       ownerCode:'owner_code'
   }
}

通过上述步骤,我们可以高效地从金蝶云星空获取收料通知单的数据,并进行必要的清洗和转换,最终将其写入目标存储系统。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 打通企业微信数据接口

利用轻易云数据集成平台进行ETL转换与写入目标平台的技术案例

在数据集成过程中,ETL(Extract, Transform, Load)是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入目标平台。

数据请求与清洗

在开始ETL过程之前,首先需要从源系统中提取数据。在本案例中,我们从金蝶系统中查询收料通知单。假设我们已经完成了这一阶段,并获得了原始数据。接下来,我们将重点放在如何将这些数据转换为目标平台——轻易云集成平台API接口所能接收的格式,并写入目标平台。

数据转换

  1. 解析原始数据:首先,我们需要解析从金蝶系统中获取的原始收料通知单数据。假设我们得到的数据格式如下:

    {
        "receiptNoticeId": "12345",
        "supplier": "ABC供应商",
        "items": [
            {"itemCode": "A001", "quantity": 100},
            {"itemCode": "B002", "quantity": 200}
        ],
        "date": "2023-10-01"
    }
  2. 定义目标格式:根据轻易云集成平台API接口的要求,我们需要将上述数据转换为特定格式。例如,假设目标格式如下:

    {
        "operationType": "RECEIPT_NOTICE",
        "data": {
            "id": "12345",
            "supplierName": "ABC供应商",
            "itemsList": [
                {"code": "A001", "qty": 100},
                {"code": "B002", "qty": 200}
            ],
            "receivedDate": "2023-10-01"
        }
    }
  3. 实现转换逻辑:使用编程语言(如Python)实现上述转换逻辑。以下是一个简单的Python代码示例:

    def transform_data(source_data):
        transformed_data = {
            "operationType": "RECEIPT_NOTICE",
            "data": {
                "id": source_data["receiptNoticeId"],
                "supplierName": source_data["supplier"],
                "itemsList": [
                    {"code": item["itemCode"], "qty": item["quantity"]} for item in source_data["items"]
                ],
                "receivedDate": source_data["date"]
            }
        }
        return transformed_data
    
    # 示例调用
    source_data = {
        "receiptNoticeId": "12345",
        "supplier": "ABC供应商",
        "items": [
            {"itemCode": "A001", "quantity": 100},
            {"itemCode": "B002", "quantity": 200}
        ],
        "date": "2023-10-01"
    }
    
    transformed_data = transform_data(source_data)
    print(transformed_data)

数据写入

  1. 配置元数据:根据提供的元数据配置,轻易云集成平台API接口的相关信息如下:

    {
        "api":"写入空操作",
        "effect":"EXECUTE",
        "method":"POST",
        "idCheck":true
    }
  2. 构建HTTP请求:使用HTTP库(如requests)构建并发送POST请求,将转换后的数据写入目标平台。以下是一个Python代码示例:

    import requests
    
    url = 'https://api.qingyiyun.com/write'
    
    headers = {
        'Content-Type': 'application/json'
    }
    
    def write_to_target_platform(data):
        response = requests.post(url, json=data, headers=headers)
    
        if response.status_code == 200:
            print("Data written successfully")
        else:
            print(f"Failed to write data: {response.status_code}, {response.text}")
    
    # 示例调用
    write_to_target_platform(transformed_data)

通过以上步骤,我们成功地将从金蝶系统中提取的收料通知单数据,经过ETL转换后,通过轻易云集成平台API接口写入了目标平台。这一过程展示了如何利用轻易云数据集成平台,实现不同系统间的数据无缝对接和高效处理。 企业微信与ERP系统接口开发配置

更多系统对接方案