如何使用轻易云平台进行数据ETL并对接金蝶云星空

  • 轻易云集成顾问-贺强

吉客云数据集成到金蝶云星空: 组装拆卸入库对接107v2其他入库

在系统集成项目中,确保不同平台之间的数据无缝对接是成功的关键之一。这次我们将分享一个实际运行的案例:如何通过轻易云数据集成平台,实现吉客云与金蝶云星空之间的高效数据联动,特别是针对组装拆卸入库场景。本文将重点探讨在这个过程中使用到的重要方法和技术细节。

为了实现这一目标,我们采用了以下核心方案:

  1. 调用吉客云接口erp.storage.goodsdocin.v2

    • 确保能够可靠地抓取吉客云中的相关库存数据。尤其是在处理大批量数据时,通过分页机制和限流策略来保证API调用稳定性。
  2. 定制化的数据映射及格式转换

    • 吉客云与金蝶云星空的数据结构存在差异,需要进行精准、高效地转换。在这方面,我们利用了自定义映射功能,以确保每条记录都能准确传递,不漏单、不重复。
  3. 快速写入大量数据到金蝶云星空(batchSave API)

    • 使用批量保存接口,将整理后的数据高效写入金蝶系统。同时,为应对可能出现的网络波动或接口异常情况,设置了完善的错误重试机制。
  4. 实时监控与日志记录

    • 提供透明可视化操作界面,多维度、全方位监控整个流程,从抓取、处理再到存储,每个环节的信息都记录在案。一旦出现问题,可以迅速定位并解决。

下面,让我们深入解析这个系统具体实施过程中的各项技术详情。 企业微信与ERP系统接口开发配置

调用吉客云接口获取并加工数据的技术案例

在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口erp.storage.goodsdocin.v2来获取并加工数据。本文将详细探讨这一过程中的技术细节和实现方法。

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的metadata,我们可以看到该接口采用POST方法,主要参数包括分页信息、入库单号、更新时间范围等。以下是具体的请求参数配置:

{
  "api": "erp.storage.goodsdocin.v2",
  "method": "POST",
  "number": "goodsdocNo",
  "id": "recId",
  "pagination": {
    "pageSize": 10
  },
  "idCheck": true,
  "buildModel": true,
  "request": [
    {"field": "pageIndex", "label": "分页页码", "type": "int"},
    {"field": "pageSize", "label": "分页页数", "type": "int", "value": 100},
    {"field": "goodsDocNo", "label": "入库单号", "type": "string"},
    {"field": "gmtModifiedStart", 
     "label": "主表更新时间起始", 
     "type": "string", 
     "value":"_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"},
    {"field": "gmtModifiedEnd", 
     "label":"主表更新时间截至", 
     "type":"string", 
     "value":"_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')"},
    {"field":"startDate","label":"创建时间的起始时间","type":"string"},
    {"field":"endDate","label":"创建时间的结束时间","type":"string"},
    {"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存 101-采购入库 ... )","value":"107"},
    {"field":"warehouseCode","label":"仓库编号","type":"string"},
    {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
    {"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
    {"field":"userName","label":"创建人名称","type":"string"},
    {"field":"sourceBillNo","label":"原始单号","type":"string"},
    {"field":"outBillNo","label":"外部单号","type":"string"},
    {"field":"selelctFields",
     "label":"需要返回的字段,用“,”号拼接,子类用子类名称.属性",
     ...
     }
  ],
  ...
}

请求参数详解

  1. 分页参数pageIndexpageSize用于控制分页请求,确保一次性获取的数据量不会过大。
  2. 时间范围gmtModifiedStartgmtModifiedEnd用于指定数据更新时间范围,这里使用了函数计算方式,将当前时间减去一天作为查询区间。
  3. 入库类型:通过设置inouttype为107,指定只获取组装拆卸入库的数据。
  4. 其他可选参数:如仓库编号、供应商编号、上游单据号等,可以根据实际需求进行配置。

数据请求与清洗

在完成接口配置后,我们需要编写代码来发起请求并处理返回的数据。以下是一个示例代码片段:

import requests
import json
from datetime import datetime, timedelta

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

# 构建请求体
payload = {
    'pageIndex': 1,
    'pageSize': 100,
    'gmtModifiedStart': (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'),
    'gmtModifiedEnd': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    'inouttype': '107',
}

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

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

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

    for record in data['data']:
        cleaned_record = {
            'goodsDocNo': record['goodsDocNo'],
            'warehouseCode': record['warehouseCode'],
            # 添加更多字段清洗逻辑...
        }
        cleaned_data.append(cleaned_record)

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

# 输出清洗后的数据
print(cleaned_data)

数据转换与写入

在完成数据清洗后,我们可以将其转换为目标系统所需的格式,并写入到目标数据库或其他存储系统中。这里简要展示如何将清洗后的数据写入到一个MySQL数据库:

import pymysql

# 数据库连接配置
db_config = {
    'host': 'localhost',
    'user': 'root',
    'password': '',
    'database': 'target_db'
}

# 建立数据库连接
connection = pymysql.connect(**db_config)
cursor = connection.cursor()

# 插入数据SQL语句模板
insert_sql = """
INSERT INTO goods_doc_in (goodsDocNo, warehouseCode, ...)
VALUES (%s, %s, ...)
"""

# 批量插入数据
for record in cleaned_data:
    cursor.execute(insert_sql, (
        record['goodsDocNo'],
        record['warehouseCode'],
        # 添加更多字段...
    ))

# 提交事务并关闭连接
connection.commit()
cursor.close()
connection.close()

通过上述步骤,我们实现了从吉客云获取组装拆卸入库数据,并进行清洗、转换和写入目标系统的完整流程。这一过程充分利用了轻易云平台的数据集成能力,实现了不同系统间的数据无缝对接。 如何开发企业微信API接口

使用轻易云数据集成平台将源数据ETL转换并写入金蝶云星空API接口

在数据集成过程中,将源平台的数据转换为目标平台能够接收的格式是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入金蝶云星空API接口。

1. 配置元数据

元数据配置是整个ETL过程的基础,以下是一个详细的元数据配置示例:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 1,
        "method": "batchArraySave"
    },
    "request": [
        {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"},
        {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"},
        {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{companyCode}"},
        {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
        {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')"},
        {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000016"},
        {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
        {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"","parser":{"name":"ConvertObjectParser","params":""},"value":""},
        {"field":""},
        ...
    ],
    "otherRequest":[
        {"field":""},
        ...
    ]
}

2. 数据请求与清洗

在此步骤中,我们从源系统中获取原始数据,并通过轻易云的数据清洗功能对其进行处理,以确保数据质量和一致性。例如,日期字段需要转换为目标系统所需的格式:

{"field": "FDate", "label": "日期", "type": "string", "describe": "日期", "value": "_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')"}

这里使用了DATE_FORMAT函数将原始日期格式化为YYYY-MM-DD格式。

3. 数据转换与写入

在完成数据清洗后,需要将其转换为金蝶云星空API接口所能接收的格式。以下是具体字段的映射和转换示例:

  • 单据编号 (FBillNo): 从源系统中获取并直接映射到目标字段。
  • 单据类型 (FBillTypeID): 使用ConvertObjectParser进行对象解析,将值转换为金蝶系统识别的编码。
  • 库存组织 (FStockOrgId): 同样使用ConvertObjectParser进行解析。
  • 库存方向 (FStockDirect): 固定值设置为GENERAL
  • 日期 (FDate): 使用前述的日期格式化函数进行转换。
  • 部门 (FDEPTID): 固定值设置为BM000016,并使用解析器进行对象转换。

此外,还需要处理明细信息(FEntity)部分,其中包含多个子字段,如物料编码、实收数量、成本价等。这些子字段同样需要根据具体需求进行解析和映射:

{
    "field": "FMATERIALID",
    "label": "物料编码",
    "type": "string",
    ...
}

4. API调用与提交

配置完成后,通过轻易云的数据集成平台发起HTTP POST请求,将处理后的数据提交到金蝶云星空API接口。以下是一个简化的请求示例:

{
    "FormId": "STK_MISCELLANEOUS",
    ...
}

通过上述配置和操作,可以实现将源平台的数据无缝转化并写入到金蝶云星空系统中,确保业务流程顺畅运行。 打通钉钉数据接口

更多系统对接方案