You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAPUI5中获取CREATE_STREAM方法返回的响应及错误消息

解决方案

1. 调整UploadSet控件的事件绑定

首先确保你给UploadSet控件绑定了uploadCompleted和uploadFailed两个事件,默认uploadItem方法触发的事件本身携带完整响应数据,之前未获取到数据大概率是没有正确从事件参数中提取对应字段。
视图层配置示例:

<UploadSet id="myUploadSet"
    uploadCompleted="onUploadCompleted"
    uploadFailed="onUploadFailed"
    ...其余原有配置>
</UploadSet>

控制器层上传逻辑保持原有代码即可:

const oUploadSet = this.byId("myUploadSet");
oUploadSet.uploadItem(oItem);

2. 从事件参数中提取响应头与后端消息

SAP OData服务返回的业务消息默认会放在sap-message响应头中,你可以通过上传项实例的响应头获取方法提取内容:

上传完成事件处理逻辑

onUploadCompleted: function(oEvent) {
    const oUploadedItem = oEvent.getParameter("item");
    // 提取SAP返回的业务消息头
    const sSapMessage = oUploadedItem.getResponseHeader("sap-message");
    
    // 解析并推送消息到MessageManager
    if (sSapMessage) {
        const oMessage = JSON.parse(sSapMessage);
        const oMessageManager = sap.ui.getCore().getMessageManager();
        oMessageManager.addMessages(
            new sap.ui.core.message.Message({
                message: oMessage.message,
                type: oMessage.severity === "error" ? sap.ui.core.MessageType.Error : sap.ui.core.MessageType.Success,
                target: "",
                processor: this.getView().getModel()
            })
        );
    }
}

上传失败事件处理逻辑

如果后端返回HTTP错误状态码(4xx/5xx类),消息会触发uploadFailed事件,处理逻辑如下:

onUploadFailed: function(oEvent) {
    const oFailedItem = oEvent.getParameter("item");
    const sSapMessage = oFailedItem.getResponseHeader("sap-message");
    
    if (sSapMessage) {
        const oMessage = JSON.parse(sSapMessage);
        const oMessageManager = sap.ui.getCore().getMessageManager();
        oMessageManager.addMessages(
            new sap.ui.core.message.Message({
                message: oMessage.message,
                type: sap.ui.core.MessageType.Error,
                target: "",
                processor: this.getView().getModel()
            })
        );
    }
}

3. 后端配置校验(针对消息取不到的异常场景)

如果按照上述逻辑还是无法获取sap-message头,检查两个后端配置项:

  • 确保lo_message_container->add_message方法的iv_add_to_response_header = abap_true参数配置在CREATE_STREAM方法返回逻辑之前执行,没有被后续业务逻辑覆盖
  • 如果是跨域部署场景,需要在SICF事务码中找到你的OData服务配置,添加响应头Access-Control-Expose-Headers: sap-message,否则浏览器会默认阻止前端读取自定义响应头

内容的提问来源于stack exchange,提问作者Cruncher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 01:09:04