轻易云平台助力实现领星调整单与金蝶云星空的ETL转换

  • 轻易云集成顾问-何语琴

领星ERP数据集成到金蝶云星空:领星调整单=>其他出库单(盘亏)案例分享

在现代企业的运营过程中,实时、精准的数据流通是提升业务效率和管理精度的关键。本文将深入探讨如何通过轻易云数据集成平台,将領星ERP系统中的调整单数据无缝对接至金蝶云星空系统,实现高效的数据同步与库存管理。本次案例聚焦于“领星调整单 => 其他出库单(盘亏)”业务场景,对整个技术实现过程进行详细分享。

首先,在此项目中,为确保领星ERP数据不漏单,我们使用了/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList API接口,以定时可靠地抓取最新的调整单数据。在此过程中,我们处理了API分页和限流问题,保证了大批量数据能够连续稳定地获取。

其次,要将上述获取的数据快速写入到金蝶云星空中,通过调用其batchSave API,我们实施了批量操作,大幅缩短了每条记录独立传输所需时间。同时对于不同系统之间存在的数据格式差异进行了有效转换,并采用定制化映射规则,使得传输后的数据显示准确无误。

除此之外,还解决了一系列可能遇到的问题,包括异常处理与错误重试机制。通过细致配置日志记录以及实时监控功能,确保在任何时候都能及时发现并修正潜在的问题,从而最大程度上保障数据对接过程的安全性和可靠性。

本文开篇从几个关键点切入,即如何调用API接口、处理分页限流问题,以及怎样进行批量写入等,使读者能够直观理解我们面对挑战时采取的方法和策略。接下来我们将具体介绍每一步骤的技术细节及其实现方式,以期为有类似需求或遇到相同问题的从业者提供借鉴与参考。 如何开发企业微信API接口

调用领星ERP接口获取并加工数据的技术案例

在数据集成生命周期的第一步,我们需要调用源系统领星ERP的接口/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList来获取调整单数据,并对其进行加工处理。以下是详细的技术实现过程。

接口调用配置

首先,我们需要配置API调用的元数据。根据提供的元数据配置,API的基本信息如下:

  • API路径: /erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList
  • 请求方法: POST
  • 主要字段:
    • order_sn: 用于标识订单编号
    • search_date_type: 时间类型,固定值为2
    • start_date: 开始日期,使用上次同步时间
    • end_date: 结束日期,使用当前时间
    • adjust_status: 单据状态,固定值为20
    • type: 调整类型(可选)
    • page: 当前页码,初始值为1
    • page_size: 每页记录数,固定值为20

请求参数设置

在实际调用过程中,需要动态生成请求参数。以下是一个示例请求体:

{
    "search_date_type": "2",
    "start_date": "{{LAST_SYNC_TIME|date}}",
    "end_date": "{{CURRENT_TIME|date}}",
    "adjust_status": "20",
    "type": "",
    "page": "1",
    "page_size": "20"
}

其中,{{LAST_SYNC_TIME|date}}{{CURRENT_TIME|date}}分别代表上次同步时间和当前时间,这两个参数需要在实际调用时进行替换。

数据过滤与清洗

在获取到数据后,需要对数据进行过滤和清洗。根据元数据配置中的条件部分,我们只需要保留那些调整数量小于0的记录:

"condition":[[{"field":"item_list.adjustment_valid_num","logic":"lt","value":"0"}]]

这意味着我们需要遍历返回的数据列表,并仅保留那些item_list.adjustment_valid_num < 0的记录。

数据转换与写入

在完成数据过滤后,需要将符合条件的数据进行转换,并写入目标系统。在这个过程中,可以根据业务需求对字段进行重新映射或格式化。例如,将源系统中的字段名转换为目标系统所需的字段名。

以下是一个简单的数据转换示例:

{
    "source_order_sn": "order_sn",
    "adjustment_quantity": "item_list.adjustment_valid_num",
    // 更多字段映射...
}

通过这种方式,可以确保源系统的数据能够无缝地集成到目标系统中。

异常处理与重试机制

在实际操作中,可能会遇到各种异常情况,例如网络超时、接口返回错误等。因此,需要设计合理的异常处理与重试机制。例如,当接口调用失败时,可以记录错误日志,并在一定时间后自动重试。此外,还可以设置最大重试次数,以避免无限循环重试。

实时监控与日志记录

为了确保整个数据集成过程透明可控,可以利用轻易云平台提供的实时监控功能,对每个环节进行监控。同时,通过日志记录,可以追踪每次接口调用的详细信息,包括请求参数、响应结果、处理时间等。这些信息对于排查问题和优化流程非常重要。

通过以上步骤,我们可以高效地调用领星ERP接口获取调整单数据,并对其进行加工处理,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也为后续的数据分析和决策提供了可靠的数据基础。 数据集成平台API接口配置

轻易云数据集成平台:ETL转换与金蝶云星空API接口对接

在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台能够接收的格式。本文将深入探讨如何使用轻易云数据集成平台,将领星调整单数据转换为金蝶云星空API接口可接受的其他出库单(盘亏)格式,并最终写入目标平台。

数据请求与清洗

首先,我们需要从源平台获取调整单数据。这一步骤涉及到从领星系统中提取相关的调整单信息,包括单据编号、库存组织、日期、物料编码、收货仓库、实收数量等字段。假设我们已经完成了这部分工作,接下来就是将这些数据进行转换,以符合金蝶云星空API接口的要求。

数据转换与写入

为了实现数据转换和写入,我们需要配置元数据。以下是一个详细的元数据配置示例:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","value":"{order_sn}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKLX022"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"107"},
    {"field":"FDate","label":"日期","type":"string","value":"{adjustment_time}"},
    {
      "field":"FEntity",
      "label":"明细信息",
      "type":"array",
      "children":[
        {"field":"FMATERIALID","label":"物料编码","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{item_list.sku}}","parent":"FEntity"},
        {"field":"FSTOCKID","label":"收货仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{wid}","parent":"FEntity"},
        {"field":"FQty","label":"实收数量","type":"string","value":"'abs({{item_list.adjustment_valid_num}})'", "parent": "FEntity"}
      ],
      "value": "item_list"
    },
    {
      "field": "FDEPTID",
      "label": "部门",
      "type": "object",
      "default": "0002",
      "children":[
        {"field": "FNumber", 
         "label": "FNumber", 
         "type": "string", 
         "value": "_mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FDept where={\"content.FName\":{\"$eq\":\"{create_realname}\"}}"}
        }
      ]
    },
    {"field": "FNOTE", 
     "label": "备注", 
     "type": string, 
     "value": "{remark}"
    },
    {
      field: FPickerId,
      label: 领料人,
      type: object,
      children:[
        { field: FStaffNumber, label: FStaffNumber, type: string, value: _mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FNumber where={"content.FName":{"$eq"="{create_realname}"}}}
      ]
    },
    {
       field: FPickOrgId,
       label: 领用组织,
       type: object,
       children:[
         { field: FNumber, label: FNumber, type: string, value: 107}
       ]
     }
   ],
   otherRequest:[
     { field: FormId, label: 业务对象表单Id, type: string, value: STK_MisDelivery},
     { field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: true},
     { field: Operation, label: 执行的操作, type:string,value:"Save"},
     { field:IsAutoSubmitAndAudit,label:"提交并审核",type:"bool",value:true}
   ]
}

核心字段解析与处理

  1. 单据编号(FBillNo):直接从源数据中的order_sn字段映射。
  2. 单据类型(FBillTypeID):固定值QTCKLX022,通过ConvertObjectParser解析为金蝶云星空所需格式。
  3. 库存组织(FStockOrgId):固定值107,同样通过ConvertObjectParser解析。
  4. 日期(FDate):直接映射源数据中的adjustment_time字段。
  5. 明细信息(FEntity)
    • 物料编码(FMATERIALID):映射源数据中的SKU,通过ConvertObjectParser解析。
    • 收货仓库(FSTOCKID):映射源数据中的仓库ID,通过ConvertObjectParser解析。
    • 实收数量(FQty):使用函数计算绝对值,以确保数量为正。
  6. 部门(FDEPTID):通过MongoDB查询获取部门编号。
  7. 备注(FNOTE):直接映射源数据中的备注字段。
  8. 领料人(FPickerId):通过MongoDB查询获取领料人编号。
  9. 领用组织(FPickOrgId):固定值,直接设置为107.

API调用与写入

配置好元数据后,通过轻易云的数据集成平台,可以自动生成并发送HTTP POST请求至金蝶云星空API接口,实现批量保存操作。具体调用方式如下:

import requests

url = 'https://api.kingdee.com/batchSave'
headers = {'Content-Type': 'application/json'}
data = {
   # 根据上文配置的元数据信息填充实际的数据
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
   print("Data successfully saved to Kingdee Cloud.")
else:
   print(f"Failed to save data. Status code: {response.status_code}, Response message: {response.text}")

通过以上步骤,我们实现了从领星系统到金蝶云星空系统的数据ETL转换和写入。此过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。 如何开发金蝶云星空API接口