跨平台数据对接:金蝶与黑湖小工单的ETL方案

  • 轻易云集成顾问-林峰

2金蝶物料同步到小工单产品:数据集成技术案例分享

在处理企业生产管理系统的数据对接项目中,确保各业务环节的协调一致和信息流动的无缝衔接至关重要。本次我们聚焦于一个具体实例——金蝶云星空与黑湖小工单系统的数据集成,通过该案例展示如何有效利用API接口实现两大平台之间的数据互通。

背景描述 本次方案的重点是将金蝶云星空中的物料数据(BillData)高效且准确地同步到黑湖小工单产品中,实现跨系统数据传递。核心任务包括从金蝶云星空抓取指定的物料信息,并通过实时写入、批量更新等方式,将这些数据导入到黑湖的小工单模块内。

技术要点解析

  1. API接口调用

    • 金蝶云星空数据获取:我们使用了executeBillQuery API来定时抓取最新的物料信息。为了保证不漏单以及分页请求处理,我们设置了可靠的查询策略。
    • 黑湖小工单数据写入:采用/api/dytin/external/product/create API,大量的数据能够以高吞吐量模式快速写入,提高了操作效率并减少延迟。
  2. 统一视图与控制台 金蝶云星空提供了一套完善的API资产管理功能,使得在统一视图下可以全面掌握所有接口调用情况。这有助于监控每个步骤,从而及时发现问题并优化配置资源,保障整个集成过程平稳进行。

  3. 自定义转换逻辑与格式适配 在实现跨平台交互时,需要特别关注两端数据格式差异的问题。为此,我们设计了一些自定义的数据转换逻辑,以确保来自金蝶的数据能够正确映射到黑湖的小工单产品结构上。同时,还解决了分页提取过程中可能遇到的限流问题。

  4. 实时监控与异常检测 为提高稳定性,我们引入集中化监控和告警系统,实时跟踪每一项任务状态及性能,这为迅速响应潜在故障提供了有力支持。此外,通过异常检测机制,可以即时捕捉和处理任何非预期事件,防止错误积累导致更大的问题发生。

如何对接用友BIP接口

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

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

接口配置与请求参数

金蝶云星空的executeBillQuery接口用于查询业务单据,支持POST请求。以下是该接口的元数据配置:

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FNumber",
  "id": "FNumber",
  "idCheck": true,
  "request": [
    {"field": "FMATERIALID", "label": "FMATERIALID", "type": "string", "describe": "111", "value": "FMATERIALID"},
    {"field": "FNumber", "label": "FNumber", "type": "string", "describe": "111", "value": "FNumber"},
    {"field": "FName", "label": "FName", "type": "string", "describe": "111", "value": "FName"},
    {"field": "FSpecification", "label": "FSpecification", "type": "string", "describe": "", 111, value: FSpecification},
    // ... 其他字段省略
  ],
  // ... 其他配置省略
}

在实际操作中,我们需要根据业务需求设置请求参数。以下是一些关键参数的说明:

  • FormId: 必须填写金蝶的表单ID,例如物料表单ID为BD_MATERIAL
  • FieldKeys: 指定需要返回的字段列表,例如"FMATERIALID,FNumber,FName,FSpecification".
  • FilterString: 用于过滤查询结果的条件表达式。例如,过滤最近同步时间之后的数据:"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FMaterialGroup.fnumber in ('01','02','05','07','04')"
  • Limit, StartRow, TopRowCount: 分页参数,用于控制查询结果的分页。

请求示例

以下是一个完整的请求示例:

{
  FormId: 'BD_MATERIAL',
  FieldKeys: 'FMATERIALID,FNumber,FName,FSpecification',
  FilterString: 'FApproveDate>='2023-01-01' and FMaterialGroup.fnumber in ('01','02','05','07','04')',
  Limit: '100',
  StartRow: '0'
}

通过上述配置,我们可以向金蝶云星空发送POST请求,获取符合条件的物料信息。

数据处理与清洗

在接收到金蝶云星空返回的数据后,需要对数据进行初步清洗和处理。主要包括以下几个步骤:

  1. 字段映射:将金蝶返回的数据字段映射到目标系统所需的字段。例如,将FMATERIALID映射为目标系统中的物料ID。
  2. 数据格式转换:根据目标系统要求,对数据格式进行转换。例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
  3. 数据过滤:进一步过滤不符合业务规则的数据。例如,剔除禁用状态(FForbidStatus='B')的物料。

示例代码

以下是一个简单的数据处理示例代码:

def process_material_data(data):
    processed_data = []
    for item in data:
        if item['FForbidStatus'] != 'B': # 排除禁用状态的物料
            processed_item = {
                'material_id': item['FMATERIALID'],
                'number': item['FNumber'],
                'name': item['FName'],
                'specification': item['FSpecification'],
                # ... 映射其他字段
            }
            processed_data.append(processed_item)
    return processed_data

# 假设从金蝶获取到的数据存储在变量 raw_data 中
cleaned_data = process_material_data(raw_data)

通过上述步骤,我们可以确保从金蝶云星空获取到的数据经过清洗和处理后,能够无缝对接到目标系统中。

总结

调用源系统接口并获取数据是数据集成过程中的第一步,通过轻易云数据集成平台,我们可以高效地调用金蝶云星空的executeBillQuery接口,并对返回的数据进行清洗和加工,为后续的数据转换与写入奠定基础。 金蝶与外部系统打通接口

将金蝶物料数据转换并写入黑湖小工单API接口

在数据集成的生命周期中,ETL(Extract, Transform, Load)是关键的一步。在这一过程中,我们需要将从源平台(金蝶)获取的数据进行清洗和转换,以符合目标平台(黑湖小工单API接口)的格式要求。以下将详细介绍如何利用轻易云数据集成平台实现这一过程。

数据请求与清洗

首先,我们从金蝶系统中提取物料数据。假设我们已经完成了数据请求和初步清洗,接下来我们需要将这些数据转换为黑湖小工单API接口所需的格式。

数据转换与写入

根据提供的元数据配置,我们需要将金蝶物料数据字段映射到黑湖小工单API接口的字段。具体配置如下:

{
  "api": "/api/dytin/external/product/create",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "productCode",
      "label": "产品编号",
      "type": "string",
      "value": "{FNumber}"
    },
    {
      "field": "productName",
      "label": "产品名称",
      "type": "string",
      "value": "{FName}"
    },
    {
      "field": "productSpecification",
      "label": "产品规格",
      "type": "string",
      "value": "_function LEFT( '{FSpecification}' , 60)"
    },
    {
      "field": "unit",
      "label": "单位",
      "type": "string",
      "value": "{FBaseUnitId_FNumber}"
    }
  ]
}
字段映射说明
  1. 产品编号 (productCode)

    • 来源字段:{FNumber}
    • 类型:字符串
    • 描述:直接映射金蝶系统中的物料编号。
  2. 产品名称 (productName)

    • 来源字段:{FName}
    • 类型:字符串
    • 描述:直接映射金蝶系统中的物料名称。
  3. 产品规格 (productSpecification)

    • 来源字段:{FSpecification}
    • 类型:字符串
    • 描述:使用 _function LEFT( '{FSpecification}' , 60) 函数截取前60个字符,以确保规格信息长度符合目标平台要求。
  4. 单位 (unit)

    • 来源字段:{FBaseUnitId_FNumber}
    • 类型:字符串
    • 描述:直接映射金蝶系统中的基本单位编号。
数据转换示例

假设我们从金蝶系统中提取到以下一条物料记录:

{
  "FNumber": "1001",
  "FName": "螺丝钉",
  "FSpecification": "M4*20mm 六角头镀锌螺丝钉",
  "FBaseUnitId_FNumber": "PCS"
}

根据上述元数据配置,转换后的JSON请求体应为:

{
  "productCode": "1001",
  "productName": "螺丝钉",
  "productSpecification": "_function LEFT( 'M4*20mm 六角头镀锌螺丝钉' , 60)",
  // 实际执行时会被解析为:"M4*20mm 六角头镀锌螺丝钉"
  // 因为长度未超过60字符,所以不截断。
  // 如果超过60字符,则会被截断为前60个字符。
  // 比如:"M4*20mm 六角头镀锌螺丝钉" -> 实际上不变。

  // 假设有一个更长的规格:
  // FSpecification: '超长规格描述超长规格描述超长规格描述超长规格描述超长'
  // 则会被截断为:
  // productSpecification: '超长规格描述超长规格描述超长规格描述超长规'

  // 注意:此处展示的是函数形式,实际执行时会被解析并截断。

  // 在实际操作中,轻易云平台会自动处理该函数。

  // 如果需要手动模拟,可以使用JavaScript等语言进行测试:

// let spec = '超长规格描述超长规格描述超长规格描述超长规';
// let truncatedSpec = spec.substring(0,60);
// console.log(truncatedSpec); 
// 输出结果应为: 超长规格描述超长规格描述超长规格描述超长规

// 或者用Python:
# spec = '超长规格描述超长规格描述超长规格描述超长规'
# truncated_spec = spec[:60]
# print(truncated_spec)
# 输出结果应为: 超长规格描述超长规格描述超长规

// 类似工具可以帮助验证截断效果。

// SQL也可以类似处理:
-- SELECT LEFT('M4*20mm 六角头镀锌螺丝钉',60)
-- 返回结果: M4*20mm 六角头镀锌螺丝钉

// 确保在不同环境下都能正确截断。

"unit":"PCS"
}
数据写入

最终,我们通过POST方法将转换后的JSON请求体发送到黑湖小工单的API接口 /api/dytin/external/product/create。由于 idCheck 设置为 true,系统会检查是否存在重复记录,从而避免重复创建相同的产品信息。

通过这种方式,我们实现了从金蝶系统到黑湖小工单API接口的数据无缝对接,并确保数据格式和内容符合目标平台的要求。这不仅提升了数据处理效率,还保证了数据的一致性和准确性。 如何对接用友BIP接口

更多系统对接方案