### 案例分享:泛微OA-Http数据集成到金蝶云星空
在本技术案例中,我们将探讨如何实现从泛微OA系统到金蝶云星空的高效数据集成,实现自动化处理费用报销单据。具体方案命名为“FD004-对个费用报销 泛微=>金蝶其他应付单--写入配置待检查”。
通过轻易云数据集成平台,我们成功地构建了一条跨系统的数据流,支持批量抓取和快速写入,同时确保数据质量和一致性。在这个案例中,关键步骤包括:
1. **API接口调用与分页处理**:
使用泛微OA-Http的获取数据API `/api/workflow/paService/getWorkflowRequest` 来抓取需要同步的费用报销单据。由于接口存在分页限制,我们设计了可靠的分页机制,以确保所有有效记录均被完整提取。
2. **自定义转换逻辑**:
为适配金蝶云星空的数据格式要求,本方案根据业务需求进行了特定的数据字段映射和转换。比如,将泛微中的表单字段转变为符合金蝶云“batchSave” API 的结构。
3. **高吞吐量与实时监控**:
采用轻易云平台提供的大容量、高吞吐能力,使得每次批量导出的数据能够稳定、快速地写入到金蝶云星空。同时,通过集中监控和告警功能,对每一个任务环节进行实时追踪,保障整个集成过程的透明可视。
4. **异常处理和重试机制**:
在实际操作中,不可避免会遇到网络波动或服务暂时不可用等情况。因此,我们引入了稳健的错误检测与重试机制。当出现问题时,会立即终止当前操作并记录日志,并在下一周期自动重新尝试,大大减少因偶发故障导致的数据遗漏风险。
综上所述,这一全流程自动化解决方案不仅提升了繁杂手工操作效率,还保证了数据传输过程中的准确性和及时响应,为企业财务管理注入新的动力。在后续内容中我们将详细描述各个实施步骤及技术细节。
![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image)
### 调用泛微OA-Http接口获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统泛微OA的Http接口`/api/workflow/paService/getWorkflowRequest`来获取数据,并对其进行初步加工。本文将详细探讨这一过程中的技术细节和元数据配置。
#### 接口调用与元数据配置
首先,我们需要理解如何通过HTTP GET请求调用泛微OA的API接口。根据提供的元数据配置,接口路径为`/api/workflow/paService/getWorkflowRequest`,请求方法为GET。以下是关键的元数据字段:
- **api**: `/api/workflow/paService/getWorkflowRequest`
- **method**: `GET`
- **number**: `requestId`
- **id**: `requestId`
- **name**: `id`
- **idCheck**: `true`
这些字段定义了API调用的基本信息,其中`requestId`是我们需要获取的数据的唯一标识符。
#### 请求参数配置
根据元数据配置,我们需要传递两个请求参数:
1. **workflowId**: 固定值为`391`
2. **workflowIdList**: 固定值为`2356388e-8c49-35b3-bb7e-1eca1a8617d5`
请求参数的配置如下所示:
```json
"request": [
{"field": "workflowId", "label": "e9流程id", "type": "string", "value": "391"},
{"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value": "2356388e-8c49-35b3-bb7e-1eca1a8617d5"}
]
```
这些参数将在HTTP GET请求中作为查询字符串传递。
#### 条件过滤
为了确保我们只获取到符合条件的数据,需要设置条件过滤器。根据元数据配置,我们有两个条件:
1. `workflowMainTableInfo.bxlx` 等于 `实报实销`
2. `workflowMainTableInfo.bxlx` 等于 `Actual Expense`
条件过滤器的配置如下所示:
```json
"condition": [
[{"field": "workflowMainTableInfo.bxlx", "logic": "eqv2", "value": "实报实销"}],
[{"field": "workflowMainTableInfo.bxlx", "logic": "eqv2", "value": "Actual Expense"}]
]
```
这些条件将用于筛选返回的数据,确保我们只处理符合要求的记录。
#### 自动填充响应
在接收到API响应后,我们需要对数据进行初步加工。根据元数据配置,自动填充响应功能已启用:
```json
"autoFillResponse": true
```
这意味着平台会自动解析API响应,并将其转换为内部可处理的数据格式。
#### 实际操作步骤
1. **构建HTTP GET请求**:使用上述请求参数和条件过滤器构建GET请求。
2. **发送请求并接收响应**:向泛微OA API发送GET请求,并接收JSON格式的响应。
3. **解析响应数据**:利用自动填充功能,将响应中的数据解析并转换为内部格式。
4. **初步加工数据**:根据业务需求,对解析后的数据进行初步清洗和转换,为后续的数据写入阶段做好准备。
以下是一个简化的Python代码示例,展示了如何实现上述步骤:
```python
import requests
# 构建查询字符串
params = {
'workflowId': '391',
'workflowIdList': '2356388e-8c49-35b3-bb7e-1eca1a8617d5'
}
# 发送HTTP GET请求
response = requests.get('https://example.com/api/workflow/paService/getWorkflowRequest', params=params)
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 过滤符合条件的数据
filtered_data = [item for item in data if item['workflowMainTableInfo']['bxlx'] in ['实报实销', 'Actual Expense']]
# 初步加工数据(示例)
processed_data = []
for item in filtered_data:
processed_item = {
'requestId': item['requestId'],
'expenseType': item['workflowMainTableInfo']['bxlx'],
# 添加其他必要字段
}
processed_data.append(processed_item)
# 输出或进一步处理processed_data
else:
print(f"Error: {response.status_code}")
```
通过以上步骤和代码示例,我们可以高效地从泛微OA系统中获取并加工所需的数据,为后续的数据转换与写入阶段打下坚实基础。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在轻易云数据集成平台中,将源平台的数据转换为目标平台金蝶云星空API接口所能接收的格式是一个关键步骤。本文将详细探讨如何通过元数据配置实现这一过程,并确保数据准确无误地写入金蝶云星空。
#### 元数据配置解析
元数据配置是ETL转换的核心,定义了如何将源数据映射到目标系统的字段中。以下是关键字段的配置解析:
1. **单据类型 (FBillTypeID)**:
- 类型:字符串
- 描述:指定单据类型,例如“QTYFD01_SYS”表示其他应付单。
- 解析器:`ConvertObjectParser`,参数为`FNumber`。
2. **单据编号 (FBillNo)**:
- 类型:字符串
- 描述:唯一标识单据的编号。
3. **业务日期 (FDATE)**:
- 类型:字符串
- 描述:业务发生日期,取自`workflowMainTableInfo.sqrq`。
4. **往来单位类型 (FCONTACTUNITTYPE)**:
- 类型:字符串
- 描述:例如部门、员工等,默认值为“BD_Empinfo”。
5. **往来单位 (FCONTACTUNIT)**:
- 类型:字符串
- 描述:通过工作代码查找对应的往来单位。
- 解析器:`ConvertObjectParser`,参数为`FNumber`。
6. **币别 (FCURRENCYID)**:
- 类型:字符串
- 描述:货币类型,通过货币编码查找对应的币别。
- 解析器:`ConvertObjectParser`,参数为`FNumber`。
7. **结算组织、采购组织、付款组织**:
- 字段分别为 `FSETTLEORGID`, `FPURCHASEORGID`, `FPAYORGID`
- 类型:字符串
- 描述:通过申请公司字段映射到相应的组织编号。
- 解析器:`ConvertObjectParser`,参数为`FNumber`
8. **申请部门 (FDEPARTMENTID)** 和 **采购部门 (FPURCHASEDEPTID)**:
- 类型:字符串
- 描述:通过申请部门字段映射到相应的部门编号。
- 解析器:`ConvertObjectParser`,参数为`FNumber`
9. **备注 (FRemarks)**:
- 类型:字符串
- 描述:备注信息,取自 `workflowMainTableInfo.bzsm`
10. **本位币 (FMAINBOOKSTDCURRID)**:
- 类型: 字符串
- 描述: 本位币,通过申请公司字段映射。
- 解析器: `ConvertObjectParser`, 参数为 `FNumber`
11. **汇率类型 (FEXCHANGETYPE)**:
- 类型: 字符串
- 描述: 汇率类型, 默认值为 “HLTX01_SYS”
- 解析器: `ConvertObjectParser`, 参数为 `FNumber`
12. **到期日计算日期 (FACCNTTIMEJUDGETIME)**:
- 类型: 字符串
- 描述: 到期日计算日期, 取自 `workflowMainTableInfo.sqrq`
13. **业务类型 (FBUSINESSTYPE)**:
- 类型: 字符串
- 描述: 默认值为 “OTHER”
14. **自定义单号 (F_WDW_OANO)**:
- 类型: 字符串
- 描述: 自定义单号, 取自 `workflowMainTableInfo.lcbh`
15. **预付款 (F_XDW_PAYMENT)**:
- 类型: 字符串
- 描述: 预付款金额, 取自 `workflowMainTableInfo.cjzk`
16. **明细信息(数组)(FEntity)**:
明细信息包含多个子字段,每个子字段都需要进行详细配置和转换。例如:
a) **费用项目编码 (FCOSTID)**
* 类型: 字符串
* 描述: 通过费用项目名称查找对应编码。
* 解析器: `ConvertObjectParser`, 参数为 `FNumber`
b) **发票类型 (FINVOICETYPE)**
* 类型: 字符串
* 描述: 根据发票类型名称进行条件转换。
c) **不含税金额 (FNOTAXAMOUNTFOR)**
* 类型: 字符串
* 描述: 根据公式计算不含税金额。
#### 数据写入操作
在完成元数据配置后,需要将处理后的数据通过API接口写入金蝶云星空。以下是关键步骤:
1. 定义请求体结构,根据元数据配置生成相应的数据格式。
2. 使用POST方法调用金蝶云星空的batchSave API接口,将转换后的数据批量保存到目标系统中。
3. 确保请求体中的每个字段都符合金蝶云星空API接口要求,包括正确的数据类型和格式。
#### 示例代码片段
```json
{
"FormId": "AP_OtherPayable",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": false,
"IsVerifyBaseDataField": true,
"Model": {
"FBillTypeID": {"FNumber": "QTYFD01_SYS"},
"FBillNo": "{{workflowMainTableInfo.djb}}",
"FDATE": "{{workflowMainTableInfo.sqrq}}",
"FCONTACTUNITTYPE": "BD_Empinfo",
"FCONTACTUNIT": {"_findCollection find workcode from c0198816-9822-38f3-b995-fc700a9925e7 where id={{workflowMainTableInfo.skmc_FV}}"},
...
"FEntity": [
{
"FCOSTID": {"_findCollection find FNumber from a3c8a497-8be0-36b3-956c-94619b971636 where FName={{detail_0.fyxmzl}}"},
...
}
]
}
}
```
以上示例展示了如何根据元数据配置生成请求体,并调用金蝶云星空API接口进行数据写入。在实际应用中,需要根据具体业务需求调整和扩展此配置,以确保所有必要的数据都能正确传输和存储。
![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)