轻易云平台在ETL转换与金蝶云星空API写入中的应用

  • 轻易云集成顾问-何语琴

吉客云数据集成到金蝶云星空:生产领料业务的系统对接实现

本文分享了吉客云与金蝶云星空在“其他出库-生产领料”场景下的数据集成方案。通过此次案例,展示如何有效地利用API接口进行数据获取、转换以及批量写入操作。

为实现吉客云erp.storage.goodsdocout.v2接口数据的定时可靠抓取,我们首先设计了一套自动化任务调度机制,用于定期调用吉客云API并实时监控其执行状态。同时,对获取的数据进行分页处理和限流控制,以确保大规模数据传输过程中的性能稳定性。

为了应对吉客云与金蝶云星空之间的数据格式差异问题,自定义了专属的数据转换逻辑,将原始数据统一映射至符合金蝶云星空规范的结构。在此基础上,通过可视化数据流设计工具,使整个流程从配置到管理都更加直观简便,并且支持高吞吐量的数据写入能力,实现大量出库业务记录快速导入。

在向金蝶云星空写入过程中采用其batchSave API,为保证每一批次保存操作的高效性与准确性,引入了集中式监控和告警系统。这不仅能够实时跟踪每个任务节点,还能及时发现并处理异常情况。此外,该方案还特别关注错误重试机制,确保即使出现故障,也能做到持续恢复和准确回写。

通过这套完整、高效且兼具灵活性的解决方案,不仅保障了生产领料业务中各项关键环节无缝衔接,同时极大提升了企业内部数据信息的一致性和准时性交付水平。 钉钉与ERP系统接口开发配置

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

在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用吉客云接口 erp.storage.goodsdocout.v2 获取并加工数据,以实现其他出库-生产领料的集成方案。

接口配置与请求参数

首先,我们需要配置调用吉客云接口所需的元数据。以下是该接口的详细配置:

{
  "api": "erp.storage.goodsdocout.v2",
  "effect": "QUERY",
  "method": "POST",
  "number": "goodsdocNo",
  "id": "goodsdocNo",
  "idCheck": true,
  "request": [
    {"field": "pageIndex", "label": "分页页码", "type": "string"},
    {"field": "pageSize", "label": "分页页数", "type": "string", "value": "50"},
    {"field": "goodsDocNo", "label": "出库单号", "type": "string"},
    {"field": "startDate", "label": "创建时间的起始时间", "type": "string", 
        "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field": "endDate", 
        "label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"},
    {"field":"inouttype","label":"类型","type":"string","describe":
        "201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货 
        206生产领料 207组装拆卸出库 208翻新出库 209报废出库 
        210残次品出库 211倒冲出库 212 包材出库 
        215维修还厂 231成本调整出库","value":"206"},
    {"field":"sourceBillNo","label":"来源单号","type":"string"},
    {"field":"warehouseCode","label":"仓库编号","type":"string"},
    {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
    {"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
    {"field":"userName","label":"创建人名称","type":"string"},
    {"field":"outBillNo","label":"外部单号(全模糊匹配)","type":"string"},
    {"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"},
    {"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"},
    {"field":"selelctFields",
        "label":"返回参数",
        "type":
        "string",
        "value":
            "goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.quantity,goodsDocDetailList"}
   ],
   ...
}

请求参数解析

  1. 分页参数pageIndexpageSize 用于控制分页请求,确保每次请求的数据量适中。
  2. 时间范围startDateendDate 分别表示数据同步的起始和结束时间,使用模板变量 {{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}} 动态生成。
  3. 业务类型inouttype 固定为 206,表示生产领料。
  4. 返回字段:通过 selelctFields 指定需要返回的数据字段,包括主表和明细表字段。

数据请求与清洗

在完成接口配置后,我们可以发起数据请求。假设我们需要获取最近一次同步后的所有生产领料记录,可以构造如下请求:

{
  "pageIndex": "1",
  "pageSize": "50",
  ...
}

平台会根据配置自动填充 startDateendDate 等动态参数,并发送 POST 请求至吉客云接口。

数据清洗与转换

收到响应后,需要对数据进行清洗和转换。以下是一个典型的响应示例:

{
   ...
   {
      goodsdocNo: 'GD12345',
      inOutDate: '2023-10-01',
      gmtCreate: '2023-10-01T12:00:00Z',
      inouttype: '206',
      vendCustomerCode: 'V001',
      warehouseCode: 'WH001',
      warehouseName: 'Main Warehouse',
      inOutReason: 'Production Material',
      redStatus: '0',
      financeBillStatus: '1',
      goodsDocDetailList: [
         {
            goodsNo: 'G001',
            goodsName: 'Material A',
            quantity: '100'
         },
         ...
      ]
   }
   ...
}

根据元数据配置中的条件过滤器,我们仅保留 quantity > 0 的记录。同时,通过自动填充响应功能,将嵌套结构展平,便于后续处理。

异常处理与补偿机制

为了确保数据完整性,平台提供了异常处理与补偿机制。例如,通过定时任务(crontab)定期检查并补偿遗漏的数据:

{
   ...
   omissionRemedy: {
       crontab: '1 2 * * *', // 每天凌晨2点执行
       takeOverRequest:[
           {
               field:"startDate",
               value:"_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )"
           }
       ]
   }
}

该机制确保即使在网络波动或系统故障情况下,也能及时补偿缺失的数据。

通过以上步骤,我们成功实现了调用吉客云接口获取并加工生产领料数据,为后续的数据转换与写入奠定了基础。这一过程展示了轻易云平台在异构系统集成中的强大能力和灵活性。 钉钉与MES系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例

在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据进行ETL(Extract, Transform, Load)转换,并最终通过金蝶云星空API接口写入目标平台。

数据请求与清洗

在数据请求阶段,我们从源平台获取原始数据,并对其进行初步清洗和过滤。假设我们已经完成了这一阶段,接下来我们将重点放在如何将这些清洗后的数据转换为金蝶云星空API能够接收的格式。

数据转换与写入

为了实现这一目标,我们需要配置元数据,以确保数据能够正确地映射到金蝶云星空API所需的字段中。以下是具体的元数据配置示例:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "merge",
    "field": "goodsDocDetailList_ownerName,inOutMonth",
    "bodyName": "items",
    "bodySum": ["goodsDocDetailList_quantity"],
    "header": ["inOutMonth", "goodsDocDetailList_ownerName"],
    "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"]
  },
  "request": [
    {
      "field": "FJKYNo",
      "label": "吉客云单号",
      "type": "string",
      "describe": "单据编号",
      "value": "{goodsdocNo}"
    },
    {
      ...
    }
  ],
  ...
}

配置解析

  1. API调用配置

    • api: 指定要调用的金蝶云星空API接口,这里使用batchSave
    • effect: 设置为EXECUTE,表示执行操作。
    • method: 使用POST方法提交请求。
  2. 操作参数

    • rowsKey: 指定数组键名,这里设置为array
    • rows: 指定处理行数,这里设置为1。
    • method: 合并方法,设置为merge
    • field: 指定合并字段,这里是goodsDocDetailList_ownerName,inOutMonth
    • bodyName: 设置请求体名称为items
    • bodySum: 指定需要汇总的字段,这里是goodsDocDetailList_quantity
  3. 请求参数映射

    • 每个字段都有详细的配置,包括字段名、标签、类型、描述和值。例如:
      {
      ...
      {
       "field": "FStockOrgId",
       ...
       "value": "{goodsDocDetailList_ownerName}",
       ...
      }
      ...
      }
    • 使用占位符如 {goodsdocNo}{inOutMonth} 来动态填充实际值。
  4. 明细信息

    • 配置子字段,如物料编码、库存状态、发货仓库和实发数量等。例如:
      {
      ...
      {
       ...
       {
         ...
         {
           ...
           {
             ...
             {
               ...
               {
                 ...
                 {
                   ...
                   {
                     ...
                     {
                       ...
                       {
                         ...
                         {
                           ...
                           {
                             ... 
                             {"field":"FMATERIALID","label":"物料编码","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.goodsDocDetailList_goodsNo}}","parent":"FEntity"},
                             {"field":"FStockStatusId","label":"库存状态","type":"string","value":"KCZT01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
                             {"field":"FSTOCKID","label":"发货仓库","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.warehouseCode}}","parent":"FEntity"},
                             {"field":"FQty","label":"实发数量","type":"string","value":"{{items.goodsDocDetailList_quantity}}"}
                           }
                         }
                       }
                     }
                   }
                 }
               }
             }
           }
         }
       }
      }
  5. 其他请求参数

    • 配置业务对象表单ID、是否自动提交并审核等。例如:
      {
      ...
      {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_MisDelivery"},
      {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"},
      {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"},
      {"field":"Operation","label":"执行的操作","type":"string","value":"Save"},
      {"field":"InterationFlags","label":"","负库存"type:"string","value":"STK_InvCheckResult"}

实际应用

通过上述配置,我们可以确保从源平台获取的数据经过ETL转换后,能够准确地映射到金蝶云星空API所需的格式。这样一来,不同系统间的数据无缝对接得以实现,大大提升了业务流程的效率和透明度。

在实际应用中,可以根据具体需求调整元数据配置,以适应不同的数据结构和业务逻辑。这种灵活性使得轻易云数据集成平台成为一个强大的工具,能够满足各种复杂的数据集成需求。 如何开发用友BIP接口

更多系统对接方案