Boolean-Wert an Code-Unit übergeben

18. August 2010 10:19

Hallo, Leute!
Ich möchte von einer Funktion eine Code-Unit aufrufen und dabei einen Boolean-Wert übergeben, der in der Code-Unit ggf verändert und in die übergeordnete Funktion wieder übergeben wird.
Im Web kann ich keine Seite zu erweiterter Nav-Code- finden (kennt jemand eine gute?) Meine Manuals sind im punkto Code ziemlich dünn.

Innerhalb der Code-Unit existieren zwei - grau unterlegte - Teile:

OnRun(..) und
Code()

Die Code-Unit verursacht keinen Fehler, aber er arbeitet den Code()-Teil nicht mehr ab. Bevon ich die Wert-Übergabe eingefügt hatte, funktionierte es einwandfrei. In den OnRun() - Teil springt er jedoch noch hinein.
Hier noch mal eine Übersicht über die Funktions-Teile.

Code --> Codeunit Job Jnl.-Post (besteht aus zwei Teilen) --> OnRun(..) und
--> Code()


Im Code habe ich eine Global-Variable deklariert:

Blocked mit Datentyp Boolean.

Dann rufe ich mit

Blocked := CODEUNIT.RUN(CODEUNIT::"Job Jnl.-Post",Rec);

die Codeunit auf.

In der Codeunit im 1. Teil steht

OnRun(VAR Rec : Record "Job Journal Line") //Grau unterlegt

JobJnlLine.COPY(Rec);
Blocked := Code; //hier rufe ich den Code auf und möchte, dass der zurückgegebene Wert and Blocked übergeben wird
Rec.COPY(JobJnlLine);

Blocked habe ich hier als Return Value deklariert.

In der Codeunit im 2. Teil (Code() Blocked : Boolean) habe ich Blocked auch als Return Value deklariert. Trotzdem gibt es keine Fehlermeldung, aber er arbeitet den 2.Teil auch nicht ab.

Ich freue mich über jeden Hinweis!
Danke für Eure Mühe!

Maike

Re: Boolean-Wert an Code-Unit übergeben

18. August 2010 10:54

Willkommen im Forum. Das hier ist z.B. eine gute Seite um Erklärungen und Beispiele zu finden. :-D

Ich hoffe, du experimentierst nur etwas mit einer lokalen Testdatenbank, um dich in die Programmierung einzuarbeiten. Ansonsten müßte ich nämlich sagen, daß jemand mit deinen Vorkenntnissen nicht an Buchungscodeunits herumbasteln sollte.

Nun zum eigentlichen Thema. Wenn du eine Variable an eine Codeunit übergeben möchtest, die in der Codeunit auch noch verändert werden kann, dann gibt es zwei Wege.
1. Du legst in einer Funktion einen weiteren Parameter an, den du per Referenz übergibst, d.h. Var ist angehakt.
2. Du definierst sog. Setter- und Getter-Funktionen und eine globale Variable.
Also bspw. SetBoolean(Value : Boolean)
Code:
GlobalBoolean := Value;
und GetBoolean() : Boolean
Code:
EXIT(GlobalBoolean);


Bei
Code:
CODEUNIT.RUN(CODEUNIT::"Job Jnl.-Post",Rec);
geht das allerdings nicht so einfach. Die RUN-Funktion einer Codeunit kann nur einen Parameter haben und der ist vom Typ Record. Außerdem ist die Konstruktion CODEUNIT.RUN nicht dafür geeignet die Referenz auf die Instanz der Codeunit zu halten, d.h. Setter- und Getter-Methoden fallen auch weg. Vielleicht solltest du einen Schritt vorher anfangen: Was möchtest du denn erreichen?

Re: Boolean-Wert an Code-Unit übergeben

18. August 2010 11:41

Hallo, HattrickHorst!

Danke für die schnelle Antwort! In der Tat, ich bastele nur in der Testdatenbank herum.
Ich möchte in der Codeunit - sie wird zum Buchen benutzt - einen Wert in der Table Strukturplanzeile verändern - nämlich den für gesperrt, wenn bestimmte Werte überschritten wurden. In der Codeunit habe ich eine Global definiert, die die Strukturplanzeile einliest. Wenn ich den Gesperrt-Wert dann aber verändere und über modify in die Strukturplanzeile einlese, wird nicht mehr gebucht, da die Strukturplanzeile während des Buchens verändert wurde. Also habe ich mich entschieden, den Wert an die übergeordnete Funktion zu übergeben und ganz am Ende die Strukturplanzeile zu ändern.
Hast Du da irgendwelche weiterführenden Ideen?
Freue mich über Antwort!

Maike