[Gelöst] FILTERGROUP

30. Januar 2006 16:17

Hi zusammen,

was genau macht der Befehl FILTERGROUP? Auch würde mich interessieren, was die Zahl (2) bedeutet:
Code:
FILTERGROUP := 2;


Vielen Dank für eure Hilfe.

Gruß, Marc
Zuletzt geändert von Marc Teuber am 6. April 2006 10:42, insgesamt 1-mal geändert.

30. Januar 2006 16:30

Hallo Marc,
richtig technisch kann ich Dir das nicht benatworten, wir benutzen die kombination Filtergroup 2 und 0 um filter zu setzten, die der Anwender nicht "ändern" kann, diese Filter werden nicht angezeigt.

Ich hoffe das hilft ein wenig

30. Januar 2006 16:42

Wenn ich mich da richtig an den Unterricht erinnere ist die Filtergrpup 2 die Ebene, die vom Programm für die Filter genutzt wird, die der Benutzer nicht entfernen oder ändern darf. In der Programmierung kann man diese auswählen und weitere Filter setzen, bzw vorhandene ändern.
z.B. wenn du die Auftragserfassungsmaske aufmachst, bekommst du nur die Header aus der Sales Header, wo der Typ Order ist. das ist mit so einem Filtergroup-Filter gemacht. Wenn du eigene Masken schreibst, die diese Funktionalität brauchen, setzt du eben die Filtergroup 2 ein.

30. Januar 2006 17:37

Ahhhh. So langsam versteh' ich es. Danke für eure Antworten.

Gruß, Marc

30. Januar 2006 19:19

Navision C/SIDE Reference Guide hat geschrieben:FILTERGROUP (Record)

Use this function to change the filter group that is being applied to the table. You can also use this function to return the number of the current filtergroup. You cannot return the number of the filtergroup and set a new filtergroup at the same time.

A filtergroup can contain a filter for a Record that has been set earlier with SETFILTER or SETRANGE. The total filter applied is the combination of all the filters set in all the filtergroups.

[CurrGroup] := Record.FILTERGROUP([NewGroup])
CurrGroup
Data type: integer
The number of the current filter group.

Record
Data type: record
A record pointing to the table you want to work with.

NewGroup
Data type: integer
The number of the filter group you want to use.

Settings
There are filtergroups with numbers from 0 to 255.

Comments
When you select a FILTERGROUP, subsequent filter settings - by SETFILTER or SETRANGE - apply to that group.

All groups are active at all times. The only way to disable a group is to remove the filters set in that group.

Filters in different groups are all effective simultaneously; that is: if in one group, a filter is set on customer numbers 1000..2000, while in another group, a filter is set on customer numbers 1800..3000, the result will be that only numbers in the range 1800..2000 are visible.

C/SIDE uses 7 FILTERGROUPS internally:

Number / Name
Description

0 / Std
The default group where filters are placed when no other group has been selected explicitly. This group is used for filters that can be set from the filter dialogs by the end user.
This group is also used for the filtering action that is the result of the RunFormLink property on a form.

1 / Global
Not used, but may be used in the future.

2 / Form
Used for the filtering actions that result from the SETTABLEVIEW function; from the SourceTableView property; and from the DataItemTableView property.

3 / Exec
Used for the filtering actions that result from the SubFormView and RunFormView properties.

4 / Link
Used for the filtering actions that result from the DataItemLink and SubFormLink properties.

5 / Temp
Not used, but may be used in the future.

6 / Security
Used for applying security filters for user permissions.


This means that a filter set in a group different from FILTERGROUP 0 cannot be changed by a user that uses a filter dialog to set a filter. If, for example, a filter has been set on customer numbers 1000..2000 in group 4, the user can set a filter that delimits this selection further, but cannot widen it to include customer numbers outside the range 1000..2000.

It is possible to use one of the internally used groups from C/AL. If you do this, keep in mind that in this way, you will replace the filter that C/SIDE assumes is in this group. If, for example, you use FILTERGROUP 4 in a form, you will replace the filtering that is actually the result of applying the SubFormLink property. This could seriously alter the way forms and subforms interact.

8. März 2006 20:54

Hallo,

in einem Verkaufsauftrag kann ich die Lieferadresse auf dem Tab "Lieferung" auswählen.
Nun ist mir Aufgefallen, wenn der User einem Lookup auf die Form "Lief. an Adressen Übersicht" macht, öffnet zuerst die gefilterte Ansicht auf den entsprechenden Debitoren.
Wenn der User dann in der Symbolleiste "Alle Anzeigen (Groß + Strg + F7)" anklicke, wird der Filter aufgehoben und es werden alle Lieferadressen angezeigt. (Darf das sein?)

Um das Problem in den Griff zu bekommen, habe ich versucht mit FILTERGROUP die Ansicht für den User einzuschränken, so das dieser nur die Lieferadressen zu diesen Debitoren sehen kann.

Leider musse ich feststellen, das jeglicher Versuch mit FILTERGROUP keinen Erfolg brachte.

Wie kann das Problem behoben werden?
Gruß Mikka

8. März 2006 21:17

Du kannst in der Form mit dem Befehl CurrForm.LOOKUPMODE abfragen, ob die Form als LookUp aufgerufen wurde.
In diesem Fall kannst du dann die zu schützenden Feld-Filter mittels TempFilterText := GETFILTER("Zu schützendes Feld") abfragen und dann in einer anderen FilterGroup setzen:
Code:
IF CurrForm.LOOKUPMODE THEN BEGIN
  TempFilterText := GETFILTER("Zu schützendes Feld");
  FILTERGROUP(2);
  SETFILTER("Zu schützendes Feld",TempFilterText);
  FILTERGROUP(0);

  TempFilterText := GETFILTER("Nächstes Feld");
  FILTERGROUP(2);
  SETFILTER("Nächstes Feld",TempFilterText);
  FILTERGROUP(0);

  // [...]
END;

Der Code ist frei ausgedacht und nicht getestet, sollte aber deine Anforderungen vom Prinzip her erfüllen.

9. März 2006 17:03

Jetzt muss ich mich Outen ...
(Bitte nicht zu laut Lachen)

Mikka hat geschrieben:Um das Problem in den Griff zu bekommen, habe ich versucht mit FILTERGROUP die Ansicht für den User einzuschränken, so das dieser nur die Lieferadressen zu diesen Debitoren sehen kann.

Leider musse ich feststellen, das jeglicher Versuch mit FILTERGROUP keinen Erfolg brachte.


Gestern Abend, zu meiner Entschuldigung, es war schon sehr spät, habe ich mich gewundert, das es nicht Funktioniert mit dem FILTERGROUP.
Heute schau ich nochmal über den Code und mußte festellen, dass ich diesen dummerweise auf dem :shock: OnCloseForm() Trigger abgelegt habe.
...6 Mikka setzten wie Schumi sagen würde... :oops:


@ TIMO
Dein Tipp war aber trotzdem hilfreich für mich. *Danke.*
Das kannst du gerne in die Galerie der dümmsten Fehler mit aufnehmen.
Gruß Mikka

10. März 2006 09:52

mikka hat geschrieben:... habe ich mich gewundert, das es nicht Funktioniert mit dem FILTERGROUP.
Heute schau ich nochmal über den Code und mußte festellen, dass ich diesen dummerweise auf dem :shock: OnCloseForm() Trigger abgelegt habe.


Ist doch genial, so kann keiner mehr die Filterkriterien ändern, die dafür sorgen, dass die Form geschlossen wird :rotfl: 8-)