0

Script eines Dropdown Feldes nach Änderung startet nicht wenn Änderung über ein anderes Script erfolgt

Hallo,

ich habe ein Script bei einem Dropdown Feld unter "nach Änderung folgendes Script ausführen" hinterlegt. 

Dieses Funkltioniert auch einwandfrei wenn ich die werte über das Dropdown feld ändere.

Ändere ich die werte jedoch über ein anderes script eines anderen feldes, so wird es nicht ausgeführt.

 

Gibt es hierfür einen trick wie ich bei Wertänderung des Dropdown feldes über ein script trotzdem das Script "nach Änderung folgendes Script ausführen" antrigger?

Viele Grüße Jens

15 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Jens,

    es ist so gewollt. Skript nach Änderung reagiert nur auf Userinteraktion. Wenn die Änderung des Feldes durch einen anderen Skript kommt, bleibt der Skript auch untätig. Damit wird die Kaskadierung verhindert. Einzige Möglichkeit: den Skript vom Auswahlfeld mit in den anderen Skript aufzunehmen.

    Leo

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo

    ich klinke mich hier mal ein. Ich habe in einer Tablle auch ein script hinterlegt, das eine Untertabelle, die ich als Drop-Down-Feld missbrauche, löschen und neu schreiben soll. Funktioniert einwandfrei bei Neuanlegen eines Datensatzes, aber nicht beim Löschen eines Datensatzes, wobei nach meiner Logik eine Löschung auch eine Änderung ist.

    Ist das auch gewollt?

    lg

    Arsène

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Arsène,

    was ist es für ein Skript?

    Leo

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Das sieht so aus:

    delete (select 'Nom Lotissements');
    for i in unique((select LOTISSEMENTS).Nom_Lotissement) do
    let j := first(i);
    let k := (create 'Nom Lotissements');
    k.('Nom Lotissement' := j)
    end

    Funktionniert wie gesagt beim Neuanlegen, funktionniert aber nicht, wenn ich in der Tabelle LOTISSEMENTS ein record lösche.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Das ist bei untertabellen so, dass der Skript nach Änderung nur funktioniert wenn die Datenfelder geändert werden. Lösche des Datensatzes gehört nicht dazu.

    • RMS Immobilière
    • Arsene_Nickels
    • vor 3 Jahren
    • Gemeldet - anzeigen

    hmm, da der "Nom Lotissement" mehrfach auftritt (deshalb das "unique"), erreiche ich auch nichts durch Zählen und Vergleichen.

    Die einzige Möglichkeit, die mir noch einfällt, ist das Script gleich beim einloggen in die Datenbank auszuführen. Zumindest wäre die Liste dann täglich aktuell, wenn auch nicht zeitnah. Oder gibt es eine andere Lösung?

    • Tekl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Das Problem mit der Kaskadierung ist nachvollziehbar. Dennoch wäre es wünschenswert, das Änderungsskript irgendwie programmatisch triggern zu können. Sonst müsste ich an unzähligen Stellen eine Kopie davon einfügen, mir merken wo das alles geschehen ist und bei Anpassung dann alles händisch anfassen.

    • Torsten_Stang.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    @Tekl: Könnten da nicht die globalen Funktionen helfen?

    • Tekl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Stimmt, da hatte ich mich noch nicht dran getraut, weil ich für kleine Änderungen ja ständig Ansichten wechseln muss und Änderungen nicht an Ort und Stelle ausprobieren kann. Da ich kein Programmierer bin, muss ich leider oft zigfach Sachen anpassen und testen, bis es so läuft wie gewünscht. 

     

    Kann ich Funktionen denn mit Objekte/Datensätze als Parameter mitgeben? Also sowas:

     

    let me := this;

    myFunction(me);

     

    Bei meinen ersten Gehversuchen gab es Problem mit den Parametern und auch hier im Forum habe ich Beispiele gesehen, die mit Strings rumtricksen.

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Teki.
    Man kann meines Wissens nur String, Number, Date an Funktionen übergeben.
    Aber formatJSON() vor Funktionsaufruf und parseJSON() in der Funktion könnten in manchen Fällen möglicherweise weiterhelfen.
    me und this habe ich aber noch nicht getestet. Wenn es nur um die RecordID geht, hilft ein einfaches number (this)

    • Leonid_Semik
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Man kann auch den Record übergeben, allerdings nur für eine vordefinierte Tabelle.

    ---

    function foo(me:TABELLENNAME) do
    me.Name:="Leo";
    end

    ---

    und der Aufruf aus der Tabelle TABELLENNAME:

    ---

    foo(this)
    ---

    dabei wir der Name auf "Leo" geändert

     

    Leo

    • UweG
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke Leo.
    Wieder was gelernt.

    • Tekl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Oh ja, vielen Dank. Das klappt super. Ich hatte es mit function foo(me:record) versucht, bekam aber nur eine Fehlermeldung.

    • Tekl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Ich habe das nun im Detail durchgespielt und musste feststellen, dass Trigger teilweise doch per Funktion ausgelöst werden.

    Ich habe ein Status-Feld, das bei Änderung die globale Funktion STATUS_TRIGGER aufruft. 

    Diese Funktion ändern das Status-Feld auch bei anderen Datensätzen.

    Dabei wird für jede Änderung ebenfalls wieder STATUS_TRIGGER aufgerufen.

    Das seltsame ist, wenn ich in der Funktion das Status-Feld auf denselben Wert setze, durch den die Funktion getriggert wurde (Status := Status), ruft sie sich irrtümlich nochmal selbst auf. 

    Ich hatte mich gewundert, warum ich durch die Umstellung auf eine globale Funktion doppelte Einträge in meinem Protokollfeld bekam.

    • Tekl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Noch eine skurille Beobachtung. Seit der Trigger bei meinem Status-Feld nur noch die globale Funktion STATUS_TRIGGER(this) aufruft, reicht es, etwa bei einem Aktions-Button den Status zu ändern. Die globale Funktion wird automatisch getriggert und ich muss sie nicht separat ausführen.

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 15Antworten
  • 1195Ansichten