ETL技术在钉钉与金蝶数据转换中的最佳实践

  • 轻易云集成顾问-陈洁琳

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

在企业日常运营中,如何高效地实现系统间的数据对接和无缝集成,是提升业务效率的重要环节。本文将详细探讨通过轻易云数据集成平台,将钉钉报销【项目报销类】的数据快速、可靠地迁移至金蝶付款单【炫涵】中的具体技术方案及实施细节。

首先,我们需要从钉钉获取报销申请相关的数据。利用钉钉提供的API接口topapi/processinstance/get可以精准抓取特定实例下的处理流程。在实现过程中,需特别关注如何确保这些数据不遗漏,以及应对接口分页和限流的问题,这样才能保证所有需要迁移的数据都能完整且准确地获取到。

为了将大量获取到的报销数据快速写入至金蝶云星空中,我们使用了其批量保存APIbatchSave。此过程中,不仅要考虑到不同系统间可能存在的数据格式差异,还需仔细设计映射规则,以确保各字段信息能够正确对应。此外,为避免因网络或其他异常情况导致部分数据同步失败,我们还引入了错误重试机制,可以自动检测并重新提交失败的请求,从而提高整体操作的成功率。

在整个集成流程中,一个不可忽视的重要环节是实时监控与日志记录。这不仅帮助我们了解每一步执行状态,也为后续故障排查和性能优化提供了宝贵的信息。例如,在处理过程中的任何异常情况,都能通过日志及时捕获,并触发相应的告警措施,以尽早介入解决问题。

以上概述了轻易云平台下,通过标准化API,实现从钉钉到金蝶这两个系统之间顺利对接的一些核心技术点。在实际操作层面,还有更多细节与技巧,此处略过不表;接下来将具体展示各步骤代码示例及配置详解。 打通金蝶云星空数据接口

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

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何使用轻易云数据集成平台调用钉钉接口topapi/processinstance/get,并对获取的数据进行加工处理。

API 接口调用配置

首先,我们需要配置元数据以便正确调用钉钉的API接口。以下是我们在轻易云平台上配置的元数据:

{
  "api": "topapi/processinstance/get",
  "method": "POST",
  "number": "number",
  "id": "id",
  "idCheck": true,
  "condition": [
    [
      {
        "field": "报销类别",
        "logic": "eq",
        "value": "项目报销类型"
      }
    ]
  ]
}

该配置指定了我们要调用的API接口为topapi/processinstance/get,请求方法为POST。同时,我们设定了一个条件,即只获取“报销类别”为“项目报销类型”的数据。

数据请求与清洗

在实际操作中,首先需要通过HTTP POST请求来调用上述API接口。以下是一个示例代码片段,展示了如何发起这个请求:

import requests

url = 'https://oapi.dingtalk.com/topapi/processinstance/get'
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
payload = {
    'process_instance_id': 'YOUR_PROCESS_INSTANCE_ID'
}

response = requests.post(url, headers=headers, json=payload)
data = response.json()

在这个过程中,我们发送了一个包含process_instance_id的POST请求,并接收返回的数据。接下来,需要对返回的数据进行清洗和验证,以确保其符合我们的需求。

数据转换与写入

一旦我们成功获取并清洗了数据,就需要将其转换为目标系统所需的格式,并写入到目标系统中。在本案例中,我们将数据从钉钉转移到金蝶付款单系统。

假设我们从钉钉获取的数据如下:

{
  "errcode": 0,
  "process_instance": {
    "title": "项目报销申请",
    "form_component_values": [
      {"name": "报销金额", "value": "1000"},
      {"name": "报销类别", "value": "项目报销类型"},
      {"name": "申请人", "value": "张三"}
    ]
  }
}

我们需要提取其中的关键字段,并转换为金蝶付款单系统所需的格式。例如:

processed_data = {
    'title': data['process_instance']['title'],
    'amount': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '报销金额'),
    'category': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '报销类别'),
    'applicant': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '申请人')
}

然后,将这些处理后的数据写入到金蝶付款单系统:

kingdee_url = 'https://kingdee.api.endpoint/payment'
kingdee_headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_KINGDEE_ACCESS_TOKEN'
}

kingdee_response = requests.post(kingdee_url, headers=kingdee_headers, json=processed_data)

通过上述步骤,我们实现了从钉钉到金蝶付款单系统的数据集成。

小结

本文详细介绍了如何在轻易云数据集成平台上配置和调用钉钉API接口topapi/processinstance/get,并对获取的数据进行清洗、转换和写入目标系统。通过这种方式,可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。 轻易云数据集成平台金蝶集成接口配置

使用轻易云数据集成平台实现钉钉报销数据向金蝶云星空付款单的ETL转换

在数据集成生命周期的第二步中,我们将已经从源平台(钉钉报销系统)获取的数据进行ETL转换,转为目标平台(金蝶云星空API接口)所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。

配置元数据

首先,根据提供的元数据配置,我们需要将钉钉报销系统的数据字段映射到金蝶云星空付款单API接口所需的字段格式。以下是关键字段的映射和处理逻辑:

  1. 单据编号(FBillNo)

    • 来源:{{extend.business_id}}
    • 类型:字符串
    • 描述:单据编号
  2. 单据类型(FBillTypeID)

    • 固定值:FKDLX04_SYS
    • 类型:字符串
    • 描述:单据类型
    • 解析器:ConvertObjectParser,参数为FNUMBER
  3. 业务日期(FDATE)

    • 来源:{{extend.create_time}}
    • 类型:字符串
    • 描述:业务日期
  4. 结算组织(FSETTLEORGID)

    • 来源:_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}
    • 类型:字符串
    • 描述:100
    • 解析器:ConvertObjectParser,参数为FNumber
  5. 币别(FCURRENCYID)

    • 固定值:PRE001
    • 类型:字符串
    • 描述:币别
    • 解析器:ConvertObjectParser,参数为FNumber
  6. 往来单位类型(FCONTACTUNITTYPE)

    • 固定值:BD_Department
    • 类型:字符串
    • 描述:往来单位类型
  7. 往来单位(FCONTACTUNIT)

    • 来源:{{费用归属部门_关联}}
    • 类型:字符串
    • 描述:往来单位
    • 解析器:ConvertObjectParser,参数为FNumber
  8. 收款单位类型(FRECTUNITTYPE)

    • 固定值:BD_Department
    • 类型:字符串
    • 描述:收款单位类型
  9. 收款单位(FRECTUNIT)

    • 来源: {{费用归属部门_关联}}
    • 类型: 字符串
    • 解析器: ConvertObjectParser, 参数为 FNumber
  10. 备注(FREMARK)

    • 来源: {title}&{{项目报销类型}}&{{报销明细.费用明细}}
    • 类型: 字符串
    • 描述: 备注
  11. 付款单明细(FPAYBILLENTRY): 包含多个子字段,如下所示:

    a) 结算方式(FSETTLETYPEID):

    • 来源: {{付款方式}}
    • 类型: 字符串
    • 解析器: ConvertObjectParser, 参数为 FNumber

    b) 付款用途(FPURPOSEID):

    • 固定值: SFKYT002
    • 类型: 字符串
    • 解析器: ConvertObjectParser, 参数为 FNumber

    c) 应付金额(FPAYTOTALAMOUNTFOR):

    • 来源: {{报销明细.报销金额(元)}}
    • 类型: 字符串

    d) 费用项目(FCOSTID):

    • 来源: _findCollection find FNumber from b02f1e34-b500-3075-8b14-08fec61d08a4 where FName={{项目报销类型}}
    • 类型: 字符串
    • 解析器: ConvertObjectParser, 参数为 FNumber

    e) 对方银行账号(FOPPOSITEBANKACCOUNT):

    • 来源: _function CASE LOCATE('ALIPAY_ACCOUNT','{{收款信息.identityType}}') WHEN 0 THEN '{{收款信息.cardNo}}' ELSE '{{收款信息.logonId}}' END
    • 类型: 字符串

    f) 对方账户名称(FOPPOSITECCOUNTNAME):

    • 来源: {{收款信息.name}}
    • 类型: 字符串

API请求配置

根据上述字段映射,我们构建API请求体。以下是一个示例请求体:

{
  "FormId": "AP_PAYBILL",
  "Operation": "BatchSave",
  "IsAutoSubmitAndAudit": false,
  "IsVerifyBaseDataField": false,
  "Model": {
    "FBillNo": "{{extend.business_id}}",
    "FBillTypeID": {"FNUMBER": "FKDLX04_SYS"},
    "FDATE": "{{extend.create_time}}",
    "FSETTLEORGID": {"FNumber": "_findCollection find Number from ... where Name={{费用归属项目}}"},
    "FPAYORGID": {"FNumber": "_findCollection find Number from ... where Name={{费用归属项目}}"},
    "FCURRENCYID": {"FNumber": "PRE001"},
    "FCONTACTUNITTYPE": "BD_Department",
    "FCONTACTUNIT": {"FNumber": "{{费用归属部门_关联}}"},
    "FRECTUNITTYPE": "BD_Department",
    "FRECTUNIT": {"FNumber": "{{费用归属部门_关联}}"},
    "FREMARK": "{title}&{{项目报销类型}}&{{报销明细.费用明细}}",
    ...
  }
}

数据转换与写入

在轻易云数据集成平台中,通过配置上述元数据和API请求体,可以实现从钉钉报销系统到金蝶云星空付款单的数据转换与写入。具体步骤如下:

  1. 配置ETL任务,将源数据按上述映射规则进行转换。
  2. 调用金蝶云星空API接口,将转换后的数据写入目标平台。
  3. 实时监控数据流动和处理状态,确保每个环节都清晰可见。

通过这种方式,可以高效地完成异构系统间的数据集成,实现业务流程的自动化和透明化。 用友与CRM系统接口开发配置

更多系统对接方案