[gelöst] Filterfunktion für ganze Tabellen mit String?

3. Mai 2007 10:55

Hallo zusammen,

gibt es in Navision eine Funktion mit der man eine ganze Tabelle Filtern kann und die nur einen String als Parameter braucht.

Der String wird bei mir per REC.GETFILTERS befüllt.

Ich bin für jede Antwort dankbar.
Zuletzt geändert von Steev am 3. Mai 2007 12:13, insgesamt 1-mal geändert.

3. Mai 2007 11:09

Hallo,

wenn ich dich richtig verstehe, willst Du mit einem String mehrere Felder einer Tabelle filtern (Die Tabelle wird natürlich immer ganz gefiltert - also alle Datensätze dieser Tabelle - aber Filter werden halt nur Feldweise gesetzt).

Dafür ist mir keine Fuktion bekannt. Aber es gibt die Möglichkeit eine Ansicht (Sortierung und Filter) über einen String zu setzen. Dafür ist Rec.SETVIEW(string) zuständig. Diesen String bekommt man vorher über string := Rec.GETVIEW. Wenn Du die Sortierung nicht übernehmen willst, kannst Du sie ja hinterher wieder verändert (Rec.SETCURRENTKEY).

Weiterhin hast Du die Möglichkeit alle gesetzten Filter von einem Record über Rec.COPYFILTERS(FromRec) zu kopieren .

Vielleicht hilft dir dies ja weiter.

Gruß
Frank

3. Mai 2007 11:28

Danke für die Antwort:

Leider hilft mir das nicht weiter...
vieleicht habe ich auch nur einen Denkfehler...

ich möchte das für eine bestimmte Tabelle ein individueller Grundfilter erhalten bleibt.
Diese Tabelle hat eine verschiedene Standartfilterung auf einem bestimmten Feld. Alle anderen Filterungen werden in einem Feld (Text) in einer anderen Tabelle zusammen mit dem UserID gespeichert.

Bei einem Neuaufruf der Tabelle soll die vom Benutzer eingestellte Grundfilterung, wieder hergestellt werden. Darum brauche ich auch eine Funktion die für eine ganze Tabelle einen Filter aufs einem String setzt. Es wäre nämlich unpraktisch wenn ich für jedes Feld den Filter aus dem String schneide und dann zu Fuß, per SETFILTER etc. wieder auf die Felder draufsetze.

Ich hoffe ihr versteht was ich meine...

3. Mai 2007 11:51

Genau das könntest du doch über Record.SETVIEW erreichen.
Dort kann zwar auch gleichzeitig eine Sortierung mitgegeben werden, der Befehl funktioniert aber auch ohne.
Den Filterstring kannst du dann problemlos in einem Textfeld (optimal wäre hier natürlich Text[250]) abspeichern und somit jederzeit abrufen.
Da die Syntax für die Filterbedingung (für Navision-Verhältnisse) etwas gewöhnungsbedürftig ist, empfiehlt es sich, den String mittels Record.GETVIEW(FALSE) zu ermitteln.

Auf gut deutsch:
Lege eine Textbox auf der zu filternden Form an und gebe ihr als SourceExpression GETVIEW(FALSE)
Filtere die Form, wie du es gerne hättest
Kopiere den Inhalt der Textbox und speichere ihn in deiner Tabelle.

Ich verwende dafür beim GETVIEW immer gerne den Parameter "(FALSE)", da der String dann etwas kürzer ist, und du somit mehr Felder filtern kannst bzw. längere Filterbedingungen unterstützt werden.
(Das Problem ist nämlich, dass man leider nur maximal 250 Zeichen in einem Tabellenfeld speichern kann, auch wenn Variablen mittlerweile bis zu 1024 Zeichen unterstützen.)

3. Mai 2007 11:58

Könntest du ein konkreteres Beispiel geben?
Welche Tabelle? Welche Filter worauf?

Edit: zu spät...

3. Mai 2007 12:02

Hier das konkrete Beispiel:

Die Tabelle sind die Artikelposten.
Nun möchte ein Kunden gerne das seine Filter erhalten bleiben. Gefiltert wird die Tabelle natürlich am Anfang auf einen Artikel.

Den Tabellenfilter ermittel ich am Anfang und schreibe ihn in eine Variable. Beim schließen der Form befüllt die Funktion GETFILTERS das besagte Feld in der Tabelle, vorher wird aber per Stringbearbeitungsfunktion der Ursprungsfilter vorne abgeschnitten.

Geht dies auch mit GET- bzw. SETVIEW? Ich dachte das geht eher über die verwendeten Schlüssel etc...

Ich hoffe das was ich möchte geht überhaupt...

3. Mai 2007 12:07

Das solltest Du eigentlich über GETVIEW bzw. SETVIEW lösen können. Evtl. solltest Du die Anfangsfilterung auf den Artikel in eine andere Filtergruppe verlegen, dann brauchst Du auch diesen Filter nicht vor der Speicherung in die Tabelle herauszuschneiden.

Gruß
Frank

3. Mai 2007 12:12

OK, Dankeschön für die Beiträge...

3. Mai 2007 14:55

Hi,

hab vielleicht noch einen weitern interessanten Tipp für Dich.
Schau Dir mal FILTERGROUP an. Damit kann man auf Formen auch Filter fest definieren, die ein User auch mit Filter auflösen nicht ändern kann.

Gruß Hoschi