[Gelöst] Codeunit.RUN(Rec) in Table

11. September 2008 10:29

Hallo zusammen.

Vorab ich habe die Suchfunktion benutzt und auch bei google gesucht, jedoch nichts gefunden, was mir weiterhilft...

Ich habe folgendes Problem:

Ich habe eine Form, in der ein Button ist, der folgendes macht:

Codeunitname.RUN(Rec);


Ich möchte es allerdings nicht über den Button machen, sondern es automatisch laufen lassen.
Ich dachte mir, dass ich am besten versuche in der Table unter OnValidate() die Funktion des Buttons zu integrieren.
Problem ist nun, dass wenn ich es so ausführe, sagt er mir: "Die Variable Record muss zu xx gehören und nicht zu xy."

Ich habe dann einfach Table xx als Variable des Typ Record hinterlegt und "Codeunitname.RUN(variable);" geschrieben.
Es funktioniert immer noch nicht. Im der Codeunit wird etwas gelöscht und als ich es so ausgeführt habe, war auf einmal alles weg, ...
Ich denke ich muss noch einen Filter davor setzen, weiß aber nicht genau wie, und was für einen kann mir da einer helfen?
Zuletzt geändert von meto89 am 11. September 2008 11:31, insgesamt 2-mal geändert.

Re: Codeunit.RUN(REC) in Table

11. September 2008 10:42

Du musst dafür Sorge tragen, dass deine Codeunit mit der richtigen Record-Variable aufgerufen wird. In der Fehlermeldung wurde dir gesagt, auf welche Tabelle verwiesen werden sollte ("muss zu xy gehören").

Rec heißt Recordvariable mit akutellen Werten der Tabelle, auf die die Form verweist.

So wie ich das gedeutet habe, wolltest du deinen Codeunitaufruf in der falschen Tabelle unterbringen. Es muss die gleiche Tabelle sein, die du auf der Form unter der Eigenschaft "SourceTable" findest. Dann kannst du auch mit Rec weiter arbeiten.

Re: Codeunit.RUN(REC) in Table

11. September 2008 11:06

Erstmal danke für deine schnelle Antwort.


Das Problem ist, dass in der Form eine Subform ist. Auf die Subform möchte ich mich beziehen, und der SourceTable der Subform entspricht auch der Table in der ich das mit "Codeunit.RUN(Rec);" machen wollte. Dann kam die Fehlermeldung, dass ich die falsche Table genommen habe. Die andere Table, die er mir angegeben hat, ist die Table, die auf der Hauptform als SourceTable angegeben ist.

Jedoch möchte ich ja nur, dass der Code ausgeführt wird, wenn eine Spalte in der Subform verändert wird. Deswegen habe ich es in der Table, die bei der Subform als SourceTable hinterlegt ist unter OnValidate() der Spalte hinterlegt, bei dessen Veränderung die Codeunit aufgerufen werden soll.


Wenn ich es trotzdem in die Table schreiben muss, die bei der Hauptform als SourceTable angegeben wird, in welchen Teil schreibe ich das dann am besten?

Re: Codeunit.RUN(REC) in Table

11. September 2008 11:11

Also noch mal langsam: Du hast eine Main- und Subform. Der Button war bisher auf der Mainform, du möchtest die Codeunit aber nun automatisiert aus der Subform starten?

Dann warst du in der Tabelle, der Subform gehört, richtig. Allerdings darfst du hier dann nicht mehr mit Rec arbeiten.
Falls es sich bei den Tabellen um 36 Sales Header und 37 Sales Line gehandelt hat, gehört das in deinen OnValidate-Trigger ( in einem Feld der Subform-Tabelle):
Code:
SalesHeader.GET("Document Type", "Document No.");
Codeunitname.RUN(SalesHeader);


Falls es andere Tabelle sind, musst du das Prinzeip auf andere Recordvariablen übertragen.

Re: Codeunit.RUN(Rec) in Table

11. September 2008 11:24

Vielen Dank, genau das war mein Fehler.

Klappt nun alles :-D

Danke (=