| |
Anzeigen |
|
|
Social Bookmark Script |
|
|
|
 |
dynamische, benutzerabhängige Filter |
exli2
Mitglied
 
Dabei seit: 02.12.2009
Beiträge: 37
Einsatzart von VDF: gewerblich Anwenderstatus: Newbie Herkunft: Berliner Gegend Betriebssystem: XP
 |
|
|
28.09.2010 16:45 |
|
|
Roman Köhler
Administrator
    

Dabei seit: 29.08.2007
Beiträge: 202
Einsatzart von VDF: gewerblich Anwenderstatus: VDF-Entwickler Herkunft: Mannheim Betriebssystem: Windows XP
 |
|
Hi Andreas,
ich habe meine benutzerdefinierten constraints wie folgt verwirklicht:
1. In der View properties definieren
2. In der constraints-prozedur ein constraints mit dieser Property einbauen. Aber nur, wenn diese Property einen Wert aufweist
3. In der onKillFocus bzw auf einen Knopfdruck die Properties mit den Feldinhalten füllen und einen rebuildconstraints zu dem dd schicken.
Bsp:
zu 1:
property piArtikelNummer
zu 2:
if (piArtikelNummer(Self)) constrain Datei.Artikelnummer eq (piArtikelnummer(Self))
zu 3:
procedure onKillFocus
integer iArtikelnummer
get Value to iArtikelnummer
set piArtikelnummer to artikelnummer
send rebuildConstraints to artikel_dd
Das sollte eigentlich funktionieren. Bei mir tuts das jedenfalls ;-)
Wenn nicht, melde Dich einfach noch mal.
LG
Roman
|
|
29.09.2010 08:40 |
|
|
Matthias
Super Moderator
   
Dabei seit: 09.07.2007
Beiträge: 233
Einsatzart von VDF: gewerblich Anwenderstatus: VDF-Entwickler Herkunft: Niedernhausen Betriebssystem: XP, Vista, Win7, 2008 Ser
 |
|
Der Einfachheit halber würde ich die Methode von Roman bevorzugen. Ich denke, dass es eine endliche Zahl von Möglichkeiten gibt, die der Benutzer auswählen kann.
Wenn |FN2,23 funktioniert kann man es evtl. ganz variabel machen, indem man zur Laufzeit mit der (mittlerweile nicht mehr in der Hilfe erwähnten) globalen Variable FileNumber / FieldIndex arbeitet.
Folgende Zeilen könnten eine Idee geben (nicht getestet!):
| code: |
1:
2:
3:
4:
5:
|
Move 2 to FileNumber
Move 3 to FieldIndex
Constrain |FN0,0& Eq xyz
|
|
Matthias
|
|
29.09.2010 09:44 |
|
|
exli2
Mitglied
 
Dabei seit: 02.12.2009
Beiträge: 37
Einsatzart von VDF: gewerblich Anwenderstatus: Newbie Herkunft: Berliner Gegend Betriebssystem: XP
Themenstarter
 |
|
Hallo Roman, hallo Matthias,
DANKE für diese Tipps! Zu Roman´s Tip: Ich arbeite bereits mit Propertys, allerdings nur in der Listenansicht, weil der Filter nur in dieser Ansicht Sinn macht. Desweiteren habe ich aber das Problem, dass der Benutzer während der Laufzeit das Filterfeld von bsp.weise ArtikelNr auf LID oder ein anderes der restlichen 30 Felder setzen kann. Aber dem Constrain kann ich keine Variable File.field übergeben. Somit müßte ich bsp.weise 30 constrains setzen, die je nachdem, ob das dazugehörige Feld in der Combobox ausgewählt ist und der (vom Benutzer eingegebene) Suchwert gültig ist, und dann den RebuildConstrain ausführen. Das ist eine Menge Schreibarbeit. Beim SQL gibt es da eine einfachere Möglichkeit, immer tiefer, nach unterschiedlichen Feldwerten und mit unterschiedlichen Operatoren verschiedener Felder zu filtern. Hinzu kommt ja die Auswahl gt eq und lt, bzw. between und matches. So hätte ich das gerne....
Zu Matthias´ Tip: Das werde ich jetzt mal probieren und gebe Signal, was daraus geworden ist
Derzeit sieht das Ganze bei mir so aus:
Procedure OnConstrain
Integer iAktiv iLid iComboItem1
String strFeldName
Number nWert
Forward Send OnConstrain
Get piAktiv to iAktiv
Get Value of oCF1 to strFeldName
Get Value of oNumWert to nWert
Get piPosCF1 to iComboItem1
If (iAktiv<2) Constrain artikel.Aktiv eq iAktiv //alle aktiven Artikel
If (iAktiv=2) Constrain artikel.aktiv lt iAktiv //alle Artikel
If (iAktiv=3) Begin //alle Artikel und in Bearbeitung
Constrain artikel.aktiv lt iAktiv
Constrain Artikel as (Artikel.inbearbeitung=1)
End
Case Begin
Case ((strFeldName="LID") and (nWert>0))
If (iComboItem1=0) Constrain Artikel.LID eq nWert
If (iComboItem1=1) Constrain Artikel.LID gt nWert
If (iComboItem1=2) Constrain Artikel.LID lt nWert
Case Break
Case ((strFeldName="WG") and (nWert>0))
If (iComboItem1=0) Constrain Artikel.WG eq nWert
If (iComboItem1=1) Constrain Artikel.WG gt nWert
If (iComboItem1=2) Constrain Artikel.WG lt nWert
Case Break
Case End
End_Procedure
__________________ Programme sind nur so gut, wie das Zusammenspiel der Synapsen des Entwicklers.
|
|
29.09.2010 11:19 |
|
|
|
|
|
 |
|