15. Juni 2021 18:12
Ich stehe gerade auf dem Schlauch. Ich habe eine Kopf / Zeilen Struktur, ähnlich wie Verkaufsaufträge. Wenn ich den Kopf anlege bzw. die Debitoren-Nr. eintrage dann sollen automatisch ein paar Zeilen mit bestimmten Artikeln angelegt werden. In welchem Trigger mache ich das geschickterweise? OnAfterInsertRecord in der Main page funktioniert nicht, auch OnValidate vom Feld Debitor-Nr. im Kopf funktioniert nicht. Hat jemand einen guten Tip?
Zuletzt geändert von enh am 17. Juni 2021 20:58, insgesamt 1-mal geändert.
15. Juni 2021 21:07
enh hat geschrieben:auch OnValidate vom Feld Debitor-Nr. im Kopf funktioniert nicht
hmmm, den hätte ich sicherlich auch genutzt - und klappt auch bei mir wunderbar (BC18, aber die Logik muss in NAV2017 auch funktionieren)
16. Juni 2021 08:01
enh hat geschrieben:OnAfterInsertRecord in der Main page funktioniert nicht
Wenn ich mich jetzt nicht komplett irre, dann wird der OnAfterInsertRecord auf einer Page VOR dem tatsächlichen Insert in die Datenbank ausgeführt.
Die anzulegenden Zeilen würden somit den Header-Datensatz nicht finden, da er noch nicht existiert.
Ähnliches könnte beim OnAfterValidate der Debitornr. gelten: Wenn in der Page das Property DelayedInsert auf TRUE gesetzt ist, dann kann es sehr gut sein, dass der neu angelegte Datensatz beim OnAfterValidate noch nicht gespeichert ist.
Hier kannst du aber mit
CurrPage.SAVERECORD sicherstellen, dass der Datensatz vor Ausführung deines Programmcodes (zum anlegen der Zeilen) in der Datenbank gespeichert ist.
16. Juni 2021 14:14
Willst Du das dieses nur auf der Page erfolgt oder darf es auch nach dem Eintragen in der Tabelle erfolgen?
Ich nutze meist den Event OnAfterInsert auf der Tabelle für weitere Aktionen.
Auf der Page kommt zuerst OnNewRecord, dann trägst Du deine Daten ein. Wenn der Insert ausgeführt wird, dann auf der Page OnInsertRecord danach werden erst das Enevent OnBeforeInsertEvent und OnAfterInsertEvent auf dem Record ausgeführt.
Wenn es zwingend aus der Page heraus ausgeführt werden soll, kann man sich mit einer Single Instance Codeunit behelfen.
Mit dem OnInsertRecord setzt man einen Boolean Wert und wenn man dann den OnAfterInsertEvent vom Record hat kann man dagegen prüfen und die Boolean Wert im Anschluss zurück setzen.
16. Juni 2021 15:25
Page wäre besser als Tabelle weil der Anwender sonst vermutlich die Zeilen nicht direkt sieht. Events wollte ich nicht nutzen um den Code besser lesbar zu halten, ist ja alles eigene Logik, eigene Tabellen.
SAVERECORD war glaube ich der Hinweis den ich gebraucht habe. Muss das nachher mal ausprobieren. Vielen Dank schon mal an alle für die Tips!
Nachtrag: auch mit CurrPage.SAVERECORD hat es im OnInsertRecord nicht funktioniert, aber im Feld-OnValidate. Danke!
24. Juni 2021 13:46
Nochmal eine Frage:
Wenn ich das in der Tabelle (statt der Page) im OnValidate eines Feldes programmieren, dann habe ich das Problem dass ich in der Karten-Page beim Validieren des Felds noch keinen Insert hatte, daher existiert der Kopf nicht, und ich bekomme einen Fehler beim automatischen Anlegen der Zeilen.
Event Subscriber functions gibt es ja noch nicht.
Wie kann ich das in NAV 2013 R2 lösen?
(Anmerkung: Ich habe die Frage versehentlich unter NAV 2017 statt NAV 2013 R2 erfasst.)
Zuletzt geändert von McClane am 24. Juni 2021 13:50, insgesamt 2-mal geändert.
Grund: Thema nach 2013 verschoben
24. Juni 2021 16:04
enh hat geschrieben:Wie kann ich das in NAV 2013 R2 lösen?
enh hat geschrieben:SAVERECORD war glaube ich der Hinweis den ich gebraucht habe.
[...] mit CurrPage.SAVERECORD [...] im Feld-OnValidate.
24. Juni 2021 16:32
Das ist ja für die Page, meine neue Frage war ja was ich in der Tabelle machen muss...
Das Problem ist dass wenn der Anwender es erfasst er noch im Insert ist wenn das Validate auf Debitor-Nr. erfolgt. In der Page kann ich das mit CurrPage.SAVERECORD korrigieren, aber in der Table?
25. Juni 2021 09:11
Mir ist da auf Tabellenebene keine Lösung bekannt.
Aus dem Grund ist die Funktionalität der automatischen Textbausteine im NAV-Standard ebenfalls auf Page-Ebene programmiert.
25. Juni 2021 09:24
Hallo,
auf Tabellenebene kannst du nur mit temporären Tabellen oder Variablen arbeiten, die du dann beim Insert/Modify mit den richtigen Schlüsseln in die festen Tabellen kopierst.
Diese erzwungene Vorgehensweise ist auch der Grund, warum du höllisch aufpassen musst, ob und wann man in den Belegtabellen ein Feld wie z.B. "Location Code" nur zuweisen oder auch validieren darf.
Gruß Fiddi
25. Juni 2021 14:41
Vielen Dank für eure Tips! (Ich belasse es in der Page.)
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.