Wert mit C/AL Code setzen

4. Februar 2013 17:03

Hallo,
Also ich habe ein neues Feld in einer Tabelle definiert und jetzt möchte ich, dass der Wert automatisiert gesetzt wird. Da mir die "Calc Formula" Möglichkeiten nicht ausreichen, möchte ich das mit C/AL realisieren.

Gruß, SEA991

Re: Wert mit C/AL Code setzen

28. Februar 2013 13:25

Was ist das für ein Feld und was für einen Wert möchtest Du es vorblegen?

Re: Wert mit C/AL Code setzen

28. Februar 2013 14:47

Und an welcher Stelle bzw. an welchem Zeitpunkt möchtest du das tun? Wenn ein neuer Datensatz angelegt wird, etc.?

Re: Wert mit C/AL Code setzen

1. März 2013 18:41

Das Feld enthält einen ganz normalen Integer. Ich möchte, das es wie bei CalcFormula berechnet wird, also immer wenn die Tabelle aufgerufen wird.

Re: Wert mit C/AL Code setzen

1. März 2013 21:53

SEA991 hat geschrieben:Das Feld enthält einen ganz normalen Integer. Ich möchte, das es wie bei CalcFormula berechnet wird, also immer wenn die Tabelle aufgerufen wird.

Sebastian Pfliegel hat geschrieben:Und an welcher Stelle bzw. an welchem Zeitpunkt möchtest du das tun? Wenn ein neuer Datensatz angelegt wird, etc.?

Re: Wert mit C/AL Code setzen

4. März 2013 09:15

Frage ist auch: Was reicht dir an calc formula nicht? Ließe es sich über ein FlowFilter lösen?

Re: Wert mit C/AL Code setzen

5. März 2013 11:23

Ja, dann sag uns doch mal in welcher Tabelle das Feld soll und was genau berechnet werden soll.

Re: Wert mit C/AL Code setzen

19. März 2013 19:01

Ganz allgemein, weil das Problem hab ich öfters:
In dem einen Feld soll z.B. der Wert eines anderen Feldes mit 10 addiert stehen (nur mal so als Beispiel!!). Ich stell mir das so vor wie bei Excel.
Im Feld A1 steht 10 drin und in B1 steht die Formel "=A1 + 10". Sobald sich der Wert in A1 ändert, ändert sich auch der Wert in B1.

Hoffe, ihr könnt mir witerhelfen.

Re: Wert mit C/AL Code setzen

20. März 2013 10:39

Einen Wert in ein Feld setzen ist ein einfaches MEINFELD := WERT. Du musst halt nur wissen an welcher Stelle das passieren soll. Du könntest im OnValidate-Trigger deines Feldes auf dem der andere Wert beruht diesen Code schreiben:

OnValidate - MeinFeld
Code:
NeuesFeld := MeinFeld + 10;

Re: Wert mit C/AL Code setzen

20. März 2013 12:00

Sebastian Pfliegel hat geschrieben:Du könntest im OnValidate-Trigger deines Feldes auf dem der andere Wert beruht diesen Code schreiben:

Problematisch wird es jedoch dann, wenn dein "Ausgangfeld" unter anderem durch Programmcode gefüllt wird, welcher nicht den OnValidate-Trigger des Feldes anstößt.
Dann wird nämlich ein Wert in das Feld geschrieben, ohne dass dein (darauf basierendes) Feld aktualisiert wird.

Solche Programmstellen gibt es unzählige Male in der gesamten Anwendung.
Diese zu finden ist fast unmöglich, wenn man kein "Navision Developer's Toolkit", "Object Manager" oder sonstiges "Where-used"-Tool hat.

Re: Wert mit C/AL Code setzen

20. März 2013 13:01

Also erstmal vielen vielen Dank für eure Hilfe das hier ist ein super Forum. :-D
Das mit dem onvalid Trigger hab ich schon ausprobiert, funktioniert auch eigentlich ganz gut, ABER dazu muss ich diesen erstmal für jeden Datensatz auslösen und das dauert ziemlich lang. Wäre möglich, aber es gibt bestimmt eine bessere lösung für sowas.

Re: Wert mit C/AL Code setzen

20. März 2013 13:33

SEA991 hat geschrieben:ABER dazu muss ich diesen erstmal für jeden Datensatz auslösen und das dauert ziemlich lang. Wäre möglich, aber es gibt bestimmt eine bessere lösung für sowas.

Das ist immer das Problem, wenn man neue Felder in einer Tabelle hinzufügt, welche auf Basis von anderen Feldern "nachversorgt" werden müssen.
Genau für solche Szenarien habe ich mir mal einen Report geschrieben, welchen ich hier auch zum Download anbiete.

Re: Wert mit C/AL Code setzen

20. März 2013 14:04

Wie Timo schon geschrieben hat, ist es natürlich dann notwendig wenn ein neues Feld hinzugefügt wird, dass dieses dann auch initial gefüllt wird. Zum Beispiel mit dem genannten Report ;)

Re: Wert mit C/AL Code setzen

25. März 2013 11:17

@Timo Lässer: danke für den Report werd den gleich mal ausprobieren.