轻易云助力钉钉报销数据集成金蝶付款单的技术实现

  • 轻易云集成顾问-吕修远

钉钉报销【现货采购】集成金蝶付款单【迪得】案例分享

在企业的财务处理过程中,将不同系统之间的数据无缝对接是实现业务流程高效运转的重要步骤。本次技术案例将详细讲解如何通过轻易云数据集成平台,实现钉钉报销(现货采购)数据到金蝶云星空付款单【迪得】的自动化对接。该项目主要解决了以下几个关键问题:确保数据不漏单、大量数据快速写入、接口限流与分页处理、以及异常情况的错误重试机制。

首先,我们使用钉钉提供的topapi/processinstance/get API来定时抓取所有需要处理的报销(现货采购)记录,通过按页逐步获取,避免一次性拉取大批量数据带来的性能瓶颈和接口限流问题。同时,在分页获取过程中,实施实时监控与日志记录,以便及时发现和解决潜在的问题,提高整个流程稳定性。

然后,对从钉钉拉取的数据进行预处理,包括格式转换和必要的信息核查,使其符合金蝶云星空所需的数据结构。在此过程中遇到的典型挑战之一是字段映射,例如,从“申请日期”转换为“付款日期”,以及金额类型的一致性检查等。通过设定准确且灵活的数据映射规则,有效减少了手工校对所引发的人为错误。

为了将整理后的数据写入到金蝶云星空中,我们调用batchSave API,该API能够高效地批量保存大量账单信息,显著提升了系统运行效率。此外,为防止出现意外情况,如网络波动或服务故障导致的数据丢失,我们设计了一套完善的异常捕获与重试机制。当某条记录写入失败时,会自动进行多次尝试,并在达到最大重试次数后发送告警通知以便及时干预。

该集成方案不仅保证了每个环节中的透明度,还应用轻易云平台提供的全生命周期管理功能,通过可视化操作界面追踪和调度任务,确保各项任务执行顺畅,大幅提高整体业务效率。这些特性的全面利用,让我们的客户能轻松实现从报销申请到最终支付的一体化管理,无论是在用户体验还是操作简洁性上都达到了新的高度。 企业微信与OA系统接口开发配置

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

在数据集成生命周期的第一步中,我们需要从源系统钉钉中调用接口topapi/processinstance/get来获取审批流数据,并对其进行初步加工。以下是具体的技术实现细节。

接口调用配置

根据元数据配置,我们需要向钉钉接口发送一个POST请求,具体参数如下:

  • api: topapi/processinstance/get
  • method: POST
  • idCheck: true
  • request:
    • process_code: 审批流的唯一码,固定值为PROC-EA17A524-9921-4A19-88A7-B0D6A336A8DE
    • start_time: 审批实例开始时间,使用上次同步时间{LAST_SYNC_TIME}转换为Unix时间戳后加上三个零(单位毫秒)
    • end_time: 审批实例结束时间,使用当前时间{CURRENT_TIME}转换为Unix时间戳后加上三个零(单位毫秒)
    • size: 分页参数,每页大小固定为20
    • cursor: 分页查询的游标,最开始传0,后续传返回参数中的next_cursor

请求参数示例

{
  "process_code": "PROC-EA17A524-9921-4A19-88A7-B0D6A336A8DE",
  "start_time": "{LAST_SYNC_TIME}000",
  "end_time": "{CURRENT_TIME}000",
  "size": "20",
  "cursor": "0"
}

数据过滤条件

我们仅需获取报销类别为“现货采购”的审批实例,因此需要在处理返回的数据时进行过滤。元数据配置中的条件如下:

"condition":[[{"field":"报销类别","logic":"eq","value":"现货采购"}]]

数据请求与清洗

  1. 发送请求:根据上述配置向钉钉接口发送POST请求。
  2. 接收响应:解析响应数据,提取所需字段。
  3. 过滤数据:根据条件过滤出报销类别为“现货采购”的记录。

以下是一个Python示例代码,用于实现上述步骤:

import requests
import time

# 配置参数
url = 'https://oapi.dingtalk.com/topapi/processinstance/get'
headers = {'Content-Type': 'application/json'}
params = {
    'process_code': 'PROC-EA17A524-9921-4A19-88A7-B0D6A336A8DE',
    'start_time': f"{int(time.time()) - 86400}000", # 假设上次同步时间为24小时前
    'end_time': f"{int(time.time())}000",
    'size': '20',
    'cursor': '0'
}

# 发起请求
response = requests.post(url, json=params, headers=headers)
data = response.json()

# 数据过滤
filtered_data = [item for item in data['result']['list'] if item['form_component_values']['name'] == '报销类别' and item['form_component_values']['value'] == '现货采购']

# 打印过滤后的数据
print(filtered_data)

数据转换与写入

在完成数据请求与清洗之后,我们需要将过滤后的数据进行转换并写入目标系统。在本案例中,目标系统是金蝶付款单【迪得】。具体的转换规则和写入逻辑将依据目标系统的要求进行配置,这部分将在生命周期的下一步详细讨论。

通过上述步骤,我们实现了从钉钉获取审批流数据并进行初步加工,为后续的数据转换和写入奠定了基础。这一过程充分利用了轻易云平台提供的全透明可视化操作界面和实时监控功能,大大提升了业务透明度和效率。 泛微OA与ERP系统接口开发配置

轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例

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

元数据配置解析

根据提供的元数据配置,我们需要将钉钉报销【现货采购】的数据转换为金蝶付款单【迪得】的数据格式,并通过金蝶云星空API接口进行写入。以下是关键字段及其配置解析:

  1. 单据编号(FBillNo)

    • 类型:string
    • 描述:单据编号
    • 值:{{extend.business_id}}
    • 说明:从源数据中提取业务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
    • 描述: 往来单位
    • 值: {{项目费用明细.0.客户TextField_YUIW7XGJOKG0}}
    • 解析器: ConvertObjectParser, 参数为 FNumber
    • 说明: 从项目费用明细中提取客户信息并转换为对应的编号。
  9. 付款单明细(FPAYBILLENTRY) 包含多个子字段,如下:

    a) 结算方式(FSETTLETYPEID)

    • 类型: string
    • 描述: 结算方式
    • 值: _findCollection find Number from 04463531-c6b1-3e53-b5d7-9d456a92d4cf where Name={{付款方式}}
    • 解析器: ConvertObjectParser, 参数为 FNumber

    b) 付款用途(FPURPOSEID)

    • 类型: string
    • 描述: 付款用途
    • 值: SFKYT08_SYS
    • 解析器: ConvertObjectParser, 参数为 FNumber

    c) 应付金额(FPAYTOTALAMOUNTFOR)

    • 类型: string
    • 描述: 应付金额
    • 值: {{项目费用明细.金额合计}}

    d) 物料编码(FMATERIALID)

    • 类型: string
    • 描述: 物料编码
    • 值: {{项目费用明细.名称}}
    • 解析器: ConvertObjectParser, 参数为 FNumber

API请求配置

根据元数据配置,我们需要构建一个POST请求来调用金蝶云星空的batchSave API。请求体包含以下主要部分:

{
    "FormId": "AP_PAYBILL",
    "Operation": "BatchSave",
    "IsAutoSubmitAndAudit": false,
    "IsVerifyBaseDataField": false,
    "Model": {
        "FBillNo": "{{extend.business_id}}",
        "FBillTypeID": {"FNUMBER": "FKDLX01_SYS"},
        "FDATE": "{{extend.finish_time}}",
        "FSETTLEORGID": {"FNumber": "_findCollection find Number from ..."},
        ...
        "FPAYBILLENTRY": [
            {
                "FSETTLETYPEID": {"FNumber": "_findCollection find Number from ..."},
                ...
            }
        ]
    }
}

数据转换与写入流程

  1. 数据请求与清洗: 从钉钉报销系统获取原始数据,并进行初步清洗和验证。

  2. 数据转换: 利用轻易云平台提供的元数据配置,将原始数据字段映射到金蝶云星空API所需格式。使用各种解析器如ConvertObjectParser来处理复杂字段转换。

  3. 构建API请求: 根据元数据配置构建JSON请求体,并通过HTTP POST方法发送到金蝶云星空的batchSave API接口。

  4. 写入目标平台: 接收API响应并处理结果,确保数据成功写入金蝶云星空系统。如果失败,则记录错误信息并进行必要的重试或人工干预。

通过上述步骤,可以高效地实现从钉钉报销系统到金蝶云星空系统的数据集成和转换。轻易云平台提供了强大的元数据配置能力,使得这一过程更加简洁和可控。 企业微信与OA系统接口开发配置

更多系统对接方案