Mehrfachauswahlfeld mit Auswahlfeld abgleichen
Hallo Profis,
aktuell stehe ich vor einem Problem und zeitgleich irgendwie auf dem Schlauch. Ich möchte ein Mehrfachauswahlfeld (nicht dynamisch) aus einer verknüpften Tabelle mit einem Auswahlfeld aus einer anderen Tabelle abgleichen und mir dann die E-Mailadresse ausgeben lassen. Szenario:
1. Tabelle: Mitarbeitende.Funktion (=einfaches Auswahlfeld)
2. Tabelle: QM Handbuch.Prozesseigner (=Mehrfachauswahlfeld). Die Nummerierung ist extra im dem einfachen Auswahlfeld identisch
3. Tabelle: QM Maßnahmeplan (diese enthält eine Ansicht von dem betroffenen Dokument aus QM Handbuch, verknüpft mit 1:N)
Bisheriges Vorgehen:
In QM Maßnahmeplan habe ich eine Formelfeld eingefügt:
let FU := 'Betroffenes Dokument'.'QM Handbuch'.Prozesseigner;
let BADS := (select Mitarbeitende)[Funktion = FU];
BADS.E-Mail
Das funktioniert jedoch nicht, da FU bei Mehrfachauswahl eine andere Zahl ist. Chosen funktioniert an dieser Stelle für mich auch nicht, da über die Verknüpfung hinweg das Mehrfachauswahlfeld nicht als ein solches erkannt wird. Füge ich in der Tabelle 2 ein Feld ein, in der die Auslese durch Chosen funktioniert, bekomme ich zwar den richtigen String, weiß aber nicht, wie ich dann die einzelnen Nummern mit dem einfachen Auswahlen (Tabelle 1) abgleichen kann.
Hoffe ihr habt eine Idee dazu...
13 Antworten
-
Geht es Dir denn nur um die Email? Oder musst Du den Mitarbeiterdatensatz komplett in BADS haben....?
Ansonsten verlasse doch Nummern-Ebene und gehe über String
let FU := text('Betroffenes Dokument'.'QM Handbuch'.Prozesseigner)
let myEmail := first(Select Mitarbeitende where text(Funktion) = FU).E-Mail -
Hallo Tobias, danke für Deine schnelle Antwort. Mir geht es tatsächlich nur um die Mails. Dein Vorschlag funktioniert auch, jedoch nur so lange im Mehrfachauswahlfeld nur eine Option ausgewählt ist. Kommt die zweite hinzu, versucht er den String abzugleichen, der dann natürlich nicht mehr passt, weil er mehrere Option erhält.
-
Mit "select" verlässt Du außerdem auch deinen aktuellen Datensatz und suchst unabhängig (und unverknüpft) in der Tabelle Mitarbeitende. Da möchte NINOX auch ein first() o.ä. haben... Wenn Mitarbeitende verknüpft ist, reicht ein
let BADS := Mitarbeitende[Funktion = FU]
Also:
first(select TABELLE where DAS = me.DAS) bei "Freiflug" durch die Tabellen
TABELLE[DAS = me.DAS] bei "Beziehung von" 1:N Verknüpfung im gleichen Datensatz -
Aus der Beschreibung und den Codeschnipseln wird mir das genaue Datenmodell nicht klar. Aber wenn die Einträge beider Auswahlfelder in derselben Reihenfolge vorliegen, würde ich über die Nummer gehen:
let myA := numbers(MEHRFACHAUSWAHL); select Mitarbeitende where contains(myA, number(EINFACHAUSWAHL))
Wenn eine Auswahl mehrfach vorkommt und sogar miteinander abgeglichen wird, würde ich mir aber generell überlegen, das mit dynamischen Auswahlfeldern zu machen. Dann muss man die Einträge nur an einer Stelle pflegen und vermeidet Probleme mit unterschiedlichen Schreibweisen und Reihenfolgen.
-
Habt vielen Dank für die nützlichen Hinweise, die mir sehr weitergeholfen haben. Tatsächlich scheint es die Problematik zu sein, dass ich über die Verknüpfungstabelle gehe (Mitte QM-Maßnahmen) und mir dann wie ihr sagtet ein Array zurückgegeben wird. (Die Tabelle Mitte QM-Maßnahmen ist in QM Maßnahmeplan als Verknüpfung eingeblendet und heißt "Betroffenes Dokument". Entschuldige die Verwirrung)
Folgenden Workauround konnte ich nun erfolgreich realisieren:
1. In der Tabelle QM Handbuch habe ich ein Formelfeld angelegt, welches mir mit chosen aus dem Mehrfachauswahlfeld die Prozesseigner ausgibt und diese mit den Funktionen (einfaches Auswahlfeld) in der Tabelle abgleicht und mir die Mailadressen ausgibt. Hierfür habe ich den Code von planox.pro wie folgt für mich angepasst
let myA := numbers(Prozesseigner); let BADS := (select Mitarbeitende where contains(myA, number(Funktion))); BADS.'E-Mail'
2. Dieses neue Feld habe ich "Mail Pozesseigner" genannt und kann durch eine weitere Formel in der Tabelle Qm Maßnahmeplan easy ausgelesen werden. Das mache ich nun über einen "Mail versenden Button":
let my := unique((select 'QM Handbuch').'Mail Prozesseigner'); openURL("Mailto:" + join(my, ",") + "?Subject=" + "Achtung neue Revision implementiert" + "&body=" + -->Text<--)
Das "Unique" habe ich eingefügt, da ich Mailadressen doppelt bekam.
Die Variante mit "first" werde ich gleich noch mal testen.
Habt vielen Dank für eure Hilfe und Unterstützung.ja Du hast recht, dass es sicherlich sinnvoller wäre, dies über ein dynamisches Auswahlfeld zu lösen. Jedoch ist die Datenbank mit den Bedürfnissen gewachsen und am Anfang war noch nicht absehbar, welch wachsende Bedeutung das Feld "Funktion" bekommen würde.
Content aside
- vor 11 MonatenZuletzt aktiv
- 13Antworten
- 56Ansichten
-
3
Folge bereits