如何通过轻易云平台实现流量数据的高效集成与管理

  • 轻易云集成顾问-吴伟

简道云数据集成到金蝶云星空:流量成交表(二合一)=> 销售出库单

在复杂的业务场景中,如何高效且准确地将简道云的数据集成到金蝶云星空系统,是许多企业关注的重点。本文分享了一个实际运行的案例,通过轻易云的数据集成平台,实现了从简道云获取流量成交表(二合一),并将数据批量写入金蝶云星空中的销售出库单。

为了确保整个过程能够无缝进行,我们利用了以下关键技术特性与API接口:

数据获取与处理

首先,通过调用简道云提供的API接口/api/v2/app/{app_id}/entry/{entry_id}/data来抓取所需数据。这一步需要特别注意分页和限流问题,因为大量的数据请求有可能导致接口响应时间增加甚至失败。在这个过程中,我们实现了一套定时可靠的抓取机制,使得每次调用都尽可能成功,并监控借助于内置的数据质量监控功能及时发现异常情况。

数据转换及自定义逻辑

由于简道云和金蝶云星空在数据结构上存在差异,因此我们使用轻易平台提供的自定义数据转换工具,对抓取到的数据进行了格式转换。这一步包括但不限于字段映射、单位换算以及日期格式调整,以适应目标系统需求。通过可视化设计工具,操作人员无需编写繁琐代码,即可直观完成这些任务,大大提升了工作效率。

数据批量写入与性能优化

当所有准备工作就绪后,将处理后的数据以高吞吐量方式批量写入到金蝶云星空,这是至关重要的一步。我们采用金蝶 API batchSave 进行操作,在此过程中,确保对接异常处理机制和错误重试策略有效实施。一旦发现任何失误或不一致,可以即时告警并自动重新尝试,以保证最终结果正确无误。同时,我们还配备集中监控告警系统,实时跟踪整个任务状态及性能表现,让管理者对全流程执行情况心中有数。

通过以上几个环节,不仅高效解决了如何从简道快速、安全地提取大量交易记录,还顺利实现了向金蝶上传整合销售数据信息,从而达到了强化业务透明度,提高运营效率目标。在下文中,将进一步详细介绍具体方案步骤与实施细节,包括请求参数配置、日志记录方法等。 如何对接钉钉API接口

调用简道云接口获取并加工数据的技术实现

在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用简道云接口/api/v2/app/{app_id}/entry/{entry_id}/data来获取并加工数据。

接口调用配置

首先,我们需要配置接口调用的元数据。以下是具体的配置细节:

{
  "api": "/api/v2/app/{app_id}/entry/{entry_id}/data",
  "effect": "QUERY",
  "method": "POST",
  "number": "_widget_1683509935530",
  "id": "_id",
  "idCheck": true,
  "request": [
    {
      "field": "appId",
      "label": "应用ID",
      "type": "string",
      "describe": "应用ID",
      "value": "642307c010703500087839ac"
    },
    {
      "field": "entryId",
      "label": "表单ID",
      "type": "string",
      "describe": "表单ID",
      "value": "6438b3adacef5e0009b2e467"
    },
    {
      "field": "fields",
      "label": "需要查询的字段",
      "type": "string",
      "describe": "多个字段以逗号隔开,默认不传入则输出所有字段",
      "parser": {
        "name": "StringToArray",
        "params": ","
      }
    },
    {
      "field": "limit",
      "label": "每页返回数量",
      "type": "string",
      "describe": "[1~100],默认10条记录。",
      ...

请求参数解析

在请求参数中,我们定义了多个字段,包括应用ID(appId)、表单ID(entryId)、需要查询的字段(fields)以及每页返回数量(limit)。这些参数确保我们能够灵活地控制数据请求的范围和内容。

例如,以下是一个典型的请求体:

{
  ...
  {
    ...
    {
        ...
        {
            ...
            {
                ...
                {
                    ...
                    {
                        ...
                        {
                            ...
                            {
                                ...
                                {
                                    ...
                                    {
                                        ...
                                        {
                                            ...
                                            {
                                                ...
                                                {
                                                    ...
                                                    {
                                                        ...
                                                        {
![如何开发钉钉API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image)
### 数据集成与ETL转换:轻易云平台至金蝶云星空API接口

在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式。本文将详细介绍如何通过轻易云数据集成平台,将流量成交表(二合一)的数据转换并写入金蝶云星空API接口。

#### 配置元数据

在进行ETL转换之前,我们需要配置好元数据,以确保数据能够正确映射到目标平台的API接口。以下是关键的元数据配置:

```json
{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "FBillNo",
  "id": "FBillNo",
  "name": "FBillNo",
  "idCheck": true,
  "request": [
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSCKD01_SYS"},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{_widget_1683509935530}"},
    {"field":"FDate","label":"日期","type":"datetime","describe":"日期","value":"{_widget_1680516292932}"},
    {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"销售组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{_widget_1704940494753}"},
    {"field":"FCustomerID","label":"客户","type":"string","describe":"客户","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{_widget_1704940494720}"},
    {"field":"FStockOrgId","label":"发货组织","type":"string","describe":"发货组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{_widget_1704940494753}"},
    {"field":"FNote","label":"备注","type":"string","describe":"备注","value":"{_widget_1680516292942}"},
    {
      "field": "FEntity",
      "label": "明细信息",
      "type": "array",
      "describe": "明细信息",
      "value": "_widget_1680764252483",
      "children": [
        {"field": "FMaterialID", "label": "物料编码", "type": "string", "describe": "物料编码", 
            "parser":{"name": "ConvertObjectParser", 
            "params": 
            "FNumber"}, 
            "value":
            "{{_widget_1680764252483._widget_1683178621266}}"
        },
        {"field": 
            "FRealQty", 
            "label":
                "实发数量", 
                "type":
                    "int", 
                    "describe":
                        "实发数量", 
                        "value":
                        "{{_widget_1680764252483._widget_1680768645007}}"
        },
        {"field":
            "FTaxPrice", 
            "label":
                "含税单价", 
                "type":
                    "float", 
                    "describe":
                        "含税单价", 
                        "value":
                        "_function round({{_widget_1680764252483._widget_1680768644995}},2)"
        },
        {"field":
            "FOwnerTypeId", 
            "label":
                "货主类型", 
                "type":
                    "string", 
                    "describe":
                        "货主类型", 
                        "value":
                        "BD_OwnerOrg"
        },
        {"field":
            FOwnerId, 
            label:
                HuoZhu, 
                type:
                    string, describe:
                        HuoZhu, parser:{
                            name: ConvertObjectParser, params: FNumber}, value:{ _ widget _1704940494753}},
            { field: FStockID, label: CangKu, type: string, describe: CangKu, parser:{ name: ConvertObjectParser, params: FNumber}, value:{ _ widget _1704940494655}},
            { field: FIsFree, label: ShiFuZengPin, type: bool, describe: ShiFuZengPin, value:_function CASE '{{ _ widget _1680764252483._ widget _1680768644995}}' WHEN '0' THEN '1' WHEN ' ' THEN '1' ELSE '0' END},
            { field: FEntrynote, label: BeiZhu, type: string, describe: BeiZhu},
            { field: Flot, label: PiHao, type:string,value:"123",parser:{ name:"ConvertObjectParser",params:"FNumber"}},
            { field:FEntryTaxRate,label:"ShuiLv",type:"string",value:"1"}
          ]
        }
      ],
      otherRequest:[
        { field:"FormId", label:"YeWuDuiXiangBiaoDanId", type:"string", describe:"YeWuDuiXiangBiaoDanId ", value:"SAL_OUTSTOCK"},
        { field:"Operation ", label:"ZhiXingDeCaoZuo ", type:"string ", describe:"ZhiXingDeCaoZuo ", value:"BatchSave"},
        { field:"IsAutoSubmitAndAudit ", label:"TiJiaoBingShenHe ", type:"bool ", describe:"TiJiaoBingShenHe ", value:true},
        { field:"IsVerifyBaseDataField ", label:"YanZhengJiChuZiLiao ", type:"bool ", describe:"YanZhengJiChuZiLiao ", value:true},
        { field :"SubSystemId ", label :"XiTongMoKuai ", type :"string ", describe :"XiTongMoKuai ", value :"21"},
        { field :"InterationFlags ", label :"YunXuFuKuCun ", type :"string ", describe :"YunXuFuKuCun ", value :"STK_InvCheckResult"}
      ],
      operation:{
        rowsKey : array,
        rows :1,
        method : batchArraySave
     }
}

数据请求与清洗

在数据请求阶段,我们从源系统(如流量成交表)获取原始数据,并进行必要的清洗和标准化处理。这个过程包括去除冗余字段、标准化日期格式、校验数据完整性等操作。

数据转换与写入

  1. 字段映射与转换

    • 使用ConvertObjectParser对字段进行解析和转换。例如,FBillTypeIDFSaleOrgId等字段需要通过ConvertObjectParser将内部编码转为金蝶云星空所能识别的编码。
    • 对于复杂的数据结构,如明细信息(FEntity),需要逐层解析和映射。例如,物料编码(FMaterialID)同样需要通过ConvertObjectParser进行转换。
  2. 特殊字段处理

    • 对于一些特殊字段,如含税单价(FTaxPrice),我们使用自定义函数进行处理。例如,通过 _function round({{_widget_1680764252483._widget_1680768644995}},2) 保证价格保留两位小数。
    • 对于是否赠品(FIsFree)字段,通过条件判断函数 _function CASE '{{ _ widget _1680764252483._ widget _1680768644995}}' WHEN '0' THEN '1' WHEN ' ' THEN '1' ELSE '0' END 来确定其值。
  3. 批量保存

    • 配置 operation.rowsKey = array, operation.rows = 1, operation.method = batchArraySave 来实现批量保存操作。
    • 设置 otherRequest.IsAutoSubmitAndAudit = true, 确保提交并审核操作自动完成。
  4. API调用

    • 最后,通过 POST 请求调用金蝶云星空的 batchSave API,将处理后的数据写入目标系统。确保所有必填字段均已正确填写,并且符合 API 接口要求。

实际案例

假设我们从源系统获取到如下原始数据:

{
  "_widget_1683509935530": "SO20231001",
  "_widget_1680516292932": "2023-10-01T00:00:00",
  "_widget_1704940494753": ["ORG001"],
  "_widget_1704940494720": ["CUS001"],
  "_widget_1704940494655":["STK001"],
  "_widget_1680516292942":["Test Note"],
  "_widget_1680764252483":[
    {
      "_widget_1683178621266":["MAT001"],
      "_widget_1680768645007":[100],
      "_widget_1680768644995":[50]
    }
  ]
}

经过 ETL 转换后,生成如下符合金蝶云星空 API 接口要求的数据:

{
  ...
}

通过上述步骤,我们实现了从源系统到目标系统的数据无缝对接,确保了数据的一致性和准确性。这不仅提高了业务效率,也为企业的数据管理提供了强有力的支持。 打通金蝶云星空数据接口

更多系统对接方案