gefilterte Ansicht aktualisiert nicht richtig
Hallo Forum.
ich habe ein Cockpit-Formular erstellt, in dem eine Ansicht vorhanden ist, die mit mehreren Feldern aus diesem Formular gefiltert werden kann. Wenn ich ein Filterfeld ändere, wird in der App die Ansicht sofort angepasst, im Web nicht. Im Web wird die Ansicht erst dann angepasst, wenn ich ein weiteres Feld ändere oder das gleiche Feld zurücksetze. Dann passt die Ansicht aber zum vorhergehenden Filter und nicht zum aktuellen. Das kann man beliebig fortsetzen, die Ansicht passt immer zur vorhergehenden Filtereinstellung, ist also um eins versetzt. Ich habe auch ein weiteres Feld eingebaut, das gar nicht als Filter verwendet wird. Wenn ich das ändere, wird die Ansicht aktualisiert. Sozusagen als "aktualisiere Ansicht".
Ist das grundsätzlich im Web so? Gibt es so etwas wie "aktualisiere Ansicht"? Oder handelt es sich hier um einen Fehler in der Web-App.
13 Antworten
-
Hallo Jorg,
eigentlich sollte es ohne Probleme laufen, auch im Web. Kannst du die Formel von der Ansicht zeigen?
Leo
-
Hallo Leo,
mir ist auch so, als hätte es schon geklappt. Die Formel sieht so aus:
let me := this;
select Vertrag where (me.MDauer = null or MDauer = me.MDauer) and (me.VertrAktiv = null or 'V.Aktiv' = me.VertrAktiv) and (me.PauseAktiv = null or 'P.Aktiv' = me.PauseAktiv) and (me.Premium = null or Premium = me.Premium) and (me.MGruppe = null or MGruppe = me.MGruppe) and (me.ZahlArt = null or ZahlArt = me.ZahlArt) and (me.ZahlBed = null or ZahlBed = me.ZahlBed) and (me.Aktion = null or Aktion = me.Aktion) and (me.KontoMinus = null or me.KontoMinus and Kontostand < 0 or not me.KontoMinus and Kontostand >= 0) and (me.Name = null or Mitglied.Name like me.Name) -
Hallo Leo,
es ist noch viel verwirrender! Ich habe jetzt einmal parallel zur Web-App die Mac-App geöffnet. Da ich mit dem gleichen Benutzer arbeite, kann ich im Cockpit die gleichen Filterfelder beeinflussen. Wenn ich das in der Mac-App tue, werden in beiden Ansichten sofort die neuen Filter aktiv. Ändere ich ein Filterfeld in der Web-App, wird die Ansicht in der Mac-App geändert, in der Web-App nicht. Mit der nächsten Änderung in der Web-App ändert sich dann die Ansicht auf die vorherige Filtereinstellung. In der Mac-App wird es sofort richtig angezeigt. Ich bin völlig verwirrt!
-
Hallo Jorg,
ich weiß nicht ob diese Schreibweise so richtig ist. Ich würde statt (me.MDauer = null or MDauer = me.MDauer) -->
(if me.MDauer then MDauer = me.MDauer end) usw. versuchen.
Leo
-
Hallo Leo,
ich habe es mit deiner Formel versucht. Das klappt nicht mit leeren Filterfeldern. Um ds Problem einzugrenzen, habe ich eine sehr schmale Tabelle erstellt, lediglich Name und Vorname. Diese Tabelle enthält ca. 3000 Datensätze. In einer Cockpit-Ansicht steht jetzt nur ein Filterfeld und die Ansicht mit folgender Formel:
let me := this;
select Personen where if Name then Name like me.Name else true endDas funktioniert einmal und dann nicht mehr. Die Filterfunktion ist immer um einen Vorgang versetzt. Wenn ich etwas in den Filter eintrage, bekomme ich das Ergebnis des vorhegehenden Filtereintrags usw.
Hier scheint es ein Timing-Problem oder etwas ähnlichem zu geben! Ich werde mal einen Support-Termin beantragen...
Vielen Dank für deine Hilfe und einen schönen Sonntag, Joerg
-
Der Vollständigkeit halber möchte ich das hier für mich abschließen. Ich hatte gerade mit Birger einen Support-Termin. Der Fehler ist bekannt. Man kann diesen Fehler umschiffen, indem man z.B. einen Button einbaut, der ein verstecktes Ja/Nein Feld schaltet. Nennt man diesen Button "Aktualisieren" und macht ihn nur dann sichtbar, wenn man in der Web-App ist, wird die Ansicht spätestens nach einem Klick auf den Button aktualisiert. Richtig wäre natürlich, den Fehler im Browser zu beheben. Ich hoffe darauf...
-
Hallo Jörg,
vielen Dank, ich habe inzwischen dein Problem nachvollziehen können. Dabei habe ich auch festgestellt, dass mein Vorschlag bei mehreren Felder gar nicht funktioniert. Deine Schreibweise ist bei mehreren Filter wirklich genial. Eigentlich simpel: die Bedingung bei where muss immer einen Wahrheitswert zurückgeben, dabei ist es egal ob die Prüfung die Tabellenwerte überprüft oder andere Werte.
Leo
-
Hallo Jörg & Leo,
ich habe das Problem bei der gefilterten Ansicht nicht. Ich frage in einem Auswahlfeld ab, für welches Jahr die Werte in der Liste (der Ansicht) angezeigt werden sollen (inkl. ALLE für alle Einträge). Die Ansicht aktualisiert sich immer sofort in der Web-App, sibald ich eine andere Jahreszahl anklicke.
Ich nutze alledings die eckigen Klammern [] und nicht where(), um die Bedingungen abzufragen:
let FILTER_MITARBEITER := Mitarbeiter;
let FILTER_JAHR := 'Auswahl Stundenprofil Jahr';
if text(FILTER_JAHR) = "ALLE" then
(select Stundenprofil)[Mitarbeiter.Mitarbeiter = FILTER_MITARBEITER and 'Auswahl Stundenprofil Jahr' = 'Auswahl Stundenprofil Jahr']
else
(select Stundenprofil)[Mitarbeiter.Mitarbeiter = FILTER_MITARBEITER and 'Auswahl Stundenprofil Jahr' = FILTER_JAHR]
end -
Hallo Datenwart,
vielen Dank für deine Meldung. Das hilft wirklich.
Leo
-
Auch von mir ein HALLO und ein großes DANKESCHÖN. Das funktioniert bei mir auch.
Vielen Dank, Jörg
-
Moin,
ich freue mich, dass ich helfen konnte.
Vermutlich werden die Vergleichswerte in den eckigen Klammern [ ] immer mit allen aktuellen Parametern und Werten abgeglichen. Die Veränderung der Auswahl in mienem Beispiels wird also direkt umgesetzt.
Bei where () gehe ich nach meinen Versuchen davon aus, dass beim Aufrufen der Formel die aktuell angezeigten Werte ausgelesen und verarbeitet werden. Ein Verändern der beteiligten Parameter muss dann erst durch einen Trigger angestossen werden. Dabei kann der Trigger ja auch an unabhängiger Stelle mit unanbhängigen Variablen vollzogen werden - auch das schliessen und wieder öffnen des Formulars bringt den gleichen Effekt. Also:
1. eckige Klammern [ ] = dirketer Zugriff ("globale Funktion" - reagiert sofort auf alle Änderungen in der Datenbank)
2. where () = temporäre Verarbeitung mit den Werten, die im Moment des Funktionsaufrufs ausgelesen wurden
Beste Grüße,
Kai
-
Moin.
Leo hat das Problem gestern im Webinar geschildert. Birgers Erklärung war, dass bei where () eine Vorauswahl auf dem Server stattfindet und nur die passenden Datensätze geladen werden, während bei [] zunächst alle Datensätze vom Server kommen und eine Filterung vor Ort stattfindet. Warum das eine richtig getriggert wird und das andere nicht, wurde aber nicht geklärt.
Die Lösung mit den [] ist also bei sehr großen Datenbeständen evtl. langsamer, als die mit where ().
Ich habe jedenfalls meine Codes alle auf [] umgestellt und fahre prima damit.
Einen schönen Tag,
Jörg
-
Hallo Jörg,
Danke für die Info! Ich nutze grundsätzlich die [], war bisher auch absolut problemlos.
Gruß
Kai
Content aside
- vor 4 JahrenZuletzt aktiv
- 13Antworten
- 2008Ansichten