Den Inhalt einer Ansicht abhängig von einer Mehrfachauswahl machen
Also ich habe eine Tabelle Kontakte, inder ich eine Mehrfachauswahl habe mit Familie, Arbeit, Freunde ... .Und dann habe ich eine Tabelle Ansicht mit einer Ansicht und einer Mehrfachauswahl mit dem gleichen Inhalt. Jetzt möchte ich Freunde auswählen und dann sollen alle angezeigt werden, bei denen bei Kontakte inder Mehrfachauswahl Freunde ausgewählt wurde.
Momentan schaff ich es nur wenn ich jemanden habe der als Freund und als Arbeit zählt, dann muss ich auch beide anklicken damit er erscheint, möchte aber dass er auch kommt, wenn ich nur Freunde auswähle.
Dann habe ich es versucht mit chosen() und dann mit contains(), da hat er aber gemeckert, da es beides Arrays sind
Was könnte man da machen?
Lg
Lorenz
12 Antworten
-
Hallo Lorenz,
ist ein bisschen kompliziert. Ich habe eine Formel entwickelt, die bei mir sehr gut funktioniert. Angenommen dein Mehrfachauswahlfeld heißt Status und die Einträge sind identisch:
---
let me := this;
if me.Status then
(select Kontakte)[Status and cnt(unique(chosen(me.Status), chosen(Status))) < cnt(chosen(Status)) + cnt(chosen(me.Status))]
else
(select Kontakte)[not Status]
end
---
Wenn du nichts ausgewählt hast werden Kontakte angezeigt, wo der Status auch nicht ausgewählt ist.
Leo
-
Es klappt, danke sehr.
Aber wieso muss man das mit cnt machen? -
Ich versuche es zu erklären:
Wir möchten zwei MFA-Felder Vergleichen und Übereinstimmungen finden. Wählen wir beim Ersten Familie und beim Zweiten Familie und Arbeit.
mit chosen(MFAF) bekomme ich zwei Arrays: ["Familie"] und ["Familie","Arbeit"]. Es gibt leider keinen Befehl für "Prüfe ob irgend etwas aus dem ersten Array auch in dem zweiten vorkommt. Um das zu realisieren musste man zwei ineinander liegenden Schleifen bauen und jeden einzelnen Element prüfen. etwa so:
let myFlag:=false;
for i in chosen(MFAF1) do
for j in chosen(MFAF2) do
if i=j then
myFlag:=true
end
end
end
if myFlag=true then alert ("Es gibt eine Übereinstimmung")
end.
Generell funktioniert das auch für Ansichten aber bei größeren Tabellen fürchte ich, dass zwei Schleifen und ein if then Befehl zu Performance-Problemen führt.
Deswegen bin ich einen anderen Weg eingeschlagen:
Wenn ich die Summe der Einträge bei beiden Arrays betrachet dann ist das in unserem Fall ->3:cnt(chosen(MFAF1))+cnt(chosen(MFAF2)-> 3
Packe ich die beiden Arrays in ein unique-Befehl (eindeutige Ergebnisse): wird Familie nur einmal ausgeführt:unique(chosen(MFAF1),chosen(MFAF2)) - > ["Familie","Arbeit"]
und die Anzahl der Mitglieder ist 2:
cnt(unique(chosen(MFAF1),chosen(MFAF2))) -> 2
Man kan daraus als Theorem festlegen: wenn irgendwelche Einträge bei zwei Arrays übereinstimmen dann ist die Anzahl der Einträge in unique(Arr1,Arr2) immer kleiner als die Summe allen Einträge.
Und so bin ich auf die Formel gekommen.
Ich hoffe, es war einigermassen verständlich.
Leo
-
So ganz habe ich's auch noch nicht kapiert, aber es funktioniert und erscheint mir ziemlich genial. Darauf muss man erst mal kommen. Wieder mal: Hut ab!
PS: Wäre auch ein hilfreicher Beitrag für die Praxisbeispiele der Referenz.
-
Hui ja das ist wirklich klever. Ich hatte es auch mit schleifen probiert, aber dann immer noch mit contains. Das hat aber nicht geklappt.
Da ist auch die Anzahl der Einträge in der MFA sind egal oder ? -
Ist drin.
-
Hallo Leo, ist diese Formel bzw. Abfrage hilfreich z.B. in der Ansich bei Kunden wo noch Rechnungen offen sind, sofern die Mehrfachfelder identisch sind ? Danke.
-
Wenn(!) ich es richtig verstehe, dann spielt die Anzahl der Einträge keine Rolle, und man kann den Code für alle Ansichten nutzen, bei denen zwei inhaltlich identische Mehrfachauswahlfelder verglichen werden.
@Leo: Danke für's Eintragen! Das ist bestimmt für viele Nutze hilfreich.
-
Hallo Zusammen,
@Leo: Deine Formal oben hat mir schon an mehreren Stellen geholfen! Vielen Dank dafür!
Trotzdem habe ich noch eine Frage: Was mache ich, wenn ich auf der einen Seite zwei einfache Auswahlfelder habe das die Altersklasse der Mannschaft bestimmt (nämlich ein Auswahlfeld mit Männlicher Jugend A, B, C, usw. und ein Auswahlfeld mit Weiblicher Jugend A, B, C usw. - beide erscheinen jeweils bei vorherigem klick auf "männlich" oder "weiblich") und auf der anderen Seite ein MFA Feld mit allen Altersklassen und ich möchte mir alle Datensätze in einer Ansicht anzeigen lassen? Habt ihr dafür eine Lösung? Ich habe mal versucht das chosen() wegzulassen, aber das klappt so nicht...
Liebe Grüße
-
Ich habs so gelöst:
let me := this;
let myID := MFA
let myTeam := select 'Tabelle zum anzeigen';
for i in myTeam do
for ii in chosen(myID) do
if i.Mannschaft like ii then i end
end
end -
Hallo,
ich hatte ein ähnliches Problem, etwas komplexer, da ich mit einem dynamischen Auswahlfeld gearbeitet habe, an das man mit chosen() nicht dran kommt. Deshalb hier auch noch mein Code
let suchBegriff := 'Kurs Suche';
let thisKJ := Kursjahrgang.Jahrgang;
let thisFach := (select 'Fächer' where contains(lower(Fach), lower(suchBegriff))).number(Nr);
if Kursjahrgang.Jahrgang != null then
select '01 Kurse' where (contains(lower(Kursname), lower(suchBegriff)) or cnt(unique(number(Fach), thisFach)) < cnt(thisFach) + cnt(Fach)) and Kursjahrgang.Jahrgang = thisKJ
else
select '01 Kurse' where contains(lower(Kursname), lower(suchBegriff)) or cnt(unique(number(Fach), thisFach)) < cnt(thisFach) + cnt(number(Fach))
end
'Kurs Suche' ist dabei das Suchfeld, auf das die Ansicht reagieren soll. Kursjahrgang.Jahrgang ist einfach ein weiteres verknpüftes Feld, auf das die Suche eingeschränkt werden kann. In der Tabelle 'Fächer' werden die Nr der Fächer ausgelsen, auf die die Texteingabe zutrifft und ein Array thisFach ist das Zahlen-Array zu den passenden Fächer. Beispiel: bei Eingabe von "tik" in 'Kurs Suche' gibt das Array thisFach die NUmmern der Fächer Mathematik, Informatik, Politik als array zurück.
In der Tabelle '01 Kurse' werden jetzt (neben den Kursnamen) die passenden Fächer dazu gesucht, also jene Kurse mit Mathematik, Informatik und Politik im dynamischen Mehrauswahlfeld 'Fach'.
Danke Leo für die geniale Idee mit dem cnt-Befehl und letztendlich der angewandten Dreiecksgleichung.
Grüße Maurice
-
Dreicksungleichung natürlich
Content aside
- vor 3 JahrenZuletzt aktiv
- 12Antworten
- 2565Ansichten