2016-07-25 5 views
0

Ich bin ein Anfänger in der SAPUI5-Umgebung und mit JavaScript. Ich benutze die Master Detail Vorlage, dadurch werden auf der Masterseite die Lieferanten angezeigt und auf der Detailseite die Produkte, die sie produzieren. Mein Ziel ist es, die Anzahl der Produkte hinter jedem Lieferantennamen auf der Masterseite anzuzeigen. Die Produkte und der Lieferant sind 2 Entitäten und haben eine Assoziation. Es gibt eine Funktion in meinem Detail-Controller, der die Tabellenlänge zählt und die Variable auf der Detailseite anzeigt. Wie bekomme ich diese Variable in meiner Masterseite?So übergeben Sie die Variable vom Detail an die Masterseite SAPUI5

Ich versuchte es mit OData-Operationen, funktionierte nicht wegen der Abhängigkeit zwischen den 2 Entitäten.

Ich versuchte es mit einem Eventbus Zugriff auf die Zählfunktion vom Master zum Detail-Controller. Probleme traten beim Auslösen des Ereignisses auf.

Ich habe versucht, meine Funktion als Objekt anzuzeigen und hatte ein Problem mit dem Zugriff der Variablen.

Hat jemand eine kluge Lösung für mein Problem? :)

Grüße Felix

+0

Warum nicht die Anzahl als Eigenschaft der Lieferanteneinheit hinzufügen? – slkorolev

Antwort

1

Der einfachste Weg dies zu tun ist, um den OData-Dienst zu haben, die schwere Arbeit für Sie zu tun. Sie sollten der Entität Lieferant, die die Anzahl der Produkte enthält, ein zusätzliches Attribut hinzufügen.

Der oben beschriebene Ansatz, d. H. Die Zählung von der Detailseite zur Masterseite zu übertragen, funktioniert nicht wirklich, da die Detailseite nur Produkte eines Lieferanten anzeigt. In Ihrer Frage haben Sie angegeben, dass Sie die Anzahl für alle Lieferanten anzeigen möchten. Dazu müssten Sie die Logik auf Ihrer Detailseite für alle Lieferanten in Ihrer Liste ausführen.

Wenn die Anzahl der Produkte pro Lieferant nicht so hoch ist, können Sie auch die Produkte pro Lieferant erweitern, indem Sie eine Logik hinzufügen, um die Produkte pro Lieferant zu zählen, wenn Sie die Daten erhalten (zB change) während des Laufens setzen bindElement). Dies wird jedoch sehr langsam, wenn Sie eine große Anzahl von Produkten pro Lieferant haben, da alle Produkte pro Lieferant abgerufen und heruntergeladen und gezählt werden.

Ein anderer langsamer Ansatz wäre, eine $ count-Abfrage an den OData-Service für jeden Lieferanten in Ihrer Liste auszulösen. Dadurch wird zwar das Front-End weniger belastet, dies kann jedoch zu einer noch höheren Belastung für das Back-End des OData-Service führen.

In Ihrem Fall ist die Zählalternative wahrscheinlich keine praktikable Option. Also würde ich versuchen, den OData-Service zu erweitern, wenn ich du wäre.

+0

Leider habe ich keinen Zugriff auf den OData-Service, da es sich um einen SAP-Testdienst handelt. Vielleicht habe ich meine Frage nicht richtig formuliert: /. Natürlich kann ich meine Produktliste mit meinem Detail Controller zählen. Aber dann habe ich diese Variable lokal in meinem Detail-Controller/Ansicht, aber ich brauche diese Variable in meinem Master-Controller, um es auf meiner Masterseite anzuzeigen. –

+0

Sie haben Ihre Frage richtig formuliert, und die Antwort erwähnt dies auch und erklärt, warum Ihr Ansatz, dies durch die Detailseite fließen zu lassen, nicht funktioniert. Es funktioniert für den ausgewählten Lieferanten, da es schnell eine Berechnung für den ausgewählten Lieferanten durchführt. Die Detailseite führt dies jedoch nicht für alle Lieferanten in Ihrer Lieferantenliste durch.Wenn Sie also die Anzahl der gefundenen Produkte von der Detailseite auf die Masterseite kopieren, sehen Sie nur die Anzahl der Produkte eines bestimmten Lieferanten (der ausgewählten) und nicht alle. – jpenninkhof

+0

Ich fügte einen weiteren (relativ langsamen) Ansatz hinzu, indem $ count-Abfragen für jeden einzelnen Lieferanten in der Liste ausgelöst wurden. – jpenninkhof