Menu

Trigger zum Ausfüllen von Feldern

German
Reiner S
2023-07-28
2023-08-02
  • Reiner S

    Reiner S - 2023-07-28

    Hallo!

    Ich möchte aus den eingegebenen Werte beim Anlegen eines neues Datensatzes
    weitere Felder automatisiert ausfüllen. (Eigentlich nicht notwendig, aber für
    den Anwender soll das zu sehen sein, damit er nur hinschauen muß.)

    Dazu habe ich einen Limbas-Trigger angelegt: after insert und die passende
    Funktion aufgerufen (in ext_gtag.inc geschrieben). Die Funktion besteht aus
    Datenbank-Queries: "uptate tabelle set automatischesFeld = ... where id =
    $ID".

    Im SQL-Editor werden die auch richtig ausgewertet.

    Will ich einen neuen Datensatz anlegen, sind die automatischen Felder schon
    ausgefüllt, obwohl ich in den anderen Feldern noch gar keine Werte eingegeben
    habe.

    Vom Verständnis her muß doch erst der INSERT erfolgen (mit dem Klick auf
    übernehmen) und danach der Trigger aufgerufen werden. Oder verstehe ich das
    falsch?
    Wie kann ich denn die gewünschte Funktionalität erreichen?

    Beispiel zum Verständnis:
    In einer Artikelverwaltung sind die Tabellen für die Artikel und die Hersteller und ich möchte eine Artikelnummer generieren. Die besteht aus einem Wert aus einem Pool (z.B. die Farbe), meiner Nummer für den Hersteller (in der anderen Tabelle via m:n-Verknüpfung in die Artikeltabelle "geholt" und der laufenden Nummer der Artikel dieses Herstellers (mit count aus der Verknüpfungstabelle geholt.) Alle 3 Felder sind in der Artikeltabelle und werden in einem vierten Feld via concat() aneinandergehängt.

    Grüße
    reiner

     
  • Axel Westhagen

    Axel Westhagen - 2023-07-31

    Beim Anlegen wird zuerst ein leerer Datensatz erzeugt der dann bei 'übernehmen' abgeändert wird. Verhindern kann man dies dadurch das man in der Tabelleneinstellung den Parameter "reserviere ID" aktiviert. Dadurch wird der Datensatz erst erstellt wenn man auf 'übernehmen' drückt. Allerdings sind die Felder dadurch eingeschränkt. Alle Felder die eine ID benötigen wie z.B. Verknüpfungen werden erst nach dem ersten 'übernehmen' angezeigt.

    Eine weitere Möglichkeit besteht darin in der Trigger-Funktion die $action Variable abzufangen. if($GLOBALS['action'] == 'gtab_neu ){...} # aktuelle action
    if($GLOBALS['old_action'] == 'gtab_neu ){...} # vorherige action

    Noch eine Möglichkeit ist eine eigene Erweiterung per JS und ajax welche die Daten per ajax holt , in die Eingabefelder einträgt und dann per 'übernehmen' speichert als hätte man sie händisch eingegeben.

    Grüße
    Axel

     
  • Reiner S

    Reiner S - 2023-08-02

    Hallo, Axel!
    Vielen Dank für Deine Hinweise.
    Die erste und einfachste Möglichkeit habe ich probiert und wie Du angekündigt hast, funktioniert das leider nicht. Die Verknüpfungen werden noch nicht abgefragt.
    Für die anderen Möglichkeiten muss ich mich erst einarbeiten.
    Grüße
    Reiner

     

Log in to post a comment.

MongoDB Logo MongoDB