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

SAPUI5中如何获取OData V4 submitBatch的技术错误消息

SAPUI5 OData V4 批量提交时获取技术类错误消息

在OData V4的submitBatch操作中,像实体锁定这类技术错误会触发Promise的reject状态,不会进入then回调,因此你之前的代码无法通过getMessages()获取到这类消息。需要通过以下方式处理:

关键修改点

  • 为submitBatch的Promise添加catch回调,捕获reject状态的错误
  • 从错误对象中直接提取技术类错误信息

修改后的代码

let bindingContext = this.getView().getBindingContext();
let path = `/Contract('${bindingContext.getObject().Contract}')`;

this.oContext = oModel.bindContext(path, null, {
    $$updateGroupId: "cmpchange"
});

this.oContext.getBoundContext().setProperty("Contract", this.Contract);

oModel.submitBatch("cmpchange")
    .then(function(oEvent) {
        let messages = this.oContext.getBoundContext().getMessages();
        if (messages.length > 0) {
            let oJSONModel = new JSONModel();
            oJSONModel.setData(messages);
            this.oMessageView.setModel(oJSONModel);
            this.oMessageDialog.open();
        }
    }.bind(this))
    .catch(function(oError) {
        // 提取技术类错误消息
        let errorMessage = oError.message;
        // 若需更详细信息,可从oError.response中获取后端返回的完整错误结构
        // let detailedError = oError.response?.body;
        // 将错误消息传入弹窗展示
        let oJSONModel = new JSONModel([{
            message: errorMessage,
            type: "Error"
        }]);
        this.oMessageView.setModel(oJSONModel);
        this.oMessageDialog.open();
    }.bind(this));

补充说明

  • getMessages()通常用于获取业务级消息(如字段校验错误、后端返回的业务提示),而技术类错误(如锁冲突、网络异常)会直接触发Promise reject
  • 如果需要全局监听所有请求错误,可以给OData模型注册requestFailed事件:
oModel.attachRequestFailed(function(oEvent) {
    let oError = oEvent.getParameter("error");
    console.log("全局捕获错误:", oError.message);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:37:07