2017-10-26 3 views
1

Ich möchte eine Tabelle aktualisieren, die mit OData svc gefüllt ist. Ich verwende diesen Ansatz:Wie Entitätspfad dynamisch in UI5 erstellen?

oModel.update("/Products(999)", oData, { 
    success: mySuccessHandler, 
    error: myErrorHandler 
}); 

Ich habe den ausgewählten Index in einer Variablen, und ich muss diese Variable übergeben. Das Problem ist Products(999) - das funktioniert mit der fest codierten Zeile, aber wie mit einer Variablen ersetzen?

Antwort

2

Erstellen Sie den Pfad dynamisch über das API createKey von Ihrem ODataModel:

var path = oModel.createKey("/Products", { 
    ProductID: 999 // your dynamic key value 
}); 
oModel.update(path, /*...*/); 

Im Vergleich zu verketten Zeichenfolgen für den Pfad manuell createKey bietet folgende Vorteile:

  • Es gibt den Schlüsselwert immer im richtigen Format entsprechend der EDM type der angegebenen Eigenschaft (intern ODataUtils.formatValue verwendet). Zum Beispiel: Wenn ProductID den Typ Edm.Int64 hat, hängt UI5 das Zeichen "l" in der Ausgabezeichenfolge (src) an die OData-Spezifikation ausgerichtet.
  • Es gibt den Schlüsselwert s immer in der richtigen Reihenfolge aus, egal welches Backend-System die Metadaten bereitstellt. Bei gleicher Metadatendefinition ist es möglich, dass ein System die Metadaten mit Schlüsseln in anderen Reihenfolgen als andere bereitstellt. In solchen Fällen würde die App, wenn sie nur manuell verkettet wird, schief gehen und vage Fehler verursachen, wenn sie zu dem System transportiert wird, das verschiedene Schlüsselbefehle bedient.
1

die JavaScript-Verkettungsoperator verwenden + den Wert der Variablen in der URL-Zeichenfolge zu fusionieren:

var sIndex = "123"; 
oModel.update("/Products(" + sIndex + ")", oData, {success: mySuccessHandler, error: myErrorHandler}); 

durch die Art und Weise: numerische Typen konvertieren hiermit automatisch in Strings.