使用轻易云平台将采购数据从聚水潭转换并导入金蝶云星空

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

聚水潭与金蝶云星空数据集成案例分享

在现代商业环境中,不同系统间的数据对接和同步已成为企业高效运营的关键要素之一。本文将详述如何通过轻易云数据集成平台,实现聚水潭采购入库数据到金蝶云星空的自动同步,具体案例以方案[自动]-采购入库同步_不关联-V1.0为基础。

首先,我们需要从聚水潭获取最新的采购入库信息。为了确保数据完整性和及时性,必须定时且可靠地抓取聚水潭接口(/open/purchasein/query)的数据。这要求我们在处理API调用时考虑分页和限流问题,以避免因频繁请求导致的接口响应延迟或请求失败。此外,通过实时监控与日志记录,可以有效追踪各个阶段的数据处理状态,确保无遗漏地捕获所有必要的信息。

当成功获取到所需的数据后,下一步是将这些数据批量写入到金蝶云星空。在这个过程中,我们需要注意几个技术重点:

  1. 分页与限流:由于大多数API都有访问限制,在设计过程中应合理设置分页策略,并通过队列机制控制并发请求数。
  2. 格式转换:两个不同系统之间的数据格式可能存在差异,需要对聚水潭返回的数据进行清洗、转换,使其符合金蝶云星空 batchSave API 所需的结构。
  3. 异常处理与重试机制:针对写入操作,如果出现异常情况,应配置完善的错误重试机制,以保证最终一致性和可靠性。
  4. 定制化映射对接:根据业务需求,对输入输出字段进行灵活匹配,以满足实际操作中的特定条件。

最后,为了最大程度保障此次集成过程中的稳定运行,还要特别关注如何高效实现大量数据快速写入,以及确保每一条记录都能正确无误地进入目标系统。借助轻易云强大的全生命周期管理能力,从源头上提升整个流程透明度及效率,让每一步都清晰可见、准确无误。 如何对接金蝶云星空API接口

调用聚水潭接口/open/purchasein/query获取并加工数据

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用聚水潭的/open/purchasein/query接口来获取并加工数据。

接口配置与调用

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

{
  "api": "/open/purchasein/query",
  "effect": "QUERY",
  "method": "POST",
  "number": "io_id",
  "id": "io_id",
  "idCheck": true,
  "request": [
    {
      "field": "page_index",
      "label": "第几页,从1开始",
      "type": "string",
      "describe": "第几页,从1开始",
      "value": "1"
    },
    {
      "field": "page_size",
      "label": "默认30,最大不超过50",
      "type": "string",
      "describe": "默认30,最大不超过50",
      "value": "50"
    },
    {
      "field": "modified_begin",
      "label": "修改起始时间",
      "type": "string",
      "describe": 
        "
        修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空
        ",
      "
        value
        "
        :
        "
        {{LAST_SYNC_TIME|datetime}}
        "
    },
    {
      "
        field
        "
        :
        "
        modified_end
        ",
      "
        label
        "
        :
        "
        修改结束时间
        ",
      "
        type
        "
        :
        "
        string
        ",
      "

          describe

          :

          修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空

          ,

          value

          :

          {{CURRENT_TIME|datetime}}

            }

            ],

            omissionRemedy

            :

            {

              crontab

              :

              2 6-7 * * *

                ,

                  takeOverRequest

                  :

                  [

                    {

                      field

                      :

                      modified_begin

                        ,

                          value

                          :

                          {{DAYS_AGO_2|datetime}}

                            ,

                              type

                              :

                              string

                                ,

                                  label

                                  :

                                  接管字段

                                    ,

                                      formModel

                                      :

                                      {

                                        enable

                                        :false}

                                          ,

                                            tableModel

                                            :{

                                              enable:false}

                                                ,

                                                  physicalModel

                                                  :{

                                                    enable:false}

                                                      }

                                                        ]

                                                          ,condition_bk:

                                                          [[{

                                                            field:wms_co_id,

                                                            logic:neqv2,

                                                            value:10404759}]

                                                              ],condition:

                                                              [[{

                                                                field:wms_co_id,

                                                                logic:neqv2,

                                                                value:10404759}]
                                                              ]
}

请求参数详解

在请求参数中,我们需要特别注意以下几个字段:

  • page_index: 表示当前请求的页码,从1开始。
  • page_size: 每页返回的数据条数,默认值为30,最大值不超过50。
  • modified_beginmodified_end: 分别表示数据修改的起始和结束时间,这两个字段必须同时存在,并且时间间隔不能超过七天。

这些参数确保了我们能够分页获取数据,并且只获取指定时间范围内的数据。

数据请求与清洗

在实际操作中,我们会通过POST方法发送请求到/open/purchasein/query接口。以下是一个典型的请求示例:

{
  "page_index": 1,
  "page_size": 50,
  ...
}

为了确保数据的完整性和准确性,我们需要对返回的数据进行清洗和处理。例如,去除重复的数据、格式化日期字段等。

异常处理与补偿机制

在实际操作中,不可避免地会遇到各种异常情况,例如网络故障、接口超时等。为了应对这些情况,我们可以配置补偿机制(omissionRemedy),例如通过定时任务(crontab)重新发起请求:

{
  ...
  omissionRemedy: {
    crontab: '2 6-7 * * *',
    takeOverRequest: [
      {
         field: 'modified_begin',
         value: '{{DAYS_AGO_2|datetime}}',
         type: 'string',
         label: '接管字段'
       }
     ]
   }
}

这种方式可以确保在异常情况下仍能获取到完整的数据。

条件过滤

为了避免获取无效或冗余的数据,我们可以设置条件过滤。例如,通过以下条件过滤掉特定公司ID的数据:

{
  condition_bk: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]],
  condition: [[{field: 'wms_co_id', logic: 'neqv2', value: '10404759'}]]
}

这种方式可以有效减少无效数据的传输,提高系统效率。

通过上述步骤,我们可以高效地调用聚水潭接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。 用友与MES系统接口开发配置

使用轻易云数据集成平台将采购入库数据转换并写入金蝶云星空API

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

API接口配置

为了实现这一目标,我们需要配置金蝶云星空的batchSave API接口。该接口采用POST方法,支持批量保存操作。以下是具体的元数据配置:

{
    "api": "batchSave",
    "method": "POST",
    "idCheck": true,
    "operation": {
        "rowsKey": "array",
        "rows": 1,
        "method": "batchArraySave"
    },
    "request": [
        {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"RKD01_SYS","mappingDirection":"positive"},
        {"field":"FBusinessType","label":"业务类型","type":"string","value":"CG"},
        {"field":"FBillNo","label":"单据编号","type":"string","value":"{io_id}"},
        {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"BD_OwnerOrg"},
        {"field":"FOwnerIdHead","label":"货主","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
        {"field":"FDate","label":"入库日期","type":"string","value":"{io_date}"},
        {"field":"FStockOrgId","label":"收料组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
        {"field":"FDemandOrgId","label":"需求组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
        {"field": "FPurchaseOrgId", "label": "采购组织", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_function case '{wms_co_id}' when '13328244' then '101' when '{10404759}' then '{101}' when '{12612085}' then '{100}' else '{101}' end"},
        {"field": "FSupplierId", "label": "供应商", "type": "string",  "parser":{"name" : "ConvertObjectParser", "params" : "FNumber"}, "value" : "_findCollection find supplier_code from 9a177523-62a5-3767-b094-6897f5abf61e where supplier_id={supplier_id}"},
        {"field":  "FDeliveryBill",  "label" : "送货单号",  "type" : "string"},
        {"field":  "FTakeDeliveryBill",  "label" : "提货单号",  "type" : "string"},
        {"field":  "F_TLWD_Assistant",  "label" : "出库类型",  "type" : "string",  "value" : "_function case  when '{remark}' like '%返修%' then '{02}' else '{01}' end",  "parser":{"name" :"ConvertObjectParser",   params: FNumber}},
        {
            field: FInStockFin,
            label: 财务信息,
            type: object,
            children: [
                {
                    field: FSettleOrgId,
                    label: 结算组织,
                    type: string,
                    parser: { name: ConvertObjectParser, params: FNumber },
                    value:
                        _function case { wms_co_id } when { 13328244 } then { 101 } else { 100 } end,
                    parent: FInStockFin
                },
                {
                    field: FPayOrgId,
                    label: 付款组织,
                    type: string,
                    parser: { name: ConvertObjectParser, params: FNumber },
                    value:
                        _function case { wms_co_id } when { 13328244 } then { 101 } else { 100 } end,
                    parent: FInStockFin
                }
            ]
        },
        {
            field: FInStockEntry,
            label: 明细信息,
            value: items,
            type: array,
            children: [
                {
                    field:FMaterialId, 
                    label:"物料编码",
                    type:"string",
                    parser:{name:"ConvertObjectParser",params:"FNumber"}, 
                    value:"{{items.sku_id}}",
                    parent:"FInStockEntry"
                },
                {
                     field:"FMustQty",
                     label:"应收数量",
                     type:"string",
                     value:"{{items.qty}}"
                 },
                 {
                     field:"FRealQty",
                     label:"实收数量",
                     type:"string",
                     value:"{{items.qty}}"
                 },
                 {
                     field:"FTaxPrice",
                     label:"含税单价",
                     type:"string",
                     value:"{{items.cost_price}}"
                 },
                 {
                      field:FEntryTaxRate, 
                      label:“税率(%)”, 
                      type:“字符串”, 
                      值:“_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FEntryTaxRate where={\"content.FBillNo\":{\"$eq\":\"{remark}\"},\"content.FMaterialId\":{\"$eq\":\"{{items.sku_id}}\"}}”,
                      parent:“FInStockEntry”
                  },
                  {
                       field:FStockId, 
                       label:“仓库”, 
                       类型:“字符串”, 
                       分析器:{名称:“ConvertObjectParser”,参数:“编号”}, 
                       值:“{wms_co_id}” ,
                       parent:“FInStockEntry”
                   },
                   {
                        字段:备注,
                        标签:备注,
                        类型:字符串,
                        值:“{remark}”,
                        父母:“库存条目”
                   }
                   ...
               ]
           }
       ],
       otherRequest:[{"字段“:表单ID”,“标签“:业务对象表单ID”,“类型“:字符串”,“值“:STK_InStock”},
       ...
   ]
}

数据解析与转换

在上述配置中,我们使用了多种解析器和函数来处理不同字段的数据。例如:

  1. ConvertObjectParser:用于将源系统中的编码转换为金蝶云星空所需的编码。

    {"field": "FOwnerIdHead", ... , "parser":{"name": "ConvertObjectParser", ... }, ... }
  2. Function Case:用于根据条件动态生成值。

    {"field": "FOwnerIdHead", ... , “值”: “_功能案例'{wms_co_id}'时‘13328244’然后‘101’时‘10404759’然后‘101’时‘12612085’然后‘100’时‘13328413’然后‘100’否则‘101’结束”,...}
  3. MongoQuery:用于从MongoDB数据库中查询特定字段的值。

    {"字段“:FSRCBillNo”,“标签“:源单编号”,“类型“:字符串”,“值“:“_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FBillNo where={\"content.FBillNo\":{\"$eq\":\"{remark}\"}}” ,...}

数据写入

在所有字段都经过解析和转换后,最终的数据结构将通过POST请求发送到金蝶云星空的batchSave API接口。以下是一个示例请求体:

{
    “FormId”: “STK_InStock”,
    “IsAutoSubmitAndAudit”: true,
    “操作”: “保存”,
    “IsVerifyBaseDataField”: true,
    “模型”: [
         {
             “FBillTypeID”: {“编号”: “RKD01_SYS”},
             ...
             “明细信息”: [
                 {
                     “物料编码”: {“编号”: “12345”},
                     ...
                 }
             ]
         }
     ]
}

通过这种方式,我们可以确保源平台的数据经过ETL转换后,以正确的格式写入到目标平台金蝶云星空,从而实现系统间的数据无缝对接。

总结

本文详细探讨了如何使用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过配置金蝶云星空API接口,实现数据的最终写入。这一步骤不仅确保了数据格式的一致性,还提高了系统间的数据传输效率和准确性。 钉钉与ERP系统接口开发配置

更多系统对接方案