0

Bequeme Mehrfachauswahl in M:N-Beziehungen

Liebes Forum,

ich (seit einem Monat Ninox-Kunde, bisher ca. 200 "Flugstunden" im Ninox-Cockpit) wende mich an euch, angeregt durch den Ninox-Support.

Ich habe folgende fachliche Anwendung: Wir haben ein paar tausend Kontakte in unserer Kontaktdatenbank und ca. 30 Verteiler. Es gibt eine M:N-Beziehung zwischen Kontakten und Verteilern.

Mein Problem ist, dass die in den mir bekannten Materialien (Beispiel-Datenbanken "Angebot und Rechnung", Tutorial-Video zur M:N-Beziehung) empfohlene Vorgehensweise (Verwendung einer Tabelle von "Zwischenobjekten") dazu führt, dass wenn die Anwender*in 300 Verbindungen zwischen zwei Objekten anlegen will, dann muss sie 300 Mal einen Button "Neuer Datensatz" drücken, dann wird ein Zwischenobjekt erzeugt, und dort kann man dann in einem Einfach-Auswahlfeld dann das Zielobjekt auswählen. Ich fürchte, da werden meine Anwender*innen rebellieren.

Ich würde mir wünschen, dass die Anwender*in anhand von Filterkriterien, kombiniert mit händischer Auswahl, schnell und bequem ein paar hundert Kontakt einem bestimmten Verteiler zuweisen kann.

Ich habe schon rumprobiert mit:

(1) Auswahl in der Haupt-Tabelle "Kontakte" und anschließende Massenbearbeitung => da kann die Anwender*in aber keine Objekte direkt auswählen, sondern müsste eine Objekt-ID in ein Textfeld eintippen

(2) Tabellenansichten => da kann die Anwender*in aber keine Zeilen auswählen

(3) Hinzufügen eines zusätzlichen (statischen oder dynamischen) Mehrfachauswahlfeldes mit Checkbox-Darstellung und anschließendes Übernehmen der Auswahl in die Tabelle mit den Zwischenobjekten => da kann die Anwender*in aber nicht mehr Spaltenweise sortieren und filtern

Was ich nicht verstehe, ist dass - so scheint es mir - auch in Mehrfachauswahlfeldern der Dialog für die Objektauswahl immer nur die Auswahl eines Objektes ermöglicht.

Freue mich über jede Art von Tipp. Vielleicht gibt es ja eine ganz einfache Kombination von Ninox-Einstellungen, die ich in dieser Form noch nicht ausprobiert habe?!

5 Antworten

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

    Hallo Enno, 200 „Flugstunden“ in einem Monat - stramme Leistung!

    Hier unten auf dem Boden der Tatsachen stellt sich mir allerdings die Frage, anhand welcher Kriterien die Verbindung zwischen Kontakten und Verteilern denn genau hergestellt werden könnte. Sprich: Welchen Kontakten soll welcher Verteiler zugeordnet werden (oder umgekehrt)?

    Einfaches Beispiel: Alle Kontakte der Kategorie „A“ sollen mit Verteiler1 verknüpft werden. Filter wäre hier die Kategorie (ein entsprechendes Datenfeld vorausgesetzt). Das ließe sich mit einem Button erledigen.

    Wenn jedoch kein zuverlässiges Kriterium als Grundlage einer Automatisierung existiert und es eher darum geht, die manuelle Zuordnung effizienter zu gestalten, dann könnte man mit einem dynamischen Auswahlfeld und einem Trigger „Nach Änderung“ arbeiten, in dem man die Verknüpfung herstellt. So würde man dem Nutzer zumindest den Zwischenschritt über die N:M-Zwischentabelle ersparen.

      • Informatiker
      • Enno_Scholz
      • vor 1 Monat
      • Gemeldet - anzeigen

       Lieber Planox, vielen Dank für die ausführliche Antwort "auf dem Boden der Tatsachen" ;-)

      Also, tatsächlich weiß ich noch nicht, welche Zuordnungen in der Praxis auftauchen werden, dass wird sich bei der Anwendungsnutzung zeigen. Ich verstehe deine Antwort so, dass es keine allgemein verwendbare Best-Practice für Mehrfachzuordnungen gibt, sondern dass man als Ninox-Admin fallbasiert eine Vorgehensweise wählt und dann ggf. Buttons usw. dazu baut, die die konkreten Anwendungsfälle lösen. Meine Schlussfolgerung bleibt, dass Ninox eine coole Software ist, aber die M:N-Beziehungen ein schmerzhafte Achillesferse.

      Ich habe das jetzt erstmal so gelöst, dass ich von Kontakten zu Verteilern ein dynamisches Mehrfachauswahlfeld nutze, mir die Zwischenobjekte ganz spare und die Liste der Kontakte im Verteiler über eine Ansicht mache:

      let verteiler := this;
      (select Kontaktperson)[contains(numbers(this.Verteiler), number(verteiler.Nr))]

      Ist zwar peinlich ineffizient, geht aber bei meinem Mengengerüst noch, ohne dass man was merkt.

      Danke nochmal für die schnelle Reaktion!

      Herzliche Grüße, Enno

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

       

      Hallo Enno, m. W. nutzen auch andere Datenbanken für N:M-Verbindungen eine Zwischentabelle. Und selbst wenn die nicht erforderlich wäre, müsstest du für automatisierte Verknüpfungen ja immer noch bestimmte Bedingungen vorgeben, nach denen mehrere (aber nicht alle) Datensätze in Tabelle A mit einem bestimmten Datensatz in Tabelle B verknüpft werden sollen (siehe o. g. Beispiel mit dem Datenfeld ‚Kategorie‘). Das ist technisch ja gar nicht anders möglich.

      Und für die manuelle Zuordnung bist du mit dem dynamischen Mehrfachauswahlfeld m. E. auf dem richtigen Weg. Darüber lassen sich ja schon Auswertungen in beide Richtungen erstellen.

      Wenn du die Datensätze zusätzlich auch noch verknüpfen willst, kannst du wie gesagt in dem DynMAF einen Trigger „Nach Änderung“ hinterlegen, der die N:M-Verknüpfung automatisch herstellt. Angenommen, das DynMAF hieße „Verteilerauswahl“ und die N:M-Zwischentabelle „VerteilerKontakte“ (jeweils N:1 verknüpft mit ‚Kunden‘ und ‚Verteiler‘), dann könnte der Code für den Trigger bspw. so aussehen:

      let me := this;
      let myV := numbers(Verteilerauswahl);
      delete VerteilerKontakte[Kunden = me];
      for i in myV do
         let newVK := create VerteilerKontakte;
         newVK.(Kunden := me);
         newVK.(Verteiler := i);
      end

      Das DynMAF würde dann tatsächlich nur der einfacheren Verknüpfung ohne Offnen der Zwischentabelle dienen, alle Auswertungen könnten aber direkt über die Verknüpfung selbst vorgenommen werden.

      Und wenn es dann Kriterien und entsprechende Datenfelder für eine automatisierte Verknüpfung gibt, dann lassen sie sich auch nachträglich realisieren. 😉

    • Informatiker
    • Enno_Scholz
    • vor 1 Monat
    • Gemeldet - anzeigen

     Alles klar, gute Idee. Dann merke ich mir mal folgendes als meine persönliche "Best Practice" für M:N-Beziehungen:

    - Jede Seite bekommt ein dynamisches Mehrfachauswahlfeld.
    - Per Trigger "Nach Änderung" halte ich das synchron mit der Tabelle der Zwischenobjekte
    - Die Darstellung der Verbindungen mache ich mit einer Ansicht, die die Zwischenobjekte überspringt, so dass sich direkt die Objekte auf der anderen Seite öffnen
    - Meinen Anwender*innen erkläre ich, dass man bei der Bearbeitung der Mehrfachauswahl halt keine Tabellenansicht und keine Suche und keine Filter und keine Bulk-Zuweisung bekommt, und biete ggf. Programmierung von Spezialbuttons für wiederkehrende Problemfälle an.

    Danke nochmal!

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

       Okay, belassen wir‘s erst mal dabei. Aber es gibt prinzipiell durchaus noch mehr Möglichkeiten. Wenn man die 30 Verteiler im Auswahlfeld bspw. auch noch filtern wollte, dann ginge natürlich auch das (z. B. jeweils nur die Verteiler anzeigen lassen, die für Kunden der jeweiligen Kategorie vorgesehen sind). Am Ende ist alles eine Frage des Datenmodells. Und das lässt sich mit Ninox bei Bedarf recht unkompliziert weiterentwickeln.

Content aside

  • Status Answered
  • vor 1 MonatZuletzt aktiv
  • 5Antworten
  • 72Ansichten
  • 2 Folge bereits