[gelöst]Feld aktiviert = andere Felder editable = false

1. Juli 2011 11:45

Hallo liebe MSDynamics User,

zunächst erstmal super, dass es dieses Forum gibt. War bisher immer stiller Mitleser und konnte mein Navision Wissen von Nichts auf ein bißchen ausbauen ;)

Leider hat die SuFu nichts gebracht, deswegen meine erste Frage:

Würde gerne in einer Form einrichten:
Wenn ein bestimmtes FeldA (boolean in der DB) = true,
dann FeldX, FeldY, FeldZ Editable = False
und natürlich der Umkehrschluss.

Meine Fragen wären:
1. Arbeite ich hier besser mit Controls(CurrForm) oder mit den Feldern in der Tabelle (Field)?
2. Welche Property muss FeldA haben? (Mit Editable und Enabled kam ich bisher nicht weiter)
3. Wie könnte der Code beispielhaft lauten?
4. In welchen Trigger bau ich das ganze ein? Es soll ja "on demand"/nach dem Aktivieren ausgeführt werden (Im FeldA selbst oder in der Form?)

Vielen Dank für eure Antworten und eure Hilfe!

Greetz,
Norman
Zuletzt geändert von NormanK am 4. Juli 2011 09:15, insgesamt 1-mal geändert.

Re: Feld aktiviert = andere Felder editable = false

1. Juli 2011 11:55

1. da es um die Form geht, musst du auch dort arbeiten
2. ganz normales Feld
3. Schau dir CurrForm. ... .editable sowie enabled an
4. OnAfterValidate des Controls von FeldA

Re: Feld aktiviert = andere Felder editable = false

1. Juli 2011 13:13

McClane hat geschrieben:4. OnAfterValidate des Controls von FeldA


Die Überprüfung muss aber auch in den OnAfterGetRecord, da der Haken für jeden Datensatz einzeln geprüft werden muss.

Re: Feld aktiviert = andere Felder editable = false

1. Juli 2011 13:18

Danke für die Antworten.

Mein Code sieht jetzt so aus
Code:
Spr_nurD - OnAfterValidate()
IF  CurrForm.Spr_nurD.ENABLED THEN BEGIN
CurrForm.Spr_vrsl_ar.EDITABLE := FALSE;
CurrForm.Spr_vrsl_zh.EDITABLE := FALSE;
...
END;


Das aktivieren des FeldesA sperrt die Felder XYZ korrekt. Das funktioniert schon mal wunderbar. Danke!

Der Umkehrschluss (das Deaktivieren des FeldesA und das erneute Freigeben der Felder) funktioniert leider noch nicht. Gibt es sowas wie CurrForm.Spr_nurD.DISABLED damit ich die Logik umdrehen kann?

Greetz,
Norman

Re: Feld aktiviert = andere Felder editable = false

4. Juli 2011 08:15

Code:
Spr_nurD - OnAfterValidate()
IF  Spr_nurD THEN BEGIN
  CurrForm.Spr_vrsl_ar.EDITABLE := FALSE;
  CurrForm.Spr_vrsl_zh.EDITABLE := FALSE;
  // ...
END ELSE BEGIN
  CurrForm.Spr_vrsl_ar.EDITABLE := TRUE;
  CurrForm.Spr_vrsl_zh.EDITABLE := TRUE;
  // ...
END;


Und wenn du das ganze etwas schlanker haben willst:
Code:
Spr_nurD - OnAfterValidate()
CurrForm.Spr_vrsl_ar.EDITABLE := NOT Spr_nurD;
CurrForm.Spr_vrsl_zh.EDITABLE := NOT Spr_nurD;
// ...


EDIT: Ich merke gerade, dass das sowieso Schmarrn ist. ENABLED gibt nur zurück ob das Feld "eingeschalten" ist ähnlich wie EDITABLE. Du musst wie gesagt auf den Datenwert gehen. Habe ich im Code angepasst.

Re: Feld aktiviert = andere Felder editable = false

4. Juli 2011 09:14

YES ! Danke ! :-D