SAPUI5 POST 请求总是导致 500 服务器错误 (OData)
SAPUI5 POST Requests always result in 500 Server Error (OData)
我目前正在尝试学习 SAPUI5 和 OData 的基础知识。我正在构建一个简单的应用程序,其中员工数据显示在 table 中,您可以添加一个新员工,其数据将写入 SAP 后端。
所有 GET 请求都有效,但是 POST 请求总是导致服务器错误 (500)。我的创建方法是不是格式不正确或者我忘记了什么(特殊 header 等)? (我知道我实际上应该使用 odata.v2 但只是为了这个例子......是否有明显错误但我只是没有看到?)
sap.ui.controller("zemployee_crud.EmpTable", {
onInit: function() {
var oView = this.getView();
var oTable = this.byId("employeeTable");
var oTemplate = new sap.m.ColumnListItem({
cells: [new sap.m.Text({
text: "{Empid}"
}), new sap.m.Text({
text: "{Empname}"
}), new sap.m.Text({
text: "{Empadd}"
})]
});
var sServiceUrl = "proxy/http/<server>:<port>/sap/opu/odata/sap/ZEMPLOYEE_SRV";
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, false);
this.getView().setModel(oModel);
oTable.bindAggregation("items", {
path: "/EmployeeSet",
template: oTemplate
});
},
Save: function() {
var oId = this.getView().byId("Id").getValue();
var oName = this.getView().byId("Name").getValue();
var oAddress = this.getView().byId("Address").getValue();
var oDialog = this.getView().byId("Dialog");
var oEntry = {};
oEntry.Empid = oId;
oEntry.Empname = oName;
oEntry.Empadd = oAddress;
var oModel = this.getView().getModel();
oModel.create("/EmployeeSet", oEntry, null, function (response) {
alert("Success!");
// handle response
}, function (Error) {
alert("Fail!");
// handle response
});
}
这是UI5开发中的常见场景。 SAP 网关服务器不会告诉前端确切的错误,因为这可能会泄露您不希望它泄露的数据。
要找出确切的问题是什么,您应该转到后端的交易 /IWFND/ERROR_LOG。那里应该可以看到请求,您可以看到究竟是什么导致了这个错误。
终于找到了错误——通过 Eclipse 创建的 BSP 应用程序有问题。解决此问题后,POST 请求工作正常。
我目前正在尝试学习 SAPUI5 和 OData 的基础知识。我正在构建一个简单的应用程序,其中员工数据显示在 table 中,您可以添加一个新员工,其数据将写入 SAP 后端。
所有 GET 请求都有效,但是 POST 请求总是导致服务器错误 (500)。我的创建方法是不是格式不正确或者我忘记了什么(特殊 header 等)? (我知道我实际上应该使用 odata.v2 但只是为了这个例子......是否有明显错误但我只是没有看到?)
sap.ui.controller("zemployee_crud.EmpTable", {
onInit: function() {
var oView = this.getView();
var oTable = this.byId("employeeTable");
var oTemplate = new sap.m.ColumnListItem({
cells: [new sap.m.Text({
text: "{Empid}"
}), new sap.m.Text({
text: "{Empname}"
}), new sap.m.Text({
text: "{Empadd}"
})]
});
var sServiceUrl = "proxy/http/<server>:<port>/sap/opu/odata/sap/ZEMPLOYEE_SRV";
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, false);
this.getView().setModel(oModel);
oTable.bindAggregation("items", {
path: "/EmployeeSet",
template: oTemplate
});
},
Save: function() {
var oId = this.getView().byId("Id").getValue();
var oName = this.getView().byId("Name").getValue();
var oAddress = this.getView().byId("Address").getValue();
var oDialog = this.getView().byId("Dialog");
var oEntry = {};
oEntry.Empid = oId;
oEntry.Empname = oName;
oEntry.Empadd = oAddress;
var oModel = this.getView().getModel();
oModel.create("/EmployeeSet", oEntry, null, function (response) {
alert("Success!");
// handle response
}, function (Error) {
alert("Fail!");
// handle response
});
}
这是UI5开发中的常见场景。 SAP 网关服务器不会告诉前端确切的错误,因为这可能会泄露您不希望它泄露的数据。
要找出确切的问题是什么,您应该转到后端的交易 /IWFND/ERROR_LOG。那里应该可以看到请求,您可以看到究竟是什么导致了这个错误。
终于找到了错误——通过 Eclipse 创建的 BSP 应用程序有问题。解决此问题后,POST 请求工作正常。