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

SAPUI5调用OData创建CDS View新条目报实体格式不支持错误

错误原因及修复方案

  • 字段名拼写错误
    代码中给提交数据赋值时,将实体字段Ktonr误写为Kotnr,和OData服务定义的实体字段不匹配,属于非法字段,会导致服务端解析实体失败。
  • 请求头配置错误
    手动设置的Content-Type头application/json;type=entry;charset=utf-8不符合SAP OData V2服务的要求,标准场景下无需手动修改ODataModel的Content-Type,框架会自动生成符合规范的请求头,额外添加的type=entry参数会导致服务端无法识别请求格式。
  • create方法参数传参错误
    SAPUI5 ODataModel的create方法标准参数为(sPath, oData, mParameters),你多传入了一个null作为第三个参数,导致后续定义的success、error回调配置没有被框架正确识别,请求参数格式也会出现异常。
  • 执行逻辑顺序错误
    关闭弹窗、刷新表格、成功提示的逻辑直接写在create方法调用之后,属于同步执行,会出现创建请求还未得到服务端响应就已经刷新表格、提示保存成功的问题,应该将这部分逻辑移到success回调中。
  • 主键字段未赋值
    从你注释的代码看,Belnr、Kukey、Esnum大概率是该实体的主键字段,OData创建请求必须传入主键字段的合法值,如果这三个字段的值是由服务端自动生成的,需要确认OData服务的实体定义中是否将这三个字段标记为Computed/Identity,否则服务端会因为缺少主键字段拒绝请求。

修正后的代码

onSaveDialog : function () {
    var oModel = this.getModel(),
        data = {};

    data.Bukrs = this.getView().getModel("InputData").getProperty("/Bukrs");
    // 修正字段名拼写错误
    data.Ktonr = this.getView().getModel("InputData").getProperty("/Ktonr");
    data.Azdat = this.getView().getModel("InputData").getProperty("/Azdat");
    // 若主键不由服务端自动生成,请取消注释并赋值
    // data.Belnr = "111";
    // data.Kukey = "222";
    // data.Esnum = "333";
    data.Kwaer = this.getView().getModel("InputData").getProperty("/Kwaer");
    data.Kwbtr = this.getView().getModel("InputData").getProperty("/Kwbtr");
    data.Texts = this.getView().getModel("InputData").getProperty("/Texts");
    data.Lqpos = this.getView().getModel("InputData").getProperty("/Lqpos");
    data.Zregcl = this.getView().getModel("InputData").getProperty("/Zregcl");
    data.Zregfe = this.getView().getModel("InputData").getProperty("/Zregfe");
    data.Zregus = this.getView().getModel("InputData").getProperty("/Zregus");
    
    var that = this;
    oModel.create(
        "/ZI_BSLiquidityGroups", 
        data, 
        {
            success : function(oData, response) {
                console.log("Create successfull");
                that.byId("AddDialog").close();
                that.getView().byId("detailRecordsSmartTable").rebindTable(true);
                // 触发事件更新主视图
                var oEventBus = that.getOwnerComponent().getEventBus();
                oEventBus.publish("DetailTable", "Updated", that);  
                var msg = that.getView().getModel("i18n").getResourceBundle().getText("detail.newRecordSaved");
                MessageToast.show(msg); 
            },
            error : function(oError) {
                console.log(oError.responseText)
                var msg = oError.responseText.split('message')[3];
                MessageToast.show(msg);
            }
        }
    );
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:48:04