ETL转换:强化系统间数据集成,从吉客云到金蝶云星空

  • 轻易云集成顾问-张妍琪

技术案例:吉客云数据集成到金蝶云星空的实现

在本次技术案例中,我们将详细探讨如何将吉客云的数据集成到金蝶云星空系统,方案名称为JY-BDS其他出库单。本案例重点介绍通过API接口erp.storage.goodsdocout从吉客云抓取数据,并使用batchSave接口批量写入金蝶云星空的具体实现过程。

首先,为了确保整个数据处理链路的高效运转,我们需要解决几个关键性技术问题:

  1. 定时可靠的数据抓取:我们采用定时器任务,每隔固定时间段(如每小时)调用吉客云接口 erp.storage.goodsdocout,确保可以及时获取最新的数据。

  2. 批量数据快速写入:利用轻易平台支持的高吞吐量能力,通过优化传输并行度和分区策略,将大批量的数据快速稳定地写入至金蝶云星空。借助其 batchSave API 接口,高效完成批量保存操作。

  3. 分页与限流处理:面对大量数据,必须处理好分页与限流问题,以防止API超时或数据库负载过重。针对这一点,我们设计了合理的分页机制,并引入动态速率限制来调节请求频率。

  4. 自定义数据转换逻辑

    • 数据格式差异是跨平台集成中的常见挑战之一。在本方案中,通过预先定义好的映射规则,将吉客云输出字段适配为符合金蝶标准的数据结构。
    • 利用轻易提供的可视化工具配置转换逻辑,使得开发人员能够直观地管理和调整转换规则,提高开发效率并减少人为错误。
  5. 监控与异常处理机制

    • 提供实时监控功能,跟踪各个环节的数据流动和状态,一旦发现异常情况立即告警。
    • 实现完整的日志记录体系,不仅记录正常操作,还详尽记载任何错误发生的位置及原因,从而增强系统可维护性。
    • 针对可能出现的临时网络异常、服务不可用等问题,引入重试机制保证任务执行成功率,并且在多次失败后进行人工干预提醒。

结合以上几个方面,本次集成实践不仅有效提高了工作效率,而且保障整个流程安全、稳定运行。接下来,我们将深入解析每一个技术细节,以及如何一步步实施这些关键步骤。 泛微OA与ERP系统接口开发配置

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

在轻易云数据集成平台中,生命周期的第一步是调用源系统接口以获取数据。本文将详细探讨如何通过调用吉客云接口erp.storage.goodsdocout来获取并加工数据,重点介绍元数据配置和具体实现步骤。

元数据配置解析

首先,我们需要理解元数据配置metadata,它定义了如何调用API以及请求参数的细节:

{
  "api": "erp.storage.goodsdocout",
  "method": "POST",
  "number": "goodsdocNo",
  "id": "recId",
  "pagination": {"pageSize": 50},
  "idCheck": true,
  "request": [
    {"field": "pageIndex", "label": "分页页码", "type": "string"},
    {"field": "pageSize", "label": "分页页数", "type": "string", "value": "50"},
    {"field": "goodsDocNo", "label": "出库单号", "type": "string"},
    {"field": "startDate", "label": "创建时间的起始时间", "type": "string", 
        "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field": "endDate", "label":"创建时间的结束时间","type":"string",
        "value":"{{CURRENT_TIME|datetime}}"},
    {"field":"inouttype","label":"类型","type":"string","describe":
        "201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货 
        206生产领料 207组装拆卸出库 208翻新出库 209报废出库 
        210残次品出库 211倒冲出库 212 包材出库 
        215维修还厂 231成本调整出库","value":"204"},
    {"field":"sourceBillNo","label":"来源单号","type":"string"},
    {"field":"warehouseCode","label":"仓库编号","type":"string"},
    {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
    {"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
    {"field":"userName","label":"创建人名称","type":"string"}
  ]
}

调用API获取数据

根据上述元数据配置,我们需要构建一个POST请求来调用吉客云的erp.storage.goodsdocout接口。以下是具体步骤:

  1. 构建请求体: 请求体包含分页信息、时间范围、类型等参数。注意,startDateendDate使用动态变量来表示上次同步时间和当前时间。

    {
     "pageIndex": "{{PAGE_INDEX}}",
     "pageSize": "{{PAGE_SIZE}}",
     ...
     //其他参数
    }
  2. 处理分页: 平台支持分页机制,通过设置每页大小为50条记录,并逐页请求直到没有更多数据为止。

  3. 发送请求: 使用HTTP POST方法发送请求,并接收响应数据。

  4. 检查ID重复: 根据配置中的idCheck: true,需要对返回的数据进行ID重复性检查,以确保每条记录唯一。

数据清洗与转换

在获取到原始数据后,需要进行清洗和转换,以便后续处理:

  1. 字段映射: 将API返回的数据字段映射到目标系统所需的字段。例如,将goodsDocNo映射为目标系统中的订单编号。

  2. 格式转换: 对日期、数值等字段进行格式转换,确保符合目标系统要求。例如,将日期格式从YYYY-MM-DD转换为YYYYMMDD。

  3. 过滤无效数据: 根据业务需求过滤掉无效或不必要的数据。例如,只保留状态为“已完成”的订单记录。

实现代码示例

以下是一个简化的Python代码示例,用于演示如何调用API并处理返回的数据:

import requests
import datetime

# 配置参数
url = 'https://api.jikexun.com/erp.storage.goodsdocout'
headers = {'Content-Type': 'application/json'}
params = {
    'pageIndex': '1',
    'pageSize': '50',
    'startDate': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'),
    'endDate': datetime.datetime.now().strftime('%Y-%m-%d'),
    'inouttype': '204'
}

# 发起POST请求
response = requests.post(url, json=params, headers=headers)
data = response.json()

# 数据清洗与转换
cleaned_data = []
for record in data['records']:
    cleaned_record = {
        'order_no': record['goodsDocNo'],
        'date': record['createTime'].replace('-', ''),
        # 更多字段映射...
    }
    cleaned_data.append(cleaned_record)

# 输出清洗后的数据
print(cleaned_data)

通过上述步骤,我们成功地调用了吉客云接口获取原始数据,并进行了必要的数据清洗和转换,为后续的数据写入和处理做好准备。这一过程展示了轻易云平台在异构系统集成中的强大能力。 打通金蝶云星空数据接口

轻易云数据集成平台生命周期的第二步:ETL转换与写入金蝶云星空API接口

在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一环。本文将详细介绍如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。

接口配置与元数据解析

在轻易云数据集成平台中,我们需要配置元数据以便正确调用金蝶云星空的API接口。以下是元数据配置的详细解析:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {
      "field": "FBillNo",
      "label": "单据编号",
      "type": "string",
      "describe": "单据编号",
      "value": "{goodsdocNo}"
    },
    {
      ...
    }
  ],
  ...
}

数据字段映射与转换

  1. 单据编号(FBillNo)

    • 类型:字符串
    • 描述:单据编号
    • 映射:{goodsdocNo}
  2. 单据类型(FBillTypeID)

    • 类型:字符串
    • 描述:单据类型
    • 转换器:ConvertObjectParser
    • 参数:FNumber
    • 固定值:QTCKD01_SYS
  3. 库存组织(FStockOrgId)

    • 类型:字符串
    • 描述:组织
    • 转换器:ConvertObjectParser
    • 参数:FNumber
    • 映射规则:
      _findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}
  4. 日期(FDate)

    • 类型:字符串
    • 描述:日期
    • 转换函数:
      _function FROM_UNIXTIME( ( {inOutDate} / 1000 ) ,'%Y-%m-%d %T' )
  5. 货主(FOwnerIdHead)

    • 类型:字符串
    • 描述:多类别基础资料
    • 转换器:ConvertObjectParser
    • 参数:FNumber
    • 映射:{companyCode}
  6. 明细信息(FEntity): 包含多个子字段,如物料编码、零售条形码、实发数量、发货仓库和备注等。

API请求构建

根据上述元数据配置,我们可以构建一个完整的API请求体:

{
  "FormId": "STK_MisDelivery",
  "IsAutoSubmitAndAudit": true,
  "IsVerifyBaseDataField": true,
  "Operation": "Save",
  ...
}

其中,明细信息部分需要特别注意其数组结构和嵌套关系。例如:

"FEntity":[ 
    {
        "FMaterialId":"material_001",
        ...
    },
    {
        ...
    }
]

数据写入与验证

在完成ETL转换后,将生成的数据通过POST方法发送到金蝶云星空的batchSave API接口。为了确保数据写入的准确性和完整性,需要进行以下步骤:

  1. 验证基础资料有效性: 设置 IsVerifyBaseDataFieldtrue,确保所有基础资料字段有效。

  2. 自动提交并审核: 设置 IsAutoSubmitAndAudittrue,实现自动提交和审核功能。

  3. 检查返回结果: 接收API返回结果,检查是否有错误信息或异常情况,并进行相应处理。

通过上述步骤,我们可以高效地将源平台的数据转换并写入到金蝶云星空系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 企业微信与OA系统接口开发配置

更多系统对接方案