金蝶云星空API接口数据转化:轻易云平台的ETL实践案例
### 泛微OA-Http到金蝶云星空数据集成案例分享:FD003非生产性付款申请
在企业级应用系统中,高效的数据对接和集成是确保业务流程顺畅运行的关键。在本技术案例中,我们将详细介绍如何使用轻易云数据集成平台,实现泛微OA-Http系统中的非生产性付款申请数据(API接口为:/api/workflow/paService/getWorkflowRequest),与金蝶云星空进行高效、可靠的数据对接及写入操作(API接口为:batchSave)。
本次集成解决方案命名为“FD003-非生产性付款申请 泛微 => 金蝶付款单-481”,其核心目标是实现数据从泛微OA-Http系统的准确提取,并无缝快速地批量写入至金蝶云星空。我们重点关注以下几个技术要点:
1. **大规模数据处理**:
- 支持高吞吐量的数据写入能力,使得大量来自泛微OA-Http的审批请求能迅速被传输并录入到金蝶云星空,极大提升了整体流程效率。
2. **实时监控与告警机制**:
- 集成过程中,通过集中式监控和告警系统,实时跟踪每个任务的状态和性能,以确保所有步骤都如预期般执行。这在大型跨平台项目中尤为重要,有助于及时发现并解决潜在问题。
3. **自定义数据转换逻辑**:
- 为适应不同系统间的数据格式要求,配置了灵活的自定义转换逻辑,从而保证由泛微OA-Http获取的数据能够正确映射到金蝶云星空所需结构中,这是顺利对接的重要前提。
4. **异常处理及重试机制**:
- 针对可能出现的网络波动或资源限制等异常情况,设计了完善的错误检测和自动重试机制,以确保不漏单、不重单,提高整体稳定性。
5. **分页及限流管理**:
- 为优化从泛微OA-Http获取大量历史记录时服务器压力,同时规避频繁调用带来的限流风险,我们采用了有效分页策略,从而平衡性能与功能需求。
6. **可视化操作界面及日志记录**:
- 使用轻易云提供的可视化工具设计整个工作流,各环节一目了然;同时启用全面日志记录,对各类操作进行追溯分析,这对于调试和维护同样意义重大。
通过上述方法,我们不仅实现了两个异构系统间无缝的数据交互,更提升了整个支付审批业务线上的透明度和自动化程度。接下来我们将进入具体实现细节,其中包括
![如何开发用友BIP接口](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image)
### 调用泛微OA-Http接口获取并加工数据的技术案例
在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`来获取并加工数据,以实现非生产性付款申请的集成方案。
#### 接口调用配置
首先,我们需要配置元数据,以便正确调用泛微OA-Http接口。以下是关键配置项:
```json
{
"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"}]
]
}
```
#### 数据请求与清洗
1. **API调用**:通过GET方法请求`/api/workflow/paService/getWorkflowRequest`接口,传递必要的参数如`workflowId`和`workflowIdList`。这些参数用于指定特定的工作流和方案ID。
2. **条件过滤**:在请求过程中,我们使用条件过滤来确保只获取符合特定条件的数据。例如,过滤字段`workflowMainTableInfo.fklx`等于“预付款”或“Prepayment”。
3. **自动填充响应**:配置中的`autoFillResponse: true`表示系统会自动处理并填充响应数据,这一步骤极大简化了后续的数据处理工作。
#### 数据转换与写入
在获取并清洗数据后,下一步是进行数据转换和写入。这部分操作通常包括:
1. **数据映射**:将从泛微OA获取的数据映射到目标系统(如金蝶付款单)的字段。这一步需要确保字段类型和格式的一致性。
2. **数据转换**:根据业务需求,对某些字段进行必要的转换。例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
3. **写入目标系统**:最终,将处理好的数据写入目标系统。在本案例中,是将非生产性付款申请的数据写入金蝶付款单。
#### 技术细节与注意事项
1. **接口安全性**:确保API调用过程中的安全性,使用HTTPS协议,并在请求头中添加必要的认证信息(如Token)。
2. **错误处理**:在API调用和数据处理过程中,必须加入完善的错误处理机制。例如,当API返回错误码时,应记录日志并通知相关人员进行人工干预。
3. **性能优化**:对于大批量数据请求,可以考虑分页查询或批量处理,以减少单次请求的数据量,提高整体性能。
4. **实时监控**:利用轻易云平台提供的实时监控功能,随时跟踪数据流动和处理状态,及时发现并解决潜在问题。
通过上述步骤,我们可以高效地调用泛微OA-Http接口获取并加工非生产性付款申请的数据,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也为后续的数据集成奠定了坚实基础。
![打通用友BIP数据接口](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image)
### 利用轻易云数据集成平台进行金蝶云星空API接口的ETL转换
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何配置和实现这一过程。
#### 数据请求与清洗
首先,我们需要从源平台获取原始数据,并对其进行初步清洗和处理。这一步骤通常包括数据的格式化、去重、校验等操作,以确保后续步骤的数据质量。
#### 数据转换与写入
接下来,我们重点关注如何利用轻易云数据集成平台,将清洗后的数据转换为金蝶云星空API接口所能接受的格式,并最终写入目标系统。以下是具体的配置和实现细节。
##### 配置元数据
根据提供的元数据配置,我们需要将不同字段映射到金蝶云星空API接口相应的字段。以下是关键字段及其配置说明:
1. **单据编号(FBillNo)**
```json
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}
```
该字段直接从源数据中获取,无需额外处理。
2. **单据类型(FBillTypeID)**
```json
{"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`转换为金蝶系统可识别的格式。
3. **币别(FCURRENCYID)**
```json
{"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`。
4. **业务日期(FDATE)**
```json
{"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{workflowMainTableInfo.sqrq}}"}
```
直接映射源数据中的`申请日期(sqrq)`字段。
5. **结算组织(FSETTLEORGID)**
```json
{"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}}"}
```
根据申请公司名称,在指定集合中查找对应的结算组织编码。
6. **付款组织(FPAYORGID)**
```json
{"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}}"}
```
与结算组织类似,使用相同的方法查找对应的付款组织编码。
7. **往来单位类型和往来单位**
- 往来单位类型:
```json
{"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"}
```
- 往来单位:
```json
{"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"}
```
根据不同的往来单位类型,选择对应的数据字段进行映射和转换。
8. **收款单位类型和收款单位**
- 收款单位类型:
```json
{"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"}
```
- 收款单位:
```json
{"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}
```
同样地,根据不同的收款单位类型,选择对应的数据字段进行映射和转换。
9. **业务类型(FBUSINESSTYPE)**
```json
{ field: FBUSINESSTYPE, label: 业务类型, type: string, describe: 销售业务 -1 \n采购业务 -2 \n其他业务 -3 \n工资发放 -4 \n费用报销 -5 \n内部利息 -6 , value:3 }
```
10. **备注(FREMARK)**
```json
{ field: FREMARK, label:备注, type:string, describe:备注, value:{{ workflowMainTableInfo.nrsm }} }
```
11. **自定义单号(F_XDW_OANO)**
```json
{ field:F_XDW_OANO, label:自定义单号, type:string, value:{{ workflowMainTableInfo.lcbh }} }
```
12. **应付金额(FPAYTOTALAMOUNTFOR_H)** 和 **实付金额(FREALPAYAMOUNTFOR_H)**
```json
{ field: FPAYTOTALAMOUNTFOR_H, label: 应付金额, type:string,value :{{ workflowMainTableInfo.jehj } }}
{ field:FREALPAYAMOUNTFOR_H,label :实付金额,type : string,value :{{ workflowMainTableInfo.ytbce } }}
```
13. **预付款(F_XDW_PAYMENT)**
```json
{ field:F_XDW_PAYMENT,label :预付款,type : string,value :{{ workflowMainTableInfo.yfk } }}
```
14. **付款单明细 (FPAYBILLENTRY)**
包含多个子字段,如结算方式、费用承担部门、应付金额等。
```json
{
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接口,将转换后的数据批量保存到目标系统中。具体调用如下:
```javascript
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转换,并将处理后的数据写入目标系统。这一过程充分利用了轻易云数据集成平台强大的元数据配置功能,实现了高效、透明的数据集成。
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)