ETL转换与API映射:从金蝶到钉钉的数据集成解决方案

  • 轻易云集成顾问-潘裕

案例分享:金蝶云星空数据集成到钉钉的实践

在采购业务流程中,实现系统间的数据无缝对接,能够显著提升工作效率和数据准确性。本案例聚焦于如何通过轻易云数据集成平台,将金蝶云星空中的采购订单信息精准地同步到钉钉,实现高效的数据流转。

首先,我们需要解决的是稳定且实时获取金蝶云星空接口的采购订单数据。使用executeBillQuery API,可以定时可靠地抓取指定条件下的订单信息。在实现过程中,为避免遗漏,对分页和限流问题进行了细致处理,确保所有记录均能完整获取。

接下来是批量写入大量数据至钉钉。为此,采用了topapi/processinstance/create API来完成任务,但需注意两系统间的数据格式差异,并进行必要的转换与映射。同时,通过定制化的数据映射策略,使得不同字段之间配合更加契合,从而保障了业务逻辑的一致性。

此外,在对接过程中出现异常情况是不可避免的。因此,为提高健壮性,还设计了一套错误重试机制。当发生网络波动或接口响应超时等异常时,该机制可及时捕捉并自动重新发起请求,保证最终每条记录都能顺利传输至目标系统。同时,通过引入实时监控与日志记录功能,可以随时了解各环节运行状态,有助于快速定位和解决潜在问题。

综合以上技术要点,本案例成功实现了将金蝶云星空中的采购订单高效、安全、完整地集成到钉钉,为企业运营提供了可靠的数据支撑与决策依据。在后续部分,将详细介绍整个实施方案及相关配置步骤。 数据集成平台API接口配置

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

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

接口配置与调用

首先,我们需要配置并调用金蝶云星空的executeBillQuery接口。根据提供的元数据配置,我们可以看到该接口采用POST方法,主要用于查询(effect为QUERY)。

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "{FBillNo}-{FModifyDate}",
  "id": "{FPOOrderEntry_FEntryId}-{FModifyDate}",
  "name": "FBillNo",
  "idCheck": true,
  ...
}

请求参数设置

请求参数是接口调用成功与否的关键。我们需要根据业务需求和元数据配置来设置请求参数。以下是一些关键字段及其描述:

  • FormId: 设置为业务对象表单Id,即"PUR_PurchaseOrder"。
  • FilterString: 用于过滤条件,如FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'
  • FieldKeys: 查询字段集合,通过解析器将数组转换为字符串。
  • LimitStartRow: 分页参数,用于控制返回的数据量。

示例请求体如下:

{
  "FormId": "PUR_PurchaseOrder",
  "FilterString": "FModifyDate>='2023-01-01' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'",
  "FieldKeys": [
    "FID", 
    "FBillNo", 
    "FDate", 
    ...
  ],
  "Limit": 100,
  "StartRow": 0
}

数据清洗与转换

在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。这一步骤包括但不限于:

  1. 字段映射:将源系统字段映射到目标系统字段。例如,将金蝶云星空的FBillNo映射到钉钉系统中的订单编号。
  2. 数据格式转换:如日期格式、数值精度等转换。
  3. 数据过滤:根据业务规则过滤不需要的数据。

示例代码如下:

def clean_and_transform(data):
    cleaned_data = []
    for record in data:
        transformed_record = {
            'order_id': record['FBillNo'],
            'order_date': transform_date(record['FDate']),
            'supplier': record['FSupplierId_FNumber'],
            ...
        }
        cleaned_data.append(transformed_record)
    return cleaned_data

def transform_date(date_str):
    # 假设日期格式为YYYY-MM-DD,将其转换为目标系统所需格式
    return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y')

自动填充响应

轻易云平台支持自动填充响应(autoFillResponse),这意味着在调用接口后,平台会自动解析并填充返回的数据,无需手动处理。这极大地简化了开发工作,提高了效率。

{
  "autoFillResponse": true
}

通过上述步骤,我们可以高效地从金蝶云星空获取采购订单数据,并进行必要的清洗和转换,为后续的数据写入做好准备。这一过程不仅确保了数据的一致性和准确性,还提升了整体业务流程的透明度和效率。 金蝶与CRM系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入钉钉API接口的技术案例

在数据集成生命周期的第二步,我们将重点讨论如何将已经集成的源平台数据进行ETL转换,并转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。本文将详细探讨系统接口和数据集成的特性。

钉钉API接口配置

根据提供的元数据配置,我们需要将采购订单的数据通过ETL转换后,写入到钉钉API接口topapi/processinstance/create。以下是该API接口的具体配置:

  • API URL: topapi/processinstance/create
  • 请求方法: POST
  • ID检查: true
  • 请求参数:
    • process_code: 钉钉表单id,从审批流程编辑页面的URL中获取。
    • originator_user_id: 发起人userid,从源数据中查找。
    • dept_id: 发起人所属部门id,从源数据中查找。
    • form_component_values: 表单控件,包括单据编号、单据类型、采购类型、供应商、结算币别、部门及表格等信息。

数据转换与映射

在进行ETL转换时,需要特别注意字段的映射关系。以下是具体字段的映射和处理方式:

  1. process_code:

    "field": "process_code",
    "value": "PROC-D055D73F-C76C-4288-BB21-BA39B81A4B76"

    这个字段是固定值,可以直接从配置中获取。

  2. originator_user_id:

    "field": "originator_user_id",
    "value": "_findCollection find userid from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}"

    需要从源数据中查找发起人的userid,这里使用了一个查找函数_findCollection,根据发起人名称(FCreatorId_FName)来获取对应的userid。

  3. dept_id:

    "field": "dept_id",
    "value": "_findCollection find dept_id_list.0 from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}"

    同样需要从源数据中查找发起人所属部门id,如果发起人属于根部门,则传递值为-1

  4. form_component_values: 包含多个子字段,需要逐一映射:

    • 单据编号(FBillNo)

      "field": "单据编号",
      "value": "{FBillNo}"
    • 单据类型(FBillTypeID_FName)

      "field": "单据类型",
      "value": "{FBillTypeID_FName}"
    • 供应商(FSupplierId_FName)

      "field": "供应商",
      "value": "{FSupplierId_FName}"
    • 结算币别(FSettleCurrId_FName)

      "field": "结算币别",
      "value": "{FSettleCurrId_FName}"
    • 部门(固定值:财务部)

      "field": "部门",
      "value": "财务部"
  5. 表格字段:

    表格字段包含多个子项,需要处理列表中的每一项:

    • 物料编码(FMaterialId_FNumber)

      "field": "物料编码",
      "value": "{{list.FMaterialId_FNumber}}"
    • 物料名称(FMaterialId_FName)

      "field": "物料名称",
      "value": "{{list.FMaterialId_FName}}"
    • 规格型号(FModel)

      "field": "规格型号",
      "value": "{{list.FModel}}"
    • 采购数量(FQty)

      "field": "采购数量",
      "value": "{{list.FQty}}"
    • 含税单价(FTaxPrice)

      "field": "含税单价",
      "value": "{{list.FTaxPrice}}"
    • 金额(FAllAmount)

      {
      field: '金额',
      value: '{FAllAmount}'
      }

实际操作步骤

  1. 提取和清洗数据:从源平台提取采购订单相关的数据,并进行必要的数据清洗和预处理,以确保数据质量。

  2. 构建请求体:根据上述映射关系,构建符合钉钉API要求的请求体。这里需要特别注意数组和对象嵌套结构的正确性。

  3. 发送请求:使用HTTP POST方法,将构建好的请求体发送到钉钉API接口。可以使用轻易云提供的HTTP客户端功能来实现这一过程。

  4. 处理响应:接收并处理来自钉钉API接口的响应,根据响应结果进行相应操作,如记录日志、更新状态等。

通过以上步骤,我们可以实现从金蝶系统到钉钉系统的数据无缝对接,确保数据在不同系统间高效流转。 钉钉与WMS系统接口开发配置

更多系统对接方案