FILTERGROUP(-1) – Cross Column Search in Dynamics NAV / BC

Von | 21. März 2020

Hallo zusammen,

in Gesprächen mit Kollegen und Freunden im Dynamics NAV / Business Central Bereich stelle ich immer wieder fest, dass viele noch nie etwas von FILTERGROUP(-1) gehört haben. Dabei ist das sogar auf der Microsoft Online Dokumentation beschrieben (FILTERGROUP Function (Record)).

Schauen wir uns die Dokumentation einmal an:

  • Number: -1
  • Name: Cross-column
  • Description: Used to support the cross-column search.

Dabei werden die Dynamics NAV Experten sicherlich schon wissen worum es sich hier handelt. Mit “Cross-column” kann über mehrere Felder gleichzeitig gesucht werden. Ich erkläre das gerne an einem Beispiel. Stellen wir uns vor, dass wir in der Kontakttabelle nach dem Suchwort “GmbH” suchen wollen. Dabei stellt sich die Herausforderung, dass manche Kontakte einen langen Namen haben und “GmbH” nicht im Feld “Name”, sondern im Feld “Name 2” steht.

  • Kontakte mit “GmbH” im Feld “Name”:

  • Kontakte mit “GmbH” im Feld “Name 2”:

Wie lösen wir dieses Problem? Dabei wird oft zur der Lösung gegriffen, die entsprechende Tabelle zwei Mal zu durchsuchen:

  • In diesem Beispiel rufen wir eine Funktion “GetNoOfContactsWithSearchTerm” auf und übergeben ‘GmbH’ als Suchbegriff.
  • Wir ermitteln die Anzahl der Kontakte, die diesem Filterkriterium entsprechen, indem wir auf das Feld “Name” filtern und die Anzahl der Datensätze in der Variable “NoOfRecords” speichern.
  • Wir wiederholen die Abfrage mit unserem Suchbegriff, indem wir den gleichen Filter auf das Feld “Name 2” setzen.

Das Ergebnis geben wir in einer Nachricht aus.

Wir haben also 6 Kontakte, die GmbH im Feld “Name” oder “Name 2” vorweisen können. Das ist natürlich nur ein Beispiel, aber wie könnte diese Problem besser gelöst werden? Wie wäre es mit FILTERGROUP(-1):

Das Ergebnis ist wie im Beispiel vorher:

FILTERGROUP(-1) bietet uns die Möglichkeit Filter in Dynamics NAV / Business Central mit ODER zu verknüpfen. Ohne FILTERGROUP(-1) werden alle Filter mit UND verbunden. Schlußfolgern können wir daraus, dass wir mit FILTERGROUP(-1) Daten innerhalb einer SQL Abfrage ermitteln können und über mehrere Spalten gleichzeitig suchen können.

Natürlich sollte das gut bedacht sein und für den entsprechenden Fall überprüft werden. Ab einer gewissen Datenmenge und ohne entsprechende Indexe muss die Abfrage nicht unbedingt schneller sein. Anwendung könnte FILTERGROUP(-1) beispielsweise in einer Entwicklung finden, die alle oder bestimmte Felder einer Stammdatentabelle nach einem Suchbegriff durchsucht. Das wäre in Verbindung mit FIELDREF möglich. Wir könnten daher mehrere Felder generisch nach einem Suchbegriff durchsuchen und dies dem Benutzer anzeigen. Dies ist nur eine der möglichen Anwendungsbereiche. Bei Prüfungen, ob eins von vielen Felder gefüllt sind, könnte sich der Cross-column search auch anbieten.

Ich bin mir sicher, dass die meisten Entwickler schon Ideen haben, FILTERGROUP für ihre Anforderung zu verwenden.

Viel Spaß.

3 Gedanken zu “FILTERGROUP(-1) – Cross Column Search in Dynamics NAV / BC

  1. Pingback: FILTERGROUP(-1) – Cross Column Search in Dynamics NAV / BC - Robert's Dynamics NAV Entwickler Blog - Dynamics 365 Business Central/NAV User Group - Dynamics User Group

    1. Robert Beitragsautor

      I know that there are some blogs about it, but i didn’t find one in german. Therefore I created one in german. 🙂

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.