Control aktivieren

15. Oktober 2008 13:08

Hallo zusammen,

ich möchte abhängig von einer Eingabe im Feld "Quantity" Form 46, entweder das Control "Unit Price" (falls NAV keinen Preis ermittelt hat) oder ein anderes Control z.B. "Quantity Sholipped" aktivieren.

NextControl kann ich also nicht benutzen.

Wo muss man das in der Form programmieren und wie?

Danke für eure Hilfe.

Re: Control aktivieren

15. Oktober 2008 13:26

in onValidate prüfen: FORM.CONTROL.ACTIVATE;

form kann auch currForm sein, control ist der name des controls, mehr ist eigentlich nicht zu beachten

Re: Control aktivieren

15. Oktober 2008 13:35

So hab ich das auch gemacht, aber leider wird immer das Control danach aktiviert.
Also das Control, nach z.B. "Unit Price", egal welches ich dort platziere.

Re: Control aktivieren

15. Oktober 2008 13:54

also nochmal, vielleicht ist irgendwo ein kleiner fehlerteufel:

das zu aktivierende control auswählen, einmal F9 drücken und bei den triggern gucken wie das control heißt, nun zum control wechseln welches nach dem Validate aktiviert werden soll, in den onValidate-Trigger dann schreiben:

Code:
currForm.ZUAKTIVIERENDESCONTROL.ACTIVATE;

currForm darf aber nur genommen werden, wenn es auf der gleichen form ist wie die des gerade validierten Feldes

Re: Control aktivieren

15. Oktober 2008 19:22

Probier doch bitte deine Lösung mal selbst aus, bei mir klappts nicht.

also:
nachdem man die Menge erfasst hat, wird der Preis gesucht (Standard),
wenn keiner gefunden wird, dann bitte Control "Unit Price" anspringen, sonst irgend ein anderes Control.

Re: Control aktivieren

15. Oktober 2008 19:44

Das Problem ist, dass du die Kontrolle über die Controls nur auf der Form hast. Das heißt: ACTIVATE im Quelltext kannst du nur auf Forms verwenden.
Die Businesslogic, die bei der Validierung der Eingaben einsetzt, findet jedoch auf Tabellen- bzw. Codeunitebene statt.

Ergo: Du kannst nicht direkt in Abhängigkeit der momentanen Programmierung Einfluss auf die Controls nehmen.

Ich würde folgenden Workaround probieren:

Schreibe in den OnAfterValidate-Trigger des Feldes Menge (also auf der Form!!) in etwa folgendes:
Code:
IF "Unit Price" = ''  THEN // Preis wurde nicht gefunden
  CurrForm.ControlUnitPrice.ACTIVATE
ELSE
  // irgend ein anderes Control anspringen.


Bedenke dabei, dass du dem Control in den Eigenschaften(!) erst einen Namen (nicht Caption) vergeben musst, damit du ihn per ACTIVATE ansprechen kannst. In meinem Beispiel hätte ich dem Control in den Eigenschaften den Namen ControlUnitPrice vergeben.

Wenn das noch zu unsauber ist, gehts bestimmt auch umständlicher ;-)

Re: Control aktivieren

15. Oktober 2008 19:53

Das Problem, dass immer das Control nach dem angesteuerten aktiviert wird, ist mir auch bekannt.
Es ist auch irgendwie logisch, denn durch Enter, Tab, Cursor wird ebenfalls ein Controlwechsel durchgeführt.
Durch das CurrForm.NameDesControls.Activate also vor dem impliziten Controlwechsel das gewünschte Control aktiviert, anschließend führt die fin(sql).exe noch den impliziten Sprung aus.
Verlässt man das Feld Menge also mit Enter, Tab oder CursorRechts, so wird das Control rechts neben dem gewünschten Ziel-Control angesprungen.
Verlässt man das Feld jedoch mit Shift+Tab oder CursorLinks, so wird das Control links neben dem gewünschten Ziel-Control angesprungen.

Der beliebte Trigger On(After)Validate ist also definitiv der falsche Ort für den CurrForm.NameDesControls.Activate.
Probiere es doch mal mit dem Trigger OnDeactivate des Feldes Menge aus.

Re: Control aktivieren

16. Oktober 2008 08:04

das komische ist, ich habe es bei mir probiert (mit OnValidate des Controls) und bei mir ging es, ich habe 3 controls platziert, alle die gleiche source, in der ersten habe ich den code in den onValidate geschrieben und er sollte auf den dritten springen, was er dann auch gemacht hat, ich probier das ganze noch mal aus

Re: Control aktivieren

16. Oktober 2008 15:54

Hallo Timo,

hab ich so gemacht, wie du es beschrieben hast, OnDeactivate des Feldes "Menge" !!

Ergebnis:
Fehlermeldung..-> Endlosschleife!!
"..nicht genügend Stackspeicher... rekursiver Funfktionsaufruf"

Ich geb gleich auf :evil:

Re: Control aktivieren

17. Oktober 2008 07:59

das mit dem Stack hatte ich an der stelle auch

ich habs jetzt nochmal probiert, bei mir gehts im onAfterValidate-Trigger definitiv