金蝶云星空数据集成到钉钉的技术案例分享
在实际业务场景中,实现系统间的数据无缝对接是提高工作效能的重要手段。本文将重点介绍如何通过轻易云数据集成平台,将金蝶云星空中的销售退货数据高效、安全地集成至钉钉系统。这一过程中,我们运用了executeBillQuery API从金蝶云星空获取数据,并使用topapi/processinstance/create API将数据批量写入到钉钉,确保信息不漏单且实时同步。
首先,针对这一具体项目「销售退货金蝶=>钉钉--测试ok,需要加一个字段的配置,等待客户」,我们需要解决以下几个关键技术点:
-
高吞吐量的数据写入能力: 为了适应销售退货的大量记录,我们设计了高效的数据流方案,通过分批处理和并行执行,使得大量数据能够快速、稳定地写入到钉锤。
-
分页和限流处理: 金蝶云星空接口executeBillQuery在读取大批量数据时存在分页限制,为此我们实现了一套自动化的分页抓取机制,确保所有销售退货记录被全部捕获,不丢失、不重复。
-
自定义数据转换逻辑: 在不同系统之间进行对接时,经常会遇到数据格式差异问题。我们利用轻易云的平台提供的自定义转换功能,以满足特定业务需求,对原始API返回的数据结构进行了必要调整与优化。
-
异常处理与错误重试机制: 针对于API调用失败或网络波动导致的问题,我们实现了完善的异常监控及重试机制。当任务出现错误时,能够第一时间检测并重新尝试提交以保证整体流程不中断。
-
集中监控与日志记录: 为提升稳定性和可追溯性,我们启用了集中化的监控系统以及详细日志记录功能。每一次接口调用,每一个步骤都能被实时跟踪,有助于及时发现问题并回溯分析,提高可靠性。
下一步内容即为上述各步骤实施过程中的具体操作细节,包括API参数设置、调优方法等实践经验分享。同时,也会讨论如何进一步优化当前方案,应对未来可能遇见的新挑战。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空接口executeBillQuery
来获取销售退货数据,并进行初步加工。
接口配置与调用
首先,我们需要配置和调用金蝶云星空的executeBillQuery
接口。该接口主要用于查询业务单据,支持POST请求。以下是元数据配置的详细说明:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FEntity_FENTRYID",
"name": "FBillNo",
"request": [
{"field":"FID","label":"实体主键","type":"string","describe":"实体主键","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"销售组织","value":"FSaleOrgId.FName"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"库存组织","value":"FStockOrgId"},
{"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"结算组织","value":"FSettleOrgId"},
{"field":"FApproveDate","label":"日期","type":"string","describe":"日期","value":"FApproveDate"},
{"field":"FMaterialId","label":"物料","type":"string","describe":"物料","value":"FMaterialId.FName"},
{"field":"FOwnerIdHead","label":"货主","type":"string","describe":"货主","value":"FOwnerIdHead.FNumber"},
{"field":"FRealQty","label":"实发数量","type":"string","describe":"实发数量","value":"FRealQty"},
{"field": "FStockId_FNumber", "label": "仓库id", "type": "string", "describe": "仓库id", "value": "FStockId.FNumber"},
{"field": "FTaxPrice", "label": "含税单价", "type": "string", "describe": "含税单价", "value": "FTaxPrice"},
{"field": "FRetcustId", "label": "退货客户", "type": "string", "describe": "投诉对应客户", "value": "FRetcustId.FName"},
{"field": "FSrcBillNo", "label": "源单编号", "type": "string", "describe": "",
"value" : "" },
{" field ":" FSalesManId_FName "," label ":" 销售员名称 "," type ":" string "," describe ":" 销售员 "," value ":" FSalesManId.FName "},
{" field ":" FHeadNote "," label ":" 单据头备注 "," type ":" string "," describe ":" 单据头备注 "," value ":" FHeadNote "},
{" field ":" FEntity_FENTRYID "," label ":" FEntity_FENTRYID "," type ":" string "," describe ":" FEntity_FENTRYID "," value ":" FEntity_FENTRYID "},
{" field ":"
请求参数详解
在请求参数中,我们需要特别注意以下几个字段:
FormId
: 必须填写金蝶的表单ID,例如:SAL_RETURNSTOCK
。FilterString
: 用于过滤条件,例如:"FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and FDocumentStatus='B' and F_ora_CheckBox='1'"
。FieldKeys
: 查询的字段集合,例如:["FID", ...]
。
这些参数确保了我们能够准确地获取所需的数据。
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗操作:
- 字段映射:将原始字段映射到目标系统所需的字段。例如,将
FBillNo
映射为目标系统中的订单编号。 - 数据格式转换:例如,将日期格式从
YYYY-MM-DD
转换为目标系统所需的格式。 - 缺失值处理:填充或删除缺失值,以确保数据完整性。
示例代码
以下是一个示例代码片段,用于调用接口并处理返回的数据:
import requests
import json
# 配置请求参数
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
'FormId': 'SAL_RETURNSTOCK',
'FilterString': 'FModifyDate>=\'2023-01-01\' and FDocumentStatus=\'B\' and F_ora_CheckBox=\'1\'',
'FieldKeys': ['FID', 'FBillNo', 'FSaleOrgId.FName', ...]
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 处理响应
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for item in data:
cleaned_item = {
'订单编号': item['FBillNo'],
'销售组织': item['FSaleOrgId.FName'],
# 更多字段映射...
}
cleaned_data.append(cleaned_item)
# 输出清洗后的数据
print(cleaned_data)
else:
print(f"Error: {response.status_code}")
通过上述步骤,我们可以成功地从金蝶云星空获取销售退货数据,并进行初步加工,为后续的数据集成和分析奠定基础。
使用轻易云数据集成平台实现销售退货数据的ETL转换并写入钉钉API接口
在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台(钉钉API接口)的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台完成这一过程,重点关注API接口相关的技术细节。
1. 数据请求与清洗
首先,我们需要从源平台(金蝶)获取销售退货数据。这一步骤已在生命周期的第一阶段完成,这里不再赘述。我们假设已经获得了所需的数据,并对其进行了初步清洗。
2. 数据转换与写入
接下来,我们需要将清洗后的数据转换为钉钉API接口能够接收的格式。根据提供的元数据配置,钉钉API接口要求的数据结构如下:
{
"api": "topapi/processinstance/create",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "process_code",
"label": "process_code",
"type": "string",
"describe": "process_code在审批流程编辑页面的URL网址中获取。",
"value": "PROC-C32C1731-310A-4824-B403-0EE33B597311"
},
{
"field": "originator_user_id",
"label": "originator_user_id",
"type": "string",
"describe": "审批实例发起人的userid。",
"value": "_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base}"
},
{
...
}
]
}
3. 配置元数据
根据上述元数据配置,我们需要将金蝶系统中的字段映射到钉钉API接口所需的字段。以下是关键字段及其映射关系:
process_code
: 固定值"PROC-C32C1731-310A-4824-B403-0EE33B597311"
originator_user_id
: 从金蝶系统中查找FStaffNumber
字段,并根据FID
进行匹配。dept_id
: 同样从金蝶系统中查找FStaffNumber
字段,并根据FID
进行匹配。form_component_values
: 包含多个子字段,如下所示:单据编号
: 映射为{FBillNo}
单据日期
: 映射为{FDate|date}
办理人
: 映射为_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base}
退货组织
: 映射为{FSaleOrgId}
事业部
: 映射为{F_ora_Combo}
渠道
: 映射为{F_ora_Combo1}
退货公司全称
: 映射为{FRetcustId}
币别
: 映射为{F_ora_Combo2}
退货原因
: 使用_function case '{F_ora_Remarks}' when ' ' then '无' else '{F_ora_Remarks}' end
函数处理退回金额(元)
: 映射为{FBillAllAmount}
品牌
: 从金蝶系统中查找FHelpCode
字段,并根据FSaledeptid
匹配。
此外,还有一个嵌套数组字段 表格
,包含以下子字段:
物料名称
: 映射为{FMaterialId}
实退数量
: 映射为{FRealQty}
含税单价
: 映射为{FTaxPrice}
价税合计
: 映射为{FAllAmount}
4. 数据写入
配置完成后,我们使用轻易云平台提供的可视化界面,将上述映射关系配置到相应的ETL流程中。通过调用钉钉API接口,将转换后的数据写入目标平台。
具体实现步骤如下:
- 在轻易云平台上创建一个新的ETL任务,选择源平台(金蝶)和目标平台(钉钉)。
- 配置数据映射关系,根据提供的元数据配置,将金蝶系统中的字段映射到钉钉API接口所需的字段。
- 设置API调用参数,包括请求方法(POST)、API路径(topapi/processinstance/create)等。
- 执行ETL任务,实时监控数据流动和处理状态,确保每个环节都清晰易懂。
通过以上步骤,我们成功地将销售退货数据从金蝶系统转换并写入到钉钉API接口,实现了不同系统间的数据无缝对接。这不仅提高了业务透明度和效率,也确保了数据处理过程的全生命周期管理。