从数据请求到写入金蝶云星空:轻易云平台的ETL转换实践

  • 轻易云集成顾问-蔡威

钉钉报销【行政报销类】->金蝶付款单【晨丰】集成案例分享

在本文中,我们将聚焦于一个具体的系统对接集成案例:如何通过轻易云数据集成平台实现钉钉企业应用与金蝶云星空之间的数据互通。具体来说,本次案例涉及的是从钉钉获取行政报销数据,并批量写入到金蝶云星空生成相应的付款单。

为了确保这一过程高效、无误地进行,首先需要调用钉钉提供的API接口topapi/processinstance/get来抓取相关流程实例的数据。此接口允许我们检索到所有必要的审批流信息,包括但不限于申请人、费用明细和审批状态等。在抓取大量数据时,我们特别关注了分页和限流的问题,以避免因请求过多导致接口阻断或超时。

其次,在实现大规模数据处理的一致性方面,利用定时任务可靠地从钉钉端抓取最新可用的数据并实时监控其处理状态,无论是通过日志记录还是可视化操作界面,都极大增强了业务透明度和效率。接着,通过定制化的数据映射机制,将从钩子捕获的JSON格式转化为符合金蝶云星空要求的数据字段格式,准备好后使用其批量写入API batchSave 迅速导入目标数据库。

在这个过程中,异常处理也至关重要。针对可能出现的网络故障或接口异常,我们设计了一套错误重试机制,以保证不会遗漏任何交易。一旦发现问题,可以自动触发预设逻辑重新尝试提交直至成功。这一机制结合详细的信息记录,有助于团队快速锁定潜在问题,从而及时采取措施予以纠正。

总之,此次集成方案展示了轻易云数据集成平台如何高效、安全地完成企业级应用间复杂的数据交互,为提升工作流程自动化及精确度提供了有力支持。那么,让我们进一步探讨这些技术特性以及配置信息,实现全面优化与管理。 如何开发用友BIP接口

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

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口topapi/processinstance/get来获取并加工数据,以实现从钉钉报销【行政报销类】到金蝶付款单【晨丰】的无缝对接。

接口调用配置

首先,我们需要配置元数据以便正确调用钉钉接口。根据提供的元数据配置,以下是具体的配置细节:

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

配置解析

  1. API路径: topapi/processinstance/get

    • 这是我们需要调用的钉钉API,用于获取特定流程实例的数据。
  2. 请求方法: POST

    • 使用POST方法发送请求,以确保数据传输的安全性和完整性。
  3. 字段映射:

    • number: 对应于金蝶付款单中的编号字段。
    • id: 针对每个报销记录的唯一标识符。
  4. 条件过滤:

    • 条件过滤部分指定了只获取“报销类别”为“行政报销类”的记录。这是通过设置字段field为“报销类别”,逻辑运算符logic为“eq”(等于),值value为“行政报销类”来实现的。

数据请求与清洗

在完成元数据配置后,我们可以开始实际的数据请求与清洗过程。以下是具体步骤:

  1. 发送请求:

    • 根据配置,向钉钉API发送POST请求,并附带必要的认证信息和参数。
    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)
    
    if response.status_code == 200:
       data = response.json()
       # 处理返回的数据
    else:
       print(f"Error: {response.status_code}")
  2. 数据清洗:

    • 获取到的数据可能包含许多不必要的信息,因此需要进行清洗。我们只保留与金蝶付款单相关的字段,如编号和ID。
    def clean_data(raw_data):
       cleaned_data = []
       for item in raw_data['process_instance']:
           if item['form_component_values']['name'] == '报销类别' and item['form_component_values']['value'] == '行政报销类':
               cleaned_record = {
                   'number': item['process_instance_id'],
                   'id': item['process_instance_id']
               }
               cleaned_data.append(cleaned_record)
       return cleaned_data
    
    processed_data = clean_data(response.json())

数据转换与写入

经过清洗后的数据需要转换成金蝶付款单所需的格式,并写入目标系统。在此过程中,可以利用轻易云平台提供的数据转换工具,实现格式转换和字段映射。

def transform_and_write(data):
    for record in data:
        transformed_record = {
            '付款单编号': record['number'],
            '唯一标识符': record['id']
        }
        # 将转换后的记录写入金蝶系统
        write_to_kingdee(transformed_record)

def write_to_kingdee(record):
    # 假设存在一个函数可以将记录写入金蝶系统
    pass

transform_and_write(processed_data)

通过上述步骤,我们成功地实现了从钉钉报销【行政报销类】到金蝶付款单【晨丰】的数据集成。这个过程展示了如何利用轻易云平台高效地调用源系统接口、清洗和转换数据,并最终实现跨系统的数据对接。 如何开发企业微信API接口

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

在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,最终转为目标平台——金蝶云星空API接口所能够接收的格式,并写入目标平台。以下是详细的技术配置和实现步骤。

1. 配置API请求参数

我们使用金蝶云星空的batchSave API进行数据写入,采用POST方法。以下是主要配置参数:

  • api: "batchSave"
  • method: "POST"
  • idCheck: true
  • operation: {"method":"batchArraySave","rows":1,"rowsKey":"array"}

2. 配置请求字段

根据元数据配置,以下是具体的字段映射和转换规则:

  • FBillNo (单据编号):

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

    • 类型: string
    • 描述: 单据类型
    • 值: "FKDLX04_SYS"
    • 转换器: ConvertObjectParser, 参数: FNUMBER
  • FDATE (业务日期):

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

    • 类型: string
    • 描述: "100"
    • 值: _findCollection find Number from <collection_id> where Name={{费用归属项目}}
    • 转换器: ConvertObjectParser, 参数: FNumber
  • FCURRENCYID (币别)FSETTLECUR (结算币别):

    • 类型: string
    • 描述: 币别/结算币别
    • 值: "PRE001"
    • 转换器: ConvertObjectParser, 参数: FNumber
  • FCONTACTUNITTYPE (往来单位类型)FRECTUNITTYPE (收款单位类型):

    • 类型: string
    • 描述: 往来单位类型/收款单位类型
    • 值: "BD_Department"
  • FCONTACTUNIT (往来单位)FRECTUNIT (收款单位):

    • 类型: string
    • 描述: 往来单位/收款单位
    • 值: {{费用归属部门_关联}}
    • 转换器: ConvertObjectParser, 参数: FNumber
  • FREMARK (备注):

    • 类型: string
    • 描述: "备注"
    • 值:{title}-{{项目报销类型}}-{{报销明细.费用明细}}

3. 配置付款单明细(FPAYBILLENTRY)

付款单明细是一个数组字段,每个子字段需要分别配置:

  • FSETTLETYPEID (结算方式):

    • 类型:string
    • 值:{{付款方式}}
    • 转换器:ConvertObjectParser, 参数:FNumber
  • FPURPOSEID (付款用途):

    • 类型:string
    • 值:"SFKYT001"
    • 转换器:ConvertObjectParser, 参数:FNumber
  • FPAYTOTALAMOUNTFOR (应付金额):

    • 类型:string
    • 值:{{报销明细.报销金额(元)}}
  • FCOSTID (费用项目):

    • 类型:string
    • 值:_findCollection find FNumber from <collection_id> where FName={{行政报销类型}}
    • 转换器:ConvertObjectParser, 参数:FNumber
  • FCOMMENT (备注):

    • 类型:string
    • 值:{{报销明细.费用明细}}
  • 对方银行账号(FOPPOSITEBANKACCOUNT)对方账户名称(FOPPOSITECCOUNTNAME)

    {
       "parent": "FPAYBILLENTRY",
       "label": "对方银行账号",
       "field": "FOPPOSITEBANKACCOUNT",
       "type": "string",
       "value": "_function CASE LOCATE('ALIPAY_ACCOUNT','{{收款账户.identityType}}') WHEN 0 THEN '{{收款账户.cardNo}}' ELSE '{{收款账户.logonId}}' END"
    },
    {
       "parent": "FPAYBILLENTRY",
       "label": "对方账户名称",
       "field": "FOPPOSITECCOUNTNAME",
       "type": "string",
       "value": "{{收款账户.name}}"
    }

附加字段配置

其他必要字段如部门和申请人也需要进行相应配置:

{
    {"label":"部门","field":"FDepartment","type":"string","value":"{{费用归属部门_关联}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"label":"申请人","field":"F_VAOJ_SQR","type":"string","value":"{{extend.originator_userid}}","parser":{"name":"ConvertObjectParser","params":"FSTAFFNUMBER"}}
}

执行操作参数

最后,我们需要配置执行操作相关参数:

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

通过上述详细的元数据配置,我们可以确保源平台的数据经过ETL转换后,能够准确无误地写入金蝶云星空目标平台。 轻易云数据集成平台金蝶集成接口配置

更多系统对接方案