2017-02-24 4 views
0

Manchmal ist die Odata-Anfrage in meiner speziellen App in SAPUI5 abgestürzt (kein Fehler auf der GW-Seite in iwfnd/error_log). Wenn ich den Anruf in Chrome-Netzwerk-Registerkarte wiederholen, funktioniert es immer.ODATA-Anfrage abgebrochen

ich diesen Fehler: Das folgende Problem aufgetreten: abgebrochene Anfrage -

Die SAPUI5 Version verwendet wird, ist: "1.38.9". Hier ist der Stapel:

O @ sap-ui-core.js:formatted:9550 
Q.fatal @ sap-ui-core.js:formatted:9571 
h._handleError @ ODataModel.js:6 
k @ ODataModel.js:6 
(anonymous) @ ODataModel.js:6 
i.abort @ datajs.js:17 
abort @ ODataModel.js:6 
c.abortPendingRequest @ ODataListBinding.js:6 
c.filter @ ODataListBinding.js:6 

Es ist im Fall eines „Master-Detail-Szenario“, wenn ich auf einen Eintrag klicken Sie in der „Master“ -Liste ich einige Daten im Detail filtern. Das Problem besteht darin, dass die Daten tatsächlich nicht aktualisiert werden, wenn die Odata-Anforderung abgebrochen wird. Hier ist die kurze Version des Codes:

_onRouteMatched: function(oEvent) { 
filterCharac.push(new sap.ui.model.Filter("Zrwk", sap.ui.model.FilterOperator.EQ, oArgs.idRework)); 
     filterCharac.push(new sap.ui.model.Filter("Ztasknb", sap.ui.model.FilterOperator.EQ, oArgs.taskId)); 
     this.getView().byId("TableCharac").getBinding("items").filter(filterCharac); 
     this.getView().byId("StatusLog").getBinding("items").filter(new sap.ui.model.Filter("Zrwk", sap.ui.model.FilterOperator.EQ, oArgs.idRework)); 
     this.getView().byId("lowestItems").getBinding("items").filter(filterCharac); 
     var commentsFeed = this.getView().byId("Comments"); 
     var oFilter = new sap.ui.model.Filter("Zrwk", sap.ui.model.FilterOperator.EQ, oArgs.idRework); // name between A and G 
     commentsFeed.getBinding("items").filter(oFilter); 

} 
+0

Können Sie die Funktion freigeben, von der die Filtermethode aufgerufen wurde? Ist der Filter in einer XML-Ansicht fest codiert? Was machen Sie direkt nach dem Aufruf der Filtermethode? Generell wäre mehr Code hilfreich. – boghyon

Antwort

1

Dies geschieht meist, wenn eine Anforderung für einige Daten zu erhalten (zum Beispiel die vollständige Liste der Inhalte) abgebrochen wird, weil eine Filterung (oder Sortierung) auf die Liste angewandt wird vor Die Anfrage wurde abgeschlossen. Da UI5 erkennt, dass die ursprünglich angeforderten Daten nicht mehr "nützlich" sind, wird die Anforderung abgebrochen.

der folgende Kommentar aus dem UI5 Code erklärt dies (code is on github):

/*  
* Aborts the current pending request (if any). 
* 
* This can be called if we are sure that the data from the 
* current request is no longer relevant, e.g. when filtering/
* sorting is triggered or the context is changed. 
*/ 

Theoretisch ist dies nicht das Verhalten Ihrer Anwendung auswirken soll (aber ich denke, es ist hässlich, die Fehler in der Konsole zu sehen) . Sie können dies vermeiden, indem Sie die Filterung früher auf die Aggregation anwenden (z. B. direkt in der Ansicht statt innerhalb des Controllers).

Wenn Sie uns zeigen können, welche Aggregation Sie filtern (wahrscheinlich von JS) und wie Sie sie in der Ansicht definieren, können wir vielleicht eine spezifischere Lösung finden.