0

Wiederverwendung von Eintrag eines dynAF verhindern

Guten Morgen, 

ich benötige mal einen Denkanstoß.

Es existieren 2 Tabellen im jeweiligen mehreren Tausend Datensätzen, eine Kunden-Tabelle und eine Gutschein-Tabelle. In den Datensätzen der Kunden kann per dynamischen Auswahlfeld ein Gutschein aus der Gutscheintabelle zugeordnet werden.

Problemstellung: da es eben ein dynAF und keine Rückverknüpfung ist, kann jeder Eintrag aus der Gutscheintabelle in beliebig vielen Kundendatensätzen ausgewählt werden. 

Das ist nicht erwünscht.

Was ich natürlich vermeiden möchte ist, dass bei jemand Aufruf des dynAF zunächst ein Array erstellt, in dem geprüft wurde, welche Gutscheine in welchen Kundendatensätzen bereits hinterlegt wurden. Das wären a. h. S. extrem rechenaufwändige SELECT Abfragen. 

Dieses dynAF gegen eine Rückverknüpfung zu ersetzen, wäre theoretisch machbar. Dann müssten aber pro Datenbank an 25 Stellen Skripte angepasst werden, die das dynAF verwendet.

Ich wäre daher für eine pfiffige Idee sehr dankbar.

Ralf

9 Antworten

null
    • Ninox-Professional
    • planoxpro
    • gestern
    • Gemeldet - anzeigen

    Eine einfache Lösung wäre, in der Gutschein-Tabelle ein Ja/Nein-Feld anzulegen und dieses mit einem Änderungstrigger im DynAF auf true zu setzen. In der select-Abfrage des dynAF könntest du dann gleich auf die Gutscheine filtern, die noch nicht zugeordnet wurden (false).
     

      • Torsten_Stang.1
      • gestern
      • Gemeldet - anzeigen

       gute Idee - wie setzt Du das Ja/Nein-Feld aber wieder auf false, wenn die Auswahl rückgängig gemacht wird (Falsch-Auswahl z.B.)? Dazu müsste man wohl das DynAF gegen Änderung schützen, wenn es nicht leer ist und das Leeren des Felds z.B. über ein Buttonskript erledigen?

       wie wäre es, die Rückverknüpfung parallel zum DynAF zu führen? Setzen durch das DynAF, auflösen wie bei der Methode mit Ja/Nein-Feld mittels Skript. Die Rückverknüpfung selbst muss ja nicht sichtbar sein...

      • Ninox-Professional
      • planoxpro
      • gestern
      • Gemeldet - anzeigen

       Das mit der Änderung könnte man hinkriegen. Mehr Bedenken hätte ich hinsichtlich der Tatsache, dass der ausgewählte Datensatz nach dem Trigger ja nicht mehr dem Filter des DynAF entsprechen, also abgewählt würde. Man könnte die gewählte Nummer höchstens in ein Zahlenfeld schreiben, aber wirklich sinnvoll erscheint mir auch das nicht.
      Insofern ziehe ich meine Idee zurück. 😁
      Vielleicht hat noch jemand eine bessere, ansonsten würde ich es wahrscheinlich auch mit einer Verknüpfung lösen.

      • Torsten_Stang.1
      • gestern
      • Gemeldet - anzeigen

       Naja, wenn Du das DynAF änderst weiß der Änderungstrigger ja nicht, welcher Eintrag vor der Änderung gewählt war und kann somit dort das Ja/Nein-Feld nicht abwählen.

      Daher: Änderung des DynAF nur möglich, wenn es leer ist, leeren über Skript.

      Aber Du hast Recht, Ninox wird sich zumindest spooky verhalten, wenn eine Option ausgewählt ist, die nach Auswahl gar nicht mehr zur Verfügung steht...

      • Ninox-Professional
      • planoxpro
      • gestern
      • Gemeldet - anzeigen

       Genau, für die Berücksichtigung einer Änderung müsste man die aktuell gewählte Record-Nr ebenfalls in einem (versteckten) Zahlenfeld speichern und im Trigger dann mit der neuen Auswahl vergleichen. Aber die Grundidee krankt eben am Grundsätzlichen. Insofern sind solche Überlegungen müßig.

      • Maurice
      • gestern
      • Gemeldet - anzeigen

       und  : schon spät, aber statt eines Ja/Nein Feldes in der Gutscheintabelle ein Zahlenfeld, in das die ID-Nr des Kunden reingeschrieben wird. Damit ist auch klar:

      1. kommt eine ID-Nummer zweimal bei den Gutscheinen vor, liegt ein Widerspruch vor (Warnmeldung)
      2. wird das dynamische Auswahlfeld auf leer gesetzt, wird das Zahlfeld des dazugehörigen Gutscheins (über die Zahl identifizierbar) ebenfalls auf leer gesetzt oder die neue Gutscheinnummer wird eingetragen.

      Filtern des dyn. Feldes klappt ja auch über die leeren Felder.

      Grüße Maurice

    • Leonid_Semik.2
    • gestern
    • Gemeldet - anzeigen

    Hallo zusammen,
    ja, die Problematik mit dem abwählen ist schon kniffelig. 
    Ich würde es so machen dass ich in beiden Tabellen je ein numerisches Feld erstelle.
    In der Tabelle Kunden - GutscheinId und in der Tabelle Gutscheine - KundenId.
    Dann Auswahl für dmulti in der Kundentabelle 

    let customerId := number(this);
    select Gutscheine where not KundenId or KundenId = customerId

    Trigger nach Änderung im Auswahlfeld:

    let existVoucherId := GutscheinId;
    let customerId := number(this);
    let selectedVoucherId := number(Gutscheine);
    if selectedVoucherId then
        record(Gutscheine,existVoucherId).(KundenId := null);
        record(Gutscheine,selectedVoucherId).(KundenId := customerId);
        GutscheinId := selectedVoucherId
    else
        record(Gutscheine,existVoucherId).(KundenId := null);
        GutscheinId := null
    end
    
    

    Leo
     

      • Icarus_Ralf_Becker
      • vor 19 Stunden
      • Gemeldet - anzeigen

       ich verneige mich in Ehrfurcht. Klasse Ansatz, Leo. Tausend Dank dafür.

      • Ninox-Professional
      • planoxpro
      • vor 18 Stunden
      • Gemeldet - anzeigen

       Ja, genau das ist die Lösung. Warum bin ich da nicht drauf gekommen? Okay, ich kenne die Antwort ...😄

Content aside

  • vor 18 StundenZuletzt aktiv
  • 9Antworten
  • 51Ansichten
  • 5 Folge bereits