ETL转换及数据写入金蝶云星空API详解

  • 轻易云集成顾问-杨嫦

案例分享:泛微OA-Http数据集成到金蝶云星空

在实际项目中,实现不同系统之间的数据对接和集成,始终是企业信息化建设中的一个重要环节。在这里,我们以“SD001-生产订单审批 泛微=>金蝶采购订单--429”为例,展示如何通过API接口实现泛微OA与金蝶云星空的无缝连接。

数据获取与处理

首先,通过调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest来抓取生产订单审批数据。为了确保数据传输的可靠性和准确性,我们设计了定时任务,以便定时从泛微OA后端稳定地拉取最新的待同步数据。

实施过程中遇到的一大挑战是如何处理分页和限流问题。由于批量拉取的数据可能非常大,一次性请求会导致网络压力过大甚至失败。因此,在每次请求中采用分页机制,每页获取一定数量的数据,并根据API返回的限流提示,自适应调整抓取频率。这种方式有效保证了高吞吐量数据环境下的持续稳定运行。

数据转换与写入

在拿到泛微OA的数据后,还需要根据业务需求进行相应的数据转换。例如,将复杂JSON结构解析并映射为符合金蝶云星空需求格式。一些特定字段可能存在名称或类型上的差异,这就需要我们自定义转换逻辑,确保最终写入到金蝶云的是正确且完整的信息。

我们使用了轻易云平台提供的可视化数据流设计工具,使得整个数据处理过程更加直观易管理。从源头提取、转换、再到目标系统写入,都能以图形界面的形式展现出来,大幅降低出错概率并提高开发效率。

最终,通过调用金蝶云星空的batchSave API,实现大量审批单据快速、高效地批量写入目标数据库。这一步尤其考验系统兼容性和响应速度,因此我们也特别注重异常处理与错误重试机制,以防止因网络波动等原因造成部分记录丢失或重复导入。

实时监控与日志记录

为进一步提升透明度及便于运维,整个流程还加入了实时监控功能。在任何一个步骤出现问题时,可以通过集中式监控告警系统立即捕获并通知相关维护人员。同时详细记录每一条操作日志,从而做到有迹可循,为后续排查问题提供关键依据。 如何开发用友BIP接口

调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将详细探讨如何通过轻易云数据集成平台调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest来获取并加工数据。

接口概述

该接口用于从泛微OA系统中获取工作流请求的数据。根据元数据配置,我们需要使用GET方法进行调用,并传递特定的参数以获取所需的数据。

元数据配置解析

元数据配置如下:

{
  "api": "/api/workflow/paService/getWorkflowRequest",
  "effect": "QUERY",
  "method": "GET",
  "number": "requestId",
  "id": "requestId",
  "name": "id",
  "idCheck": true,
  "request": [
    {"field": "workflowId", "label": "e9流程id", "type": "string", "value": "429"},
    {"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value": "8183a586-bdfb-3e93-8573-d5e81803c5ff"}
  ],
  "autoFillResponse": true,
  "condition_bk": [
    [{"field": "currentNodeName", "logic": "like", "value":"归档"}, {"field":"detail_0.xm","logic":"like","value":"1.wafer"}]
  ],
  "condition":[
    [{"field":"detail_0.xm","logic":"like","value":"wafer"}]
  ]
}

数据请求与清洗

  1. API调用参数设置

    • workflowId: 固定值为429,表示特定的工作流ID。
    • workflowIdList: 固定值为8183a586-bdfb-3e93-8573-d5e81803c5ff,表示中间方案ID。
  2. 条件过滤

    • 主条件:detail_0.xm like 'wafer'
    • 备用条件:currentNodeName like '归档' AND detail_0.xm like '1.wafer'

这些条件确保我们只获取符合特定业务需求的数据。

实现步骤

  1. 构建请求URL: 根据元数据配置,我们需要构建如下URL:

    /api/workflow/paService/getWorkflowRequest?workflowId=429&workflowIdList=8183a586-bdfb-3e93-8573-d5e81803c5ff
  2. 发送HTTP GET请求: 使用轻易云平台提供的HTTP模块发送GET请求,并附带必要的认证信息(如有)。

  3. 处理响应数据: 响应数据将自动填充(autoFillResponse: true),我们可以直接对返回的数据进行处理和清洗。

  4. 应用条件过滤: 根据主条件和备用条件对返回的数据进行过滤,以确保最终结果符合业务需求。

技术案例

以下是一个具体的技术案例,展示了如何通过轻易云平台实现上述步骤:

import requests

# 构建请求URL
base_url = 'http://oa.example.com/api/workflow/paService/getWorkflowRequest'
params = {
    'workflowId': '429',
    'workflowIdList': '8183a586-bdfb-3e93-8573-d5e81803c5ff'
}

# 发起GET请求
response = requests.get(base_url, params=params)

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 应用主条件过滤
    filtered_data = [item for item in data if 'wafer' in item['detail_0']['xm']]

    # 如果主条件无匹配结果,应用备用条件过滤
    if not filtered_data:
        filtered_data = [item for item in data if '归档' in item['currentNodeName'] and '1.wafer' in item['detail_0']['xm']]

    # 输出处理后的数据
    print(filtered_data)
else:
    print(f"Error: {response.status_code}")

通过上述代码,我们可以实现从泛微OA系统中获取并加工特定工作流请求的数据。这个过程不仅展示了如何调用API,还演示了如何根据业务需求对返回的数据进行清洗和过滤。

总结来说,通过轻易云平台调用泛微OA接口并处理返回的数据,可以极大地提升业务流程的自动化程度和效率。 打通金蝶云星空数据接口

轻易云数据集成平台ETL转换及数据写入金蝶云星空API接口

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

数据请求与清洗

首先,我们从源系统泛微中获取生产订单审批数据。该阶段主要包括数据的提取和初步清洗,以确保数据的准确性和完整性。这一步骤虽然重要,但本文重点在于下一阶段,即数据转换与写入。

数据转换与写入

在完成初步的数据提取和清洗后,接下来我们需要将这些数据转换为金蝶云星空API接口所能接受的格式,并通过API接口将其写入目标平台。以下是详细步骤:

  1. 配置API请求参数

    根据元数据配置,我们需要设置一系列参数来构建API请求。以下是主要字段及其配置:

    {
     "api": "batchSave",
     "effect": "EXECUTE",
     "method": "POST",
     "idCheck": true,
     "request": [
       {
         "field": "FBillTypeID",
         "label": "单据类型",
         "type": "string",
         "describe": "单据类型\n标准采购订单:CGDD01 SYS\n标准委外订单:CGDD02 SYS\n直运采购订单:CGDD03 SYS\n资产采购订单:CGDD04 SYS\n费用采购订单:CGDD05 SYS\n补料采购订单:CGDD06 SYS\nVMI采购订单:CGDD07 SYS\n现购订单:CGDD08 SYS\n分销购销采购订单:CGDD09 SYS",
         "parser": {"name": "ConvertObjectParser", "params": "FNumber"},
         "value": "CGDD01_SYS"
       },
       ...
     ],
     ...
    }
  2. 字段映射与解析

    每个字段都需要进行映射和解析。例如,FBillTypeID字段表示单据类型,其值为CGDD01_SYS,这是标准采购订单。在此过程中,我们使用ConvertObjectParser解析器来处理特定字段。

  3. 处理复杂对象

    对于复杂对象如明细信息(FPOOrderEntry),我们需要逐一处理其子字段:

    {
     "field": "FPOOrderEntry",
     "label": "明细信息",
     "type": "array",
     ...
     "children": [
       {
         "field": "FMaterialId",
         ...
         "value": "{{detail_0.wlbh}}"
       },
       ...
     ]
    }

    在这里,每个子字段如物料编码(FMaterialId)都需要映射到相应的数据源字段,并进行适当的解析。

  4. 构建完整的请求体

    将所有配置好的字段整合到一个完整的JSON请求体中,以便通过POST方法发送到金蝶云星空API接口:

    {
     ...
     "otherRequest": [
       {
         ...
         {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"PUR_PurchaseOrder"},
         {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"},
         {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"},
         {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"}
       ]
     ],
     ...
    }
  5. 发送请求并处理响应

    最后,通过HTTP POST方法将构建好的请求体发送到金蝶云星空API接口,并处理返回的响应结果:

    import requests
    
    url = 'https://api.kingdee.com/batchSave'
    
    headers = {'Content-Type': 'application/json'}
    
    response = requests.post(url, json=request_body, headers=headers)
    
    if response.status_code == 200:
       print("Data successfully written to Kingdee Cloud")
    else:
       print("Failed to write data:", response.text)

通过以上步骤,我们可以实现从泛微系统到金蝶云星空系统的数据无缝对接。轻易云数据集成平台提供了强大的元数据配置功能,使得整个过程更加高效和透明。 如何对接企业微信API接口

更多系统对接方案