[gelöst] Dynamischer Filter?

23. März 2007 13:13

Hallo allerseits,

wieder stecke ich etwas fest. :?:

Ich möchte eine Tabelle (z.B. Artikel) nach mehreren Einträgen filtern (z.B. Artikelnr.). Ich weiß, dass folgende Zeile läuft:

setfilter("Nr.", '%1|%2, Nummer1, Nummer2);

Jetzt mein Problem:

Ich weiß vorher nicht, nach wievielen Nr. gefiltert werden wird.

Jetzt hab ich mir in meinem jugendlichen Leichtsinn einfach gedacht, ich bastel mir einen dynamischen Filter wie folgt:

In einer Schleife (hier nur Auszug) hab ich eine Variabel (z.B. MeinFilter) gefüllt: MeinFilter := MeinFilter + '|' + Nummer

So sah dann nachher z.B. meine Variabel aus:
MeinFilter = Nummer1|Nummer2

So weit, so gut. Dann hab ich versucht diese Variabel an den Filterbefehl zu übergeben: setfilter("Nr.", '%1', MeinFilter);

Leider ohne Erfolg, Navision versteht diesen Filter nicht richtig und ich bekomme kein Ergebnis (kein Datensatz wird angezeigt!).

Weiß jemand ob eine Möglichkeit besteht einen dynamischen Filter zu "erzeugen"?

Danke im voraus.
Zuletzt geändert von Dune am 23. März 2007 15:10, insgesamt 1-mal geändert.

23. März 2007 13:22

Wenn du von vorneherein nicht weißt ,wie viele Datensatze es werden, dann solltest du mit Markierungen arbeiten, da es sonst bei deinem Filter irgend wann zu einem Textüberlauf kommt.


http://www.navision24.de/tutorials/die- ... utzen.html

Hier sogar mit deinem Anforderungsbeispiel....

23. März 2007 13:28

Du könntest ein Array mit der maximal möglichen Anzahl an Filtern (errechnet sich aus den 250 maximalen Zeichen /(größe des Feldes + 1))
anlegen, dies in einer For to schleife mit deinen Werten befüllen, wobei als defaultwert ein Wert genommen werden sollte, der garantiert nicht vorkommt, und dann z.B. bei 9 maximalen werten einen Filter in der folgenden Art festlegen:

setfilter("Nr.",'%1|%2|%3|%4|%5|%6|%7|%8|%9',Filterarray[1],Filterarray[2],Filterarray[3],Filterarray[4],Filterarray[5],Filterarray[6],Filterarray[7],Filterarray[8],Filterarray[9])

PS: Ich glaube, auf diesem Weg sind maximal 9 Werte möglich, ich meine mich zu erinnern, dass maximal 9 %-Platzhalter verwendet werden können. kannst es ja ggf mal mit mehr versuchen....

Re: Dynamischer Filter?

23. März 2007 13:32

Dune hat geschrieben:So weit, so gut. Dann hab ich versucht diese Variabel an den Filterbefehl zu übergeben: setfilter("Nr.", '%1', MeinFilter);

Der Ansatz war schon ganz gut. Aber schreib mal folgendes in den C/AL-Code:

Code:
SETFILTER("Nr.", MeinFilter);

Also ohne den Platzhalter %1.

Aber wie Natalie sagte, würde das auch mit den Satzmarken funktionieren.

Gruß, Marc

23. März 2007 15:10

Danke für eure Hilfe.

Ich hab mich für Natalies Vorschlag entschieden, da dieser nicht begrenzt zu sein scheint. So kann ich auch mehr als 9 Platzhalter verwenden.
Problem dabei: "Mark" ist nicht von der Filtergroup abhängig, also kann man leider nichts vorm Benutzer verstecken! Aber ich hab ´ne clevere Lösung, denke ich: Im OnAfterGetRecord-Trigger der "Zielform" ein kleines "MARKEDONLY:=TRUE;" einfügen. (Vielleicht noch mit Hasfilter kombinieren.). So wird die Auflösung der Filter immer geblockt.

@Michael: Dein Vorschlag ist logisch. Dasselbe hatte ich mir auch überlegt. Der große Nachteil gegenüber der "Mark"-Variante ist wie schon gesagt die Begrenzung der möglichen Platzhalter.

@Marc: (Also die andere Marc-Variante! :-D ) Den Versuch hab ich anfangs schon getestet. So versteht Navision das leider auch nicht. Damit konnte ich kein Ergebnis erzielen.

Aber Hauptsache ist, dass endlich auch mal wieder eine Idee funktioniert hat. Danke.

Jetzt wird mein Filter über die OptionString-Property einer Tabellen-Variabel gesteuert. Der Benutzer bekommt später nur die Records zur Auswahl, die ich ihm über die Variabel ermögliche. Klasse. :mrgreen:

23. März 2007 15:27

Dune hat geschrieben:@Marc: (Also die andere Marc-Variante! :-D ) Den Versuch hab ich anfangs schon getestet. So versteht Navision das leider auch nicht. Damit konnte ich kein Ergebnis erzielen.

Also bei mir hat es geklappt.

Gruß, Marc