企业奇门与用友BIP系统的无缝数据集成方案

  • 轻易云集成顾问-谢楷斌

案例分享:旺店通·企业奇门数据集成到用友BIP

在本次技术案例中,我们将探讨如何使用轻易云数据集成平台,实现旺店通·企业奇门中的调拨单数据无缝对接到用友BIP系统,具体方案名称为“调拨单对接YS调拨订单-v”。此架构不仅涵盖了高吞吐量的数据写入能力,还注重异常处理与实时监控。

获取旺店通·企业奇门数据

首先,我们利用wdt.stock.transfer.query API接口从旺店通·企业奇门系统中抓取需要的调拨单数据。在这一过程中,需要重点关注分页和限流问题,以确保大批量的数据能够被可靠且高效地提取。为了实现定时准时抓取,可以设置合理的任务计划。

数据转换与质量监控

获取到原始数据后,会通过自定义的数据转换逻辑进行处理,以适应用友BIP的数据结构需求。这一过程通常涉及字段映射、格式规范化以及必要的单位转换。为保证最终结果的一致性和准确性,整个流程会引入严格的数据质量监控机制,并设立告警系统以便及时发现和解决潜在的问题。

批量写入到用友BIP

经过清洗和转换后的数据,将通过API /yonbip/scm/transferapply/save 进行批量写入至用友BIP。这一环节依赖于轻易云提供的大容量、高吞吐能力,确保大量的数据能够快速稳定地传输并存储。在这一阶段,还实现了细粒度的异常处理与错误重试机制,以进一步提高整体操作的鲁棒性。

实时监控与日志记录

在整个项目实施过程中,实时跟踪各个步骤的状态是关键。集中式监控平台会持续观测每个任务节点,并生成详细的日志记录,为故障排除提供依据。此外,可视化工具使得运维人员能直观了解当前系统表现,一旦发现问题能够快速定位并解决,从而降低停机时间和业务影响。

下一步将在设计方案部分深入讨论具体实现细节,包括API调用示例、分页策略优化及性能提升措施等内容。 金蝶与SCM系统接口开发配置

调用源系统旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据

在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的。本文将详细探讨如何使用轻易云数据集成平台配置元数据,调用旺店通·企业奇门接口wdt.stock.transfer.query,并对获取的数据进行初步加工。

接口概述

接口wdt.stock.transfer.query用于查询调拨单信息。该接口采用POST请求方式,支持分页查询和条件过滤。以下是元数据配置中的主要字段及其用途:

  • api: wdt.stock.transfer.query
  • method: POST
  • number: transfer_no
  • id: transfer_no
  • pagination: 分页配置,每页大小为100条
  • idCheck: 启用ID检查,确保唯一性
  • condition: 查询条件,过滤掉api_outer_no包含"DBDD"的记录
  • request: 请求参数,包括开始时间、结束时间、源仓库、目标仓库和调拨单状态等
  • otherRequest: 其他请求参数,如分页大小和页号

请求参数配置

在实际应用中,我们需要根据业务需求动态设置请求参数。以下是关键请求参数的配置及其描述:

  1. start_time 和 end_time

    • 用于增量获取数据,分别表示开始时间和结束时间。
    • 格式为yyyy-MM-dd HH:mm:ss
    • 例如:{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}
  2. from_warehouse_no 和 to_warehouse_no

    • 分别代表源仓库和目标仓库的唯一编码,用于区分不同仓库的数据。
    • 这些编码在ERP系统内可以自定义。
  3. status

    • 调拨单状态,用于筛选特定状态的调拨单。
    • 例如:传递值为"90"表示只查询已完成的调拨单。
  4. pagination

    • 分页大小和页号,用于控制每次请求返回的数据量。
    • 每页返回的数据条数默认为100。

数据请求与清洗

调用接口后,我们需要对返回的数据进行初步清洗,以确保数据质量和一致性。以下是常见的数据清洗步骤:

  1. 去重

    • 根据调拨单号(transfer_no)去重,确保每条记录唯一。
  2. 过滤无效数据

    • 根据预设条件过滤掉不符合要求的数据,例如剔除包含特定字符串的记录。
  3. 字段转换

    • 将时间字段转换为标准格式,以便后续处理。
    • 对数值字段进行单位转换或格式化处理。

实际案例

假设我们需要获取2023年10月1日至2023年10月31日期间,从仓库编号为"W001"到仓库编号为"W002"的所有已完成调拨单。具体配置如下:

{
  "api": "wdt.stock.transfer.query",
  "method": "POST",
  "number": "transfer_no",
  "id": "transfer_no",
  "pagination": {"pageSize": 100},
  "idCheck": true,
  "condition": [
    [{"field":"api_outer_no","logic":"notlike","value":"DBDD"}]
  ],
  "request": [
    {"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"2023-10-01 00:00:00"},
    {"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"2023-10-31 23:59:59"},
    {"field":"from_warehouse_no","label":"源仓库","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)","value":"W001"},
    {"field":"to_warehouse_no","label":"目标仓库","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)","value":"W002"},
    {"field":"status","label":"调拨单状态","type":"string","describe":"调拨单状态10已取消 20编辑中 30待审核 40已审核 42出库单待推送 44出库单推送失败 46待出库 50部分出库 60全部出库 62入库单待推送 64入库单推送失败 66待入库 70部分入库 80待结算 90调拨完成 (不传该字段默认返回全部状态的单据)","value":"90"}
  ],
  "otherRequest": [
    {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"100"},
    {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始"}
  ]
}

通过上述配置,我们可以精准地获取所需的调拨单信息,并进行后续的数据处理与分析。这一步骤不仅确保了数据的一致性和准确性,也为后续的数据转换与写入打下了坚实基础。 用友与CRM系统接口开发配置

轻易云数据集成平台:将调拨单数据转换并写入用友BIPAPI接口

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

API接口配置

我们需要将调拨单的数据通过用友BIPAPI接口写入目标系统。根据元数据配置,我们使用了/yonbip/scm/transferapply/save这个API接口,采用POST方法进行数据传输。

{
    "api": "/yonbip/scm/transferapply/save",
    "method": "POST",
    "idCheck": true,
    "BIPAudit": "/yonbip/scm/transferapply/batchaudit"
}

请求参数配置

请求参数主要包括调拨单的主表和子表信息。在元数据配置中,我们定义了多个字段,包括调出组织、调出会计主体、单据编号、单据日期等。这些字段需要从源系统的数据中提取并映射到目标系统的相应字段。

主表字段映射
  1. 调出组织id或code (outorg)

    {
       "field": "outorg",
       "label": "调出组织id或code",
       "type": "string",
       "describe": "例:A23001",
       "value": "_findCollection find inventoryOrg from fa193860-6aa8-37a8-b996-a856e9a8a96f where omsInWarehouse={to_warehouse_no} omsOutWarehouse={from_warehouse_no} mappingType=1"
    }

    使用_findCollection函数从源系统中查找对应的组织ID或编码。

  2. 单据编号 (code)

    {
       "field": "code",
       "label": "单据编号,编码规则是手动时必填",
       "type": "string",
       "describe": "例:ZK20210417000002",
       "value": "{transfer_no}"
    }

    直接映射源系统中的transfer_no字段。

  3. 单据日期 (vouchdate)

    {
       "field": "vouchdate",
       "label": "单据日期",
       "type": "string",
       "describe": "例:2021-04-17 00:00:00",
       "value": "{created}"
    }

    映射源系统中的created字段。

  4. 交易类型id或code (bustype)

    {
       "field": "bustype",
       "label": "交易类型id或code",
       "type": "string",
       "describe": "例:110000000000019",
       "value":"A03002"
    }

    固定值为"A03002"。

  5. 备注 (memo)

    {
       "field":"memo",
       "label":"备注",
       'type':'string',
        'describe':'例:表头备注',
        'value':'{remark}'
    }

    映射源系统中的remark字段。

子表字段映射

子表信息包含物料信息、数量、单位等,需要逐条进行映射:

  1. 物料id或code (product)

    {
        'field':'product',
        'label':'物料id或code',
        'type':'string',
        'describe':'例:1920126858647891',
        'value':'{{details_list.goods_no}}',
        'parent':'details'
    }

    映射源系统中的goods_no字段。

  2. 数量 (qty)

    {
        'field':'qty',
        'label':'数量',
        'type':'string',
        'describe':'例:12',
        'value':'{{details_list.num}}',
        'parent':'details'
    }

    映射源系统中的num字段。

  3. 单位id或编码 (unit)

    {
        'field':"unit",'label':"单位id或编码",'type':"string",'describe':"例:1836523958194432",'value':"_findCollection find code from f9eedcc9-f1ff-31c0-9081-6aee9cf21740 where name={unit_name}",'parent':"details"
    }

    使用 _findCollection 函数从源系统中查找对应的单位ID或编码。

数据转换与写入

在完成所有字段的映射后,我们需要将这些数据按照目标平台所需的格式进行转换,并通过API接口写入到用友BIP系统。具体步骤如下:

  1. 构建请求体: 根据上述配置,将所有主表和子表信息构建成一个JSON对象作为请求体。

    {
    // 主表信息
    outorg: "...", 
    code: "...", 
    vouchdate: "...", 
    bustype: "...", 
    memo: "...", 
    // 子表信息列表
    transferApplys: [
      { product: "...", qty: "...", unit: "..."},
      ...
    ]
    }
  2. 发送请求: 使用HTTP POST方法,将构建好的请求体发送到指定的API接口。

    
    const axios = require('axios');

axios.post('/yonbip/scm/transferapply/save', requestBody) .then(response => { console.log('Data successfully written to YONBIP:', response.data); }) .catch(error => { console.error('Error writing data to YONBIP:', error); });



通过以上步骤,可以实现将调拨单数据从源平台转换并写入到用友BIP系统。整个过程涉及多个字段的映射和转换,需要确保每个步骤都准确无误,以保证数据的一致性和完整性。
![打通钉钉数据接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案