SAPUI5-oModel.create不是函数

问题描述 投票:0回答:1

我正在尝试构建一个简单的SAPUI5应用程序,该应用程序基本上列出了一个填充有员工数据(ID,名称,地址)的表。enter image description here

但是,由于总是出现相同的错误,所以我无法添加新员工:

未捕获的TypeError:oModel.create不是函数在构造函数中保存(EmpDetails.controller.js?eval:87)

您能帮我解决这个问题吗?我不明白为什么create函数不能正常工作,因为它已连接到模型并且应该可以正常工作(就像在初始化时填充表的GET方法一样)。这是我的控制器代码:

sap.ui.controller("zemployee_crud.EmpDetails", {

	onInit: function() {
		var sServiceUrl = "proxy/http/<server>:<port>/sap/opu/odata/sap/ZEMPLOYEE_SRV";
		var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);

		var oJsonModel = new sap.ui.model.json.JSONModel();

		oModel.read("/EmployeeSet",null,null,true,function(oData,response){
			oJsonModel.setData(oData);
		});

		sap.ui.getCore().setModel(oJsonModel);
	},

	Save: function() {
		var oId = sap.ui.getCore().byId("Id").getValue();
		var oName = sap.ui.getCore().byId("Name").getValue();
		var oAddress = sap.ui.getCore().byId("Address").getValue(); 
		
		var oEntry = {};

		oEntry.Empid = oId;
		oEntry.Empname = oName;
		oEntry.Empadd = oAddress;
		
		var oModel = sap.ui.getCore().getModel();
		
		oModel.create("/EmployeeSet", oEntry, null, function (response) {
			// success message
			// table reload
		}, function (Error) {
			//show error 
		});
	}
});
javascript odata sapui5 abap
1个回答
0
投票

您的JSONModel不支持create。您必须使用ODataModel。

首先,您必须将模型存储在某个地方

var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
this.getView().setModel(oModel);

然后您可以访问模型并调用创建。

var oModel = this.getView().getModel();
oModel.create(...);

这是最简单的方法。我强烈建议您了解框架:

  • sap.ui.model.odata.ODataModel已过时。使用sap.ui.model.odata.v2.ODataModel
  • 在您的manifest.json中声明您的模型。然后所有控制器都可以访问它。
  • [在大多数情况下,您不需要额外的JSONModel。您可以直接使用ODataModel并将其显示在列表中
  • 没有必要将任何模型(JSON或OData)设置为核心(sap.ui.getCore().setModel())。核心处于很高/全球的水平。通常,足以在应用程序/组件级别(在manifest.json或Component.js中)或控制器级别上进行设置。

我也强烈建议您进行official walkthrough。它需要1-2天才能完成,但此后您几乎可以成为专家,因为它可以回答所有初学者问题的95%。

© www.soinside.com 2019 - 2024. All rights reserved.