数据集成与ETL模式下的金蝶云星空数据写入方法

  • 轻易云集成顾问-谢楷斌

某电子企业易仓数据对接金蝶云星空的实现案例

在本次技术分享中,我们将详细介绍如何通过轻易云数据集成平台,实现某电子企业的易仓系统和金蝶云星空之间的数据对接。具体方案为“Done-易仓-直接调拨单——>金蝶-直接调拨单”,目标是确保从易仓获取到的每一条调拨单据,能够准确、高效地写入到金蝶云星空。

首先,为了保证从易仓系统中抓取的数据不漏单,我们利用getTransferOrders API接口进行定时拉取。这一步至关重要,它不仅保证了业务数据的实时性,还能有效应对分页和限流问题。在实施过程中,我们设置了细致的分页处理逻辑,并增加重试机制来应对意外错误。

随后,将大批量的数据快速写入到金蝶云星空系统,是项目成功与否的关键。我们使用的是金蝶提供的batchSave API接口,通过这个接口可以一次性接收大量数据,从而大幅提升操作效率。为了进一步优化,采用了异步处理及并发控制手段,以确保在高峰期也能保持稳定运行。

另一个不可忽视的问题是两套系统间的数据格式差异。针对这一挑战,我们设计了一系列映射规则,借助轻松自定义化的数据转换功能,将不同结构、字段名等差异统一起来,确保无缝衔接。此外,在整个过程中的每个环节,都安排有实时监控与日志记录,从而及时发现和解决潜在问题,提高整体流程透明度和可靠性。

最后,需要特别注意的是异常处理与错误重试机制。当遇到无法预见的问题时,比如网络抖动或API返回异常状态码时,这些措施将会自动介入,通过多次尝试以最大程度上保证任务完成。同时,也不会阻塞后续正常任务执行,使得整个流程更加健壮。

总结上述步骤,本文案例展示了如何通过精细化设计,实现复杂业务场景中的跨系统集成,为其他类似项目提供可行参考。

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

调用易仓接口getTransferOrders获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用易仓接口getTransferOrders来获取并加工数据。

接口调用配置

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

{
  "api": "getTransferOrders",
  "effect": "QUERY",
  "method": "POST",
  "number": "to_code",
  "id": "to_code",
  "idCheck": true,
  "request": [
    {"field": "page", "label": "page", "type": "int", "value": "1"},
    {"field": "page_size", "label": "page_size", "type": "int", "value": "50"},
    {"field": "data_receiving_for", "label": "收货完成时间开始", "type": "string", "value": "{{LAST_SYNC_TIME|datetime}}"},
    {"field": "data_receiving_to", "label": "收货完成时间结束", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
    {"field": "user_id", "label": "当前user登录ID", "type": "string", "value":"58"},
    {"field":"warehouse_receipt","label":"目的仓状态","type":"int","value":"2"}
  ],
  “autoFillResponse”: true,
  “condition_bk”: [
    [
      {"field":"target_warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"},
      {"field":"warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"}
    ]
  ],
  “condition”: [
    [
      {"field":"target_warehouse_id","logic":"in","value":"19,4,8,11,7,6,22,12,5,16,26,25,9,28"},
      {"field":"warehouse_id","logic":"in","value":"19.4.8.11.7.6.22.12.5.16.26.25.9.28"}
    ]
  ]
}

请求参数详解

  • pagepage_size:用于分页请求,确保每次请求的数据量可控。
  • data_receiving_fordata_receiving_to:分别表示收货完成时间的开始和结束,通过动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来设置。
  • user_id:当前用户的登录ID,这里固定为58。
  • warehouse_receipt:目的仓状态,固定值为2。

条件过滤

为了确保我们只获取到目标仓库的数据,我们设置了两个条件过滤:

  • target_warehouse_idwarehouse_id:使用逻辑运算符"in"来限定目标仓库和源仓库的ID范围。

数据请求与清洗

在完成接口调用配置后,我们通过POST方法发送请求以获取调拨单数据。轻易云平台会自动处理响应数据,包括自动填充响应(autoFillResponse),这一步骤极大简化了开发者的工作。

数据转换与写入

在获取并清洗完数据后,下一步是将其转换为目标系统所需的格式,并写入金蝶系统。这部分工作通常包括字段映射、数据类型转换等操作。

例如,将从易仓获取到的调拨单号(to_code)映射到金蝶系统中的相应字段,并确保所有字段的数据类型匹配。

通过上述步骤,我们可以高效地完成从易仓到金蝶系统的数据集成。这不仅提高了业务流程的透明度和效率,还确保了数据的一致性和准确性。 如何开发用友BIP接口

数据集成与ETL转换:将源平台数据写入金蝶云星空

在数据集成的生命周期中,ETL(提取、转换、加载)是一个至关重要的环节。本文将深入探讨如何利用轻易云数据集成平台,将已集成的源平台数据进行ETL转换,并最终通过API接口写入金蝶云星空。

元数据配置解析

元数据配置是实现数据转换和写入的核心。以下是具体的元数据配置解析:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "...",
      "parser": {"name": "ConvertObjectParser", "params": "FNumber"},
      "value": "ZJDB01_SYS"
    },
    ...
  ],
  ...
}
  • api:指定调用的API接口,这里为batchSave
  • method:HTTP请求方法,使用POST
  • idCheck:是否进行ID检查,设置为true
  • request:请求参数列表,包含多个字段,每个字段都有详细的描述和配置。

请求参数详解

单据类型(FBillTypeID)
{
  "field": "FBillTypeID",
  "label": "单据类型",
  "type": "string",
  "describe": "...",
  "parser": {"name": "ConvertObjectParser", "params": "FNumber"},
  "value": "ZJDB01_SYS"
}
  • field: 字段名,对应金蝶云星空API中的参数。
  • label: 字段标签,用于标识字段含义。
  • type: 数据类型,这里为字符串。
  • parser: 数据解析器,将源平台的数据格式转换为目标平台所需格式。
  • value: 默认值或映射值,这里为标准直接调拨单类型。
销售组织(FSaleOrgId)
{
  "field": "FSaleOrgId",
  ...
  "parser": {"name": "ConvertObjectParser", "params": "FNumber"},
  ...
}

销售组织字段需要通过ConvertObjectParser解析器,将源平台的组织ID转换为金蝶云星空所需的格式。

调拨单明细信息(FBillEntry)
{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...,
                    {
                      ...,
                      {
                        ...,
                        {
                          ...,
                          {
                            ...,
                            {
                              ...,
                              {
                                ...,
                                {
                                  ...,
                                  {
                                    ...,
                                    {
                                      ...,
                                      {
                                        ...,
                                        {
                                          ...,
                                          {
                                            ...,
                                            {
                                              ...,
                                              { 
                                                field: 'FBillEntry',
                                                label: '明细信息',
                                                type: 'array',
                                                describe: '1',
                                                value: 'transfer_order_details',
                                                children: [
                                                  { 
                                                    field: 'FMaterialId',
                                                    label: '物料编码',
                                                    type: 'string',
                                                    describe: '基础资料',
                                                    parser: { name: 'ConvertObjectParser', params: 'FNumber' },
                                                    value: '_findCollection find FMaterialId_FNumber from 6019c615-1c31-3860-ac7f-b8508e4573cc where FCustMatNo={{transfer_order_details.product_sku}}'
                                                  },
                                                  { 
                                                    field: 'FQty',
                                                    label: '调拨数量',
                                                    type: 'string',
                                                    describe: '数量',
                                                    value: '{{transfer_order_details.quantity}}'
                                                  },
                                                  { 
                                                    field: 'FSrcStockId',
                                                    label: '调出仓库',
                                                    type: 'string',
                                                    describe: '基础资料',
                                                    parser: { name: 'ConvertObjectParser', params: 'FNumber' },
                                                    value: '{warehouse_id}',
                                                    mapping:{ target:'65efbdb61ff2e733b803043f', direction:'positive' }
                                                  },
                                                  { 
                                                    field:'FDestStockId', 
                                                    label:'调入仓库', 
                                                    type:'string', 
                                                    describe:'基础资料', 
                                                    parser:{ name:'ConvertObjectParser', params:'FNumber' }, 
                                                    value:'{target_warehouse_id}', 
                                                    mapping:{ target:'65efbdb61ff2e733b803043f', direction:'positive' }
                                                  },
                                                  { 
                                                     field:'FNoteEntry', 
                                                     label:'备注', 
                                                     type:'string', 
                                                     describe:'多行文本'  
                                                   }
                                                 ]
                                               }
                                             ]
                                           }
                                         }
                                       }
                                     }
                                   }
                                 }
                               }
                             }
                           }
                         }
                       }
                     }
                   }
                 }
               }
             }
           }
         }

明细信息字段是一个数组,包含多个子字段,如物料编码、调拨数量、调出仓库等。这些子字段同样需要通过解析器进行转换。

调用API接口

在完成所有字段的配置后,通过HTTP POST请求将数据发送到金蝶云星空API接口:

import requests

url = "<金蝶云星空API地址>"
headers = {"Content-Type":"application/json"}
data = {...} # 根据元数据配置生成的数据

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    print("数据成功写入金蝶云星空")
else:
    print(f"写入失败,状态码:{response.status_code}")

总结

通过上述步骤,我们可以利用轻易云数据集成平台,将源平台的数据进行ETL转换,并最终通过API接口写入金蝶云星空。在实际操作中,需要根据具体业务需求调整元数据配置,以确保数据准确无误地传输到目标系统。 如何对接金蝶云星空API接口

更多系统对接方案