轻易云平台的ETL转换与金蝶云星空API写入案例

  • 轻易云集成顾问-彭萍

简道云-采购入库单至金蝶云星空集成案例分享

在企业日常业务运营中,数据的流畅传递和准确处理是保障效率与决策质量的关键。在这个技术案例中,我们将详细解析如何通过轻易云数据集成平台,实现简道云中的采购入库单数据批量、高效且可靠地对接至金蝶云星空系统。本文将聚焦API接口调用及实际实现细节,全面展示整个系统对接过程。

简道云获取数据与分页处理

首先,通过/api/v2/app/{app_id}/entry/{entry_id}/data API接口,从简道云拉取采购入库单的数据。为了确保不遗漏任何记录,我们配置了定时任务以固定频率抓取新生成的数据,同时设计了分页机制,以避免因大规模数据量导致的请求限流问题。这其中需特别注意简道云API返回的数据格式,以及针对不同页码的数据提取逻辑。

GET /api/v2/app/{app_id}/entry/{entry_id}/data?page_size=100&page_index=1 HTTP/1.1
Host: example.jiandaoyun.com
Authorization: Bearer {access_token}

数据格式转换与映射

由于简道云和金蝶云星空采用不同的数据表示方式,实现顺利对接需要进行数据格式转换。在这一过程中,通过轻易平台自带的映射工具,将原始JSON结构转化为符合金蝶API要求的目标格式,并预先定义好字段对应关系。此外,为保证转换后的结果完全符合业务需求,还加入了一套验证机制,对每个字段进行校验和转换后检查。

批量写入到金蝶云星空

使用金蝶提供的batchSave API,可以高效地将已处理好的采购入库单信息批次写入到其数据库系统内。为了进一步提高写操作性能以及降低网络开销,每次提交尽可能包含多个记录,但亦需谨慎控制批次数量以防止超出系统承载能力。当出现异常时,也备有完善的错误重试机制,以确保最终一致性。

POST /k3cloud/api/KdAccountApi/batchSave HTTP/1.1
Host: example.kingdee.com.cn/api/
Content-Type: application/json

{
    "Model": [
        {
            // 金蝶目标数据对象结构...
        }
    ]
}

实时监控与日志记录

在整个集成流程中,利用实时监控功能,可以随时查看各环节运行状态,包括但不限于:成功提交数、失败次数、重试情况等。同时,详细日志记录能够帮助追踪并分析潜在问题,为进一步优化前端抓包及后台服务 如何开发金蝶云星空API接口

调用简道云接口获取并加工数据的技术实现

在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用简道云接口 /api/v2/app/{app_id}/entry/{entry_id}/data 获取并加工数据。

接口配置与请求参数

首先,我们需要配置元数据以便正确调用简道云的API接口。以下是元数据配置的关键部分:

{
  "api": "/api/v2/app/{app_id}/entry/{entry_id}/data",
  "effect": "QUERY",
  "method": "POST",
  "number": "_widget_1688523507704",
  "id": "_id",
  "idCheck": true,
  "request": [
    {"field": "appId", "label": "应用ID", "type": "string", "describe": "应用ID", "value": "642307c010703500087839ac"},
    {"field": "entryId", "label": "表单ID", "type": "string", "describe": "表单ID", "value": "64b22973f013bc0008234167"},
    {"field": "fields", "label": "需要查询的字段", "type": "string", 
        "describe": "多个字段以逗号隔开,默认不传入则输出所有字段",
        "parser":{"name":"StringToArray","params":","}},
    {"field": "limit", 
        "label":"每页返回数量","type":"string","describe":"查询的数据条数,1~100,默认10","value":"100"},
    {"field":"filter","label":"过滤参数","type":"object","describe":"过滤参数","children":[
      {"field":"rel","label":"过滤参数逻辑","type":"string","describe":"\"rel\": \"and\", \/\/ 或者 \"or\"","value":"and"},
      {"field":"cond_1","label":"自定义字段过滤","type":"object","describe":"自定义字段过滤","children":[
        {"field":"field","label":"过滤字段","type":"string","describe":"过滤字段","value":"updateTime"},
        {"field":"type","label":"过滤类型","type":"string","describe":"text\\number\\flowstate","value":"datetime"},
        {"field":"method","label":"过滤方法",
            "type":"string",
            "describe":
                "过滤方法;“not_empty”(不为空),“empty”(为空),“eq”(等于),“in”(等于任意一个),“range”(在x与y之间,并且包含x和y本身),“nin”(不等于任意一个),“ne”(不等于), “like”(文本包含)",
            "value":
                "range"},
        {"field":
            "value",
            "label":
                "过滤值",
            "type":
                "string",
            "describe":
                "过滤值",
            "parser":
                {"name":
                    "StringToArray",
                    "params":
                        ","},
            "value":
                "{{LAST_SYNC_TIME|datetime}}"}]},
      {"field":
        "cond_2",
        "label":
            "自定义过滤参数",
        "type":
            "object",
        "children":[
          {"field":
              field,
              label:
                field,
              type:
                string,
              value:
                FieldState},
          {"field":
              type,
              label:
                type,
              type:
                string,
              value:
                FieldState},
          {"field":
              method,
              label:
                method,
              type:
                string,
              value:
                in},
          {"field":
            value,
            label:
                value,
            type:
                string,
            value:
                StringToArray}}]}]},
  ],
  autoFillResponse: true,
  condition: [[{"field": "_widget_1689378656305", 
                logic: egt, 
                value: 2024-04-01timestamp}]]
}

请求参数解析

  1. 应用ID和表单ID:这些是调用API所需的基本参数,用于指定具体的数据源。
  2. 需要查询的字段:可以指定多个字段,以逗号隔开。通过 StringToArray 的解析器将字符串转换为数组。
  3. 每页返回数量:默认设置为100条,可以根据需求调整。
  4. 过滤参数
    • 逻辑关系:使用 andor 来组合多个条件。
    • 自定义字段过滤:例如,通过 updateTime 字段进行时间范围内的数据筛选。
    • 状态过滤:通过 FlowState 字段筛选特定状态的数据。

数据请求与清洗

在发送请求时,需要将上述配置转化为实际的HTTP请求。以下是一个示例请求体:

{
  "appId": "642307c010703500087839ac",
  "entryId": "64b22973f013bc0008234167",
  ...
}

通过POST方法发送请求后,系统会返回符合条件的数据集。此时,可以对返回的数据进行清洗和预处理,例如去除空值、格式转换等操作。

数据转换与写入

在获取并清洗数据后,需要将其转换为目标系统所需的格式,并写入到金蝶系统中。这一步通常涉及到数据映射、格式转换以及API调用等操作。

实践案例

假设我们需要从简道云中获取采购入库单,并将其导入到金蝶系统中:

  1. 配置元数据:如上所述,设置好应用ID、表单ID、查询字段和过滤条件。
  2. 发送请求:通过轻易云平台发送POST请求,获取符合条件的数据。
  3. 数据清洗:对返回的数据进行必要的处理,如去除空值、格式化日期等。
  4. 数据转换与写入:将处理后的数据映射到金蝶系统所需的格式,并通过API接口写入。

通过以上步骤,可以实现从简道云到金蝶系统的无缝数据集成,大大提高了业务流程的自动化程度和效率。 金蝶云星空API接口配置

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

在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何使用轻易云数据集成平台完成这一过程。

配置元数据

首先,我们需要配置元数据,以便正确地将源数据映射到金蝶云星空API接口所需的格式。以下是一个详细的元数据配置示例:

{
  "api": "batchSave",
  "method": "POST",
  "number": "code",
  "id": "code",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "单据类型",
      "parser": {
        "name": "ConvertObjectParser",
        "params": "FNumber"
      },
      "value": "RKD01_SYS"
    },
    {
      ...
    }
  ],
  ...
}

数据请求与清洗

在这个阶段,我们已经完成了从简道云获取采购入库单的数据。接下来,我们需要对这些数据进行清洗和预处理,以确保它们符合金蝶云星空API接口的要求。例如,将日期字段格式化,将供应商、仓库等基础资料转换为对应的编码等。

数据转换与写入

接下来,我们将清洗后的数据进行ETL转换,并通过配置好的元数据,将其写入到金蝶云星空API接口中。以下是具体步骤:

  1. 设置请求头和认证信息: 确保请求头包含必要的认证信息,如API密钥、Token等,以便成功调用金蝶云星空API。

  2. 构建请求体: 根据元数据配置,构建符合金蝶云星空API要求的JSON请求体。例如:

    {
     "FormId": "STK_InStock",
     ...
     "Model": {
       ...
       "FBillNo": "{_widget_1688523507704}",
       ...
       "FInStockEntry": [
         {
           ...
           "FMaterialId": "{{_widget_1602213743268._widget_1682143153350}}",
           ...
         }
       ]
     }
    }
  3. 发送HTTP POST请求: 使用HTTP客户端(如HttpClient、Axios等)发送POST请求,将构建好的JSON请求体提交到金蝶云星空API。

  4. 处理响应: 接收并解析API响应,根据响应结果判断操作是否成功。如果失败,记录错误信息并进行相应处理。

技术细节解析

  • ConvertObjectParser:用于将源系统中的基础资料(如供应商、仓库等)转换为目标系统中的编码。例如,将供应商名称转换为金蝶系统中的供应商编码。
  • datetime格式化:确保日期字段符合目标系统要求的格式,例如将“2023-10-01”转换为“20231001”。
  • 批量保存操作:通过batchSave方法,实现多个采购入库单记录的一次性批量保存,提高效率。

示例代码片段

以下是一个示例代码片段,展示如何使用JavaScript和Axios库实现上述过程:

const axios = require('axios');

const requestData = {
  FormId: 'STK_InStock',
  Model: {
    FBillNo: 'PO20231001',
    FDate: '20231001',
    FInStockEntry: [
      {
        FMaterialId: 'MAT001',
        FRealQty: '100',
        FStockId: 'WH001'
      }
    ]
  }
};

axios.post('https://api.kingdee.com/batchSave', requestData, {
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_TOKEN'
  }
})
.then(response => {
  console.log('Success:', response.data);
})
.catch(error => {
  console.error('Error:', error.response.data);
});

通过上述步骤和技术细节,我们可以高效地将简道云中的采购入库单数据转换并写入到金蝶云星空中,实现不同系统间的数据无缝对接。 用友BIP接口开发配置

更多系统对接方案