SAPUI5 - oModel.create не является функцией - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать простое приложение SAPUI5, которое в основном перечисляет таблицу, заполненную данными сотрудника (идентификатор, имя, адрес). enter image description here

Однако я не могу добавить нового сотрудника, потому что всегда получаю одну и ту же ошибку:

Uncaught TypeError: oModel.create не является функцией в constructor.Save (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 
		});
	}
});

1 Ответ

2 голосов
/ 28 апреля 2020

Ваш JSONModel не поддерживает create. Вы должны использовать ODataModel.

Сначала вы должны хранить свою модель где-нибудь

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

Затем вы можете получить доступ к модели и вызвать create.

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

Это самый простой подход. Я настоятельно рекомендую ознакомиться с фреймворком:

  • sap.ui.model.odata.ODataModel устарело. Используйте sap.ui.model.odata.v2.ODataModel.
  • Объявите вашу модель в манифесте. json. Тогда все контроллеры смогут получить к нему доступ.
  • В большинстве случаев вам не нужна дополнительная JSONModel. Вы можете напрямую использовать ODataModel и показать его в своем списке.
  • Установка любой модели (JSON или OData) для ядра (sap.ui.getCore().setModel()) не требуется. Ядро находится на очень высоком / глобальном уровне. В большинстве случаев достаточно установить его на уровне приложения / компонента (либо в манифесте. json, либо в компоненте. js), либо на уровне контроллера.

Я также настоятельно рекомендую сделать это. Официальное прохождение . На это уходит 1-2 дня, но после этого вы почти профессионал, так как он отвечает на 95% всех вопросов для начинающих.

...