金蝶付款申请单到钉钉供应商月结付款的ETL转换与写入技巧

  • 轻易云集成顾问-蔡威

集成金蝶云星空数据到钉钉的技术解析:付款申请单对接方案

在企业级应用系统中,如何高效、准确地实现跨平台数据集成始终是一个关键挑战。本文将深入探讨如何通过轻易云数据集成平台,将金蝶云星空中的付款申请单(executeBillQuery接口获取)成功对接至钉钉供应商月结付款流程(topapi/processinstance/create接口写入)。为确保项目执行的精确性,我们采用了名称为“金蝶付款申请单->钉钉供应商月结付款①”的方案。

首先,为了保证从金蝶云星空获取的数据不漏单和及时处理,我们使用了定时可靠的抓取策略。这一策略依赖于调度机制,定期调用executeBillQuery接口,并结合分页及限流技术,有效应对大规模数据请求。此外,通过实时监控与日志记录模块,可以确保每一步操作均有迹可循,同时迅速定位并排除潜在问题。

其次,在进行批量集成时,需要考虑到两者之间的数据格式差异。我们设计了一套定制化的数据映射流程,从而实现不同字段间的一致性转换。例如,针对日期格式、金额精度等可能存在差异的信息,会作出相应标准化处理,以满足目标平台的要求。

对于大量数据快速写入至钉钉,则利用批量处理及多线程优化操作,加速了topapi/processinstance/create接口的调用速度。同时,引入异常处理与错误重试机制,不仅提高稳定性,还显著降低因网络波动或临时故障导致的数据传输失败率。

最后,在整个过程中,多维度监控手段包括性能分析、状态跟踪以及报表生成均发挥着重要作用,使得所有环节透明化、高效运转。这不仅提升了业务联动效率,也为日后的维护管理提供了宝贵依据。 轻易云数据集成平台金蝶集成接口配置

调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,获取付款申请单的数据并进行初步加工。

接口调用配置

首先,我们需要配置调用金蝶云星空的executeBillQuery接口。以下是元数据配置中的关键参数:

  • API: executeBillQuery
  • Method: POST
  • Number: FBillNo
  • ID: FBillNo
  • Pagination: 每页500条记录
  • ID Check: true

请求字段包括但不限于以下内容:

  • 实体主键:FID
  • 单据编号:FBillNo
  • 单据状态:FDOCUMENTSTATUS
  • 创建人:FCREATORID
  • 审核人:FAPPROVERID
  • 创建日期:FCREATEDATE
  • 结算组织:FSETTLEORGID.fname

其他请求参数如分页、过滤条件等也需要一并配置。

请求参数构建

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

{
  "FormId": "CN_PAYAPPLY",
  "FieldKeys": "FID,FBillNo,FDOCUMENTSTATUS,FCREATORID,FAPPROVERID,FCREATEDATE,FSETTLEORGID.fname",
  "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'",
  "Limit": 500,
  "StartRow": 0,
  "TopRowCount": true
}

在这个请求体中,FormId指定了业务对象表单Id为付款申请单(CN_PAYAPPLY),FieldKeys定义了需要查询的字段集合,FilterString用于设置过滤条件,分页参数包括每页记录数(Limit)和起始行索引(StartRow)。

数据获取与初步加工

通过上述配置和请求体,我们可以向金蝶云星空发送POST请求,获取付款申请单的数据。响应数据通常是一个JSON数组,每个元素对应一条记录。

获取到数据后,需要对其进行初步加工。例如,可以根据业务需求筛选出特定状态的单据,或者对日期字段进行格式化处理。

以下是一个简单的数据加工示例:

import json
from datetime import datetime

# 假设response_data是从接口获取到的JSON响应数据
response_data = '''
[
    {"FID": "1", "FBillNo": "1001", "FDOCUMENTSTATUS": "A", "FCREATEDATE": "2023-01-01"},
    {"FID": "2", "FBillNo": "1002", "FDOCUMENTSTATUS": "B", "FCREATEDATE": "2023-02-01"}
]
'''

# 将JSON字符串解析为Python对象
data = json.loads(response_data)

# 筛选出状态为"A"的单据,并格式化创建日期
filtered_data = []
for record in data:
    if record["FDOCUMENTSTATUS"] == "A":
        record["FCREATEDATE"] = datetime.strptime(record["FCREATEDATE"], "%Y-%m-%d").strftime("%d/%m/%Y")
        filtered_data.append(record)

print(filtered_data)

在这个示例中,我们筛选出状态为"A"的单据,并将创建日期格式化为“日/月/年”的形式。

数据清洗与转换

在初步加工之后,还需要进一步清洗和转换数据,以便后续写入目标系统。在这一阶段,可以进行更复杂的数据处理操作,如字段映射、单位转换、异常值处理等。

例如,如果需要将金额字段从一种货币转换为另一种货币,可以使用汇率信息进行转换:

def convert_currency(amount, rate):
    return amount * rate

# 假设我们有一个汇率信息
exchange_rate = 6.5

for record in filtered_data:
    if 'FPAYAMOUNTFOR_H' in record:
        record['FPAYAMOUNTFOR_H'] = convert_currency(float(record['FPAYAMOUNTFOR_H']), exchange_rate)

通过以上步骤,我们可以完成从金蝶云星空获取付款申请单数据并进行初步加工,为后续的数据写入和集成奠定基础。 如何开发用友BIP接口

金蝶付款申请单到钉钉供应商月结付款的ETL转换与写入

在数据集成过程中,将金蝶付款申请单的数据转换为钉钉API接口所能接收的格式,并最终写入钉钉平台,是一个复杂且技术性极强的任务。本文将深入探讨如何使用轻易云数据集成平台完成这一过程,重点关注ETL(Extract, Transform, Load)转换步骤。

数据请求与清洗

首先,从金蝶系统中提取原始数据。这一步骤包括对源数据进行清洗和预处理,以确保数据的完整性和一致性。由于本文重点在于ETL转换,因此不详细展开此部分。

数据转换与写入

接下来,进入数据转换与写入阶段。我们需要将清洗后的数据按照钉钉API接口要求的格式进行转换,并通过API接口将数据写入钉钉平台。

钉钉API接口元数据配置

根据提供的元数据配置,目标平台为钉钉,其API接口为topapi/processinstance/create,请求方法为POST。以下是具体的字段配置:

{
  "api": "topapi/processinstance/create",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "process_code",
      "label": "审批流的唯一码",
      "type": "string",
      "describe": "process_code在审批流程编辑页面的URL网址中获取。",
      "value": "PROC-A48FE992-9F20-4D1D-BDDB-92208230F790"
    },
    {
      "field": "originator_user_id",
      "label": "发起人",
      "type": "string",
      "describe": "审批实例发起人的userid。",
      "value": "_findCollection find user_id from 02445559-061a-39c3-a15b-ba326de7e9a8 where name={F_VAOJ_FQR}"
    },
    {
      "field": "dept_id",
      "label": "发起人所在部门",
      "type": "string",
      "describe": "发起人所在的部门,如果发起人属于根部门,传-1。",
      "value": "_findCollection find leader_in_dept.0.dept_id from 02445559-061a-39c3-a15b-ba326de7e9a8 where name={F_VAOJ_FQR}"
    },
    {
      "field": "form_component_values",
      "label": "审批流表单参数",
      "type": "object",
      ...
    }
  ]
}
字段映射与转换
  1. process_code: 固定值PROC-A48FE992-9F20-4D1D-BDDB-92208230F790
  2. originator_user_id: 动态值,通过查找金蝶系统中的用户ID获取。
  3. dept_id: 动态值,通过查找金蝶系统中用户所属部门ID获取。
  4. form_component_values: 表单参数,包括多个子字段,需要逐一映射和转换。

以下是关键字段的映射和转换逻辑:

{
  ...
  {
    "field": "form_component_values",
    ...
    {
      // 单据编号
      {"field":"单据编号","type":"string","value":"{FBillNo}"},

      // 货款所属项目
      {"field":"货款所属项目","type":"string","value":"{FSETTLEORGID}","mapping":"6295fa8ab3945438dd215d24","mappingDirection":"reverse"},

      // 供应商名称
      {"field":"供应商名称","type":"string","value":"{FCONTACTUNIT}"},

      // 付款时间
      {"field":"付款时间","type":"string","value":"{{FCREATEDATE|date}}"},

      // 货款属性
      {"field":"货款属性","type":"string","value":"_function case '{F_VAOJ_HKSX}' when 'CP' then '成品' else '辅料' end"},

      // 备注
      {"field":"备注","type":"string","value":"备注为:{F_VAOJ_Remarks}"},

      // 付款金额(元)
      {"field":"付款金额(元)","type":"string","value":"{FAPPLYAMOUNTFOR_H}"},

      // 收款人(公司名称)
      {"field":"收款人(公司名称)","type":"string","value":"{FEACHCCOUNTNAME}"},

      // 收款人帐号
      {"field":"收款人帐号","type":"string","value":"{FEACHBANKACCOUNT}"}
    }
  }
}
数据写入

完成上述字段映射和转换后,通过HTTP POST请求将数据发送至钉钉API接口,实现数据写入操作。

import requests

url = 'https://oapi.dingtalk.com/topapi/processinstance/create'
headers = {'Content-Type': 'application/json'}
data = {
    'process_code': 'PROC-A48FE992-9F20-4D1D-BDDB-92208230F790',
    'originator_user_id': originator_user_id,
    'dept_id': dept_id,
    'form_component_values': form_component_values
}

response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
    print("Data successfully written to DingTalk")
else:
    print("Failed to write data to DingTalk")

通过以上步骤,我们成功地将金蝶付款申请单的数据转换并写入到钉钉平台,实现了跨系统的数据集成。 用友BIP接口开发配置

更多系统对接方案