致远A8+数据集成到金蝶云星空的技术实践:正式OA-ERP外购件采购申请单
在企业信息系统中,跨平台的数据集成是一个复杂而关键的任务。本文将重点讨论如何实现致远A8+与金蝶云星空之间的数据对接,以"正式OA-ERP外购件采购申请单"为例,通过API接口的运用,实现高效、可靠的数据传输。
系统概览及主要挑战
-
高效数据写入
- 在本案例中,我们需要将大量来自致远A8+系统的数据快速、高吞吐量地写入到金蝶云星空。这不仅要求接口具有较高的并发处理能力,还需保障数据不丢失、不重复。
-
实时监控和告警
- 数据流动过程中的透明度和可视化管理是确保集成成功的重要环节。通过集中监控和告警机制,可以实时跟踪各个数据集成任务的状态,并及时发现并解决问题。
-
自定义转换逻辑
- 由于两者之间存在不同的数据结构和业务需求,需要支持自定义转换逻辑,以便在传输过程中动态调整数据格式和内容。
-
异常处理与重试机制
- 为应对API调用失败以及网络抖动等突发情况,必须设计完善的异常处理流程和重试机制,确保每一条记录最终都能正确进入目标系统。
实施步骤及技术要点
-
数据获取(致远A8+ API)
/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}
通过该接口定时抓取外购件采购申请单,将其批量导出进行后续处理。需注意分页问题及限流控制,以提高请求效率并避免对源系统造成过大负载。
-
批量写入(金蝶云星空 API)
batchSave
使用
batchSave
接口完成多条记录的一次性导入,从而显著减少API调用次数,提高整体性能。此外还需配置必要的映射关系,使得输入输出字段对应合理,保证数据准确落地。 -
指标监控与质量检测 集成过程中的每一步都由实时日志记录,并通过仪表盘展示,可随时查看运行状态。同时,对于出现异常或错误的信息,会触发预设命令进行自动纠正或再尝试操作,从而最大程度降低人工干预成本。
以上即为本案例研究开篇部分。在后续文章中,我们会更详细讲解每个阶段所遇到的问题
调用致远A8+接口获取并加工数据的技术实现
在数据集成过程中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用致远A8+接口/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}
来获取并加工数据。
接口配置与调用
首先,我们需要了解该接口的基本信息和参数配置。根据元数据配置,接口的路径为/seeyon/rest/flow/FromFinish/{templateCode}/{startTime}/{endTime}
,采用GET方法进行请求。以下是具体的参数说明:
templateCode
: 模板代码,类型为字符串,在本案例中固定为WGJCGSQD
。startTime
: 起始时间,类型为字符串,使用上次同步时间({{LAST_SYNC_TIME|date}}
)。endTime
: 结束时间,类型为字符串,通过函数计算得到当前时间的下一天(_function DATE_FORMAT(DATE_ADD('{{CURRENT_TIME|date}}', INTERVAL 1 DAY), '%Y-%m-%d')
)。
请求参数配置
在请求参数中,我们需要设置以下字段:
{
"field": "templateCode",
"label": "templateCode",
"type": "string",
"value": "WGJCGSQD"
},
{
"field": "startTime",
"label": "startTime",
"type": "string",
"value": "{{LAST_SYNC_TIME|date}}"
},
{
"field": "endTime",
"label": "endTime",
"type": "string",
"value": "_function DATE_FORMAT(DATE_ADD('{{CURRENT_TIME|date}}', INTERVAL 1 DAY), '%Y-%m-%d')"
},
{
"field": "qcloudflowList",
"label": "qcloudflowList",
"type": "string",
"value": "qcloudflowList"
}
这些参数确保了我们能够准确地获取所需的数据。
数据处理与自动填充响应
在获取到数据后,我们需要对其进行处理。根据元数据配置中的autoFillResponse: true
,平台会自动将响应结果填充到相应的数据结构中。这一步极大简化了开发者的工作,使得数据处理更加高效。
数据清洗与转换
在数据清洗阶段,我们需要确保获取的数据符合目标系统的要求。这包括但不限于:
- 数据格式转换:将日期格式统一转换为目标系统所需的格式。
- 数据过滤:剔除无效或重复的数据。
- 数据校验:确保所有必填字段均有值且符合预期格式。
例如,对于日期字段,可以使用如下代码进行格式转换:
import datetime
def convert_date_format(date_str):
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
return date_obj.strftime('%Y/%m/%d')
# 示例调用
converted_date = convert_date_format('2023-10-01')
print(converted_date) # 输出: '2023/10/01'
数据写入目标系统
完成数据清洗与转换后,我们需要将处理后的数据写入目标系统。在轻易云平台上,这一步通常通过配置相应的写入操作来实现。例如,可以配置一个POST请求,将处理后的数据发送到目标系统的API接口。
{
"api": "/target/system/api/path",
"method": "POST",
...
}
通过以上步骤,我们实现了从致远A8+系统获取、清洗、转换并写入目标系统的完整流程。这一过程不仅提高了数据集成效率,也确保了数据的一致性和准确性。
轻易云数据集成平台的ETL转换与金蝶云星空API接口集成案例
在轻易云数据集成平台中,ETL(Extract, Transform, Load)过程是数据生命周期管理的关键步骤之一。本文将深入探讨如何将已经集成的源平台数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。
元数据配置解析
以下是元数据配置,用于将外购件采购申请单的数据写入金蝶云星空:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"CGSQD01_SYS"},
{"field":"FApplicationDate","label":"申请日期","type":"string","describe":"111","value":"{{mainData.日期1|datetime}}"},
{"field":"FRequestType","label":"申请类型","type":"string","describe":"111","value":"Material"},
{"field":"FApplicationOrgId","label":"申请组织","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FCurrencyId","label":"币别","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"111","value":"{{mainData.流水号}}"},
{"field":"FExchangeTypeId","label":"汇率类型","type":"string","describe":"111","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"HLTX01_SYS"},
{"field": "F_Boey_JQ", "label": "交期", "type": "string", "value": "{{mainData.交期|datetime}}"},
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"describe": "111",
"value": "detail_list",
"children":[
{"field": "FMaterialId", "label": "物料编码", "type": "string", "describe": "物料编码",
"parser":{"name": "ConvertObjectParser",
"params":
"FNumber"},
"value":
"{{detail_list.物料编码}}"
},
{"field":
"FReqQty",
"label":
"申请数量",
"type":
"string",
"describe":
"申请数量",
"value":
"{{detail_list.数量}}"
},
{
"field":
"F_Boey_YT",
"label":
"用途",
"type":
"string",
"describe":
"备注",
"value":
"{{detail_list.用途}}"
}
]
}
],
...
}
数据转换与写入过程
数据提取与清洗
首先,从源系统提取原始数据并进行必要的清洗操作。清洗操作包括去除无效数据、标准化日期格式等。清洗后的数据将被映射到目标平台所需的字段格式。
数据转换
在元数据配置中,我们定义了多个字段及其对应的解析器和值。例如,FBillTypeID
字段使用 ConvertObjectParser
将值 CGSQD01_SYS
转换为金蝶云星空能够识别的对象格式。类似地,其他字段如 FCurrencyId
, FExchangeTypeId
等也使用相应的解析器进行转换。
{
...
{
field: 'FBillTypeID',
label: '单据类型',
type: 'string',
describe: '111',
parser: { name: 'ConvertObjectParser', params: 'FNUMBER' },
value: 'CGSQD01_SYS'
},
...
}
构建请求体
根据元数据配置,构建符合金蝶云星空API接口要求的请求体。以下是一个示例请求体:
{
FormId: 'PUR_Requisition',
Operation: 'BatchSave',
IsAutoSubmitAndAudit: true,
IsVerifyBaseDataField: false,
Model:
{
FBillTypeID: { FNumber: 'CGSQD01_SYS' },
FApplicationDate: '2023-10-10T00:00:00Z',
FRequestType: 'Material',
FApplicationOrgId: { FNumber: '100' },
FCurrencyId: { FNumber: 'PRE001' },
FBillNo: '202310100001',
FExchangeTypeId: { FNumber: 'HLTX01_SYS' },
F_Boey_JQ: '2023-11-10T00:00:00Z',
FEntity:
[
{
FMaterialId:{ FNumber:'MAT001'},
FReqQty:'100',
F_Boey_YT:'生产用'
}
]
}
}
数据写入
使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口进行批量保存操作。确保在发送请求前,对所有必填字段进行验证,以避免因缺失或格式错误导致的数据写入失败。
const axios = require('axios');
axios.post('https://api.kingdee.com/k3cloud/batchSave', requestBody)
.then(response => {
console.log('Data saved successfully:', response.data);
})
.catch(error => {
console.error('Error saving data:', error);
});
技术要点总结
- 解析器应用:通过
ConvertObjectParser
等解析器,将源系统的数据格式转换为目标系统所需格式。 - 动态值替换:利用模板语法如
{{mainData.日期1|datetime}}
动态替换值,实现灵活的数据映射。 - 请求体构建:根据元数据配置,精确构建符合目标系统API接口要求的请求体。
- 错误处理:在实际操作中,应对可能出现的错误进行捕获和处理,以确保数据写入过程的可靠性。
通过上述步骤,我们成功实现了从源平台到金蝶云星空的数据ETL转换与写入,为企业实现高效的数据集成提供了有力支持。