Filter bei Lookup Form gehen verloren

17. Juli 2007 13:40

Hallo zusammen,

ich habe einen Wizard in diesem gibt es ein Feld mit einem Lookup. In der OnLookup Funktion filtere ich auf zwei Felder. Wenn man nun diese Form aufruft, dann sind die Filter auch gesetzt. Der User kann dann eigene Filter setzen, diese sind aber beim nächsten Aufruf wieder weg. Wie bekomme ich hin, dass die Filter vom User nicht verloren gehen?

In der OnLookup Funktion habe ich folgenden Code:

Code:
Job.FILTERGROUP(2);
Job.SETRANGE("Job Posting Group", 'IT');
Job.SETRANGE(Status, Job.Status::Order);
Job.FILTERGROUP(0);

JobList.SETTABLEVIEW(Job);

JobList.LOOKUPMODE(TRUE);
IF JobList.RUNMODAL = ACTION::LookupOK THEN
  JobList.GETRECORD(Job);


Danke schon mal im Voraus!

17. Juli 2007 13:51

Hi,

mit dem Befehl SETTABLEVIEW kann man unteranderem Filter einer Form übergeben. Die durch den Benutzer bereits gesetzten Filter werden dabei entfernt. Eine Lösung für dieses Problem ist mir jetzt nicht bekannt.

Gruß, Marc

17. Juli 2007 14:30

Nur mal so in's Blaue getippt:
Die Formeigenschaften
SaveValues und SaveTableview
sind die auf <yes>?

17. Juli 2007 14:37

Also die Werte der Liste stehen auf Standard. Bedeutet SaveValues auf Nein und SaveTableview auf Ja.

Also angenommen ich lasse die FILTERGROUP, SETRANGE und SETTABLEVIEW weg. Dann werden sich die Filter vom Benutzer aus der Liste gemerkt.

17. Juli 2007 15:07

Du musst Savevalues auf ja setzen um die Userwerte zu speichern, durch die Filtergroup wird ja dafür gesorgt, dass der User nur zusätzliche Filter setzen kann, dadurch werden Userfilter aber nicht gelöscht.

17. Juli 2007 16:02

SaveValues ist in diesem Fall uninteressant, da es nicht für die Speicherung der Filter verantwortlich ist. Dafür ist SaveTableView da. Aber auch wenn das auf Yes steht und ein SETTABLEVIEW gemacht wird, werden die Filter vom User nicht behalten.

Gruß, Marc

17. Juli 2007 16:40

wenns so nicht geht, dann bau eine Funktion in die form

Code:
GetFilterString() : Text[100]
EXIT(GETFILTERS)


bevor du mit joblist.getrecord den Datensatz aktualisierst
könnte man dann die Filterkriterien der Form auslesen

filtervariable := joblist.getfilterstring;

und diese wieder auf Joblist anwenden.

soweit die Theorie ;)

17. Juli 2007 16:46

mmmm... gute Idee. Hab es gerade mal ausprobiert, jedoch funktioniert es nicht. :-(

17. Juli 2007 16:50

ich habs mal mit Message probiert, da hab ich die manuell gesetzten Filter angezeigt bekommen.
die müsste ich doch auf den Job Record draufkriegen und dann die beiden aus der Filtergroup(2) noch mal dazusetzen (da ändert sich doch nix)

17. Juli 2007 17:06

Ok Alternatividee

der Trigger in der Form bekommt eine VAR Variable Typ Job
Code:

getfilterstring(VAR Jobrec : Record Job) : Text[100]
CurrForm.SETSELECTIONFILTER(Jobrec);


und der Aufruf wird wie folgt erweitert
Code:

IF joblist.RUNMODAL = ACTION::LookupOK THEN BEGIN
  joblist.getfilterstring(job2);
  job.COPYFILTERS(job2);
  job.SETRANGE(Status, job.Status::Order);
  job.SETRANGE("Job Posting Group", 'IT');
  joblist.SETTABLEVIEW(job);
  joblist.GETRECORD(job);
END;

job2 ist dabei einfach eine Variable auf den Job Record die nur die Filter der Form übergeben soll.

20. Juli 2007 10:32

Hallo zusammen,

erst einmal DANKE für die vielen Antworten und sorry, dass ich nicht geantwortet habe. Wir hatten hier leider einen kleinen Crash...

Also ich hab jetzt in der dem OnOpenForm der Liste eine kleine Abfrage reingebaut und eine Funktion mit der die Parameter von aussen gesetzt werden können. Bevor ich die List in der anderen Form aufrufe setze ich meine Parameter mit der Funktion auf List und schon funktioniert es.

Den letzten Weg von tba werd ich mir auf alle Fälle auch noch anschauen.

DANKE!

Gruß
Sabrina

20. Juli 2007 11:40

Hi Sabrina!

sas_fisch hat geschrieben:Also ich hab jetzt in der dem OnOpenForm der Liste eine kleine Abfrage reingebaut und eine Funktion mit der die Parameter von aussen gesetzt werden können. Bevor ich die List in der anderen Form aufrufe setze ich meine Parameter mit der Funktion auf List und schon funktioniert es.


Wie sieht denn dein Code dazu aus? Ich frage deshalb, weil ich das auch so versucht habe und es bei mir nicht funktionierte.

Gruß, Marc

20. Juli 2007 11:48

Hi,

kein Problem. In meinem OnLookup Trigger steht folgendes:

Code:
JobList.SetFilterIt;
JobList.LOOKUPMODE(TRUE);
IF JobList.RUNMODAL = ACTION::LookupOK THEN
  JobList.GETRECORD(Job);


Und in meiner Funktion SetFilterIt auf der Liste switche ich nur einen Boolean (FilterIt := TRUE;) um.

Und im OnOpenForm Trigger der Liste steht folgendes:

Code:
IF FilterIt THEN BEGIN
  FILTERGROUP(2);
  SETRANGE("Job Posting Group", 'IT');
  SETRANGE(Status, Status::Order);
  FILTERGROUP(0);
END;


Ist zwar nicht sonderlich hübsch, aber funktioniert.

Gruß
Sabrina

20. Juli 2007 13:13

Alles klar - danke! Hätte schwören können ich hätte es so ähnlich ausprobiert. Na ja, egal. Ich weiß ja jetzt, dass es funktioniert. :-)