飞书新增审批测试:金蝶云星空数据集成案例
在本技术案例中,我们将详细探讨如何实现金蝶云星空数据与飞书审批功能的高效对接。我们的应用场景是利用轻易云数据集成平台,将金蝶云星空系统中的业务单据数据,通过ExecuteBillQuery接口抓取,并批量写入到飞书的审批实例中,使用飞书API:/open-apis/approval/v4/instances完成数据写入。
为了确保这项任务的成功实施,我们需要重点关注以下几个技术要点:
数据查询和抓取
首先,通过调用金蝶云星空的ExecuteBillQuery接口,可以定时可靠地获取最新业务单据的数据。在这个过程中,需要特别注意处理分页和限流问题,以保证大规模数据获取的稳定性及性能优化。
数据转换与映射
由于金蝶云星空与飞书之间的数据格式存在差异,我们将使用自定义的数据转换逻辑来适配特定需求。这一步非常关键,它不仅影响到数据准确性的传递,也关系到整个流程的顺利进行。通过轻易云提供的可视化工具,可以直观地设计和管理这些复杂的数据流图。
大量数据高速写入
制定出高效的大批量写入策略,是保障集成速度的重要环节。通过配置高吞吐量的数据写入能力,能够使得大量从金蝶云星空获取的数据快速进入飞书系统,从而显著提升整体操作效率。
实时监控与异常处理
为确保全过程无误,我们部署了一套完整且灵活的监控与告警机制。一旦发生任何异常状况,例如网络波动或API超时等,都能实时通知相关人员并启动自动重试机制。此外,还引入了细粒度的数据质量监控,及时发现并修正潜在的问题,提高最终集成结果的一致性和可靠性。
在接下来的章节中,我们将逐步拆解具体实施步骤、细节配置以及代码示例,为您全面展示这一重要项目从规划到落地执行过程中的每一个关键节点。
调用金蝶云星空接口ExecuteBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的ExecuteBillQuery
接口来获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据以便正确调用金蝶云星空的ExecuteBillQuery
接口。以下是元数据配置的详细内容:
{
"api": "ExecuteBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FId",
"pagination": {
"pageSize": 10
},
"idCheck": true,
"request": [
{
"field": "Limit",
"label": "最大行数",
"type": "string",
"describe": "金蝶的查询分页参数",
"value": "10"
},
{
"field": "StartRow",
"label": "开始行索引",
"type": "string",
"describe": "金蝶的查询分页参数"
},
{
"field": "TopRowCount",
"label": "返回总行数",
"type": "int",
"describe": "金蝶的查询分页参数"
},
{
"field": "FilterString",
"label": "过滤条件",
"type": "string",
"describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
“value”: “FModifyDate>= '{{LAST_SYNC_TIME|dateTime}}' and FDocumentStatus='B'”
},
{
“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”:“SAL_SaleOrder”
}
]
}
请求示例
根据上述配置,我们可以构建一个请求示例:
{
“Limit”: “10”,
“StartRow”: “0”,
“TopRowCount”: 100,
“FilterString”:“FModifyDate>= '2023-01-01T00:00:00' and FDocumentStatus='B'”,
“FieldKeys”: [“FBillNo”,“FDate”,“FCustomerID.FNumber”,“FSalesDeptID.FNumber”,“FSalesPersonID.FNumber”,“FTotalAmount”],
“FormId”:“SAL_SaleOrder”
}
数据清洗与转换
在获取到原始数据后,下一步是对数据进行清洗和转换。以下是一个简单的数据清洗和转换流程:
- 字段映射:将原始数据中的字段映射到目标系统所需的字段。例如,将
FBillNo
映射为目标系统中的订单编号。 - 数据类型转换:确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为标准日期格式。
- 过滤无效数据:剔除不符合业务规则的数据。例如,删除总金额为零或负值的订单记录。
实现代码示例
以下是一个Python代码示例,用于调用接口并进行简单的数据清洗和转换:
import requests
import json
from datetime import datetime
# 配置请求参数
payload = {
'Limit': '10',
'StartRow': '0',
'TopRowCount': 100,
'FilterString': f"FModifyDate>= '{datetime.now().strftime('%Y-%m-%dT%H:%M:%S')}' and FDocumentStatus='B'",
'FieldKeys': ['FBillNo', 'FDate', 'FCustomerID.FNumber', 'FSalesDeptID.FNumber', 'FSalesPersonID.FNumber', 'FTotalAmount'],
'FormId': 'SAL_SaleOrder'
}
# 调用接口
response = requests.post('https://api.kingdee.com/ExecuteBillQuery', json=payload)
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data['Result']:
cleaned_record = {
'order_number': record['FBillNo'],
'order_date': datetime.strptime(record['FDate'], '%Y-%m-%dT%H:%M:%S'),
'customer_id': record['FCustomerID.FNumber'],
'sales_dept_id': record['FSalesDeptID.FNumber'],
'sales_person_id': record['FSalesPersonID.FNumber'],
'total_amount': float(record['FTotalAmount'])
}
# 剔除无效数据
if cleaned_record['total_amount'] > 0:
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4, ensure_ascii=False))
通过上述步骤,我们成功地调用了金蝶云星空的ExecuteBillQuery
接口,并对获取的数据进行了初步清洗和转换。这一过程展示了如何利用轻易云平台实现高效的数据集成,为后续的数据处理和分析奠定基础。
利用轻易云数据集成平台实现飞书API接口的数据转换与写入
在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是将源平台的数据转换为目标平台所能接收的格式,并最终写入目标平台的关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据转换为飞书API接口所需的格式,并通过POST请求写入飞书。
元数据配置解析
我们将使用以下元数据配置来实现数据转换和写入:
{
"api": "/open-apis/approval/v4/instances",
"effect": "EXECUTE",
"method": "POST",
"number": "number",
"id": "id",
"name": "name",
"idCheck": true,
"request": [
{"field":"approval_code","label":"新增审批code","type":"string","describe":"新增审批code","value":"663E35C3-0972-4807-A543-FC79D65A88A7"},
{"field":"user_id","label":"发起人id","type":"string","value":"ac166ebc"},
{"field":"form_1","label":"单据编号","type":"object","children":[{"field":"id","label":"控件","type":"string","value":"FBillNo"},{"field":"type","label":"控件类型","type":"string","value":"input"},{"field":"value","label":"值","type":"string","value":"{BillNo}"}]},
{"field":"form_2","label":"客户名称","type":"object","children":[{"field":"id","label":"id","type":"string","value":"FCustomerId_FName"},{"field":"type","label":"type","type":"string","value":"input"},{"field":"value","label":"value","type":"string","value":"{CustId_Name}"}]},
{"field":"form_3","label":"日期","type":"object","children":[{"field":"id","label":"id","type":"","value":"","describe":"","defaultValue":"","required":"","format":"","defaultValueType":"","defaultValueRule":"","defaultValueTypeRule":"","defaultValueTypeRuleDesc":"","defaultValueTypeRuleExample":"","dataSourceType":"","dataSourceId":"","dataSourceFieldName":"","dataSourceFieldDisplayName":"","dataSourceFieldDesc":"","dataSourceFieldExample":"","dataSourceFieldDefaultValue":""},{"field":"",
...
]}
]
}
数据请求与清洗
在数据请求阶段,我们从源系统中提取原始数据。假设我们从ERP系统中提取了以下订单信息:
{
"BillNo": "SO2023001",
"CustId_Name": "ABC公司",
"Date": "2023-10-01T12:00:00Z",
"SaleOrgId_Name": "华东销售部",
"SalerId_Name": "张三",
"SaleOrderEntry": [
{
"MaterialId_Number": "MAT001",
"MaterialId_Name": "物料A",
"Qty": 10,
"AllAmount": 1000
},
{
...
}
]
}
数据转换
根据元数据配置,我们需要将上述原始数据转换为飞书API接口能够接受的格式。具体操作如下:
- 审批Code:直接使用固定值
663E35C3-0972-4807-A543-FC79D65A88A7
。 - 发起人ID:直接使用固定值
ac166ebc
。 - 单据编号:映射原始数据中的
BillNo
字段。 - 客户名称:映射原始数据中的
CustId_Name
字段。 - 日期:映射并格式化原始数据中的
Date
字段。 - 销售组织:映射原始数据中的
SaleOrgId_Name
字段。 - 销售员:映射原始数据中的
SalerId_Name
字段。 - 明细信息:需要遍历原始数据中的
SaleOrderEntry
数组,并逐项映射各个字段。
转换后的JSON结构如下:
{
"approval_code": "663E35C3-0972-4807-A543-FC79D65A88A7",
"user_id": "ac166ebc",
...
}
数据写入
完成转换后,通过轻易云平台调用飞书API接口进行POST请求,将处理后的JSON数据写入飞书系统。具体代码示例如下:
import requests
url = 'https://open.feishu.cn/open-apis/approval/v4/instances'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
data = {
...
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Data successfully written to Feishu")
else:
print(f"Failed to write data: {response.text}")
总结
通过上述步骤,我们成功地将源平台的数据经过ETL过程,转换为飞书API接口所需的格式,并最终通过POST请求写入飞书系统。这一过程不仅展示了轻易云平台在处理异构系统集成时的强大能力,也提供了一个具体的技术案例供参考。