Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: Programming > Auswahlliste Dynamisch filtern

Auswahlliste Dynamisch filtern

Hallo zusammen,

ich hoff ihr könnt mir helfen. Stehe gerade etwas auf dem Schlauch.

Ich habe eine Applikation die wie folgt aussieht:

Hauptdatengruppe: Auto
Unterdatengruppe: Ausstattungsmerkmale


Die Ausstattungsmerkmale (Navi, Radio CD,....) werden in einer separaten Datengruppe gepflegt und in der Auswahlliste zum Erstellen von Unterdatensätzen angezeigt.

Jetzt möchte ich natürlich verhindern, dass ein Ausstattungsmerkmal 2 mal dem Hauptdatensatz hinzugefügt werden kann. Ich habe die bereits dem Hauptdatensatz zugeordneten Ausstattungsmerkmale per Velocity ausgelesen und in eine $SharedState Variable (kommagetrennt) gespeichert. Die Auswahlliste wollte ich dann per Filter "LID ist nicht enthalten in Verarbeitungskontext ("MeineVariable)" filtern. Leider ist es mir nicht möglich diese Liste zur Filterung anzuwenden, da der Filter nicht mehr zutrifft sobald 2 LIDS in der SharedState Variable, mit Komma getrennt, vorhanden sind. Ebenfalls wenn ich versuche das ganze über eine Abhängigkeit zu lösen, habe ich das gleiche verhalten.

Gibt es andere Möglichkeiten dies zu bewerkstelligen?

Wir setzen Intrexx 7 ein.

Grüße

Ralf
09.02.2016 09:10 von googleschreiber
Hallo Ralf,

muss es denn eine Auswahlliste sein?
Eine Mehrfachauswahl würde doch auch den Zweck erfüllen.

Gruß
Snixx
09.02.2016 09:19 von Snixx
Jaein, habe noch etwas vergessen zu erwähnen...sorry...

Die Ausstattungsmerkmale haben ein Kennzeichen (Boolean-Feld). Wenn dieses bei einem Ausstattungsmerkmal (bsp. Navi) gesetzt ist, so müssen noch weitere Informationen eingegeben werden (Bsp. Länderabdeckung). Das Feld weitere Informationen ist ein freies Textfeld.

Das mit der Mehrfachauswahl habe ich mir auch schon gedacht, aber bin dann an dem von mir gerade beschriebenen Problemen festgehangen. Trotzdem vielen dank für den Hinweis :-)

Gruß

Ralf
09.02.2016 09:26 von googleschreiber
Vielleicht wäre das ein Ansatz:

Auf der Ansichtsseite des Datensatzes "Auto" zeigst du eine Tabelle oder Freie Tabelle aller möglichen "Ausstattungsmerkmale" (also die Hauptdatengruppe nicht die Unterdatengruppe) an.
Die Tabelle hat jeweils zwei Schaltflächen "Hinzufügen" und "Entfernen", die du je nach Bedarf per VTL ein- bzw. ausblendest.
Die Schaltflächen schließen sich gegenseitig aus.
Bei der Hinzufügen-Schaltfäche springst du auf die Eingabeseite der Unterdatengruppe und übergibst die ID per Request. Damit sparst du dir die Auswahlliste.

Gruß
Snixx
09.02.2016 13:46 von Snixx
Also wenn ich das recht verstehe, sollte das eigentlich mit einem statischen Filter möglich sein.
Stichwort: Subselect, kann man auch im Buch über Filtertechniken nachlesen.

Das ist die Usability-Variante, dass man in der Auswahlliste nur die Einträge anzeigt die noch verfügbar sind.


Zusätzlich kann man in der Datengruppe einen Index definieren, sodass bspw. die Kombination aus FKLID und AussattungID eindeutig sein soll.
Alternativ könnte man auch einen Actionhandler definieren, der beim Speichern prüft ob der Eintrag schon vorhanden ist und dann eine benutezrdefinierte Fehlermeldung im Browser anzeigt.

Wenn die Einträge aber von vornherein nicht angezeigt werden ist es natürlich am schönsten, man könnte aber bspw. eine Eingabeseite zweimal im Browser öffnen und das somit umgehen, deswegen ist eine serverseitige Prüfung noch zu empfehlen.
09.02.2016 13:56 von MartinW
Da mir leider etwas die Zeit gefehlt hat, hatte ich nicht viel Zeit das noch umzubauen auf die Tabelle. Werde mir das aber mal im Hinterkopf behalten.

Ich habs nun so gemacht (nicht besonders schön -> aber wenn es absolut notwendig ist aus der Sicht der User und man keine Zeit hat...vorrübergehend vertretbar)

Ich habe auf die Eingabeseite der Unterdatengruppe (Ausstattungsmerkmale) ein Werte-Listenfeld hinzugefügt. Dieses filter ich mit dem Standardfilter auf alle bereits vorhandenen Einträge. Im Onload der Seite habe ich ein Javascript am laufen, welches alle darin enthaltenen Einträge bis auf den 1. (keine Auswahl) markiert. Desweiteren ist im Onload eine Abhängigkeit auf die Auswahlliste die mir dann nur noch die Einträge anzeigt die nicht in dem Werte-Listenfeld vorhanden bzw. markiert sind.
´
Normal mach ich sowas nicht, aber da war höhere Macht mit im Spiel.

Das Filterbuch habe ich mir mal angesehen. Konnte aber leider keinen passenden Beitrag darin finden. Eventuell ist meine Ausgabe (1. Auflage 2007) auch schon zu alt dafür ;-)

Werde mich aber weiterhin mal mit diesem Thema befassen, kann man sehr wahrscheinlich auch für andere Applikationen mal brauchen.

Danke an alle die mir weitergeholfen haben

Gruß Ralf
10.02.2016 13:51 von googleschreiber
Bin gerade auf der Suche nach etwas Anderem über diesen Beitrag gestolpert und möchte nur gaanz kurz noch meinen Senf da lassen.

.... Ich habe die bereits dem Hauptdatensatz zugeordneten Ausstattungsmerkmale per Velocity ausgelesen und in eine $SharedState Variable (kommagetrennt) gespeichert. Die Auswahlliste wollte ich dann per Filter "LID ist nicht enthalten in Verarbeitungskontext ("MeineVariable)" filtern. ....


Soweit ich weiß, muss eine "Liste" von IDs, nach denen über "Ist (nicht) enthalten in" gefiltert werden soll, mit einem doppelten Pipe (|) verkettet sein.
Also anstatt

10,11,12,13
sollte es so sein

10||11||12||13

Intrexx bietet zur Konvertierung überall entsprechende Methoden an.
Javascript:
Helper.doCharStuffing(<array>) <-> Helper.undoCharStuffing(<string>)
Velocity:
$TextUtil.arrayToString(<list>) <-> $TextUtil.stringToArray(<string>)
Groovy:
TextUtil.listToString(<list>) <-> TextUtil.stringToList(<string>)

Damit sollte dann der Filter-Ausdruck "ist (nicht) enthalten in" - wie ursprünglich geplant - funktionieren.

[EDIT]
Ach ja, mit meinem oben erwähnten Statement wollte ich nur auf das Problem der Filterung hinweisen. Ist bestimmt auch in anderen Fällen nützlich zu wissen.
Ich würde allerdings auch, wie bereits von MartinW erwähnt, auf ein SubSelect zurückgreifen und ggf. noch DB-seitig den Index setzen oder beim Speichern per Ajax vorher nochmal auf bereits vorhandene Ausstattungsmerkmale prüfen.
Vielleicht hilft dieser Beitrag bzgl. SubSelect weiter.


Gruß
23.03.2016 19:46 von handw3rker
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg