用友BIP销售退货数据的ETL转换与写入实践

  • 轻易云集成顾问-潘裕

2B-YS销售退货查询成功:用友BIP数据集成到轻易云集成平台

在本次技术分享中,我们将详细展示如何通过轻易云集成平台,将用友BIP系统的销售退货数据进行可靠、高效的整合,实现了跨系统的数据对接与实时监控。该案例名称为“2B-YS销售退货查询-成功”,着重解决了多个企业常见的数据处理挑战,如接口分页和限流问题、数据格式差异及异常处理机制等。

首先,针对大规模交易数据的高吞吐量需求,我们配置了专门的批量写入机制,有效提升了数据传输效率。这步操作确保大量销售退货记录能够迅速被转存至轻易云平台,显著缩短了整体处理时长。

为了保障每一条从用友BIP获取的数据都不遗漏,我么引入了一套定期可靠抓取API接口(/buly7upu/commonProductCls/commonProduct/saleRefundList)的方案,并结合高级分页策略细致跟踪和管理不同页码的数据。当检测到API响应超出特定限制或出现异常时,系统会立即触发自动重试功能,从而提高整个集成过程的鲁棒性。

特别值得一提的是,通过统一控制台视图和集中化监控告警系统,我们实现了对所有集成任务状态与性能指标的实时追踪。若遇到任何潜在故障或耗时环节,可第一时间采取相应措施进行优化调整。此外,我们还运用了自定义数据转换逻辑,以适配具体业务场景中的特殊需求,确保最终生成报表准确无误地反映实际业务情况。

下文将进一步阐述具体实施步骤、关键技术点以及各环节调优措施……

钉钉与CRM系统接口开发配置

用友BIP接口调用与数据加工技术案例

在轻易云数据集成平台中,调用用友BIP接口获取销售退货数据并进行加工是数据处理生命周期的第一步。本文将详细探讨如何通过调用/buly7upu/commonProductCls/commonProduct/saleRefundList接口获取数据,并根据元数据配置对返回的数据进行处理。

接口调用配置

首先,我们需要配置接口的请求参数。根据元数据配置,接口使用POST方法,以下是请求参数的详细说明:

  • open_vouchdate_begin:单据开始时间,类型为字符串,用于指定制单开始时间。
  • code:单据编号,类型为字符串,用于指定查询的单据编号。
  • pageIndex:页号,默认值为1,类型为字符串。
  • pageSize:每页行数,默认值为100,类型为字符串。
  • open_vouchdate_end:单据截止时间,类型为字符串,用于指定制单结束时间。
  • returnStatus:退货状态,类型为字符串,用于指定退货类型。
  • orderNo:订单编号,类型为字符串,用于指定查询的订单编号。
  • agentId_name:客户名称,类型为字符串,用于指定客户名称。
  • open_createTime_end:制单结束时间,类型为字符串,用于指定制单结束时间。
  • isSum:查询表头示例,默认值为false,类型为字符串。
  • simpleVOs:查询条件,为对象类型,包括多个子字段。

例如,我们可以构造如下请求体:

{
  "open_vouchdate_begin": "{{DAYS_AGO_1|datetime}}",
  "code": "",
  "pageIndex": "1",
  "pageSize": "100",
  "open_vouchdate_end": "{{CURRENT_TIME|datetime}}",
  "returnStatus": "CONFIRMSALERETURNORDER",
  "orderNo": "",
  "agentId_name": "",
  "open_createTime_end": "",
  "isSum": "false",
  "simpleVOs": [
    {
      "field1": {
        "field": "pubts",
        "op": "between",
        "value1": "{{DAYS_AGO_s10|datetime}}",
        "value2": "{{CURRENT_TIME|datetime}}"
      }
    },
    {
      "field2": {
        "field": "transactionTypeId",
        "op": "eq",
        "value": "1878980908096159746"
      }
    }
  ]
}

数据响应格式化

根据元数据配置,我们需要对返回的数据进行格式化处理。以下是需要格式化的字段:

  • 将返回结果中的id字段重命名为new_id
  • saleReturnDetailId字段重命名为new_saleReturnDetailId
  • oriTaxUnitPrice字段重命名为new_oriTaxUnitPrice

这些字段都需要转换成字符串格式。假设我们收到的原始响应如下:

{
  "id": 12345,
  "saleReturnDetailId": 67890,
  "oriTaxUnitPrice": 150.75,
  // ...其他字段
}

经过格式化处理后的响应应如下所示:

{
  "new_id": "12345",
  "new_saleReturnDetailId": "67890",
  "new_oriTaxUnitPrice": "150.75"
}

数据清洗与验证

在数据清洗阶段,我们需要确保每个字段的数据格式正确,并且满足业务逻辑要求。例如:

  1. ID检查:根据元数据配置中的idCheck: true, 我们需要验证saleReturnDetailId是否存在且有效。
  2. 日期格式:确保日期字段如open_vouchdate_begin, open_vouchdate_end, 等符合ISO8601标准。

自动填充响应

元数据配置中提到的自动填充响应(autoFillResponse: true)功能,可以帮助我们简化一些重复性的工作。例如,如果某些字段在不同请求中保持一致,可以通过自动填充来减少手动输入错误。

综上所述,通过轻易云平台调用用友BIP接口并对返回的数据进行加工和验证,可以极大提升业务流程的自动化和准确性。这一步骤不仅确保了数据的一致性,还为后续的数据转换和写入奠定了坚实基础。 钉钉与ERP系统接口开发配置

2B-YS销售退货查询数据的ETL转换与写入

在轻易云数据集成平台中,数据集成的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。

数据提取与清洗

首先,从源系统中提取销售退货查询的数据。这一步骤通常包括从数据库、文件系统或API接口中获取原始数据。假设我们已经成功提取到了一批销售退货记录,这些记录可能包含多个字段,如订单号、退货日期、客户信息、产品详情等。

数据转换

在数据转换阶段,我们需要将源数据转换为目标平台所能接受的格式。根据提供的元数据配置,目标平台要求的数据格式如下:

{
    "api": "写入空操作",
    "effect": "EXECUTE",
    "method": "POST",
    "idCheck": true
}

这意味着我们需要将源数据转换为一个符合上述API接口规范的JSON对象,并确保在提交请求时使用POST方法。

示例代码

以下是一个Python示例代码,用于将源数据转换为目标平台所需的格式:

import requests
import json

# 假设source_data是从源系统提取到的数据
source_data = [
    {
        "order_id": "12345",
        "return_date": "2023-10-01",
        "customer_id": "C001",
        "product_id": "P001",
        "quantity": 2,
        "reason": "Defective"
    },
    # 更多记录...
]

# 转换函数,将每条记录转换为目标平台所需的格式
def transform_record(record):
    transformed_record = {
        # 根据目标平台API要求进行字段映射和转换
        "api": "写入空操作",
        "effect": "EXECUTE",
        "method": "POST",
        # 假设idCheck字段需要检查订单号是否存在
        "idCheck": record["order_id"]
    }
    return transformed_record

# 转换所有记录
transformed_data = [transform_record(record) for record in source_data]

# 将转换后的数据写入目标平台
def write_to_target_platform(data):
    url = 'https://api.qingyiyun.com/data/write'
    headers = {'Content-Type': 'application/json'}

    for record in data:
        response = requests.post(url, headers=headers, data=json.dumps(record))

        if response.status_code == 200:
            print(f"Record {record['idCheck']} written successfully.")
        else:
            print(f"Failed to write record {record['idCheck']}: {response.text}")

write_to_target_platform(transformed_data)

数据加载

在完成数据转换后,下一步是将这些数据加载到目标平台。通过上述代码中的write_to_target_platform函数,我们可以使用HTTP POST请求将每条记录发送到轻易云集成平台的API接口。

注意事项
  1. 错误处理:在实际应用中,应增加错误处理机制,例如重试逻辑和错误日志记录,以确保所有数据都能成功写入。
  2. 性能优化:对于大批量数据,可以考虑批量处理或异步请求,以提高写入效率。
  3. 安全性:确保在传输过程中使用HTTPS协议,并对敏感信息进行加密处理。

通过以上步骤,我们实现了从源系统提取销售退货查询数据,并经过ETL转换后成功写入目标平台。这一过程充分利用了轻易云数据集成平台提供的API接口和元数据配置,实现了不同系统间的数据无缝对接。 打通金蝶云星空数据接口

更多系统对接方案