集成金蝶云星空数据到钉钉的技术解析:付款申请单对接方案
在企业级应用系统中,如何高效、准确地实现跨平台数据集成始终是一个关键挑战。本文将深入探讨如何通过轻易云数据集成平台,将金蝶云星空中的付款申请单(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)
通过以上步骤,我们可以完成从金蝶云星空获取付款申请单数据并进行初步加工,为后续的数据写入和集成奠定基础。
金蝶付款申请单到钉钉供应商月结付款的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",
...
}
]
}
字段映射与转换
- process_code: 固定值
PROC-A48FE992-9F20-4D1D-BDDB-92208230F790
。 - originator_user_id: 动态值,通过查找金蝶系统中的用户ID获取。
- dept_id: 动态值,通过查找金蝶系统中用户所属部门ID获取。
- 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")
通过以上步骤,我们成功地将金蝶付款申请单的数据转换并写入到钉钉平台,实现了跨系统的数据集成。