金蝶云星空数据集成到钉钉案例分享:采购申请单==>金蝶—钉钉
在复杂的业务流程和多样化的系统生态中,企业对系统间数据无缝集成需求愈发迫切。本文着眼于一个具体技术案例,探讨如何通过轻易云平台实现金蝶云星空中的采购申请单数据与钉钉的高效对接。
1. 金蝶云星空向钉钉的数据抓取与写入
我们首先需要从金蝶云星空获取相关采购申请单的数据,为此调用executeBillQuery接口进行定时、可靠地数据抓取是关键。在实际操作中,为处理分页及限流问题,我们设计了多线程并行处理机制,并配合使用分布式任务调度框架,以确保大量数据能够快速且稳定地被提取。
// 伪代码示例
for (int page = 1; hasMorePages; page++) {
try {
String responseData = executeBillQuery(page, PAGE_SIZE);
processResponse(responseData);
} catch (RateLimitException e) {
// 实现限流策略,如指数退避等
handleRateLimit();
}
}
2. 数据格式转换与映射
由于金蝶云星空和钉钉的数据结构存在差异,在传输前必须进行必要的数据格式转换和映射。通过构建自定义转换规则和脚本,实现字段之间的准确匹配,对于确保数据完整性至关重要。
Map<String, Object> transformK3ToDingTalk(Map<String, Object> k3Data) {
Map<String, Object> dingTalkData = new HashMap<>();
// 自定义转换逻辑,例如:
dingTalkData.put("employee_id", k3Data.get("EmpID"));
dingTalkData.put("request_date", formatDate(k3Data.get("RequestDate")));
return dingTalkData;
}
3. 针对异常处理的重试机制
在写入过程中,如果遇到网络波动或接口响应超时等问题,需要设立针对性的异常处理与重试机制,以保证整个流程高效稳健运行。例如,采用失败记录日志并基于MQ(消息队列)实现异步补偿策略,是一种有效的方法:
# Python伪代码示例:
try:
createProcessInstance(data)
except NetworkError as e:
logError(e)
retryLater(data)
def createProcessInstance(data):
# 调用顶顶API:topapi/processinstance/create 写入数据...
以上是该技术方案的一些关键要素,包括如何批量快速读取源端系统(金蝶云),
使用轻易云数据集成平台调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台中,调用源系统接口是数据集成生命周期的第一步。本文将详细探讨如何通过配置元数据,调用金蝶云星空的executeBillQuery
接口来获取采购申请单的数据,并进行相应的数据加工。
接口配置与请求参数
首先,我们需要配置元数据,以便正确地调用金蝶云星空的executeBillQuery
接口。以下是元数据配置的关键部分:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "{FBillNo}-{FModifyDate}",
"id": "{FEntity_FEntryID}-{FModifyDate}",
"name": "FBillNo",
"idCheck": true,
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FApplicationOrgId","label":"申请组织","type":"string","describe":"申请组织","value":"FApplicationOrgId.FNumber"},
{"field":"FApplicationDeptId","label":"申请部门","type":"string","describe":"申请部门","value":"FApplicationDeptId.FNumber"},
{"field":"FApplicantId","label":"申请人","type":"string","describe":"申请人","value":"FApplicantId.FNumber"},
{"field":"FCurrencyId_FName","label":"币别","type":"string","describe":"币别","value":"FCurrencyId.FName"},
{"field":"FTotalAmount","label":"含税金额合计","type":"string","describe":"含税金额合计","value":"FTotalAmount"},
{"field":"FCreatorId_FName","label":"创建人","type":"string","describe":"创建人","value":"FCreatorId.FName"},
{"field":"FExchangeTypeId","label":"汇率类型","type":"string","describe":"汇率类型","value":"FExchangeTypeId.FNumber"},
{"field":...}
],
...
}
上述配置定义了请求参数,包括单据编号、申请组织、申请部门等字段。这些字段将用于构建查询条件,从而精确获取所需的数据。
构建请求体
在实际调用过程中,我们需要根据业务需求构建请求体。例如,假设我们需要查询最近修改且状态为“B”的采购申请单,可以设置如下过滤条件:
{
"FilterString": "FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and F_VDPK_CheckBox_83g='1' and FDocumentStatus='B'",
...
}
此外,还可以设置分页参数以控制返回结果的数量和起始位置:
{
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}",
...
}
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换。轻易云平台提供了丰富的数据处理工具,可以对字段进行重命名、格式转换等操作。例如,将金蝶返回的币别名称字段FCurrencyId_FName
重命名为CurrencyName
,可以通过以下方式实现:
{
"responseMapping": {
"CurrencyName": "FCurrencyId_FName",
...
}
}
对于复杂的数据处理需求,可以编写自定义脚本或使用内置函数进行处理。例如,将日期格式从yyyy-MM-dd HH:mm:ss
转换为yyyyMMdd
:
{
"responseMapping": {
...
"ModifyDateFormatted": {
"sourceField": "FModifyDate",
"transformFunction": {
"name": "formatDate",
"params": ["yyyy-MM-dd HH:mm:ss", "yyyyMMdd"]
}
}
}
}
数据写入目标系统
经过清洗和转换后的数据,需要写入目标系统(如钉钉)。轻易云平台支持多种异构系统的无缝对接,可以通过配置目标系统的API接口,实现数据的自动同步。
例如,将处理后的采购申请单数据写入钉钉,可以配置钉钉API接口,并映射相应字段:
{
...
"targetSystemApi": {
...
"fieldsMapping": {
...
"DingTalkField1": "{ProcessedField1}",
...
}
}
}
通过上述步骤,我们实现了从金蝶云星空获取采购申请单数据,并经过清洗和转换后,写入到钉钉系统的完整流程。这一过程充分利用了轻易云平台的数据集成功能,提高了业务流程的自动化和效率。
使用轻易云数据集成平台将采购申请单数据转换并写入钉钉API接口
在数据集成生命周期的第二步中,关键任务是将已集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台——钉钉API接口的接收格式,并最终写入目标平台。以下是具体的技术实现过程。
钉钉API接口配置
根据提供的元数据配置,钉钉API接口为topapi/processinstance/create
,采用POST
方法。以下是请求参数及其描述:
process_code
: 钉钉表单ID,从审批流程编辑页面的URL中获取。originator_user_id
: 审批实例发起人的userid。dept_id
: 发起人所属部门ID。form_component_values
: 表单控件,包括单据编号、单据类型、申请类别、供应商、结算币别以及明细行等。
数据提取与转换
-
提取源数据: 从金蝶系统中提取采购申请单的数据。假设我们已经通过轻易云平台完成了初步的数据请求与清洗工作,接下来需要对这些数据进行转换。
-
字段映射: 根据元数据配置,将金蝶系统中的字段映射到钉钉API所需的字段。例如:
- 单据编号(FBillNo)映射到
form_component_values.单据编号
- 单据类型(FBillTypeID_FName)映射到
form_component_values.单据类型
- 供应商(FSuggestSupplierId_FName)映射到
form_component_values.供应商
- 结算币别(FCurrencyId_FName)映射到
form_component_values.结算币别
- 明细行中的物料编码(FMaterialId_FNumber)、物料名称(FMaterialId_FName)、规格型号(FMaterialModel)、申请采购数量(FReqQty)、含税单价(FTAXPRICE)分别映射到对应的表格字段。
- 单据编号(FBillNo)映射到
-
用户和部门信息: 使用轻易云平台内置的方法从用户和部门表中查找发起人的userid和部门ID。例如:
"originator_user_id": "_findCollection find userid from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}", "dept_id": "_findCollection find dept_id_list.0 from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}"
数据加载
将转换后的数据加载到钉钉API接口。以下是一个示例请求体:
{
"process_code": "PROC-AAC297B2-B776-4A66-B9A0-1F028C4DC2F5",
"originator_user_id": "123456",
"dept_id": "-1",
"form_component_values": [
{
"name": "单据编号",
"value": "{FBillNo}"
},
{
"name": "单据类型",
"value": "{FBillTypeID_FName}"
},
{
"name": "供应商",
"value": "{FSuggestSupplierId_FName}"
},
{
"name": "结算币别",
"value": "{FCurrencyId_FName}"
},
{
"name": "明细行",
"value": [
{
"name": "物料编码",
"value": "{FMaterialId_FNumber}"
},
{
"name": "物料名称",
"value": "{FMaterialId_FName}"
},
{
"name": "规格型号",
"value": "{FMaterialModel}"
},
{
"name": "申请采购数量",
"value": "{FReqQty}"
},
{
"name": "含税单价",
"value": "{FTAXPRICE}"
}
]
}
]
}
实施细节
-
异步处理: 确保整个ETL过程为全异步处理,以提升效率和响应速度。轻易云平台支持多种异构系统集成,可以无缝对接不同系统的数据。
-
实时监控: 利用轻易云平台提供的实时监控功能,跟踪每个环节的数据流动和处理状态,确保数据准确无误地写入目标平台。
通过上述步骤,我们成功地将金蝶系统中的采购申请单数据转换为钉钉API接口所需的格式,并完成了数据写入。这不仅提高了业务流程的自动化程度,也确保了不同系统间的数据一致性和完整性。