商品资料V2.0-修改:利用轻易云进行数据高效对接

  • 轻易云集成顾问-卢剑航

商品资料V2.0-修改:实现旺店通·企业奇门数据到金蝶云星辰V2的高效集成

在本案例中,我们将探讨如何利用轻易云数据集成平台,以商品资料V2.0-修改方案,高效对接并集成旺店通·企业奇门的数据至金蝶云星辰V2。对于业务系统而言,确保不同平台间的数据流畅、准时且无误地交互是关键,因此我们聚焦于关键技术细节,尤其是在API调用与数据转换方面。

数据获取与处理

首先,通过调用旺店通·企业奇门提供的API接口 wdt.goods.query 实现定时可靠的数据抓取。该接口支持分页查询,在处理大量商品信息时,需要特别注意页码和限流问题以避免请求超时或被封禁。这一步骤不仅涉及到基础数据获取,还需要实时监控和日志记录,以保证每次抓取过程的透明性和可追溯性。

# 示例代码:通过wtd.goods.query接口拉取商品信息
response = requests.get('https://api.wangdiantong.com/wdt.api/wdtgoodsquery', params={
    'page_no': 1,
    'page_size': 100,
})
data = response.json()

数据格式转换

由于旺店通·企业奇门与金蝶云星辰V2使用不同的数据格式,我们必须执行精确而高效的数据映射操作。具体而言,可借助轻易云提供的ETL(提取、转换、加载)工具,将原始JSON结构转化为符合金蝶要求的XML或更适合其 API /jdy/v2/bd/material 所需JSON格式。在此过程中,批量操作显得尤为重要,可以提升整体效率并减少出错几率。

# 示例代码:简单示意如何构建满足金蝶需求的数据结构
material_data = {
    "materials": [
        {"code": "ABC123", "name": "产品A"},
        # 更多数据...
    ]
}
json_payload = json.dumps(material_data)

高性能写入与错误处理

为了实现大规模数据快速写入,我们选择了分批提交策略,并设立重试机制来应对可能出现异常情况。不论是临时网络波动还是目标系统暂不可用,都应该有完善的错误捕获及重试机制,确保最终成功。此外,对于任何异常,应具备详细日志记录功能,使问题得以及时发现和解决。

# 示例代码:向金蝶云星辰V2提交商品资料,同时进行错误捕获和重试
try:
    response = requests.post('https://api.kingdee.com/jdy/v2/bd
![如何开发用友BIP接口](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image)
### 调用旺店通·企业奇门接口wdt.goods.query获取并加工数据

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

#### 接口配置与调用

首先,我们需要配置元数据,以便正确调用`wdt.goods.query`接口。根据提供的元数据配置,我们可以看到该接口使用POST方法进行请求,并且支持多种查询参数。

```json
{
  "api": "wdt.goods.query",
  "effect": "QUERY",
  "method": "POST",
  "number": "goods_no",
  "id": "{goods_id}{modified}",
  "name": "goods_name",
  "idCheck": true,
  "request": [
    {
      "field": "start_time",
      "label": "开始时间",
      "type": "datetime",
      "describe": "按最后修改时间增量查询数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{LAST_SYNC_TIME|datetime}}"
    },
    {
      "field": "end_time",
      "label": "结束时间",
      "type": "datetime",
      "describe": "按最后修改时间增量查询数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
      "value": "{{CURRENT_TIME|datetime}}"
    },
    {
      "field": "deleted",
      "label": "已删除货品",
      "type": "string",
      "describe": "默认为0, 0:只返回未删除货品 1:返回未删除和已删除货品"
    },
    {
      "field": "barcode",
      "label": "条码",
      "type": "string",
      "describe": ""
    }
  ],
  ...
}

配置请求参数

在调用接口时,我们需要设置一些关键参数:

  • start_timeend_time 用于按最后修改时间增量查询数据。通过设置这两个参数,可以确保我们只获取到自上次同步以来的新数据或更新的数据。
  • deleted 参数用于指定是否包含已删除的货品。默认值为0,仅返回未删除的货品。
  • barcode 参数用于按条码进行过滤。

此外,还有分页相关的参数:

  • page_size 用于指定每页返回的数据条数。
  • page_no 用于指定当前请求的页码。

这些参数可以通过模板变量动态生成,例如:

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ...
                            {
                              ...
                              {
                                ...
                                {
                                  ...
                                  {
                                    ...
                                    {
                                      ...
                                      {
                                        ...
![如何对接用友BIP接口](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口

在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。以下是基于轻易云数据集成平台的具体操作步骤和技术细节。

#### API接口配置与元数据解析

根据提供的元数据配置,我们需要将商品资料V2.0的数据写入金蝶云星辰V2。目标API接口为`/jdy/v2/bd/material`,请求方法为POST。以下是各字段的详细配置:

- `number`: 商品编码,类型为string。若不传递则由后台生成,但在没有设置编码规则和更新时必传。值来源于源数据字段`goods_no`。
- `name`: 商品名称,类型为string,值来源于源数据字段`goods_name`。
- `base_unit_id`: 计量单位id,类型为string,通过查询集合获取,查询条件为源数据字段`unit_name`。
- `checktype`: 商品类型,固定值1。
- `ignore_warn`: 是否忽略警告错误,固定值true。
- `brand_number`: 品牌编码,类型为string,值来源于源数据字段`brand_no`。
- `parent_number`: 商品类别编码,类型为string,值来源于源数据字段`class_name`。
- `id`: id,通过MongoDB查询获取,根据商品编码进行匹配。

#### 数据提取与清洗

首先,从源平台提取原始商品资料数据。假设我们从一个关系型数据库中提取商品信息,包括商品编码、商品名称、计量单位名称、品牌编码和商品类别编码等。

```sql
SELECT 
    goods_no,
    goods_name,
    unit_name,
    brand_no,
    class_name
FROM 
    source_goods_table;

数据转换

接下来,将提取的数据进行转换,以符合金蝶云星辰V2API接口的要求。

  1. 计量单位ID转换: 使用轻易云提供的集合查询功能,通过计量单位名称获取对应的ID:

    SELECT id 
    FROM unit_collection 
    WHERE number = {unit_name};
  2. ID匹配: 使用MongoDB查询,根据商品编码获取对应的ID:

    {
       "content.number": {"$eq": "{goods_no}"}
    }

数据写入

将转换后的数据通过POST请求写入金蝶云星辰V2API接口:

{
    "api": "/jdy/v2/bd/material",
    "effect": "EXECUTE",
    "method": "POST",
    "number": "1",
    "id": "1",
    "name": "1",
    "idCheck": true,
    "request": [
        {"field":"number","label":"商品编码","type":"string","describe":"商品编码,不传递则由后台生成(不设置有编码规则和更新时必传)","value":"{goods_no}"},
        {"field":"name","label":"商品名称","type":"string","describe":"商品名称","value":"{goods_name}"},
        {"field":"base_unit_id","label":"计量单位id","type":"string","describe":"计量单位id","value":"_findCollection find id from 6e1fea1d-484a-39cc-b445-e31c63327233 where number={unit_name}"},
        {"field":"checktype","label":"商品类型","type":"string","value":"1"},
        {"field":"ignore_warn","label":"是否忽略警告错误","type":"bool","value":"true"},
        {"field":"brand_number","label":"品牌编码","type":"string","value":"{brand_no}"},
        {"field":"parent_number","label":"商品类别编码","type":"string","value":"{class_name}"},
        {"field":"id","label":"id","type":"string","value":"_mongoQuery 87620e1d-bf21-3b1b-a036-5d64ec61ad39 findField=content.id where={\"content.number\": {\"$eq\":\"{goods_no}\"}}"}
    ],
    "buildModel": true
}

通过上述配置和操作,我们实现了将源平台的数据经过ETL处理后成功写入金蝶云星辰V2API接口。这一过程充分利用了轻易云平台的异构系统集成能力和全生命周期管理特性,有效提升了业务的数据处理效率和透明度。 如何对接金蝶云星空API接口

更多系统对接方案