0

Bug? Skript nach Änderung bei Trigger wird nicht ausgeführt.

Liebe Ninox Profis!

 

Ich habe die ganze Nacht getüftelt und bin mit folgendem Problem auf keinen grünen Zweig gekommen.

 

Folgende Aufgabe funktioniert:

let myID := this;
let creAuftrag := (create 'Aufträge');
creAuftrag.(
Auftragstitel := myID.Angebotstitel;
Kunde := myID.Kunde; );

for a in myID.Angebotsposition do
let cre := (create Auftragspositionen);
cre.(
Auftrag := creAuftrag;
Artikel := a.Artikel;
Titel := creAuftrag.Auftragstitel;
Menge := a.Menge;
'Zeit einzel' := a.'Zeit einzel';
'Material einzel' := a.'Material einzel';
'Werkzeugpauschale einzel' := a.'Werkzeugpauschale einzel';
Stundensatz := a.Stundensatz
)
end

 

--> Dieser Code in einem Button in der Tabelle Angebote erstellt aus einem Angebot einen Auftrag. Dabei werden alle Angebotspositionen als Auftragspositionen angelegt. Das läuft.

 

PROBLEM: Mit dem selben Buttonklick sollen der Unter-Untertabelle 'Aufträge.Auftragspositionen.Aufgaben' bestimmte zugehörige Datensätze hinzugefügt werden und zwar aus einer anderen (Unter)Tabelle: 'Artikel.Tätigkeiten'.

Zugehörig insofern, weil die Auftragspositionen im Grunde Artikel sind (dh. die Artikel.Titel und Auftragspositionen.Titel stimmen immer 100% überein).

 

Mein Ansatz war folgender:

Beim Buttonklick wird der 'Trigger 1' in der Untertabelle Auftragspositionen ausgelöst:

Trigger 1: Ja/Nein Feld nach Änderung folgendes Skript:

let myID := this;
for a in myID.Auftragspositionen do
a.(Trigger 2 := true)
end

 

'Trigger 1' löst also den in den Auftragspositionen befindlichen 'Trigger 2' aus:

Trigger 2: Ja/Nein Feld (Standardwert: Nein) nach Änderung folgendes Skript:

let myID := this;
if not myID.Aufgaben then
for a in select 'Tätigkeiten' where myID.Artikel = Artikel do
let creA := (create Aufgaben);
creA.(
'Tätigkeit' := a.'Tätigkeit';
Auftragspositionen := myID
)
end
end

 

--> Hier liegt das Problem: alle 'Trigger 2' werden von Standard Nein auf Ja umgeschaltet, führen aber das Skript nicht aus!

 

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt - wäre SEHR dankbar für einen Hinweis...

 

Libe Grüße,

Josef

4 Antworten

null
    • Josef
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Problem gelöst!

     

    Die oben genannte for... in... do... Schleife im Button hatte ich mit do as server ausführen lassen, was ich der Einfachheit halber hier anders gepostet hatte. Jetzt habe ich das gestrichen.

     

    Außerdem habe ich den Trigger 1 ebenfalls gestrichen und spreche jetzt direkt aus dem Button den Trigger 2 an. Der wird jetzt bei jedem Schleifendurchgang mit Trigger := true vom Standarwert Nein auf Ja umgeschaltet und führt seine Aktion interessanterweise auch aus!

     

    Der Ablauf ist also:

    Button schaltet Trigger 2 um --> Trigger 2 erstellt Datensätze in Untertabelle

     

    Was ich aber noch immer nicht verstehe - wenn der Vorgang so aussieht:

    Button schaltet Trigger 1 um --> Trigger 1 schaltet Trigger 2 um --> Trigger 2 erstellt Datensätze in Untertabelle

    werden alle Trigger 2 zwar umgeschaltet, erstellen aber keine Datensätze!!

     

    Danke fürs mitdenken!

     

    Liebe Grüße,

    Josef

    • Paul_Krummling
    • vor 1 Monat
    • Gemeldet - anzeigen

    Hallo Josef,

    ich hatte das gleiche Problem und habe es gelöst indem ich den "Trigger nach Änderung" wiederhole. 

    in deinem Fall z.B.: 

    a.(Trigger 2 := true);

    a.(Trigger 2 :=false);

    a.(Trigger 2 := true);

    Viele Grüße

    Paul

    • UweG
    • vor 1 Monat
    • Gemeldet - anzeigen

    Trigger können nicht kaskadieren. Das ist ein Selbstschutz von Ninox. Ein Trigger kann keinen weiteren Trigger auslösen.

    • pma_mgmt
    • vor 1 Monat
    • Gemeldet - anzeigen

    Uwe hat es schon gesagt. Aber hier die Ergänzung: 

    Könnte ein Trigger einen anderen Trigger auslösen, dann könnte man sich Endlosschleifen bauen. Deshalb die Empfehlung, solange es nicht zu komplex ist, die Triggerinhalte als globale Funktion zu definieren und dann die Trigger "die sich gegenseitig triggern sollen" als Funktionsabfolge zu gestalten.