跨系统数据集成:泛微OA系统数据迁移至金蝶云星空

  • 轻易云集成顾问-贺强
### 案例分享:泛微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)