Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 13:20

Hallo,

ich habe ein ganz merkwürdiges Problem.

Wir haben ein Form inkl. Subform für unseren Kunden entwickelt. Unter bestimmten Vorraussetzungen ist das Form und Subform nicht editierbar bzw. das Subform enabled(false).

Mit unserm User (Rolle Super) funktioniert es alles prima. Auch wenn der Datensatz vor die Bedingungen zum Sperren beinhaltel. Beim Keyuser funktioniert es nicht. Wenn dieser sich einen neuen DS anlegt, ist das Subform gesperrt. Der Keyuser hat ebenfalls die Rolle Super.

vom Code her habe ich im OnAfterGetRecord folgende Zeilen (ich habe es auch im OnAfterGetCurrRecord versucht):

Code:


IF "User Status" = "User Status"::Freigegeben THEN BEGIN
  CurrForm.EDITABLE(FALSE);
  //CurrForm.SubForm.EDITABLE(FALSE);
  CurrForm.SubForm.ENABLED(FALSE);
  CurrForm."Approval Status Responsible".EDITABLE(TRUE);
END ELSE BEGIN
  CurrForm.EDITABLE(TRUE);
  //CurrForm.SubForm.EDITABLE(TRUE);
  CurrForm.SubForm.ENABLED(TRUE);
END;

IF "Cause of Absence" <> "Cause of Absence"::" " THEN
 //CurrForm.SubForm.ENABLED(FALSE)
 CurrForm.SubForm.EDITABLE(FALSE)
ELSE
 //CurrForm.SubForm.ENABLED(TRUE);
 CurrForm.SubForm.EDITABLE(TRUE);



Habe ich irgendwo einen Denkfehler?

Danke für Eure Hilfe..

vg

Re: Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 13:53

Wenn man den Code etwas anders schreibt (bei gleicher Wirkung), wird deutlicher, was er eigentlich macht:

Code:
CurrForm.EDITABLE("User Status" <> "User Status"::Freigegeben);
CurrForm.SubForm.ENABLED("User Status" <> "User Status"::Freigegeben);
IF "User Status" = "User Status"::Freigegeben THEN BEGIN
  CurrForm."Approval Status Responsible".EDITABLE(TRUE);
END;

CurrForm.SubForm.EDITABLE("Cause of Absence" = "Cause of Absence"::" ");


Zunächst einmal wirkt das alles auf mich doppelt gemoppelt, denn:
Ist eine Form nicht enabled, dann ist sie automatisch auch nicht editable.
Ist die Mainform etwas davon, ist es die Subform automatisch auch.
Warum setzt zu explizit editbale UND enabled?
Weiterhin passiert nichts explizit, wenn User Status <> Freigegeben. Was soll dann mit CurrForm."Approval Status Responsible".EDITABLE passieren?

Sind "User Status" und "Cause of Absence" Felder auf der Main- bzw. Subform? Wie werden sie gefüllt?

rom hat geschrieben:ich habe es auch im OnAfterGetCurrRecord versucht
Da gehört es m.M.n. auch hin.

Re: Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 14:06

Hallo Natalie,

danke für deine Antwort.


Natalie hat geschrieben:Zunächst einmal wirkt das alles auf mich doppelt gemoppelt, denn:
Ist eine Form nicht enabled, dann ist sie automatisch auch nicht editable.
Ist die Mainform etwas davon, ist es die Subform automatisch auch.
Warum setzt zu explizit editbale UND enabled?


Ich habe im Subform LookUp's auf eine Prokjektübersicht usw. Die ließen sich trotz der editable(false) des Mainforms verändern. Deshalb habe ich das Subform explizit das enabled(false) gesetzt.


Natalie hat geschrieben:Weiterhin passiert nichts explizit, wenn User Status <> Freigegeben. Was soll dann mit CurrForm."Approval Status Responsible".EDITABLE passieren?


Dieser Status darf nur der Vorgesetzte ändern, wenn dieser dies ablehnt, wird das Form wieder editierbar.

Natalie hat geschrieben:Sind "User Status" und "Cause of Absence" Felder auf der Main- bzw. Subform? Wie werden sie gefüllt?


Diese beiden Felder sind im Mainform und sind Options. Diese werde über die Benutzereingabe gesetzt.


lg
rom

Re: Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 14:10

Hast du das nicht schon mal versucht?
viewtopic.php?f=36&t=6866

Re: Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 14:40

Es funktioniert ja auch, nur zu gut. Es wird nicht wieder freigeben....

Re: Gleiche Funktion - Unterschiedliches Ergebnis !?!?

1. September 2009 14:47

Wenn der Benutzer in einem Datensatz steht, in diesem ein Feld ändert und du möchtest, dass hiernach editable/enabled neu gesetzt wird, dann musst du deinen Quelltext zusätzlich in diesem Feld (das er geändert hat) im OnAfterValidate-Trigger ausführen.