使用轻易云平台实现数据ETL转换与写入金蝶云星辰V2

  • 轻易云集成顾问-彭亮

新版订单-出库单-(佰嘉)广州玛祖集成案例

在本次系统对接中,我们将重点分享汤臣倍健营销云数据如何高效、可靠地集成到金蝶云星辰V2平台。通过这个案例,您将了解从获取营销云数据,到写入金蝶云星辰V2的全过程及其中涉及的技术细节。

确保数据不漏单

为了确保营销云的数据可以完整无误地传输至金蝶平台,我们首先实现了定时可靠的数据抓取机制。使用轻易云提供的调度任务,每隔固定时间间隔调用汤臣倍健营销云接口/api/openapi/v1/erp/order/honour/agreement/header,以确保每一个订单都被及时捕获,并设置合理的分页和限流参数来优化请求效率。

数据快速写入与批量处理

面对大量订单数据,需要有效提高其写入速度。在本方案中,我们利用批量处理特性,将获取到的订单数据汇总后,通过API /jdy/v2/scm/sal_out_bound 一次性写入金蝶云星辰V2。此外,为应对可能发生的大规模并发请求,我们设计了一套异常处理与错误重试机制,以保证即使在网络波动或服务短期不可用情况下,也能准确完成数据同步。

接口调用与格式转换

由于两个系统之间存在数据格式差异,在整合过程中我们引入了定制化的数据映射规则。具体而言,采集自汤臣倍健营销云的数据需经过一系列预处理,如字段匹配、类型转换等,然后再按照金蝶平台要求的数据结构进行封装。这不仅提高了兼容性,还减少了因格式问题导致的数据丢失风险。

实时监控与日志记录

为了实时掌握整个数据传输过程中的状态变化,本方案还包含详细的监控和日志记录功能。从接口调用频率、响应时间,到每次传输成功或失败的信息均有详实记录。这些日志可用于故障分析和性能优化,从而进一步提升整体集成效率。

通过以上几大特点和技术措施,本方案不仅解决了跨平台多源数据整合的问题,还显著提升了业务流程自动化程度,为企业实现更精准、更高效的信息管理打下坚实基础。 金蝶与CRM系统接口开发配置

调用汤臣倍健营销云接口获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的接口 /api/openapi/v1/erp/order/honour/agreement/header 获取并加工数据。

接口配置与调用

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

{
  "api": "/api/openapi/v1/erp/order/honour/agreement/header",
  "effect": "QUERY",
  "method": "POST",
  "number": "no",
  "id": "id",
  "idCheck": true,
  "request": [
    {"field":"orgId","label":"组织ID","type":"string","describe":"111","value":"71171bd492da45caba36011fe38abe99"},
    {"field":"page","label":"页码","type":"string","describe":"111","value":"1"},
    {"field":"id","label":"订单id","type":"string","describe":"111"},
    {"field":"applyerId","label":"要货方id","type":"string","describe":"111"},
    {"field":"supplierId","label":"供货方id","type":"string","describe":"111"},
    {"field":"no","label":"订单号","type":"string","describe":"111"},
    {"field":"distributionType","label":"分销类型","type":"string","describe":"111"},
    {"field":"distributorId","label":"分销商id","type":"string","describe":"111"},
    {"field":"orderStatus","label":"订单状态","type":"string","describe":"111", "value": "WAIT_DELIVERY,PART_DELIVERY,ALL_DELIVERY,WAIT_OUT_STORAGE,PART_OUT_STORAGE,ALL_OUT_STORAGE,PART_CONFIRM,CONFIRM,AUDIT_SUCCESS,FINISH"},
    {"field":"createDt","label":"创建时间","type":"string","describe":"111"},
    {"field":"orderTypeCode","label":"订单类型,如普通订单、直运销售", "type": "string", "describe": "111"},
    {"field": "isDeliveryFreezed", "label": "是否暂停发货", "type": "string", "describe": "111"},
    {"field": "nature", "label": "单据类型1订单、2退货", "type": "string", "describe": "111", "value": "1"},
    {"field": "relatedApplyerId", "label": "关联交易经销商id", "type": "string", "describe": "111"},
    {"field": "saleDistribution", "label": "销售渠道", 'type': 'string', 'describe': '111'},
    {"field": 'disApplyerId', 'label': '分销商id', 'type': 'string', 'describe': '111'},
    {'field': 'startDt', 'label': '订单时间(开始)', 'type': 'string', 'describe': '111'},
    {'field': 'endDt', 'label': '订单时间(结束)', 'type': 'string', 'describe': '111'},
    {'field': 'appStartDt', 'label': '审批时间(开始)', 'type': 'string', 'describe': '111'},
    {'field': 'appEndDt', 'label': '审批时间(结束)', ‘type’: ‘string’, ‘describe’: ‘111’},
    {'field’: ‘lastStartDt’, ‘label’: ‘最后修改时间(开始)’, ‘type’: ‘string’, ‘describe’: ‘111’, ‘value’: ‘{{LAST_SYNC_TIME|datetime}}’},
    {'field’: ‘lastEndDt’, ‘label’: ‘最后修改时间(结束)’, ‘type’: ‘string’, ‘describe’: ‘111’,‘value’:‘{{CURRENT_TIME|datetime}}’}
  ],
  “autoFillResponse”: true
}

请求参数详解

  • orgId: 固定值 71171bd492da45caba36011fe38abe99,表示组织ID。
  • page: 页码,默认值为 1
  • orderStatus: 多种状态组合,用于过滤不同状态的订单。
  • nature: 单据类型,固定值 1 表示订单。
  • lastStartDtlastEndDt: 分别表示最后修改时间的开始和结束,使用动态变量 {{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}

这些参数确保了我们能够精准地获取所需的数据,并且可以根据业务需求灵活调整。

数据请求与清洗

在发送请求时,我们使用POST方法,并将上述参数作为请求体发送到API端点。以下是一个示例请求:

POST /api/openapi/v1/erp/order/honour/agreement/header HTTP/1.1
Host: example.com
Content-Type: application/json

{
  “orgId”: “71171bd492da45caba36011fe38abe99”,
  “page”: “1”,
  “orderStatus”: “WAIT_DELIVERY,PART_DELIVERY,...”,
  “nature”: “1”,
  “lastStartDt”: “2023-01-01T00:00:00Z”,
  “lastEndDt”: “2023-01-31T23:59:59Z”
}

在接收到响应后,我们需要对数据进行清洗和转换,以确保其符合目标系统的要求。这包括但不限于:

  • 去除冗余字段
  • 格式化日期和数值
  • 根据业务规则进行字段映射和转换

数据转换与写入

清洗后的数据需要进行进一步的转换,以适应目标系统的数据结构。我们可以利用轻易云平台提供的可视化工具进行映射和转换。例如,将源系统中的字段 orderStatus 映射到目标系统中的 status 字段,并根据业务规则进行相应的值转换。

最终,处理好的数据将被写入目标系统,实现数据的无缝对接。

通过以上步骤,我们成功地调用了汤臣倍健营销云接口获取并加工了所需的数据,为后续的数据处理和分析奠定了基础。这一过程展示了如何利用轻易云平台高效地进行异构系统间的数据集成。 数据集成平台可视化配置API接口

使用轻易云数据集成平台将源数据转换为金蝶云星辰V2API接口格式并写入

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

API接口配置与元数据解析

根据提供的元数据配置,我们需要将源数据转换为金蝶云星辰V2API接口所需的格式。以下是该接口的具体配置:

{
  "api": "/jdy/v2/scm/sal_out_bound",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "id",
  "id": "id",
  "name": "id",
  "idCheck": true,
  "request": [
    {"field":"bill_source","label":"单据来源,固定传入ISV","type":"string","describe":"单据来源,固定传入APP","value":"ISV"},
    {"field":"bill_date","label":"出库日期,格式:2019-01-01","type":"datetime","describe":"出库日期,格式:2019-01-01","value":"{{approveDt|date}}"},
    {"field":"customer_id","label":"客户id","type":"string","describe":"客户信息","value":"_findCollection find id from 8c940730-bea3-3b6b-9120-72d220c2196b where number={clientAppNo}"},
    {"field":"remark","label":"单据备注","type":"string","value":"{remark}"},
    {"field":"contact_linkman","label":"联系信息-联系人","type":"string","value":"{contacts}"},
    {"field":"contact_phone","label":"联系信息-联系方式","type":"string","value":"{phone}"},
    {"field":"contact_address","label":"联系信息-详细地址","type":"string","value":"{shippingAddress}"},
    {"field":"dept_id","label":"部门","type":"string","value":"100000"},
    {"field":"custom_field","label":"自定义字段","type": "object", "children":[
      {"field": "custom_field__1__2uvcsl8c5w9s", "label": "营销云单号", "type": "string", "value": "{no}"},
      {"field": "custom_field__1__2xf99w1o8qzn", "label": "下单人", "type": "string", "value": "{salesmanName}"}
    ]},
    {"field": "material_entity", "label": "商品分录", "type": "array", 
        "children":[
        {"field": "material_number", "label": "商品", 
            "type": "string", 
            "value": "{{details.extNo}}"
        },
        {"field": "stock_id", 
            "label": "仓库",
            "type": string,
            "value" :1535518734226043904},
        {"field" : qty,
            "label" :数量,
            "type" : string,
            "value" :{{details.quantity}},
        },
        {
          // More fields...
        }
      ]
    }
  ]
}

数据请求与清洗

首先,我们需要从源系统中获取原始数据,并对其进行清洗和预处理。假设我们已经完成了这一步,并且得到了如下结构化的数据:

{
  "_Flot" : "...",
  "_Fmfg" : "...",
  "_Fexp" : "...",
  ...
}

数据转换

接下来,我们需要根据上述元数据配置,将清洗后的数据转换为目标平台所需的格式。以下是一个示例代码片段,展示如何实现这一过程:

import requests
import json

# 假设我们已经获取并清洗了源数据
source_data = {
    # 示例数据结构
}

# 构建请求体
request_payload = {
    'bill_source': 'ISV',
    'bill_date': source_data['approveDt'],
    'customer_id': get_customer_id(source_data['clientAppNo']),
    'remark': source_data['remark'],
    'contact_linkman': source_data['contacts'],
    'contact_phone': source_data['phone'],
    'contact_address': source_data['shippingAddress'],
    'dept_id': '100000',
    'custom_field': {
        'custom_field__1__2uvcsl8c5w9s': source_data['no'],
        'custom_field__1__2xf99w1o8qzn': source_data['salesmanName']
    },
    'material_entity': [
        {
            'material_number': detail['extNo'],
            'stock_id': '1535518734226043904',
            'qty': detail['quantity'],
            # 更多字段...
        } for detail in source_data['details']
    ]
}

# 将请求体转换为JSON字符串
payload_json = json.dumps(request_payload)

# 发起POST请求到金蝶云星辰V2API接口
response = requests.post(
    url='https://api.kingdee.com/jdy/v2/scm/sal_out_bound',
    headers={'Content-Type': 'application/json'},
    data=payload_json
)

# 检查响应状态码和内容
if response.status_code == 200:
    print('Data successfully written to Kingdee Cloud')
else:
    print('Failed to write data:', response.text)

数据写入

最后,我们将构建好的请求体通过HTTP POST方法发送到金蝶云星辰V2API接口,并检查响应状态以确保操作成功。

通过以上步骤,我们实现了从源系统到目标系统的数据无缝转换和写入。这一过程不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。

在实际应用中,可能还需要处理更多复杂的业务逻辑和异常情况,但以上示例提供了一个基本框架,展示了如何利用轻易云数据集成平台进行高效的数据ETL操作。 如何开发用友BIP接口

更多系统对接方案