泛微OA-Http到金蝶云星空数据集成案例分享:FD003非生产性付款申请
在企业级应用系统中,高效的数据对接和集成是确保业务流程顺畅运行的关键。在本技术案例中,我们将详细介绍如何使用轻易云数据集成平台,实现泛微OA-Http系统中的非生产性付款申请数据(API接口为:/api/workflow/paService/getWorkflowRequest),与金蝶云星空进行高效、可靠的数据对接及写入操作(API接口为:batchSave)。
本次集成解决方案命名为“FD003-非生产性付款申请 泛微 => 金蝶付款单-481”,其核心目标是实现数据从泛微OA-Http系统的准确提取,并无缝快速地批量写入至金蝶云星空。我们重点关注以下几个技术要点:
-
大规模数据处理:
- 支持高吞吐量的数据写入能力,使得大量来自泛微OA-Http的审批请求能迅速被传输并录入到金蝶云星空,极大提升了整体流程效率。
-
实时监控与告警机制:
- 集成过程中,通过集中式监控和告警系统,实时跟踪每个任务的状态和性能,以确保所有步骤都如预期般执行。这在大型跨平台项目中尤为重要,有助于及时发现并解决潜在问题。
-
自定义数据转换逻辑:
- 为适应不同系统间的数据格式要求,配置了灵活的自定义转换逻辑,从而保证由泛微OA-Http获取的数据能够正确映射到金蝶云星空所需结构中,这是顺利对接的重要前提。
-
异常处理及重试机制:
- 针对可能出现的网络波动或资源限制等异常情况,设计了完善的错误检测和自动重试机制,以确保不漏单、不重单,提高整体稳定性。
-
分页及限流管理:
- 为优化从泛微OA-Http获取大量历史记录时服务器压力,同时规避频繁调用带来的限流风险,我们采用了有效分页策略,从而平衡性能与功能需求。
-
可视化操作界面及日志记录:
- 使用轻易云提供的可视化工具设计整个工作流,各环节一目了然;同时启用全面日志记录,对各类操作进行追溯分析,这对于调试和维护同样意义重大。
通过上述方法,我们不仅实现了两个异构系统间无缝的数据交互,更提升了整个支付审批业务线上的透明度和自动化程度。接下来我们将进入具体实现细节,其中包括
调用泛微OA-Http接口获取并加工数据的技术案例
在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest
来获取并加工数据,以实现非生产性付款申请的集成方案。
接口调用配置
首先,我们需要配置元数据,以便正确调用泛微OA-Http接口。以下是关键配置项:
{
"api": "/api/workflow/paService/getWorkflowRequest",
"effect": "QUERY",
"method": "GET",
"number": "requestId",
"id": "requestId",
"name": "id",
"idCheck": true,
"request": [
{"field": "workflowId", "label": "e9流程id", "type": "string", "value": "481"},
{"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value": "2356388e-8c49-35b3-bb7e-1eca1a8617d5"}
],
"autoFillResponse": true,
"condition_bk": [
[{"field": "workflowMainTableInfo.fklx", "logic": "eqv2", "value":"预付款"}]
],
"condition":[
[{"field":"workflowMainTableInfo.fklx","logic":"eqv2","value":"预付款"}],
[{"field":"workflowMainTableInfo.fklx","logic":"eqv2","value":"Prepayment"}]
]
}
数据请求与清洗
-
API调用:通过GET方法请求
/api/workflow/paService/getWorkflowRequest
接口,传递必要的参数如workflowId
和workflowIdList
。这些参数用于指定特定的工作流和方案ID。 -
条件过滤:在请求过程中,我们使用条件过滤来确保只获取符合特定条件的数据。例如,过滤字段
workflowMainTableInfo.fklx
等于“预付款”或“Prepayment”。 -
自动填充响应:配置中的
autoFillResponse: true
表示系统会自动处理并填充响应数据,这一步骤极大简化了后续的数据处理工作。
数据转换与写入
在获取并清洗数据后,下一步是进行数据转换和写入。这部分操作通常包括:
-
数据映射:将从泛微OA获取的数据映射到目标系统(如金蝶付款单)的字段。这一步需要确保字段类型和格式的一致性。
-
数据转换:根据业务需求,对某些字段进行必要的转换。例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
-
写入目标系统:最终,将处理好的数据写入目标系统。在本案例中,是将非生产性付款申请的数据写入金蝶付款单。
技术细节与注意事项
-
接口安全性:确保API调用过程中的安全性,使用HTTPS协议,并在请求头中添加必要的认证信息(如Token)。
-
错误处理:在API调用和数据处理过程中,必须加入完善的错误处理机制。例如,当API返回错误码时,应记录日志并通知相关人员进行人工干预。
-
性能优化:对于大批量数据请求,可以考虑分页查询或批量处理,以减少单次请求的数据量,提高整体性能。
-
实时监控:利用轻易云平台提供的实时监控功能,随时跟踪数据流动和处理状态,及时发现并解决潜在问题。
通过上述步骤,我们可以高效地调用泛微OA-Http接口获取并加工非生产性付款申请的数据,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也为后续的数据集成奠定了坚实基础。
利用轻易云数据集成平台进行金蝶云星空API接口的ETL转换
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何配置和实现这一过程。
数据请求与清洗
首先,我们需要从源平台获取原始数据,并对其进行初步清洗和处理。这一步骤通常包括数据的格式化、去重、校验等操作,以确保后续步骤的数据质量。
数据转换与写入
接下来,我们重点关注如何利用轻易云数据集成平台,将清洗后的数据转换为金蝶云星空API接口所能接受的格式,并最终写入目标系统。以下是具体的配置和实现细节。
配置元数据
根据提供的元数据配置,我们需要将不同字段映射到金蝶云星空API接口相应的字段。以下是关键字段及其配置说明:
-
单据编号(FBillNo)
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}
该字段直接从源数据中获取,无需额外处理。
-
单据类型(FBillTypeID)
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型\n采购业务付款单-FKDLX01_SYS\n其他业务付款单-FKDLX02_SYS\n工资发放付款单-FKDLX03_SYS\n费用报销付款单-FKDLX04 SYS\n资金上划付款单-FKDLX05 SYS\n内部利息付款单-FKDLX06 SYS\n资金调拨付款单-FKDLX07_SYS\n保证金付款单-FKDLX08 SYS","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"FKDLX02_SYS"}
这里使用了
ConvertObjectParser
解析器,将固定值FKDLX02_SYS
转换为金蝶系统可识别的格式。 -
币别(FCURRENCYID)
{"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 5740d4e3-ebe8-3548-9635-f35e1fdc983b where FCODE={{workflowMainTableInfo.bberp}}"}
使用动态查询方式,根据源数据中的
bberp
字段值,在指定集合中查找对应的FNumber
。 -
业务日期(FDATE)
{"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{workflowMainTableInfo.sqrq}}"}
直接映射源数据中的
申请日期(sqrq)
字段。 -
结算组织(FSETTLEORGID)
{"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"结算组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 4d9cb35a-56f5-36c7-b34a-f64db755b1f1 where FName={{workflowMainTableInfo.sqgs}}"}
根据申请公司名称,在指定集合中查找对应的结算组织编码。
-
付款组织(FPAYORGID)
{"field":"FPAYORGID","label":"付款组织","type":"string","describe":"付款组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 4d9cb35a-56f5-36c7-b34a-f64db755b1f1 where FName={{workflowMainTableInfo.sqgs}}"}
与结算组织类似,使用相同的方法查找对应的付款组织编码。
-
往来单位类型和往来单位
- 往来单位类型:
{"field":"FCONTACTUNITTYPE","label":"往来单位类型","type": "string", "describe": "往来单位类型\n部门-BD_Department\n员工-BD_Empinfo\n其他往来单位-FIN-OTHERS\n供应商-BD-Supplier\n客户-BD-Customer", "value": "_function case '{{detail_0.0.wldwlx_FV}}' when '0' then 'BD_Supplier' when '1' then 'BD_Customer' when '3' then 'ORG_Organizations' when '2' then 'FIN_OTHERS' end"}
- 往来单位:
{"field": "FCONTACTUNIT", "label": "往来单位", "type": "string", "describe": "往来单位", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_function case '{{detail_0.0.wldwlx_FV}}' when '0' then '{{detail_0.0.gysbh}}' when '1' then '{{detail_0.0.khbh}}' when '3' then '{{detail_0.0.zzbh}}' when '2' then '{{detail_0.0.qtwlbh}}' end"}
根据不同的往来单位类型,选择对应的数据字段进行映射和转换。
- 往来单位类型:
-
收款单位类型和收款单位
- 收款单位类型:
{"field": "FRECTUNITTYPE", "label": "收款单位类型", "type": "string", "describe": "收款单位类型", "value": "_function case '{{detail_0.0.wldwlx_FV}}' when '0' then 'BD_Supplier' when '1' then 'BD_Customer' when '3' then 'ORG_Organizations' when '2' then 'FIN_OTHERS' end"}
- 收款单位:
{"field": "FRECTUNIT", "label": "收款单位", "type": "string", "describe": "收款单位", parser: { name: ConvertObjectParser, params: FNumber }, value: _function case {{ detail_0 . 0 . wldwlx_FV }}when 0 then {{ detail_0 . 0 . gysbh }}when 1 then {{ detail_0 . 0 . khbh }}when 3 then {{ detail_0 . 0 . zzbh }}when 2 then {{ detail_0 . 0 . qtwlbh }}end}
同样地,根据不同的收款单位类型,选择对应的数据字段进行映射和转换。
- 收款单位类型:
-
业务类型(FBUSINESSTYPE)
{ field: FBUSINESSTYPE, label: 业务类型, type: string, describe: 销售业务 -1 \n采购业务 -2 \n其他业务 -3 \n工资发放 -4 \n费用报销 -5 \n内部利息 -6 , value:3 }
-
备注(FREMARK)
{ field: FREMARK, label:备注, type:string, describe:备注, value:{{ workflowMainTableInfo.nrsm }} }
-
自定义单号(F_XDW_OANO)
{ field:F_XDW_OANO, label:自定义单号, type:string, value:{{ workflowMainTableInfo.lcbh }} }
-
应付金额(FPAYTOTALAMOUNTFOR_H) 和 实付金额(FREALPAYAMOUNTFOR_H)
{ field: FPAYTOTALAMOUNTFOR_H, label: 应付金额, type:string,value :{{ workflowMainTableInfo.jehj } }} { field:FREALPAYAMOUNTFOR_H,label :实付金额,type : string,value :{{ workflowMainTableInfo.ytbce } }}
-
预付款(F_XDW_PAYMENT)
{ field:F_XDW_PAYMENT,label :预付款,type : string,value :{{ workflowMainTableInfo.yfk } }}
-
付款单明细 (FPAYBILLENTRY) 包含多个子字段,如结算方式、费用承担部门、应付金额等。
{ field:"FPAYBILLENTRY", label:"付款单明细", type:"array", describe:"付款单明细", value:"detail_0", children:[ { field:"FSETTLETYPEID", label:"结算方式", type:"string", describe:"结算方式", parser:{ name:"ConvertObjectParser", params:"FNumber" }, value:"JSFS04_SYS" }, ... ] }
API调用与写入
在完成上述配置后,我们通过轻易云平台调用金蝶云星空API接口,将转换后的数据批量保存到目标系统中。具体调用如下:
const requestData = {
FormId: AP_PAYBILL,
Operation: BatchSave,
IsAutoSubmitAndAudit:false,
IsVerifyBaseDataField:true,
Model:{
FBillNo:data.FBillNo,
...
FPAYBILLENTRY:[...]
...
// Other fields as configured above.
}
};
axios.post('https://api.kingdee.com/batchSave', requestData)
.then(response => {
console.log('Data saved successfully:', response.data);
})
.catch(error => {
console.error('Error saving data:', error);
});
通过以上步骤,我们成功实现了从源平台到金蝶云星空API接口的数据ETL转换,并将处理后的数据写入目标系统。这一过程充分利用了轻易云数据集成平台强大的元数据配置功能,实现了高效、透明的数据集成。