使用轻易云平台进行ETL转换并写入金蝶云星空

  • 轻易云集成顾问-彭亮

钉钉数据集成到金蝶云星空的技术案例分享

在本次案例中,我们将深入探讨如何通过轻易云数据集成平台,实现钉钉报销【现货采购】的数据无缝集成到金蝶云星空的付款单上。整个过程不仅确保了高效、准确的数据流动,还能够实时监控和处理各种异常情况,以最大化地提升业务运营的透明度和效率。

为了实现这一目标,我们首先需要从钉钉获取相关报销数据。此步骤中的关键技术点是调用 topapi/processinstance/get 接口,确保我们能定时、可靠地抓取所需数据。在实际操作中,需要特别注意接口分页和限流的问题,因为大量请求可能会触发钉钉API的限制策略,从而影响数据完整性。因此,通过合理设计请求频率与缓存机制,可以有效规避这些问题,保证不漏单。

接下来,要处理的是将从钉钉获取的大量报销数据快速写入到金蝶云星空。在这一阶段,利用 batchSave API 进行批量写入是一个关键手段。这不仅提高了写入速度,还能减少对系统资源的占用。然而,由于两者之间的数据格式存在差异,这就要求我们在设计映射规则时格外慎重。通过定制化的数据映射方案,可以精准转换并匹配每个字段,使其符合金蝶云星空对于付款单记录的要求。

此外,为更好地应对实际环境中的各种复杂情况,我们引入了一系列异常处理与错误重试机制。例如,当由于网络延迟或其他不可预测因素导致部分数据未成功写入时,可即时启用重试逻辑,对未完成项重新进行提交,以保证最终一致性。同时,在整个过程中植入实时监控与日志记录功能,不仅有助于随时追踪各环节状态,更为后续故障排查提供了详实依据。

通过上述多层次、多维度的方法实施,本案例展示了一个典型、高效且具备高度自动化能力的数据集成解决方案。从架构设计到具体实现,每一步都充分考虑到了不同系统间接口调用及交互细节,并针对可能出现的问题提前制定相应预案,从而为企业构建起一条稳定、安全、智能的信息桥梁。 如何对接用友BIP接口

调用钉钉接口topapi/processinstance/get获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口topapi/processinstance/get来获取报销类别为“现货采购”的数据,并进行初步加工。

1. 配置API请求

首先,我们需要配置API请求的元数据。根据提供的元数据配置,我们使用POST方法调用钉钉接口topapi/processinstance/get,并设置必要的请求参数。

{
  "api": "topapi/processinstance/get",
  "method": "POST",
  "number": "number",
  "id": "id",
  "idCheck": true,
  "condition": [
    [
      {
        "field": "报销类别",
        "logic": "eq",
        "value": "现货采购"
      }
    ]
  ]
}

2. 构建请求体

根据元数据配置,我们需要构建一个符合条件的请求体。以下是一个示例请求体:

{
  "process_instance_id": "<实例ID>",
  "user_id": "<用户ID>"
}

在实际操作中,<实例ID><用户ID>需要根据具体情况动态填充。

3. 发起API请求

使用轻易云平台提供的全异步处理能力,我们可以高效地发起API请求,并确保在异步环境下不阻塞其他操作。以下是一个示例代码片段,用于发起API请求:

import requests

url = 'https://oapi.dingtalk.com/topapi/processinstance/get'
headers = {'Content-Type': 'application/json'}
data = {
    'process_instance_id': '<实例ID>',
    'user_id': '<用户ID>'
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    process_data = response.json()
else:
    raise Exception(f"Failed to fetch data: {response.status_code}")

4. 数据过滤与清洗

获取到原始数据后,需要根据条件进行过滤和清洗。我们只保留报销类别为“现货采购”的记录。以下是一个示例代码片段,用于过滤和清洗数据:

def filter_data(process_data):
    filtered_data = []
    for item in process_data['process_instance']:
        if item['报销类别'] == '现货采购':
            filtered_data.append(item)
    return filtered_data

cleaned_data = filter_data(process_data)

5. 数据转换与写入

经过过滤和清洗后的数据,需要进行格式转换,以便写入目标系统(如金蝶付款单)。以下是一个示例代码片段,用于将清洗后的数据转换为目标系统所需的格式:

def transform_data(cleaned_data):
    transformed_data = []
    for item in cleaned_data:
        transformed_item = {
            '付款单号': item['number'],
            '申请人': item['user_id'],
            '金额': item['amount'],
            # 添加其他必要字段转换
        }
        transformed_data.append(transformed_item)
    return transformed_data

final_data = transform_data(cleaned_data)

6. 写入目标系统

最后,将转换后的数据写入目标系统。在此过程中,可以利用轻易云平台提供的数据写入功能,实现与金蝶付款单系统的一致性对接。

def write_to_target_system(final_data):
    # 假设我们有一个函数可以将数据写入金蝶系统
    for item in final_data:
        write_to_kingdee(item)

write_to_target_system(final_data)

通过以上步骤,我们实现了从钉钉接口获取、过滤、清洗、转换并写入目标系统的完整流程。这一过程充分利用了轻易云平台的数据集成功能,使得不同系统间的数据无缝对接成为可能。 如何对接金蝶云星空API接口

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

在数据集成的生命周期中,将已经集成的源平台数据进行ETL转换,并转为目标平台所能接收的格式是关键步骤。本文将详细介绍如何使用轻易云数据集成平台,将钉钉报销【现货采购】的数据转换并写入金蝶云星空API接口。

配置元数据

元数据配置是实现数据转换和写入的基础。以下是配置的关键字段及其解析方式:

  1. 单据编号(FBillNo)

    • 类型:string
    • 描述:单据编号
    • 值:{{extend.business_id}}
  2. 单据类型(FBillTypeID)

    • 类型:string
    • 描述:单据类型
    • 解析器:ConvertObjectParser
    • 参数:FNUMBER
    • 值:FKDLX01_SYS
  3. 业务日期(FDATE)

    • 类型:string
    • 描述:业务日期
    • 值:{{extend.finish_time}}
  4. 结算组织(FSETTLEORGID)

    • 类型:string
    • 描述:100
    • 解析器:ConvertObjectParser
    • 参数:FNumber
    • 值:_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}
  5. 付款组织(FPAYORGID)

    • 类型:string
    • 描述:100
    • 解析器:ConvertObjectParser
    • 参数:FNumber
    • 值:同结算组织
  6. 币别(FCURRENCYID)

    • 类型:string
    • 描述:币别
    • 解析器:ConvertObjectParser
    • 参数:FNumber
    • 值:PRE001
  7. 往来单位类型(FCONTACTUNITTYPE)

    • 类型:string
    • 描述:往来单位类型
    • 值:BD_Supplier
  8. 往来单位(FCONTACTUNIT)

    • 类型: string
    • 描述: 往来单位
    • 解析器: ConvertObjectParser
    • 参数: FNumber
    • 值: _findCollection find FNumber from e3fb9252-4cce-32f4-bccf-2792bac19e8d where FName={{项目费用明细.供应商名称}}
  9. 付款单明细(FPAYBILLENTRY)

    • 类型: array
    • 子字段:
      • 结算方式(FSETTLETYPEID)
        • 类型: string
        • 解析器: ConvertObjectParser
        • 参数: FNumber
        • 值: _findCollection find Number from 04463531-c6b1-3e53-b5d7-9d456a92d4cf where Name={{付款方式_new}}
      • 付款用途(FPURPOSEID)
        • 类型: string
        • 解析器: ConvertObjectParser
        • 参数: FNumber
        • 值: SFKYT08_SYS
      • 应付金额(FPAYTOTALAMOUNTFOR)
        • 类型: string
        • 值: {{项目报销明细.合计}}

数据请求与清洗

在数据请求阶段,首先从钉钉报销系统获取相关数据。通过API接口获取到的数据可能包含冗余信息或格式不符合要求,需要进行清洗和预处理。例如,日期格式的转换、字符串的修剪等。

数据转换与写入

在清洗后的数据基础上,利用元数据配置进行ETL转换。轻易云提供了强大的转换功能,可以通过配置文件中的解析器和参数,实现复杂的数据映射和转换。

例如,结算组织字段的值通过 _findCollection find Number from ... where Name={{费用归属项目}} 的方式,从指定集合中查找并匹配相应的编号。这种动态查找机制极大地提高了数据准确性和一致性。

最终,通过调用金蝶云星空API接口,将转换后的数据写入目标平台。以下是一个示例请求:

{
  "FormId": "AP_PAYBILL",
  "Operation": "BatchSave",
  "IsAutoSubmitAndAudit": false,
  "IsVerifyBaseDataField": false,
  "Model": {
    "FBillNo": "{{extend.business_id}}",
    "FBillTypeID": {"FNUMBER": "FKDLX01_SYS"},
    "FDATE": "{{extend.finish_time}}",
    ...
    "FPAYBILLENTRY": [
      {
        "FSETTLETYPEID": {"FNUMBER": "_findCollection find Number from ... where Name={{付款方式_new}}"},
        ...
      }
    ]
  }
}

通过上述步骤,成功实现了从钉钉报销系统到金蝶云星空的无缝数据集成。在整个过程中,轻易云的数据处理能力和灵活配置为高效、准确的数据传输提供了保障。 如何开发用友BIP接口

更多系统对接方案