(gelöst) SetRange vs. SetFilter (Set Filter gefährlich?)

2. Juni 2016 12:05

Hallo zusammen,

Aus aktuellem Anlass habe ich mal wieder festgestellt, dass mir SetFilter weniger "zuverlässig" scheint, wie SetRange.

Wenn ich Records nach einem RESET mit SetFilter filtere und das Filterargument bei einem Code-Field auf '' (also leer) setze, dann gibt mir SetFilter dennoch zumindest einen Record zurück, während SetRange keinen Record stehen lässt.

Code:
SalesPrice.SETFILTER("Variant Code", '');        <- Gibt es nur exakt einen Record mit Variant Code z.B ="A", dann findet FINDLAST diesen Record


mache ich hingegen

Code:
SalesPrice.SETRANGE("Variant Code", '');        <- Dann findet FINDLAST keinen Record mehr, was korrekt ist (respektive der gesamte Record auf dem Pointer ist 'leer')


Hat jemand diese Problematik auch schon angetroffen? Ist ja brandgefährlich.
Zuletzt geändert von Izzy am 2. Juni 2016 13:45, insgesamt 1-mal geändert.

Re: SetRange vs. SetFilter (Set Filter gefährlich?)

2. Juni 2016 12:39

Dieser Unterschied zwischen SETRANGE und SETFILTER bei leeren Filtertext ist beabsichtigt und wird an manchen Codestellen auch bewusst genutzt.

Manchmal möchtest du einen Filter nur dann setzen, wenn der Filterwert ungleich leer ist.
Mit SETRANGE sieht es so aus:
Code:
If MeinFilterwert <> '' THEN
  MeinRecord.SETRANGE(EinFeld,MeinFilterwert);


Mit SETFILTER reicht ein:
Code:
MeinRecord.SETFILTER(EinFeld,MeinFilterwert);

Re: SetRange vs. SetFilter (Set Filter gefährlich?)

2. Juni 2016 12:41

Versuch mal ob folgendes funktioniert:
Code:
MeinRecord.SETFILTER(EinFeld,'%1','');

Re: SetRange vs. SetFilter (Set Filter gefährlich?)

2. Juni 2016 13:36

Hallo zusammen,

Vielen Dank für Eure Antworten!

@Michael: Ursprünglich hatte ich die von Dir vorgeschlagene Form verwendet.

Es scheint aber egal ob mit oder ohne Platzhalter: SetFilter reduziert die Records nicht auf nur noch leere Felder, falls das Filterkriterium ein Leerstring ('') ist. SetFilter zeigt dann immer noch auch diese Records bei denen das Feld nicht leer ist, was mich total überrascht.

SetRange hingegen funktioniert "korrekt", indem es wirklich nur noch die Records zeigt die eben kein leeres Filterfeld haben.

Wenn dem so ist ist für mich SetFilter gleich mal sicherheitshalber gestorben.

Irgendwie scheint mir da das HelpFile auch etwas zu kurz zu greifen.

PS: Ich arbeite noch auf der nativen Database, vielleicht ist das Verhalten auf SQL anders. Gut wäre sowieso es gäbe NULL values in Navision.

Danke Euch!!

Re: SetRange vs. SetFilter (Set Filter gefährlich?)

2. Juni 2016 13:45

@Michael: Ich muss mich korrigieren! Du hast recht!!

Mit Platzhalter funktioniert auch FindFilter korrekt. Ich habe an diversen Orten SetFilter immer mit 3 Parametern benutzt nur bei diesem einen aktuellen Code (warum auch immer) nur mit 2, d.h. ohne den Platzhalter.

Mit nur 2 Parameter ist das Resultat für mich schlicht falsch.

Danke Euch!