金蝶云星空数据集成到钉钉:付款申请单对接方案概述
在现代企业的财务管理中,及时准确的数据传输和处理至关重要。尤其是当涉及多个系统的数据交互时,确保数据的一致性和完整性成为了关键挑战。本文将分享一个成功的案例——如何高效地将金蝶云星空中的付款申请单数据集成到钉钉中,以实现供应商月结付款审批流转。
为了完成这一任务,我们采用了名为“金蝶付款申请单->钉钉供应商月结付款①”的方案。在这个过程中,我们利用金蝶云星空提供的executeBillQuery
API抓取相关数据,并使用钉钉平台的topapi/processinstance/create
API来创建和写入对应的审批流程实例。
首先,为了确保从金蝶云星空获取的数据不遗漏,我们设计了一套定时可靠的数据抓取机制。通过调用executeBillQuery
接口,可以按需分页获取支付请求,同时处理限流问题以避免接口超载。此外,还引入了实时监控与日志记录功能,在轻易云平台上实现全程透明可视化操作,让每个环节都能被清晰追踪。
接下来,大量从金蝶获取的数据需要快速且批量地写入到钉钉。我们特别关注如何解决两者之间可能存在的数据格式差异,通过定义一种便捷而灵活的数据映射方式,对象字段自动匹配,从而提高工作效率。同时,为应对集成过程中的异常情况,实际方案还包含了一整套错误重试机制,以保证任何临时性的网络或系统故障都不会影响整体流程。
最后,在具体实施过程中,对于不同API及其库存在例外情形进行了详细处理,例如分页参数及限制速率控制等。这不仅提升了系统兼容性,还有效降低了因大规模并发操作带来的风险,实现了稳定、顺畅、安全的系统对接体验。
在接下来的部分,我们会详细介绍这些技术细节,包括各关键API调用示例以及注意事项,以帮助您更好地理解并应用这一解决方案。
调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用金蝶云星空的executeBillQuery
接口获取付款申请单数据,并进行初步加工。
接口配置与请求
首先,我们需要根据元数据配置来设置API请求参数。以下是关键的配置项:
- API:
executeBillQuery
- Method:
POST
- FormId:
CN_PAYAPPLY
(业务对象表单ID) - Pagination: 分页参数,
pageSize
设为500 - Condition: 过滤条件,这里我们使用付款组织ID (
FPAYORGID
) 等于10.03
请求体中包含了需要查询的字段和其他必要的参数:
{
"FormId": "CN_PAYAPPLY",
"FieldKeys": [
"FID", "FBillNo", "FDOCUMENTSTATUS", "FCREATORID", "FAPPROVERID",
"FCREATEDATE", "FSETTLEORGID.fname", "FAPPROVEDATE", "FPURCHASEORGID",
...
],
"FilterString": "FPAYORGID = '10.03' and FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}'",
"Limit": 500,
"StartRow": 0,
"TopRowCount": true
}
数据请求与清洗
在发送请求后,我们将获得一个包含多个付款申请单记录的响应。接下来,需要对这些数据进行清洗和初步加工,以便后续的数据转换和写入操作。
-
字段映射与重命名: 根据元数据配置中的
request
部分,将返回的数据字段映射到相应的标签。例如,将FID
映射为“实体主键”,将FBillNo
映射为“单据编号”。 -
数据类型转换: 确保每个字段的数据类型符合预期。例如,将日期字段(如
FCREATEDATE
,FAPPROVEDATE
)转换为标准日期格式。 -
过滤无效数据: 根据业务需求,过滤掉不符合条件的数据。例如,剔除状态为“作废”的单据(即
FDOCUMENTSTATUS
不等于“作废”)。 -
分页处理: 如果返回的数据量较大,需要进行分页处理。通过调整请求中的
StartRow
参数,可以逐页获取数据,直到所有记录都被处理完毕。
实际案例
以下是一个实际调用金蝶云星空接口并处理返回数据的示例代码片段:
import requests
import json
# API URL 和 Headers
url = 'https://api.kingdee.com/executeBillQuery'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
# 请求体
payload = {
"FormId": "CN_PAYAPPLY",
"FieldKeys": [
"FID", "FBillNo", "FDOCUMENTSTATUS", "FCREATORID",
...
],
"FilterString": "FPAYORGID = '10.03' and FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}'",
"Limit": 500,
"StartRow": 0,
"TopRowCount": True
}
# 发起请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据清洗与加工
processed_data = []
for record in data['Result']:
if record['FDOCUMENTSTATUS'] != '作废':
processed_record = {
'实体主键': record['FID'],
'单据编号': record['FBillNo'],
...
}
processed_data.append(processed_record)
# 输出或进一步处理 processed_data
print(processed_data)
通过上述步骤,我们成功地从金蝶云星空系统中获取了付款申请单的数据,并进行了初步清洗和加工。这些准备工作为后续的数据转换与写入奠定了基础,使得不同系统间的数据集成更加顺畅和高效。
使用轻易云数据集成平台实现金蝶付款申请单到钉钉API接口的数据转换与写入
在数据集成过程中,数据的ETL(提取、转换、加载)是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将金蝶付款申请单的数据转换为钉钉API接口所能接收的格式,并最终写入钉钉系统。
数据请求与清洗
在进行数据转换之前,首先需要从源系统(金蝶)中提取相关数据,并进行必要的清洗和预处理。这一步骤确保了后续的数据转换能够顺利进行。在此,我们假设已经完成了数据请求与清洗步骤,并获得了如下结构的原始数据:
{
"FBillNo": "20231001",
"FSETTLEORGID": "项目A",
"FCONTACTUNIT": "供应商B",
"FCREATEDATE": "2023-10-01",
"F_VAOJ_HKSX": "CP",
"F_VAOJ_Remarks": "备注信息",
"FAPPLYAMOUNTFOR_H": "10000",
"FEACHCCOUNTNAME": "公司C",
"FEACHBANKACCOUNT": "1234567890"
}
数据转换与写入
接下来,我们将上述原始数据转换为钉钉API接口所能接收的格式。根据提供的元数据配置,目标API接口为topapi/processinstance/create
,使用POST方法进行调用。以下是具体的字段映射和转换逻辑:
-
审批流的唯一码:
- 字段:
process_code
- 固定值:
PROC-22EDF4E6-5CC9-4712-B9A3-34AEAF37B8AC
- 字段:
-
发起人:
- 字段:
originator_user_id
- 值来源:通过用户ID查询获取
- SQL示例:
_findCollection find user_id from 57556c0f-b9ed-38ce-a3d3-d3ad742b0e0d where name={F_VAOJ_FQR}
- 字段:
-
发起人所在部门:
- 字段:
dept_id
- 值来源:通过部门ID查询获取
- SQL示例:
_findCollection find leader_in_dept.0.dept_id from 57556c0f-b9ed-38ce-a3d3-d3ad742b0e0d where name={F_VAOJ_FQR}
- 字段:
-
审批流表单参数:
- 字段:
form_component_values
- 类型:对象数组
- 子字段映射如下:
[ {"field":"单据编号","value":"{FBillNo}"}, {"field":"货款所属项目","value":"{FSETTLEORGID}"}, {"field":"供应商名称","value":"{FCONTACTUNIT}"}, {"field":"付款时间","value":"{{FCREATEDATE|date}}"}, {"field":"货款属性","value":"_function case '{F_VAOJ_HKSX}' when 'CP' then '成品' else '辅料' end"}, {"field":"备注","value":"备注为:{F_VAOJ_Remarks}"}, {"field":"付款金额(元)","value":"{FAPPLYAMOUNTFOR_H}"}, {"field":"收款人(公司名称)","value":"{FEACHCCOUNTNAME}"}, {"field":"收款人帐号","value":"{FEACHBANKACCOUNT}"} ]
- 字段:
根据上述配置,最终生成的请求体如下:
{
"process_code": "PROC-22EDF4E6-5CC9-4712-B9A3-34AEAF37B8AC",
"originator_user_id": "_findCollection find user_id from 57556c0f-b9ed-38ce-a3d3-d3ad742b0e0d where name={F_VAOJ_FQR}",
"dept_id": "_findCollection find leader_in_dept.0.dept_id from 57556c0f-b9ed-38ce-a3d3-d3ad742b0e0d where name={F_VAOJ_FQR}",
"form_component_values": [
{"name": "单据编号", "value": "{FBillNo}"},
{"name": "货款所属项目", "value": "{FSETTLEORGID}"},
{"name": "供应商名称", "value": "{FCONTACTUNIT}"},
{"name": "付款时间", "value": "{{FCREATEDATE|date}}"},
{"name": "货款属性",
"value": "_function case '{F_VAOJ_HKSX}' when 'CP' then '成品' else '辅料' end"
},
{"name": "备注",
"value": "备注为:{F_VAOJ_Remarks}"
},
{"name": "付款金额(元)",
"value": "{FAPPLYAMOUNTFOR_H}"
},
{"name": "收款人(公司名称)",
"value": "{FEACHCCOUNTNAME}"
},
{"name": "收款人帐号",
"value": "{FEACHBANKACCOUNT}"
}
]
}
API调用
在完成上述数据转换后,通过HTTP POST方法将数据发送到钉钉API接口。以下是一个示例代码片段,展示如何使用Python进行API调用:
import requests
import json
url = 'https://oapi.dingtalk.com/topapi/processinstance/create'
headers = {'Content-Type': 'application/json'}
data = {
# 填充上文生成的请求体内容
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
通过上述步骤,我们成功地将金蝶付款申请单的数据转换并写入到钉钉系统,实现了不同系统间的数据无缝对接。这不仅提高了业务流程的自动化程度,也显著提升了工作效率。