每刻报销单集成到金蝶云星空的技术实践
在企业日常运营中,财务报销和付款流程往往涉及复杂的数据交互和多系统之间的集成。如何高效、安全地实现这类业务数据的对接,是很多IT团队面临的重要挑战。本文将通过一个具体案例,详细探讨如何使用轻易云数据集成平台,将每刻的费用报销单无缝对接至金蝶云星空中的付款申请单。
API接口调用与配置
首要任务是确保能够可靠地获取每刻平台上的数据,并正确写入到金蝶云星空中。在这个过程中,我们会用到每刻提供的/api/openapi/form/reimburse
接口来抓取费用报销单的数据。而为了保证大量数据能快速且稳定地传输至目标系统,需要使用金蝶云星空提供的batchSave
接口进行批量写入。
数据抓取与分页处理
为了完整、准时地抓取每刻上的所有报销单信息,我们需要设计定时任务,通过API定期拉取新的数据。同时,为了应对可能存在的大量数据超出接口限制的问题,采用分页机制逐步获取,并妥善处理限流控制,以避免请求失败或服务器负载过高。
import requests
from datetime import datetime, timedelta
def fetch_reimbursement_data(api_url, start_date, end_date):
params = {
"startDate": start_date,
"endDate": end_date,
"pageSize": 100,
"currentPage": 1
}
response_list = []
while True:
response = requests.get(api_url, params=params)
data = response.json()
if not data['records']:
break
response_list.extend(data['records'])
params["currentPage"] += 1
return response_list
上述代码片段展示了如何从每刻API批量抓取并分页处理费用报销单。在实际生产环境中,还需加入错误重试机制以提高其健壮性,这极大地减少了由于网络波动或服务端限制导致的数据遗漏问题,从根本上保障了数据的不漏失。
数据格式转换与映射
不同平台间的数据结构通常不一致,因此必须进行格式转换。在此场景下,每刻原始字段如 reimburseAmount
, reimburseDate
等,需要映射为符合金蝶要求的字段,如 amount
, applyDate
.
def transform_to_kingdee_format(reimbursement_data):
transformed_data = []
for record in reimbursement_data:
transformed_record = {
"FBillTypeID": {"FNumber":"ZJFKD01_SYS"},
"FDate":
![打通用友BIP数据接口](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image)
### 调用每刻接口获取并加工数据的技术实现
在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用每刻接口`/api/openapi/form/reimburse`,并对获取的数据进行初步加工。
#### 接口配置与调用
首先,我们需要配置接口的基本信息。根据提供的元数据配置,接口采用POST方法,主要参数包括单据号(formCode)、分页条数(pageSize)、单据状态(formStatus)等。
```json
{
"api": "/api/openapi/form/reimburse",
"method": "POST",
"number": "formCode",
"id": "formCode",
"idCheck": true,
"omissionRemedy": {
"crontab": "2 */2 * * *",
"takeOverRequest": [
{
"field": "approvedAtStart",
"label": "修改时间开始段",
"type": "string",
"is_required": true,
"value": "{DAYS_AGO_2}000"
}
]
},
...
}
请求参数设置
为了确保数据请求的准确性和完整性,我们需要设置一系列请求参数。这些参数包括创建时间、分页条数、单据状态等。以下是部分关键参数的设置:
createdAtStart
和createdAtEnd
:用于指定单据的创建时间范围。pageSize
:分页条数,默认值为100。offset
:当前页首条数据在所有数据中的偏移量。formStatus
:单据状态,支持多种状态组合,如SIGNING, SETTLEMENT, COMPLETED等。
{
...
"request": [
{
"label": "根据单据的创建时间",
"field": "createdAtStart",
"type": "string"
},
{
"label": "根据单据的创建时间",
"field": "createdAtEnd",
"type": "string"
},
{
"label": "分页条数",
"field": "pageSize",
"type": "string",
"value": 100
},
{
...
}
],
...
}
数据清洗与转换
在获取到原始数据后,我们需要对其进行清洗和转换,以便后续处理和写入目标系统。轻易云平台提供了丰富的数据处理功能,包括字段解析、数组展开等。
例如,对于返回的数据中包含的数组字段expenseList
和allocationList
,我们可以使用平台提供的“展开”功能,将其转换为平铺结构,以便进一步处理。
{
...
"beatFlat":["expenseList","allocationList"],
...
}
异常处理与补偿机制
为了确保数据集成过程的稳定性和可靠性,我们需要考虑异常处理和补偿机制。轻易云平台支持定时任务和补偿请求配置。例如,可以通过设置定时任务,每隔两小时自动执行一次数据同步,并在必要时发起补偿请求。
{
...
“omissionRemedy”: {
“crontab”: “2 */2 * * *”,
“takeOverRequest”: [
{
“field”: “approvedAtStart”,
“label”: “修改时间开始段”,
“type”: “string”,
“is_required”: true,
“value”: “{DAYS_AGO_2}000”
}
]
},
...
}
实际案例应用
在实际应用中,我们可以通过调用每刻接口获取费用报销单的数据,并将其转换为金蝶付款申请单。例如,可以通过以下步骤实现:
- 调用每刻接口:发送POST请求,获取符合条件的费用报销单数据。
- 数据清洗与转换:对返回的数据进行清洗,将嵌套数组展开,并转换为目标系统所需格式。
- 写入目标系统:将处理后的数据写入金蝶付款申请单,实现系统间的数据无缝对接。
通过以上步骤,我们可以高效地实现不同系统间的数据集成,提高业务透明度和效率。
使用轻易云数据集成平台将费用报销单转换为金蝶付款申请单
在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将每刻报销单中的费用报销单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
数据转换与写入配置
在本案例中,我们需要将每刻报销单中的费用报销单数据转换为金蝶付款申请单。为了实现这一目标,我们需要进行以下步骤:
-
定义API接口和请求方法:
- API接口:
batchSave
- 请求方法:
POST
- API接口:
-
配置元数据: 元数据配置定义了如何将源数据字段映射到目标平台的字段。以下是详细的元数据配置:
{ "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "formCode,customObject-CF338-detailBusinessCode,baseAmount-amountStr,coverEmployeeName,customObject-CF405-startTime", "bodyName": "items", "header": ["formCode", "customObject-CF338-detailBusinessCode", "baseAmount-amountStr", "coverEmployeeName", "customObject-CF405-startTime"], "body": [ "expenseList_viceExpenseTypeBizCode", "expenseList_allocationList_approvedBaseAmount-amountStr", "approvedAt", "expenseList_comments", ... ] }, ... }
-
字段映射与解析: 每个字段都需要进行映射和解析,以确保数据能够正确地从源平台转换到目标平台。以下是一些关键字段的映射示例:
-
单据编号 (
FBillNo
):{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{formCode}"}
-
结算组织 (
FSETTLEORGID
):{ "field":"FSETTLEORGID", ... "parser":{"name":"ConvertObjectParser","params":"FNumber"}, ... "value":"_findCollection find F_JSJT_Text_MKBM from dac46c84-b360-329a-889f-f8bbb8cca5b1 where FNumber={{customObject-CF338-detailBusinessCode}}" }
-
应付金额 (
FPAYAMOUNTFOR_H
):{"field":"FPAYAMOUNTFOR_H","label":"应付金额","type":"string","value":"{{baseAmount-amountStr}}"}
-
-
子对象映射: 对于复杂的数据结构,如数组或嵌套对象,需要对其子对象进行详细的映射。例如,付款申请单明细(
FPAYAPPLYENTRY
)中的各个字段:-
费用项目 (
FCOSTID
):{ ... {"parent":"FPAYBILLSRCENTRY","label":"费用项目","field":"FCOSTID","type":"string","value":"{{items.expenseList_viceExpenseTypeBizCode}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}} ... }
-
申请付款金额 (
FAPPLYAMOUNTFOR
):{"parent":"FPAYBILLSRCENTRY","label":"申请付款金额","field":"FAPPLYAMOUNTFOR","type":"string","value":"{{items.expenseList_allocationList_approvedBaseAmount-amountStr}}"}
-
-
其他请求参数: 除了字段映射,还需要配置一些其他请求参数,如表单ID、操作类型等:
{ ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"CN_PAYAPPLY"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} ... }
实际应用案例
通过上述配置,我们可以实现从每刻报销单到金蝶付款申请单的数据转换和写入。以下是一个实际应用案例:
假设我们有一条费用报销单,其主要字段如下:
- 单据编号:
EXP20231001
- 结算组织:
100
- 应付金额:
5000
- 申请日期:
2023-10-01
- 单据类型:
FKSQ005_SYS
- 往来单位类型:
BD_Empinfo
- 往来单位:
张三
- 收款单位类型:
BD_Empinfo
- 收款单位:
张三
...
通过轻易云数据集成平台,我们可以将这些字段自动映射并转换为金蝶付款申请单所需的格式,并通过API接口提交到金蝶云星空系统,实现无缝对接和高效的数据处理。
总结
通过合理配置元数据和API接口,我们可以利用轻易云数据集成平台高效地完成从每刻报销单到金蝶付款申请单的数据转换和写入。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。