金蝶收款退款单对接纷享销客账户支出流水
在现代企业的业务流程中,数据集成的重要性不言而喻。为了实现高效、精准的系统对接,我们选择使用轻易云数据集成平台,将金蝶云星空中的收款退款单信息无缝集成到纷享销客的账户支出流水中。本案例将详细解析如何利用executeBillQuery接口从金蝶云星空获取数据,并通过纷享销客提供的数据写入API /cgi/crm/v2/data/create,实现快速、可靠的数据传输。
为确保集成过程中不会漏单,我们设计了一套定时抓取机制,定期调用金蝶云星空的executeBillQuery接口,以实时监控并获取新的收款退款单。此外,通过批量处理技术,大量数据能够迅速、高效地写入到纷享销客中,这不仅提升了操作效率,还保证了数据的一致性与完整性。
分页和限流问题是我们在实际操作中遇到的一大挑战。针对这一点,我们通过分批次调度请求,将大量待处理记录拆分为多个小批次进行抓取和上传,有效避免了接口超负荷运行。同时,为应对偶发的系统异常或网络波动导致的数据传输错误,我们特别设计了完善的重试机制,对失败请求进行多次自动重试,直到确认成功完成数据传输。
最后,考虑到两套系统间复杂的数据格式差异,我们采取了一系列映射规则和转换方案,使得从源头(即金蝶云星空)导出的原始数据能平稳转化为目标格式,并顺利导入至纷享销客。这一全生命周期管理过程不仅透明可视,也极大提升了业务执行效率。在下一节内容里,我将具体展开每一个技术细节及其实现方法。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统金蝶云星空中调用接口executeBillQuery
来获取数据,并进行初步加工。本文将详细探讨如何通过轻易云数据集成平台配置元数据,调用该接口并处理返回的数据。
接口调用配置
首先,我们需要配置元数据以便正确调用金蝶云星空的executeBillQuery
接口。以下是关键的元数据配置项:
- API:
executeBillQuery
- Method:
POST
- Pagination: 支持分页查询,每页100条记录
- ID Check:
true
,确保每条记录都有唯一标识
具体的请求字段配置如下:
{
"request": [
{"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"},
{"field": "FDATE", "label": "业务日期", "type": "string", "value": "FDATE"},
{"field": "FREFUNDTOTALAMOUNTFOR", "label": "表头-应退金额", "type": "string", "value": "FREFUNDTOTALAMOUNTFOR"},
{"field": "FCONTACTUNIT_FNumber", "label": "往来单位", "type": "string", "value": "FCONTACTUNIT.FNumber"},
{"field": "FOURACCOUNTNAME", "label": "我方账户名称", "type": "string", "value": "FOURACCOUNTNAME"},
{"field": "FSALEERID_FName", "label": "销售员", "type": "string", "value": "FSALEERID.FName"},
{"field": "F_PRSH_Assistant_h1g", "label": 退款类型, type: string, value: F_PRSH_Assistant_h1g.fnumber}
],
...
}
分页与过滤条件
为了提高查询效率和控制数据量,我们使用分页和过滤条件。分页参数如下:
{
...
{
field: Limit,
label: 最大行数,
type: string,
describe: 金蝶的查询分页参数,
value: {PAGINATION_PAGE_SIZE}
},
{
field: StartRow,
label: 开始行索引,
type: string,
describe: 金蝶的查询分页参数,
value: {PAGINATION_START_ROW}
},
...
}
过滤条件用于筛选特定时间段内的数据,并根据业务需求过滤退款类型:
{
field: FilterString,
label: 过滤条件,
type: string,
describe: 示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=,
value: FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and F_PRSH_Assistant_h1g.fnumber in ('01','02')
}
字段映射与解析
为了确保我们获取到所需的字段信息,我们需要指定字段键集合:
{
field: FieldKeys,
label: 需查询的字段key集合,
type: array,
describe: 金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber,
parser:{
name:ArrayToString,
params:,
}
},
{
field:"FormId",
label:"业务对象表单Id",
type:"string",
describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder",
value:"AR_REFUNDBILL"
}
数据请求与清洗
在完成上述元数据配置后,我们可以通过轻易云平台发起HTTP POST请求,调用executeBillQuery
接口。返回的数据通常是一个JSON数组,其中包含多个记录。我们需要对这些记录进行初步清洗,例如去除无效字段、标准化日期格式等。
以下是一个示例代码片段,用于处理返回的数据:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
'FormId': 'AR_REFUNDBILL',
'FieldKeys': 'FBillNo,FDATE,FREFUNDTOTALAMOUNTFOR,FCONTACTUNIT.FNumber,FOURACCOUNTNAME,FSALEERID.FName,F_PRSH_Assistant_h1g.fnumber',
'FilterString': f"FApproveDate>='{last_sync_time}' and F_PRSH_Assistant_h1g.fnumber in ('01','02')",
'Limit': pagination_page_size,
'StartRow': pagination_start_row
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据清洗示例
cleaned_data = []
for record in data:
cleaned_record = {
'单据编号': record['FBillNo'],
'业务日期': record['FDATE'],
'应退金额': record['FREFUNDTOTALAMOUNTFOR'],
'往来单位': record['FCONTACTUNIT.FNumber'],
'我方账户名称': record['FOURACCOUNTNAME'],
'销售员': record['FSALEERID.FName'],
'退款类型': record['F_PRSH_Assistant_h1g.fnumber']
}
cleaned_data.append(cleaned_record)
# 后续处理逻辑...
通过上述步骤,我们成功地从金蝶云星空中获取并清洗了所需的数据,为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。
使用轻易云数据集成平台进行ETL转换并写入纷享销客API接口的技术案例
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,最终写入目标平台——纷享销客。本文将详细探讨如何使用轻易云数据集成平台配置元数据,实现这一过程。
API接口配置
我们需要调用纷享销客的API接口来创建数据记录。根据提供的元数据配置,目标API接口为/cgi/crm/v2/data/create
,请求方法为POST。以下是具体的请求结构:
{
"api": "/cgi/crm/v2/data/create",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "data",
"label": "数据map",
"type": "object",
"children": [
{
"field": "object_data",
"label": "表头",
"type": "object",
"children": [
{"field":"dataObjectApiName","label":"对象的api_name","type":"string","value":"AccountTransactionFlowObj"},
{"field":"name","label":"单号","type":"string","value":"{FBillNo}"},
{"field":"transaction_date","label":"交易日期","type":"string","value":"_function ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) \/ 1000),0)"},
{"field":"customer_id","label":"客户","type":"string","value":"_findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}"},
{"field":"owner","label":"负责人","type":"string","value":"_findCollection find user_id from ad096beb-313f-340a-b153-cdf7fdf9b6d7 where name={FSALEERID_FName}","parser":{"name":"StringToArray","params":","},"default":"FSUID_F56CEEA6EDDBFE10681577526DF83326"},
{"field":"expense_type","label":"支出类型","type":"string","value":"2"},
{"field":"expense_amount","label":"支出金额","type":"string","value":"{FREFUNDTOTALAMOUNTFOR}"},
{"field":"fund_account_id","label":"账户","type":"string","value":"_function case '{F_PRSH_Assistant_h1g}' when '01' then '667d37c617fdcb00010a7967' when '02' then '66b5c4b5537d670001a55d86' end"},
{"field":"remark","label":"备注","type":"string","value":"金蝶单号{FBillNo}"},
{"field":"field_kingdee_document_number__c","label":"金蝶单号","type":"string","value":"{FBillNo}"}
]
}
]
}
],
"otherRequest":[
{"field": "currentOpenUserId", "label": "当前操作人userid", "type": "string", "value": "FSUID_F56CEEA6EDDBFE10681577526DF83326"}
]
}
数据字段解析与转换
-
对象名称:
dataObjectApiName
字段指定了目标对象的API名称,这里是AccountTransactionFlowObj
。 -
单号:
name
字段对应源数据中的FBillNo
,直接映射即可。 -
交易日期:
transaction_date
字段需要进行时间戳转换。这里使用了函数_function ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) / 1000),0)
将日期格式转换为Unix时间戳。 -
客户ID:通过
_findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}
查询客户ID。 -
负责人:类似地,通过
_findCollection find user_id from ad096beb-313f-340a-b153-cdf7fdf9b6d7 where name={FSALEERID_FName}
查询负责人ID,并使用StringToArray
解析器处理字符串数组。 -
支出类型:固定值
2
表示支出类型。 -
支出金额:直接映射源数据中的
FREFUNDTOTALAMOUNTFOR
字段。 -
账户ID:根据条件选择账户ID,使用
_function case '{F_PRSH_Assistant_h1g}' when '01' then '667d37c617fdcb00010a7967' when '02' then '66b5c4b5537d670001a55d86' end
实现条件判断和映射。 -
备注:添加备注信息,包括金蝶单号
FBillNo
。 -
金蝶单号:再次映射
FBillNo
到field_kingdee_document_number__c
字段。
请求示例
以下是一个完整的请求示例:
{
"data": {
"object_data": {
"dataObjectApiName": "AccountTransactionFlowObj",
"name": "{FBillNo}",
...
}
},
...
}
通过以上配置和处理,我们能够将源平台的数据经过ETL转换后,成功写入到纷享销客系统中。这一过程确保了不同系统间的数据无缝对接,实现了高效的数据集成和管理。