0

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

null
    • Tobias_Bartzsch
    • vor 1 Monat
    • Gemeldet - anzeigen

    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 

    • Ralf_Kircheis
    • vor 1 Monat
    • Gemeldet - anzeigen

    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.

      • Tobias_Bartzsch
      • vor 1 Monat
      • Gemeldet - anzeigen

       dann kommen wir mit contains() weiter:
      let myEmail := first(Select Mitarbeitende where contains(text(Funktion), FU)).E-Mail 

      • Ralf_Kircheis
      • vor 1 Monat
      • Gemeldet - anzeigen

       leider auch nicht. ich denke es liegt an der Definition der FU-Variable. Gebe ich beispielsweise im Mehrfachauswahlfeld. Prozesseigner "Personalreferentin (4)" und "FSJ (17)" an bekomme ich  bei der Abfrage nach FU als Ergebnis Ass. GF (1). Wie gesagt bei nur einer Auswahl funktioniert es.

      • Tobias_Bartzsch
      • vor 1 Monat
      • Gemeldet - anzeigen

       stimmt, Prozesseigner ist ja auch ein Mehrfachauswahlfeld, da muss choosen rein...
      let FU := text(choosen('Betroffenes Dokument'.'QM Handbuch'.Prozesseigner)

      Es hilft immer, über einfache Formelfelder erstmal den Inhalt einzelner Variablen zu prüfen, bevor man weiter macht... wenn text(choosen('Betroffenes Dokument'.'QM Handbuch'.Prozesseigner) alleine im Formelfeld das Ergebnis: "Personalreferentin,FSJ" bringt, dann ists richtig...

      • Ralf_Kircheis
      • vor 1 Monat
      • Gemeldet - anzeigen

       Chosen funktioniert an dieser Stelle für mich auch nicht, da über die Verknüpfung hinweg das Mehrfachauswahlfeld nicht als ein solches erkannt wird. Ich bekomme hier dann immer den Fehler: "Funktion ist nicht erfüllt (Chosen(Multi))"

      • Ralf_Kircheis
      • vor 1 Monat
      • Gemeldet - anzeigen

       Habe nun in der Tabelle 2 (QMH Handbuch) direkt ein neues Formelfeld eingefügt "PEch". In diesem habe ich Chosen(Prozesseigner) hinterlegt. Das Ergebnis ist wie gewünscht ("Personalreferentin,FSJ"). Wenn ich jetzt jedoch in Tabelle 3 (QM Maßnahmeplan) 

      let FU := text('Betroffenes Dokument'.'QM Handbuch'.PEch)
      

      eingebe, erhalte ich als Ergebnis für FU nichts.

      • Tobias_Bartzsch
      • vor 1 Monat
      • Gemeldet - anzeigen

       versuche mal bei den 1:N-Beziehungen das Item anzugeben, da das sonst Arrays sind. Da gibt es dann durchaus Konstrukte wie zB.:
      let FU := text('Betroffenes Dokument'.first('QM Handbuch').Prozesseigner)

    • Tobias_Bartzsch
    • vor 1 Monat
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 1 Monat
    • Gemeldet - anzeigen

    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.

      • Ralf_Kircheis
      • vor 1 Monat
      • Gemeldet - anzeigen

      Hallo @planox. pro  danke fürs reindenken.

      Numbers und Chosen wirft in der Formel Fehler aus. Mir ist an dieser Stelle nicht ganz klar warum, da es ja ein Mehrfachauswahlfeld ist.

      Das abgefragte Mehrfachauswahlfeld befindet sich in der Tabelle QM Handbuch dieses ist über die Tabelle Mitte QM-Maßnahmen mit QM Maßnahmeplan verbunden. In der Tabelle QM Maßnahmeplan habe ich eine Ansicht "betroffenes Dokument" welches den Prozesseigner des Dokumentes einblendet (deswegen:

      let FU := 'Betroffenes Dokument'.'QM Handbuch'.Prozesseigner
      • Ninox-Professional
      • planoxpro
      • vor 1 Monat
      • Gemeldet - anzeigen

       

      Was genau ist denn 'Betroffenes Dokument' und in welcher Beziehung steht es zu den anderen Tabellen? Die Bezeichnung kommt zwar in der Punktnotation vor, nicht aber in den Beschreibungen oder in dem Ausschnitt des Datenmodells. Außer in deinem letzten Kommentar, und da liest es sich so, als sei 'Betroffenes Dokument' der Name einer Ansicht (Gestaltungselement). Was natürlich per se nicht funktionieren würde, da man auf Ansichten nicht zugreifen kann.

      In dem gezeigten Ausschnitt des Datenmodells ist ‚Mitte QM-Maßnahmen‘ jeweils N:1 mit ‚QM-Handbuch‘ und ‚QM-Maßnahmeplan‘ verknüpft, quasi Hilfstabelle einer N:M-Verknüpfung. Es  gibt also keine direkte Verbindung per Punktnotation von ‚QM Handbuch‘ zu ‚QM-Maßnahmeplan‘ oder umgekehrt. Der Weg führt immer über die ‚Mitte‘-Tabelle, wobei aber jeweils ein Array mit den verknüpften Datensätzen zurückgegeben würde. Um das zu verhindern, müsste man, wie Tobias weiter oben schon schrieb, mit first() oder last() arbeiten.

      Zum Testen könnte man in der Tabelle ‚QM-Maßnahmeplan‘ ein Formelfeld mit folgendem Code erstellen:

      first('Mitte QM-Maßnahmen').'QM Handbuch'.numbers(Prozesseigner)

      Wenn das eine Liste mit den Nummern der gewählten Einträge im MFA 'Prozesseigner' anzeigen würde, wäre man schon mal Schritt weiter. Ansonsten am besten die Datenbank mit ein paar Demodaten hier hochladen, damit man mal reinschauen kann.

    • Ralf_Kircheis
    • vor 1 Monat
    • Gemeldet - anzeigen

    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 1 MonatZuletzt aktiv
  • 13Antworten
  • 37Ansichten
  • 3 Folge bereits