现代企业数据集成案例:吉客云到用友BIP系统的数据流转

  • 轻易云集成顾问-吕修远

吉客云到用友BIP数据集成案例分享:调拨入库与其他入库对接方案

在现代企业的数字化运营中,数据的高效传输和及时处理至关重要。本文将介绍通过轻易云平台实现吉客云数据无缝集成到用友BIP系统中的一个具体实例:从吉客云获取“调拨入库”数据并写入到用友BIP的“YS-其他入库”。

为了确保这一过程高效而可靠地完成,我们采用了一系列技术手段与最佳实践。

首先,我们利用了轻易云平台的可视化数据流设计工具,创建了一个名为“吉客云-调拨入库--->YS-其他入库-ok”的集成方案。这一方案不仅在界面上清晰展现了每个流程步骤,还使得操作和维护变得更加直观。

在具体实施过程中,通过调用吉客云提供的数据接口erp.storage.goodsdocin.v2,我们定时抓取最新的调拨入库数据,为后续处理奠定基础。鉴于大批量的数据需要被迅速且准确地传输至用友BIP系统,我们进一步优化了吞吐量,并合理设定分页机制以应对限流问题。

针对不同系统之间可能存在的数据格式差异,通过自定义的数据转换逻辑,对获取的数据进行了必要调整。例如,在字段映射和类型转换方面做了一些优化,使其符合用友BIP要求。同时,为保证写入过程顺利进行,每条记录都被精确地关联到了指定API /yonbip/scm/othinrecord/single/save 中。

实时监控和日志记录也是过程中不可或缺的一环。监控系统不仅能够及时发现潜在问题,还能快速定位并解决异常情况,从而保障整个数据流动的可靠性。此外,引人注目的集中告警功能,也让任何意外状况能第一时间得到反馈并采取相应措施。

综上所述,本次集成案例充分利用了轻易云平台卓越的数据管理能力,以及丰富灵活的问题解决机制,实现了跨系统间高效、透明、高质量的数据交换。接下来,将详细讲解不同阶段实施细节及相关代码示例,以便读者深入理解整个流程及关键技术点。

数据集成平台可视化配置API接口

调用吉客云接口获取并加工数据

在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口 erp.storage.goodsdocin.v2 来获取并加工数据。本文将详细探讨如何配置和调用该接口,并对返回的数据进行处理。

接口配置与调用

首先,我们需要配置元数据,以便正确地调用吉客云的接口。以下是元数据配置的详细信息:

{
  "api": "erp.storage.goodsdocin.v2",
  "effect": "QUERY",
  "method": "POST",
  "number": "goodsdocNo",
  "id": "goodsdocNo",
  "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":
        "入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"102"},
    {"field":"warehouseId","label":"仓库ID","type":"string"},
    {"field":"warehouseCode","label":"仓库编号","type":"string"},
    {"field":"vendId","label":"供应商ID(往来单位)","type":"string"},
    {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
    {"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
    {"field":"userName","label":"创建人名称","type":"string"},
    {"field":"gmtModifiedStart","label":"主表更新时间起始","type":
        "string"},
    {"field":"gmtModifiedEnd","label":"主表更新时间截至","type":
        "string"},
    {"field":"selelctFields","label":
        "返回参数","type":
        "string",
        "value":
        "goodsdocNo,inOutDate,userName,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList,goodsDocDetailList.transHasTaxPrice,goodsDocDetailList.serialNo"}
   ],
   autoFillResponse: true,
   condition_bk: [[{"field": 
   warehouseCode,"logic":
   neqv2,"value":
   03}]]
}

请求参数解析

  1. 分页参数

    • pageIndex: 分页页码。
    • pageSize: 分页页数,默认值为50。
  2. 时间参数

    • startDate: 创建时间的起始时间,使用占位符 {{LAST_SYNC_TIME|datetime}} 动态获取上次同步时间。
    • endDate: 创建时间的结束时间,使用占位符 {{CURRENT_TIME|datetime}} 动态获取当前时间。
  3. 过滤条件

    • inouttype: 入库类型,固定值为102(调拨入库)。
    • warehouseCode: 仓库编号,排除编号为03的仓库。
  4. 返回字段

    • 配置了多个字段以确保返回的数据包含必要的信息,例如:goodsdocNo, inOutDate, userName, gmtCreate, 等等。

数据请求与清洗

在完成接口配置后,我们通过POST请求调用该接口,并获取返回的数据。以下是一个示例请求:

{
  "pageIndex": 1,
  "pageSize": 50,
  // 动态生成
  "startDate": "{{LAST_SYNC_TIME|datetime}}",
  // 动态生成
  "endDate": "{{CURRENT_TIME|datetime}}",
  // 固定值
  “inouttype”: “102”
}

数据清洗与转换

在获取到原始数据后,需要对其进行清洗和转换,以便后续处理和写入目标系统。以下是一些常见的数据清洗步骤:

  1. 字段映射:将原始数据字段映射到目标系统所需字段。例如,将 goodsdocNo 映射到目标系统中的相应字段。
  2. 数据格式转换:将日期格式从字符串转换为标准日期格式,确保一致性。
  3. 过滤无效数据:根据业务规则过滤掉不符合条件的数据,例如剔除仓库编号为03的数据。

示例代码

以下是一个简单的Python示例代码,用于调用接口并处理返回的数据:

import requests
import json
from datetime import datetime

# 配置请求URL和头部信息
url = 'https://api.jikexyun.com/erp.storage.goodsdocin.v2'
headers = {'Content-Type': 'application/json'}

# 构建请求体
payload = {
    'pageIndex': '1',
    'pageSize': '50',
    'startDate': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'endDate': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'inouttype': '102'
}

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

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 数据清洗与转换
    cleaned_data = []

    for item in data['data']:
        if item['warehouseCode'] != '03':
            cleaned_item = {
                'document_number': item['goodsdocNo'],
                'date': item['inOutDate'],
                'creator': item['userName'],
                # 更多字段映射...
            }
            cleaned_data.append(cleaned_item)

else:
    print(f'Error: {response.status_code}')

# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))

通过以上步骤,我们成功地调用了吉客云接口,获取并加工了所需的数据,为后续的数据写入和处理打下了坚实基础。这一过程展示了如何利用轻易云平台提供的元数据配置,实现高效、透明的数据集成。 金蝶与CRM系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入用友BIPAPI接口

在数据集成生命周期的第二步,我们需要将源平台的数据进行ETL(提取、转换、加载)处理,并将其转换为目标平台——用友BIPAPI接口所能接收的格式,最终写入目标平台。以下是具体的技术实现过程。

数据请求与清洗

首先,我们从源平台(如吉客云)获取原始数据。这些数据通常是未经处理的,需要进行清洗和预处理。清洗步骤包括去除无效数据、填补缺失值以及标准化字段格式等。

数据转换与写入

接下来,我们进入关键的ETL转换阶段。我们需要将清洗后的数据按照用友BIPAPI接口的要求进行格式转换,并通过POST请求将其写入目标平台。以下是详细的元数据配置及其应用示例。

元数据配置解析

根据提供的元数据配置,我们需要构建一个POST请求,将数据写入用友BIPAPI接口。以下是主要字段及其含义:

  • needCalcLines: 表体行计算标识,默认传false,表示不对子表进行二次计算。
  • code: 单据编号,需根据系统编码规则配置。
  • org: 库存组织,传入id或code。
  • accountOrg: 会计主体,与库存组织相同。
  • vouchdate: 单据日期,时间戳格式。
  • bustype: 交易类型,这里固定为JKY002
  • warehouse: 仓库,传入id或code。
  • department: 部门,传入id或code。
  • operator: 业务员,传入id或code。
  • memo: 备注,可填写单据编号等信息。
  • _status: 操作标识,这里固定为Insert表示新增操作。

子表字段(othInRecords)包括:

  • rowno: 行号
  • product: 物料,传入id或code
  • productsku: 物料SKU
  • batchno: 批次号,根据条件判断是否填写
  • contactsQuantity, contactsPieces, qty, subQty: 数量相关字段
  • unit, stockUnitId: 主计量单位和库存单位
  • invExchRate: 库存换算率
  • natUnitPrice, natMoney: 单价和金额
  • goodsposition: 货位
  • isSerialNoManage, isBatchManage, isExpiryDateManage: 管理标识
  • memo: 子表备注
  • _status: 子表操作标识

孙表字段(othInRecordsSNs)包括:

  • id, sn, _status, pubts
示例代码实现

以下是一个示例代码片段,用于构建并发送POST请求,将转换后的数据写入用友BIPAPI接口:

import requests

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

# 构建请求体
payload = {
    "needCalcLines": "false",
    "code": "QTRK0000001",
    "org": "wzyqzn",
    "accountOrg": "wzyqzn",
    "vouchdate": "2021-03-05",
    "bustype": "JKY002",
    "warehouse": "ck01",
    "department": "dept01",
    "operator": "operator_01",
    "memo": "QTRK0000001",
    "_status": "Insert",
    "othInRecords": [
        {
            "rowno": 1,
            "product": "PD0817000001",
            "productsku": "PD08170000010004",
            "batchno": "",
            ...
            "_status": "Insert"
        }
        # 更多子表记录...
    ],
    ...
}

# 发送POST请求
response = requests.post(
    url='https://api.yonyou.com/yonbip/scm/othinrecord/single/save',
    headers=headers,
    json=payload
)

# 检查响应状态码及内容
if response.status_code == 200:
    print("Data successfully written to YonYou BIP API")
else:
    print(f"Failed to write data. Status code: {response.status_code}, Response content: {response.content}")

在这个示例中,我们使用Python编程语言,通过requests库发送HTTP POST请求,将预处理后的数据按照元数据配置要求构建成JSON格式,并发送至用友BIPAPI接口。

注意事项

  1. 确保所有必填字段均已正确填写,如单据编号、库存组织、会计主体等。
  2. 根据业务需求调整子表和孙表的数据结构,以确保数据的一致性和完整性。
  3. 实时监控请求响应状态码和内容,以便及时发现并解决可能出现的问题。

通过上述步骤,我们可以高效地完成从源平台到目标平台的数据ETL转换和写入过程,实现不同系统间的数据无缝对接。 如何开发金蝶云星空API接口

更多系统对接方案