案例分享:金蝶云星空数据集成到钉钉的实践
在采购业务流程中,实现系统间的数据无缝对接,能够显著提升工作效率和数据准确性。本案例聚焦于如何通过轻易云数据集成平台,将金蝶云星空中的采购订单信息精准地同步到钉钉,实现高效的数据流转。
首先,我们需要解决的是稳定且实时获取金蝶云星空接口的采购订单数据。使用executeBillQuery
API,可以定时可靠地抓取指定条件下的订单信息。在实现过程中,为避免遗漏,对分页和限流问题进行了细致处理,确保所有记录均能完整获取。
接下来是批量写入大量数据至钉钉。为此,采用了topapi/processinstance/create
API来完成任务,但需注意两系统间的数据格式差异,并进行必要的转换与映射。同时,通过定制化的数据映射策略,使得不同字段之间配合更加契合,从而保障了业务逻辑的一致性。
此外,在对接过程中出现异常情况是不可避免的。因此,为提高健壮性,还设计了一套错误重试机制。当发生网络波动或接口响应超时等异常时,该机制可及时捕捉并自动重新发起请求,保证最终每条记录都能顺利传输至目标系统。同时,通过引入实时监控与日志记录功能,可以随时了解各环节运行状态,有助于快速定位和解决潜在问题。
综合以上技术要点,本案例成功实现了将金蝶云星空中的采购订单高效、安全、完整地集成到钉钉,为企业运营提供了可靠的数据支撑与决策依据。在后续部分,将详细介绍整个实施方案及相关配置步骤。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,以获取采购订单数据并进行初步加工。
接口配置与调用
首先,我们需要配置并调用金蝶云星空的executeBillQuery
接口。根据提供的元数据配置,我们可以看到该接口采用POST方法,主要用于查询(effect为QUERY)。
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "{FBillNo}-{FModifyDate}",
"id": "{FPOOrderEntry_FEntryId}-{FModifyDate}",
"name": "FBillNo",
"idCheck": true,
...
}
请求参数设置
请求参数是接口调用成功与否的关键。我们需要根据业务需求和元数据配置来设置请求参数。以下是一些关键字段及其描述:
FormId
: 设置为业务对象表单Id,即"PUR_PurchaseOrder"。FilterString
: 用于过滤条件,如FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'
。FieldKeys
: 查询字段集合,通过解析器将数组转换为字符串。Limit
和StartRow
: 分页参数,用于控制返回的数据量。
示例请求体如下:
{
"FormId": "PUR_PurchaseOrder",
"FilterString": "FModifyDate>='2023-01-01' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'",
"FieldKeys": [
"FID",
"FBillNo",
"FDate",
...
],
"Limit": 100,
"StartRow": 0
}
数据清洗与转换
在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。这一步骤包括但不限于:
- 字段映射:将源系统字段映射到目标系统字段。例如,将金蝶云星空的
FBillNo
映射到钉钉系统中的订单编号。 - 数据格式转换:如日期格式、数值精度等转换。
- 数据过滤:根据业务规则过滤不需要的数据。
示例代码如下:
def clean_and_transform(data):
cleaned_data = []
for record in data:
transformed_record = {
'order_id': record['FBillNo'],
'order_date': transform_date(record['FDate']),
'supplier': record['FSupplierId_FNumber'],
...
}
cleaned_data.append(transformed_record)
return cleaned_data
def transform_date(date_str):
# 假设日期格式为YYYY-MM-DD,将其转换为目标系统所需格式
return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y')
自动填充响应
轻易云平台支持自动填充响应(autoFillResponse),这意味着在调用接口后,平台会自动解析并填充返回的数据,无需手动处理。这极大地简化了开发工作,提高了效率。
{
"autoFillResponse": true
}
通过上述步骤,我们可以高效地从金蝶云星空获取采购订单数据,并进行必要的清洗和转换,为后续的数据写入做好准备。这一过程不仅确保了数据的一致性和准确性,还提升了整体业务流程的透明度和效率。
使用轻易云数据集成平台进行ETL转换并写入钉钉API接口的技术案例
在数据集成生命周期的第二步,我们将重点讨论如何将已经集成的源平台数据进行ETL转换,并转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。本文将详细探讨系统接口和数据集成的特性。
钉钉API接口配置
根据提供的元数据配置,我们需要将采购订单的数据通过ETL转换后,写入到钉钉API接口topapi/processinstance/create
。以下是该API接口的具体配置:
- API URL:
topapi/processinstance/create
- 请求方法:
POST
- ID检查:
true
- 请求参数:
process_code
: 钉钉表单id,从审批流程编辑页面的URL中获取。originator_user_id
: 发起人userid,从源数据中查找。dept_id
: 发起人所属部门id,从源数据中查找。form_component_values
: 表单控件,包括单据编号、单据类型、采购类型、供应商、结算币别、部门及表格等信息。
数据转换与映射
在进行ETL转换时,需要特别注意字段的映射关系。以下是具体字段的映射和处理方式:
-
process_code:
"field": "process_code", "value": "PROC-D055D73F-C76C-4288-BB21-BA39B81A4B76"
这个字段是固定值,可以直接从配置中获取。
-
originator_user_id:
"field": "originator_user_id", "value": "_findCollection find userid from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}"
需要从源数据中查找发起人的userid,这里使用了一个查找函数
_findCollection
,根据发起人名称(FCreatorId_FName
)来获取对应的userid。 -
dept_id:
"field": "dept_id", "value": "_findCollection find dept_id_list.0 from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}"
同样需要从源数据中查找发起人所属部门id,如果发起人属于根部门,则传递值为
-1
。 -
form_component_values: 包含多个子字段,需要逐一映射:
-
单据编号(FBillNo)
"field": "单据编号", "value": "{FBillNo}"
-
单据类型(FBillTypeID_FName)
"field": "单据类型", "value": "{FBillTypeID_FName}"
-
供应商(FSupplierId_FName)
"field": "供应商", "value": "{FSupplierId_FName}"
-
结算币别(FSettleCurrId_FName)
"field": "结算币别", "value": "{FSettleCurrId_FName}"
-
部门(固定值:财务部)
"field": "部门", "value": "财务部"
-
-
表格字段:
表格字段包含多个子项,需要处理列表中的每一项:
-
物料编码(FMaterialId_FNumber)
"field": "物料编码", "value": "{{list.FMaterialId_FNumber}}"
-
物料名称(FMaterialId_FName)
"field": "物料名称", "value": "{{list.FMaterialId_FName}}"
-
规格型号(FModel)
"field": "规格型号", "value": "{{list.FModel}}"
-
采购数量(FQty)
"field": "采购数量", "value": "{{list.FQty}}"
-
含税单价(FTaxPrice)
"field": "含税单价", "value": "{{list.FTaxPrice}}"
-
金额(FAllAmount)
{ field: '金额', value: '{FAllAmount}' }
-
实际操作步骤
-
提取和清洗数据:从源平台提取采购订单相关的数据,并进行必要的数据清洗和预处理,以确保数据质量。
-
构建请求体:根据上述映射关系,构建符合钉钉API要求的请求体。这里需要特别注意数组和对象嵌套结构的正确性。
-
发送请求:使用HTTP POST方法,将构建好的请求体发送到钉钉API接口。可以使用轻易云提供的HTTP客户端功能来实现这一过程。
-
处理响应:接收并处理来自钉钉API接口的响应,根据响应结果进行相应操作,如记录日志、更新状态等。
通过以上步骤,我们可以实现从金蝶系统到钉钉系统的数据无缝对接,确保数据在不同系统间高效流转。