[gelöst] Cross Column Filter in Settableview BC16.5

4. November 2020 12:45

Ich habe festgestellt, dass der Cross Column Filter bei der Übergabe des Filtersets mit Settableview an eine Page nicht funktioniert. Bei normaler Filterung funktioniert alles prima. Sobald man Cross Column Filter (Filtergroup -1) einsetzt wird gar kein Filter mehr übergeben.
Hat Jemand eine Idee dazu oder darüber etwas gehört.
Version 16.5
Zuletzt geändert von HansF am 5. November 2020 16:51, insgesamt 1-mal geändert.

Re: Cross Column Filter in Settableview BC16.5

5. November 2020 09:12

wie sieht denn dein Code aus?

Re: Cross Column Filter in Settableview BC16.5

5. November 2020 10:01

Ich habe es auch versucht mit dem Tabellenname vor den Feldern, wie im ersten Beispiel.
Nicht irritieren lassen von der Funktion SetNoFilter. Diese verhindert nur das keine anderen Filtergesetzt werden. Ist ja auch in beiden Beispielen drin.

Code:
Zum Testen habe ich folgende Beispiele definiert:

Hier funktioniert alles gut. Man bekommt alle Kreditorennamen angezeigt, die den Kriterien entsprechen.
Vendor.FilterGroup := -1;
Vendor.SetRange(Vendor."POI Shipping Company", true);
Vendor.setrange(Vendor."POI Air freight", true);
Vendor.SetRange(Vendor."POI Carrier", true);
if Vendor.FindSet() then
  repeat
    Message(Vendor.Name);
  until Vendor.Next() = 0;

Hier funktioniert es auch, da nur auf ein Feld gefiltert wird und keine Filtergroup -1 gesetzt ist.
Damit ist es kein Cross Column Filter mehr
Vendor.Reset();
 //Vendor.FilterGroup := -1;
 //Vendor.setrange("POI Shipping Company", true);
 //Vendor.setrange("POI Air freight", true);
 Vendor.setrange("POI Carrier", true);
 if Vendor.FindSet() then begin
   PageVendor.SetNoFilter(true);
   PageVendor.SetTableView(Vendor);
   if PageVendor.Runmodal() = Action::OK then begin
     PageVendor.GetRecord(Vendor);
     "POI Vendor No." := Vendor."No.";
   end;
 end;

Hier funktioniert es nicht mehr. Der ankommende Filter ist leer.
 Vendor.Reset();
 Vendor.FilterGroup := -1;
 Vendor.setrange("POI Shipping Company", true);
 Vendor.setrange("POI Air freight", true);
 Vendor.setrange("POI Carrier", true);
 if Vendor.FindSet() then begin
   PageVendor.SetNoFilter(true);  //Das ist die Page "Vendor List"
   PageVendor.SetTableView(Vendor); //Bevor dieser Befehl ausgeführt wird, kann man im Recordset den Filter noch sehen.
   if PageVendor.Runmodal() = Action::OK then begin
     PageVendor.GetRecord(Vendor);
     "POI Vendor No." := Vendor."No.";
   end;
 end;

Re: Cross Column Filter in Settableview BC16.5

5. November 2020 16:14

danke sehr -
das Setzen der Filtergroup per Zuweisung ist (zumindest für mich) ein wenig ungewöhnlich
eigentlich sollte es so funktionieren:
Code:
Rec.FilterGroup(-1)
....


https://robert-dynamicsnav.de/2020/03/f ... l-gehoert/

was dein Code uns nicht verrät -

Code:
PageVendor.GetRecord(Vendor)


-> was macht GetRecord? --> ich weiß es schon, aber der Code wäre interessant -> denn da liegt vermutlich "dein" Fehler
ist "Vendor" in der Funktion pass by reference?

Re: Cross Column Filter in Settableview BC16.5

5. November 2020 16:26

Das mit der Filtergroup = -1 ist schon i.O.
Das schreibt ja auch Microsoft in der Beschreibung der Filtergroup so. Funktioniert ja auch bei meinem ersten Beispiel.
Habe übrigens, da ich diesen Verdacht auch schon hatte, beides versucht und in beiden Fällen dasselbe Ergebnis.
Nein, das Getrecord ist ja der Zurückgegebene Record. Das passiert ja erst wenn ich aus der Kreditorenliste rauskomme. Das funktioniert ja dann auch. Wenn ich einen Datensatz ausgewählt habe. Das Problem liegt ja im Aufruf der Kreditorenliste. Diese ist nicht gefiltert.
Getrecord ist die Standardfunktion von Microsoft im Objekt Page.

Re: [gelöst] Cross Column Filter in Settableview BC16.5

5. November 2020 16:54

Offensichtlich ist es tatsächlich ein Problem von BC. Es funktioniert nur, wenn man die ausgefilterten Datensätze markiert und dann das Recordset mit den markierten Datensätzen an die Page übergibt. Etwas umständlich, aber es funktioniert.

Re: Cross Column Filter in Settableview BC16.5

5. November 2020 18:10

HansF hat geschrieben:Getrecord ist die Standardfunktion von Microsoft im Objekt Page.


ich Depp - entschuldige - bin immernoch auf dem Tripp, dass Systemfunktionen komplett groß geschrieben werden^^

es ist nicht BC-spezifisch - sondern zB. auch in NAV2018 so (gerade getestet)

PS: https://dynamicsuser.net/nav/b/vanvugt/posts/filtergroup-1

Re: [gelöst] Cross Column Filter in Settableview BC16.5

5. November 2020 18:17

Das ist kein (neues) Problem von D365BC, das war auch vorher in NAV schon so, dass man markieren musste.

https://dynamicsuser.net/nav/b/vanvugt/ ... tergroup-1

[Nachtrag: Ups, da war einer schneller... :-)]

Re: [gelöst] Cross Column Filter in Settableview BC16.5

10. November 2020 16:29

Davon steht nur leider bei Microsoft in der Beschreibung von Filtergroup nichts.