[gelöst] OnInsert Table Event nicht getriggert?

16. Juli 2013 17:07

Liebe Kolleginnen und Kollegen,

Steh mal wieder vor der Staumauer. Betrifft die ServiceInvoiceLine Tabelle. Ich möchte n bisserl Code ausführen wann immer da eine neue Zeile "eingefügt" wird. Wir haben ein Service Tool, welches automatisch neue Records in dieser Tabelle ablegt. Jetzt war es für mich irgendwie einleuchtend, dass ich den Inhalt des neuen Records während dem OnInsert trigger der Tabelle überprüfen kann und ggfs darauf reagieren kann. Für den Moment würde ich mich schon ab einem Message('Hallo da bin ich') freuen.

Leider wird dieser Event warum auch immer nicht getriggert obwohl nachweislich neue Zeilen dazukommen.

Frage: Wird OnInsert nur getriggert wenn der User z.b. mit F3 eine neue Zeile generiert? Falls dem so ist, wie kann ich darauf reagieren wenn durch Programmcode eine Zeile eingefügt wird? Wobei 'einfügen' ja selber schon ungenau ist. Ich verstehe es als eine neue Zeile hinzufügen (egal ob am Schluss der Tabelle (append) oder irgendwo in der Mitte (insert into)).

Danke vielmals für jede einzelne Leuchtdiode im Dunkeln!
Marc
Zuletzt geändert von Izzy am 17. Juli 2013 12:22, insgesamt 1-mal geändert.

Re: OnInsert Table Event nicht getriggert?

16. Juli 2013 17:20

der Trigger wird nur ausgeführt, wenn ein Insert(TRUE) verwendet wird

beim F3 wird der Trigger durchlaufen
bei eigenem Code darauf achten, ob da ein Insert, ein Insert(true), oder ein Insert(false) steht!

bei false passiert garnicht und ein Insert ohne einen parameter ist ein insert(false)

ps:

manchmal soll der Trigger auch garnicht durchlaufen werden ;)

Re: OnInsert Table Event nicht getriggert?

16. Juli 2013 21:10

Meinst du die Sales Invoice Line, Tabelle 113?
Code im OnInsert-Trigger kann nur dann funktionieren, wenn das INSERT auch mit eingeschaltetem Trigger erfolgt. Bei Benutzereingaben passiert das automatisch, aber eine gebuchte Rechnung entsteht durch Klick auf "Buchen", nicht durch F3.
Daher musst du dich in Codeunit 80 "reinhacken". Such dort mal nach SalesInvLine.INSERT. Der Trigger wird nämlich nicht verwendet.

Re: OnInsert Table Event nicht getriggert?

17. Juli 2013 09:28

Vielen Dank Euch beiden!

Lerne dazu :) Habs noch fast vermutet dass der Trigger halt eben genau nicht getriggert wird :o).

Natalie: Es ist tatsächlich die ServiceInvoiceLine Tabelle. Irgend ein externer NAV-Pro hat da mal vor Jahren für uns ein Servicemodul gebastelt. Und warum auch immer legt das alle "sogenannten" Servicetransaktionen in dieser anstatt der SalesInvoiceLine Tabelle ab. Macht die Welt nicht einfacher ist aber halt mal so (vor meiner Zeit) gebaut worden. Warum... Keine Ahnung.

Gibt es eine andere Möglichkeit automatisch zu reagieren wenn bei einer Tabelle ein neuer Record geschrieben wird? Ohne über den OnInsert zu gehen? ... vorab schaue ich mir mal die Codeunit 80 an. Ich glaube aber da werde ich nicht fündig werden, da der Code für unsere ServiceTabelle händisch codiert wurde. Mal schauen ob da ein Insert(False) verwendet wurde.

Danke vorerst vielmals!

Re: OnInsert Table Event nicht getriggert?

17. Juli 2013 10:05

Izzy hat geschrieben:Gibt es eine andere Möglichkeit automatisch zu reagieren wenn bei einer Tabelle ein neuer Record geschrieben wird? Ohne über den OnInsert zu gehen? ...
Automatisch nicht. Du müsstest wirklich alle Stellen ausfindig machen, wo ein INSERT auf diese Tabelle abgesetzt wird und dich danach/dabei reinhängen. Sinnvollerweise legst du hierfür in der Tabelle selbst oder in einer weiteren Codeunit eine neue Funktion (z.B. ServiceInvLine_OnInsert) an, die du an den "Fundstellen" nur noch aufzurufen brauchst.

vorab schaue ich mir mal die Codeunit 80 an.

Das macht nicht viel Sinn - ich hatte vorher ja immer SALES Invoice Line gelesen (Tomaten auf den Augen).
Verfolge lieber den Quelltext, der beim Klick auf Buchen ausgeführt wird (oder wie auch immer die Datensätze bei euch erzeugt werden).

Re: OnInsert Table Event nicht getriggert?

17. Juli 2013 12:22

Sali Natalie,

Ich hab mal alles durchsucht aber kein INSERT statement gefunden. Hab dann bemerkt, dass die Zeilen ja bereits generiert wurden (beim Erfassen des Service Auftrages) und dann nur noch geliefert und gebucht werden. Also musste ich natürlich früher (beim Erfassen) ansetzen. Jetzt läuft alles bestens.

FAZIT: Der OnInsert Trigger wurde in meinem Szenario gar nie ausgelöst.

Ich danke Euch allen wieder herzlich für Euren tollen Support!

Beste Grüsse,
Marc