[gelöst] Lookup auf Button

22. September 2008 09:20

Hallo!

Ich möchte eine Lookupfunktion auf einen command button legen. ich habe bereits die Lookupfunktionalität per hand in c/al erfasst. Diese funktioniert auch, wenn ich sie auf das Feld auf "OnLookup" lege.

Code:

Record.RESET;

   IF FORM.RUNMODAL(55083,Buchgruppe) = ACTION::LookupOK THEN
   VALIDATE(Name,Record.Name);



lege ich diesen Code jedoch auf den Button in "OnPush" so kommt zwar die LookupForm, aber wenn ich einen Datensatz anklicke wird dieser nicht in das Form übernommen.

Ich habe den Code

Code:
VALIDATE(Name,Record.Name);


in das Form auf "OnAfterGetRecord" ausgelagert. Dann wird zwar der die Nummer zum zugehörigen Datensatz übernommen, jedoch geschieht dies für alle Datensätze im Form. Ich möchte aber nur das ich dies für einen Datensatz ändere. Also eben genau die Lookupfunktionalität nur auf einem Button ;)
Zuletzt geändert von msp am 22. September 2008 11:19, insgesamt 1-mal geändert.

Re: Lookup auf Button

22. September 2008 09:35

Was mir als erstes bei deinem Programmcode auffällt:
Du übergibst die Variable "Buchgruppe" an die Form, liest aber aus der Variablen "Record" aus.
Entweder solltest du "Record" an die Form übergeben, oder aber aus "Buchgruppe" auslesen.

Re: Lookup auf Button

22. September 2008 09:44

ich hab den Quelltext veralgemeinert hier gepostet...

Code:
Buchgruppe.RESET;

IF FORM.RUNMODAL(55083,Buchgruppe) = ACTION::LookupOK THEN

VALIDATE(Gruppennummer,Buchgruppe.Gruppennummer);


so sieht er eigentlich aus. Hatte das eine "Buchgruppe" nur vergessen rauszunehmen. Dachte die Namen der Records wären für die Prolemblösung ohne Belang ;)

Re: Lookup auf Button

22. September 2008 10:15

Hm, versuchs mal nach deinem Quelltext mit CurrForm.UPDATE(FALSE),

Re: Lookup auf Button

22. September 2008 10:21

Bringt leider keinen Erfolg. Kann deinen Lösungsvorschlag auch nicht so ganz nachvollziehen. Es soll ja update in der form durchgeführt werden, nur eben nur auf einem Datensatz nicht auf allen (wenn ich den Validate-quelltext in "OnAfterGetRecord" schreibe)

Re: Lookup auf Button

22. September 2008 10:25

msp hat geschrieben:Bringt leider keinen Erfolg. Kann deinen Lösungsvorschlag auch nicht so ganz nachvollziehen. Es soll ja update in der form durchgeführt werden, nur eben nur auf einem Datensatz nicht auf allen (wenn ich den Validate-quelltext in "OnAfterGetRecord" schreibe)

Mein Verdacht war, dass der von dir ausgesuchte Wert sehr wohl in den Datensatz übertragen wird, du diese Änderung jedoch nicht siehst (da der Lookup von unerwarteter Stelle aus ausführt wird; bei normalen Lookups wird vielleicht implizit ein Formupdate ausgelöst). Daher das CurrForm.UPDATE(FALSE);

Da das aber nichts gebracht hat, könnte ich mir vorstellen, dass du auf deiner Form (!) noch weitere Programmierungen hast.
Debugge doch mal alles ab ... THEN VALIDATE ... und schau, was passiert.

Re: Lookup auf Button

22. September 2008 10:53

Danke für die Erläuterung. durchaus sinnig, was du da sagst.

Aber ich habe auf meiner Form lediglich:

Code:
VALIDATE(Gruppennummer,Buchgruppe.Gruppennummer);


liegen. Das wars

Re: Lookup auf Button

22. September 2008 10:56

msp hat geschrieben:Danke für die Erläuterung. durchaus sinnig, was du da sagst.

Aber ich habe auf meiner Form lediglich:

Code:
VALIDATE(Gruppennummer,Buchgruppe.Gruppennummer);


liegen. Das wars

Hast du jetzt gedebuggt, ob
a) der Wert wenigstens zu diesem Zeitpunkt übertragen wird
b) ob danach etwas (Unerwartetes) mit Rec passiert?

Re: Lookup auf Button

22. September 2008 10:58

Muss nach dem Validate nicht zufällig auch ein Modify abgesetzt werden?
Ansonsten würde ein eventueller CurrForm.UPDATE(False) die Änderung wieder zunichte machen.

Re: Lookup auf Button

22. September 2008 11:00

oder man verwendet CurrForm.UPDATE(TRUE) ?

Re: Lookup auf Button

22. September 2008 11:18

Natalie hat geschrieben:Hast du jetzt gedebuggt, ob
a) der Wert wenigstens zu diesem Zeitpunkt übertragen wird
b) ob danach etwas (Unerwartetes) mit Rec passiert?


Also laut Debugger ist der Ablauf wie folgt:

Zuerst wird Form - OnAfterGetRecord() angesteuert??? <--- nicht das was ich will
Dann <Control1000000017> - OnPush() <--- wird auch wie gewollt durchlaufen
Dann geht er wieder in OnAfterGetRecord() <--- danach haben ALLE Datensätze die nummer, welche ich ausgewählt habe. Nicht nur einer.

Timo Lässer hat geschrieben:Muss nach dem Validate nicht zufällig auch ein Modify abgesetzt werden?
Ansonsten würde ein eventueller CurrForm.UPDATE(False) die Änderung wieder zunichte machen.


im "OnAfterGetRecord" kann ich den Befehl Modify nicht setzen. Navision sagt mir: "Sie können die Datenbank von diesem Codestück aus nicht verändern"

Wenn ich den Befehl Modify auf "OnPush" setze, bekomme ich "Bücher Buchnummer '0' existiert nicht."

woger hat geschrieben:oder man verwendet CurrForm.UPDATE(TRUE) ?


OHA!

Wenn ich CurrForm.UPDATE(TRUE) in "OnPush" setze bekomme ich das gewünschte Ergbebnis!!!

Also mein Code sieht nun wie folgt aus:

Code:
Buchgruppe.RESET;

IF FORM.RUNMODAL(55083,Buchgruppe) = ACTION::LookupOK THEN

VALIDATE(Gruppennummer,Buchgruppe.Gruppennummer);
CurrForm.UPDATE(TRUE)


und der "OnAfterGetRecord" bleibt leer!

Vielen Dank woger, Nathalie und Timo für die Hilfestellung!