[Gelöst] Menueinträge sperren

20. Dezember 2005 13:10

Hallo,

ich möchte einigen Usern in unserem Unternehmen den Zugriff auf Menueinträge in einer Form versperren. Man könnte das auch per Rolle machen, aber ich möchte es so lösen.

Einzelne Spalten ausblenden oder Felder mit wirren Zeichen zu füllen, wenn eine bestimmte Voraussetzung in der Benutzereinrichtung gegeben ist, ist kein Problem:

Code:
OnOpenForm()
IF UserSetup.GET(USERID) THEN
IF UserSetup.ShowUnitCost=FALSE THEN

BEGIN
  Hidecost := NOT(UserSetup.ShowUnitCost);
  CurrForm.Code.EDITABLE := FALSE;
  CurrForm.Description.EDITABLE := FALSE;
  CurrForm.Description.VISIBLE := FALSE;
END;


Jetzt habe ich aber auch mehrere Menus am unteren Bildschirmrand, die ich ebenfall deaktivieren will. Gibt es dort eine Möglichkeit, diese ähnlich wie Spalten und Felder anzusprechen?

btw: kann ich die Spalten auch komplett dem Zugriff einzelner Benutzer entziehen? Derzeit wären Sie ja "nur" nicht sichtbar und editierbar.

Gruß,
Guenther

[Editiert von Marc Teuber: Code-Tag hinzugefügt.]
Zuletzt geändert von Guenther am 12. April 2006 14:44, insgesamt 1-mal geändert.

20. Dezember 2005 15:46

Hallo,
wenn es eine Subform ist die du meinst im unteren Menü und hier einzelne Spalten ausgeblendet werden sollen, hätte ich folgenden Vorschlag:

Auf der Form:
Der Subform in den Properties unter Name einen Namen Vergeben z.B. "Subform1"
Auf dem gewünschten Trigger folgenden Code hinterlegen:(DEINFUNKTIONSNAME mit den Funktionsnamen in der Subform austauschen!)
CurrForm.Subform1.FORM.DEINFUNKTIONSNAME(FALSE);
bzw. CurrForm.Subform1.FORM.DEINFUNKTIONSNAME(TRUE); (Je nach dem!!)
(Benutze am besten das "C/AL Symbol Menu")

Auf der SubForm:
Eine Funktion erstellen
Parameter Name:Show
DataType:Boolean

Folgenden Code eingeben: (Textbox gegen die Felder die du haben möchtest austauschen!)

IF show THEN BEGIN
CurrForm.Textbox1.VISIBLE := TRUE;
END ELSE BEGIN
CurrForm.Textbox1.VISIBLE := FALSE;
END;

Gleiches sollte auch mit (glaube ich!) mit Editable funktionieren!
Ich hoffe das ich das Verständlich rüberbringen konnte :-)
Gruß Mikka

20. Dezember 2005 16:51

im speziellen Fall handelt es sich um die Form 5730 Item Categories. Hier möchte ich unseren Filialen lediglich den Code und die Beschreibung zeigen. Alles andere auf der Form, außer OK und Abbrechen, sollte ausgeblendet sein.

Also möchte ich nicht die ganze Subform ausblenden bzw gibt es dort ja auch gar keine. Ich möchte "lediglich" die Menubuttons ausblenden. Nur wie spreche ich die an?!

20. Dezember 2005 17:33

Geht es hier darum, dass die Benutzer die Daten der Übersicht halber nicht sehen sollen (da Sie durch die Vielzahl nur verwirrt würden), oder dürfen Sie sie nicht sehen (da sie geheim sind)?.

Wenn nur der Übersicht halber:
Gib jedem (auszublendenden) Button über die Properties einen Namen, dann kannst du die Controls mit CurrForm.ControlName.ENABLED := FALSE; deaktivieren bzw. mit CurrForm.ControlName.VISIBLE := FALSE; ausblenden.

Wenn die Daten nicht eingesehen werden dürfen:
  1. Die User dürfen keinen Zugriff auf den Zoom (Strg+F8) haben.
  2. Das Ausblenden der Spalten reicht nicht, da die User sich die Felder wieder einblenden könnten.
    Hier müsste die Abfrage der Benutzerberechtigungen sowie das Ausblenden der Controls (Spalten) im Trigger OnAcitvateForm wiederholt werden.
    Dann können sich die Anwender die Spalten so oft einblenden, wie sie wollen. Sobald sie wieder auf die Karte zurückkämen würden die Spalten wieder ausgeblendet ;-)

20. Dezember 2005 18:00

Aha, da hätte ich auch selber drauf kommen müssen.

Ich habe jetzt alle Spalten auf DISABLED und INVISIBLE gesetzt und die Werte jeweils mit dem Text '*************' überschrieben. Geht auch, ist abernicht die schönste Variante.

20. Dezember 2005 18:03

Timo hat mich gerade darauf aufmerksam gemacht, dass ich noch nicht erwähnt habe, dass wir mit der Branchenlösung "Wheels&Tires" arbeiten. Da ich da auf angepasste Felder zurückgreife, sind meine Fragen nicht immer ganz verständlich. Ich bitte, dies zu entschuldigen.

Gruß,
Guenther

20. Dezember 2005 18:08

Stimmt Timo (An was mann alles denken muss!)

Auf dem OnAcitvateForm Trigger reicht nicht aus, der Code "CurrForm.Code.VISIBLE := FALSE;" muss auch auf den "Form - OnAfterGetRecord()" Trigger, dann kann der User die Spalte nicht mehr Anzeigen!

@Timo: Welche Rolle darf der User nicht haben, wenn der Zoom deaktiviert sein soll? (ID-5330 Objektart System)?
Gruß Mikka

20. Dezember 2005 18:23

mikka hat geschrieben:Auf dem OnAcitvateForm Trigger reicht nicht aus, der Code "CurrForm.Code.VISIBLE := FALSE;" muss auch auf den "Form - OnAfterGetRecord()" Trigger, dann kann der User die Spalte nicht mehr Anzeigen!
Da sich die Rechte nicht von Datensatz zu Datensatz ändern, sollten die Trigger OnOpenForm() und OnActivateForm() ausreichen.
Sind jedoch bestimmte Werte des Datensatzes noch zu berücksichtigen, dann wäre OnAfterGetRecord() anstelle von OnOpenForm() zu wählen.

mikka hat geschrieben:@Timo: Welche Rolle darf der User nicht haben, wenn der Zoom deaktiviert sein soll? (ID-5330 Objektart System)?
Gruß Mikka
Richtig! Zugriffsrecht System 5330 "Tools, Zoom" darf in keiner Rolle den Usern zugeteilt werden.
Einmal erteilt (durch irgendeine Rolle), kann man es ihm nicht mehr entziehen.

nochmal

7. April 2006 09:40

hab doch nochmal eine Frage:

Ich möchte jetzt nicht einfach nur einfach den ganzen Button einer Maske sperren, sondern einen einzelnen Menueintrag des Buttons.
Ich habe versucht, dem Menueintrag einen Namen zu geben und dann über CurrForm das ganze unvisible zu machen.
Leider finde ich die Eintragsnamen nicht.

Besteht die Möglichkeit, Menueinträge per Code zu sperren?

Gruß
Guenther

Re: nochmal

7. April 2006 11:47

Hallo Günther,

Guenther hat geschrieben:Besteht die Möglichkeit, Menueinträge per Code zu sperren?
Das geht leider nicht. Du müsstest für für jede Möglichkeit einen eigenen Button haben, die dann alle übereinander liegen und dann ein- und ausgeblendet werden.

Gruß, Marc

ok

12. April 2006 14:46

Hallo Marc,

soeben geschehen. Habe es tatsächlich mit zwei Buttons gelöst. Etwas umständlich, finde ich, aber wenn es anders nicht geht, muß das wohl so sein.
Danke dafür.

Gruß
Guenther