Home › Forum › Nuclos Konfiguration › Sonstiges › Query – Zwei Attribute miteinander vergleichen
- Dieses Thema hat 6 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 9 Jahren, 1 Monat von
Matthias KÖPER.
-
AutorBeiträge
-
3 Oktober 2014 um 00:33 Uhr #7924
Matthias KÖPER
TeilnehmerHallo,
ich möchte von meinen Lagerbeständen gerne alle Einträge über eine Query suchen, für die der Bestand kleiner als der Maximalbestand ist (Bestand und Maximalbestand sind beide Attribute von Lagerbestand).
Ich bekomme es irgendwie nicht hin, die beiden Attribute miteinander zu vergleichen. Ein Attribut mit einer Zahl zu vergleichen, ist kein Problem.
Ich dachte an so etwas in der Art:
queryLagerbestand.where(Lagerbestand.Bestand.Lt(Lagerbestand.BestandMaximal))
oder
queryLagerbestand.where(new SearchExpression(Lagerbestand.Bestand, Lagerbestand.BestandMaximal, QueryOperation.LT))
Funktioniert leider beides nicht…
Hat jemand einen Tipp für mich?
Vielen Dank,
skoeper3 Oktober 2014 um 02:38 Uhr #7925Frank Pavlic
TeilnehmerUnd was macht der QueryProvider bei folgender Vorgehensweise
BigDecimal maxbestand = Lagerbestand.BestandMaximal;
queryLagerbestand.where(Lagerbestand.Bestand.Lt(maxbestand))Bekommst Du damit Ergebnisse geliefert?
Gruß
Frank8 Oktober 2014 um 12:36 Uhr #7939Matthias KÖPER
TeilnehmerDas würde so funktionieren, aber…
Das Problem ist, dass der maximale Lagerbestand nicht für alle Artikel gleich ist, sondern am Lagerbestand für jeden Artikel gepflegt wird.
Die Abfrage mit dem Vergleich zweier Attribute ist syntaktisch schon falsch, weil Lt() ein BigDecimal erwartet und nicht org.nuclos.api.businessobject.attribute.NumericAttribute.Der Lagerbestand hat unter anderem die Attribute Lager, Lagerort, Artikel, Maximalbestand, Minimalbestand, Bestand…
9 Oktober 2014 um 13:47 Uhr #7945Matthias KÖPER
TeilnehmerHabe das Problem jetzt anders gelöst (Frage erst alle Lagerbestände ab und entferne diejenigen hinterher aus der Liste, die ich nicht brauche).
Hätte trotzdem noch Interesse an einer Lösung, die mir die richtige Menge gleich mit einer Datenbankabfrage liefert.
skoeper
10 Oktober 2014 um 12:27 Uhr #7947Frank Pavlic
TeilnehmerHallo,
kannst du bitte mal die Regel posten, die mit Lt(..) versuchte, nur die Artikel zu finden deren Bestand kleiner als
der Maximalbestand ist? Bis zu der Stelle wo Du dann QueryProvider.run(…) + 3 Zeilen weiter aufrufst ?
Vielleicht noch die Angabe, welche nuclos-Version du im Einsatz hast?Dass der Maximalbestand pro Artikel ist, war mir schon bewusst. Ich wollte Dir auch nur die Methodik aufzeigen, den Wert in eine Variable zu sichern, und dann diese Variable in die Lt(..) – Funktion zu übergeben. Ob das Objekt Lagerbestand nun vorher für das Objekt Artikel ermittelt wurde, erschliesst sich nicht aus deinem geposteten Code-Schnipsel. Daher mein Vorschlag, mal die komplette Regel bis zur run-Methode zu posten.
Gruß
Frank14 Oktober 2014 um 00:36 Uhr #7955Ramin Goettlich
TeilnehmerDer QueryProvider unterstützt nach heutigem Stand leider noch keine Abfragen der Form
queryLagerbestand.where(Lagerbestand.Bestand.Lt(Lagerbestand.BestandMaximal))
16 Oktober 2014 um 23:53 Uhr #7959Matthias KÖPER
TeilnehmerDanke für die Antwort, nuclosian,
viele Grüße
skoeper -
AutorBeiträge