使用ETL转换工具进行数据集成:轻易云与旺店通API对接实战

  • 轻易云集成顾问-潘裕

用友U8数据集成到旺店通·企业奇门的技术实现

在现今复杂多变的业务环境中,系统间的数据对接挑战逐步凸显。如何高效、可靠地完成不同系统之间的数据同步,是每个企业信息化团队必须攻克的重要课题。本案例分享的是将用友U8系统中的销售出库单数据集成到旺店通·企业奇门其他出库单的数据处理流程和具体实施细节。

首先,我们需要确保从用友U8接口(/apilink/u8api)读取销售出库单数据不漏单,并且能够应对分页和限流的问题。在这一过程中,为了保证高效性,我们设计了一套定时可靠抓取机制,每隔固定时间段调用API,从而获取最新的销售出库单记录。为了避免遗漏和重复,利用增量更新策略,通过时间戳等标记实现精准提取。此外,对于大批量数据快速写入到旺店通·企业奇门(wdt.vip.wms.stockinout.order.push),我们采用并行处理方式,提高插入效率。

其次,针对两套系统之间存在的数据格式差异问题,我们进行了详细的字段映射工作。例如,用友U8中的字段名与格式可能与旺店通·企业奇门有所不同,这就要求我们在中间处理中进行必要转换,同时确保每条数据的一致性与完整性。这一步骤非常关键,因为任何一处细微的不匹配都可能导致后续业务操作异常。为此,通过自定义脚本和规则引擎,实现元数据层面的灵活映射及转换,以适应双方系统的需求。

最后,在整个项目实施过程中,还需要特别注意错误处理机制。一旦出现异常情况,比如网络故障或接口返回错误,需要有健全的重试机制来保障数据传输稳定性。同时,用友U8提供了实时监控功能,可以即时记录日志,并通过警报邮件通知相关人员,从而及时响应并处理突发状况。

总体来看,结合以上多个方面的优化措施,此次成功实现了用友U8到旺店通·企业奇门的数据无缝对接,使得两个平台联动更加顺畅,有力支撑了线下销售管理流程的信息化提升。 如何开发企业微信API接口

调用用友U8接口获取并加工数据的技术案例

在轻易云数据集成平台中,调用源系统用友U8接口是数据集成生命周期的第一步。本文将深入探讨如何通过配置元数据来实现这一过程,并详细介绍相关的技术细节。

配置元数据

元数据配置是调用API接口的关键步骤。以下是用于调用用友U8接口/apilink/u8api的元数据配置示例:

{
  "api": "/apilink/u8api",
  "effect": "QUERY",
  "method": "POST",
  "number": "ccusabbname",
  "id": "ccode",
  "name": "poid",
  "idCheck": true,
  "request": [
    {
      "field": "data",
      "label": "消息体参数",
      "type": "object",
      "children": [
        {
          "field": "过滤条件_1",
          "label": "开始时间",
          "type": "object",
          "children": [
            {
              "field": "名称",
              "label": "开始时间",
              "type": "string",
              "value":"dnmaketime"
            },
            {
              "field":"比较符号",
              "label":"大于等于",
              "type":"string",
              "value":"="
            },
            {
              "field":"值",
              "label":"短日期",
              'type':'date',
              'value':'{{LAST_SYNC_TIME|datetime}}'
            }
          ]
        },
        {
          'field':'过滤条件_2',
          'label':'结束时间',
          'type':'object',
          'children':[
            {
              'field':'名称',
              'label':'结束时间',
              'type':'string',
              'value':'dnmaketime'
            },
            {
              'field':'比较符号',
              'label':'小于等于',
              'type':'string',
              'value':'<='
            },
            {
              'field':'值',
              'label':'短日期',
              'type':'date',
              'value':'{{CURRENT_TIME|datetime}}'
            }
          ]
        },
        {
          'field':"apicontext",
          'label':"分页参数",
          'type':"object",
          'children':[
            {'field':"pagesize",'label':"分页大小",'type':"int",'value':100},
            {'field':"pageindex",'label':"页码",'type':"int",'value':1}
          ]
        },
        {
          'field':'过滤条件_3',
          'label':'仓库',
          'type':'object',
          'children':[
            {'field':'名称','label':'仓库编码','type':'string','value':'cwhcode'},
            {'field':'比较符号','label':'in','type':'string','value':'in'},
            {'field':'值','label':'仓库编码','type':'string','value':'702,802,803'}
          ]
        },
        {
          'field':"过滤条件_4",
          'label':"排除制单人1",
          'type':"object",
          'children':[
            {'field':"名称",'label':"制单人字段",'type':"string",'value':"cmaker"},
            {'field':"比较符号",'label':"不等于",'type':"string",'value':"!"},
            {'field':"值",'label':"接口生成",'type':"string",'value':"ASUSER"}
           ]
         },
         {
           field:'过滤条件_5',
           label:'排除制单人2',
           type:'object',
           children:[
             { field:'名称', label:'制单人字段', type:'string', value:'cmaker' },
             { field:'比较符号', label:'不等于', type:'string', value:'!=' },
             { field:'值', label:'接口生成', type:'string', value:'陈勇' }
           ]
         }
       ]
     }
   ],
   otherRequest:[
     { field:"apiurl", label:"id列表接口", type:"string", describe:"id列表接口", value:"saleout/list"},
     { field:"apidetail", label:"详情接口", type:"string", describe:"详情接口", value:"saleout/get"}
   ],
   autoFillResponse:true,
   condition:[
     [{ field:body.iquantity, logic:gt, value:0 },{ field:cbuscode, logic:notlike, value:CK }]
   ]
}

数据请求与清洗

在上述元数据配置中,我们定义了多个过滤条件,用以精确获取所需的数据:

  • 开始时间和结束时间:通过dnmaketime字段设置大于等于和小于等于当前时间的范围,确保只获取特定时间段内的数据。
  • 分页参数:设置分页大小为100,页码为1,以便分批次获取大量数据。
  • 仓库编码:使用cwhcode字段,通过in操作符指定多个仓库编码(702、802、803),以筛选出特定仓库的数据。
  • 排除制单人:通过cmaker字段,排除由特定用户(如ASUSER和陈勇)生成的数据。

这些过滤条件确保了我们能够精准地从用友U8系统中提取到所需的数据。

数据转换与写入

在获取到符合条件的数据后,需要进行相应的转换与写入操作。此处我们定义了两个主要的API:

  • ID列表接口:用于获取销售出库单的ID列表,API路径为saleout/list
  • 详情接口:用于根据ID获取销售出库单的详细信息,API路径为saleout/get

通过这两个API,我们可以先获取到所有符合条件的销售出库单ID,然后逐个调用详情接口获取每个出库单的详细信息,并进行相应的数据处理和写入操作。

自动填充响应

在配置中,我们设置了autoFillResponse:true,这意味着平台会自动处理并填充响应结果,从而简化了开发人员的工作量,提高了效率。

条件判断

最后,我们还定义了一些条件判断逻辑,例如:

  • 数量大于0:确保只有数量大于0的数据才会被处理。
  • 业务代码不包含CK:排除业务代码中包含“CK”的记录。

这些条件判断进一步提高了数据处理的准确性和有效性。

通过以上步骤,我们成功实现了从用友U8系统中调用API获取并加工数据,为后续的数据集成奠定了坚实基础。 如何开发企业微信API接口

使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台——旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。本文将深入探讨这一过程中的技术细节和实现方法。

元数据配置解析

首先,我们来看一下元数据配置:

{
  "api": "wdt.vip.wms.stockinout.order.push",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field": "contact", "label": "联系人", "type": "string", "value": "{ccusperson}"},
    {"field": "api_outer_no", "label": "接口外部单号", "type": "string", "value": "{ccode}"},
    {"field": "warehouse_no", "label": "仓库编号", "type": "string", "describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)","value":"{cwhcode}", 
        "mapping":{"target":"640163621499f14120278f6f","direction":"positive"}},
    {"field": "order_type", "label": "出入类型", "type": "string", 
        "value":"1"},
    {"field":"address","label":"详细地址","type":"string","value":"{ccusaddress}"},
    {"field":"remark","label":"备注","type":"string","describe":"其他出库单备注","value":"{cmemo}&发货{cbuscode},出库"},
    {"field":"goods_list","label":"货品列表节点","type":"array","describe":"请求参数的2级数据节点,包含其他出库单所有货品属性信息的数据节点,节点下数据字段详见下述“ detail_list”",
        "value":"body","children":[
            {"field":"spec_no","label":"商家编码","type":"string","value":"{{body.cinvcode}}"},
            {"field":"num","label":"出库数量","type":"string","value":"{{body.iquantity}}"},
            {"field":"price","label":"价格","type":"string"}
        ]},
    {"field": "prop1", 
        "label": 
        "来源单号",
        "type":
        "string",
        "value":
        "{cbuscode}"},
    {"field":
        "prop2",
        "label":
        "部门客户",
        "type":
        "string",
        "value":
        "{ccusname}"},
    {"field":
        "prop3",
        "label":
        "出库类别",
        "type":
        "string",
        "value":
        "{crdname}"},
    {"field":
        "prop4",
        "label":
        "出库日期",
        "type":
        :
        :
        :
        :

数据转换与写入流程

  1. 数据请求与清洗

    • 在这一阶段,我们从源平台(如U8销售出库单)获取原始数据,并进行必要的数据清洗和标准化处理。这一步骤确保我们获得高质量、结构化的数据,为后续的ETL转换打下基础。
  2. ETL转换

    • 提取(Extract):从源系统中提取所需的数据字段,例如ccuspersonccodecwhcode等。
    • 转换(Transform):根据目标API接口的要求,对提取的数据进行格式转换和映射。例如,将源系统中的字段名映射到目标系统所需的字段名,并对字段值进行必要的格式化处理。
    • 加载(Load):将转换后的数据通过API接口写入到目标平台——旺店通·企业奇门。

API接口调用

在完成ETL转换后,我们需要通过HTTP POST请求将处理后的数据发送到目标API接口。以下是一个示例代码片段,用于展示如何构建和发送HTTP请求:

import requests
import json

# 构建请求头
headers = {
    'Content-Type': 'application/json',
}

# 构建请求体
payload = {
    'contact': '张三',
    'api_outer_no': 'SO123456',
    'warehouse_no': 'WH001',
    'order_type': '1',
    'address': '北京市海淀区中关村大街1号',
    'remark': '备注信息&发货SO123456,出库',
    'goods_list': [
        {'spec_no': 'P001', 'num': '10', 'price': '100.00'},
        {'spec_no': 'P002', 'num': '5', 'price': '200.00'}
    ],
    'prop1': 'SO123456',
    'prop2': '客户A',
    'prop3': '普通出库',
    'prop4': '2023-10-01'
}

# 发送POST请求
response = requests.post('https://api.wangdiantong.com/wdt.vip.wms.stockinout.order.push', headers=headers, data=json.dumps(payload))

# 检查响应状态
if response.status_code == 200:
    print('数据成功写入目标平台')
else:
    print(f'请求失败,状态码: {response.status_code}, 响应内容: {response.text}')

以上代码展示了如何使用Python构建并发送HTTP POST请求,将经过ETL转换后的数据写入到旺店通·企业奇门API接口中。我们可以根据实际需求,对请求头和请求体进行动态调整,以适应不同的数据场景。

数据验证与监控

为了确保数据成功写入并保持一致性,我们需要对API响应进行验证,并实时监控数据流动和处理状态。这一步骤可以通过轻易云提供的实时监控功能来实现,确保每个环节都清晰可见,提高业务透明度和效率。

综上所述,通过轻易云数据集成平台,我们可以高效地完成从源平台到目标平台的数据ETL转换,并通过API接口实现无缝对接。在实际操作中,需要根据具体业务需求灵活调整元数据配置和ETL流程,以确保最佳的数据集成效果。 打通钉钉数据接口

更多系统对接方案