Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Diehler am 20.01.03 - 10:33:03
-
Hallo,
ich habe ein Problem mit einem kontrollierten Abschnitt. Genauer gesagt, mit der Zugriffsformel.
Der Abschnitt soll bearbeitbar sein, wenn das Dokument noch nicht gespeichert wurde. Also Zugriffsformel:
@IF(@IsNewDoc; @Success; @False)
Zudem soll der "Ersteller" des Dokuments auf den Abschnitt zugriff haben. Also Zugriffsformel erweitert:
Username ist ein Feld vom Typ Berechnet beim Anlegen mit Wert: @UserName
@IF(@IsNewDoc; @Success; @UserName = Username; @Success; @False)
Ganz zum Schluss soll auch noch bestimmte Personen mit der Rolle "Admin" zugriff haben. Zugriffsformel:
@IF(@IsNewDoc; @Success; @UserName = Username; @Success; @UserRole = "[Admin]"; @Success; @False)
Nun kommt beim Aufruf der Maske immer eine Fehlermeldung "Inkompatibler Datentyp". Oder es funktioniert gar nichts. Und es kommt auch keine Fehlermeldung.
Ich kenn mich noch nicht so gut mit NotesProgrammierung aus. Bitte helft mir wenn ihr könnt. Und erklärt mir bitte jeden Schritt haargenau, dass ichs nachvollziehen kann.
thx
-
probiers mal mit @true und statt @success...
ausserdem mit @ismember("[Admin]";@userroles) anstatt @UserRole = "[Admin]";
gruss
-
Ich hab die Formel in
@If(@IsNewDoc; @True; @UserName = Username; @True; @IsMember("[Admin]";@UserRoles) ; @True; @False)
geändert. Es kommt aber immernoch die Fehlermeldung "Inkompatibler Datentyp" Beim aufruf der Maske.
Hat noch jemand einen Vorschlag???
-
... das liegt an den @True - erwartet wird Text...
ata
-
Und was soll ich für einen Text angeben?
Ich möchte, dass der Abschnitt bearbeitet werden kann,
wenn das Dokument neu ist.
wenn eine Person die Rolle Admin hat.
wenn man der Ersteller des Dokuments ist.
-
als IF-Ergebnis schreibst Du rein:
-> "" , für Leer = alle dürfen
->"[Admin]" = nur User mit Rolle Admin dürfen
-> @username = nur der User darf, der im Usernamensfeld steht
ausgehend von bisheriger Formel
@If(@IsNewDoc; @True; @UserName = Username; @True; @IsMember("[Admin]";@UserRoles) ; @True; @False)
Wenn niemand darf, nimm einfach eine nie besetzte Rolle wie zB "[Superadmin]"
-
@rob green
ich nehme an du hast das nicht getestet :-[
@ata
auf dem richtigen Pfad
@diehler
think different keep simple ;D
- das Feld Username ist berechnet beim anlegen und befindet sich oberhalb der controled section(wegen Abarbeitung Notes Formeln)
- deine CAS ist computed und enthält als access formula:
UserName : "[Admin]"
- wenn du mit @IsNewDoc arbeitest musst du beim speichern 2-mal speichern weil
@If(@IsNewDoc; ""; UserName : "[Admin]")
beim erzeugen des Doks wird die CAS ausgewertet also "" wird reingeschrieben = jeder darf editieren, beim 2-ten speichern ist das dok nicht mehr neu, folglich wird der korreeckte Zugriff reingeschrieben.
- diese Aktion gilt hauptsächlich auf dem Server oder mit einer konsitenten ACL bei einer Replik der db.
- CAS ist ein low security feature d.h. du kannst die Daten in der CAS anderweitig manipulieren.
cu
-
Das mit dem @IsNewDoc hab ich auch gemerkt...
Ich habe etz einfach eine Liste reingeschrieben.
Also:
"[Admin]":@username: usw.
Des funktioniert einwandfrei
-
Wie müsste das ganze aussehen, wenn der Abschnitt nicht bearbeitbar sein darf wenn das feld status ungleich 1 ist! ?
-
@arne
welcher status ?
cu
-
in einem Dokument gibt es das FELD Status, ist jenes mit einer " 1 " gefüllt darf der Abschnitt bearbeitet werden , steht eine " 2 od 3 od 4 od 5 " drinne darf der Abschnitt nicht bearbeitet werden.
-
das kann ich mir nicht vorstellen - wie soll ich verhindern das jemand editierbare Felder bearbeitet aufgrund eines Status Feldes - ok vielleicht beim Speichern abfangen.
in dem controllierten Abschnitt geht es haptsächlich um den Zugriff als Autor, ein user mit Editor Rechten kann zugreifen. Hier möchte man nur verhindern das alle user mit Autorrecht in dem Abschnitt Zugriff haben.
cu
-
andere praktikable ideen?
-
... HideWhen-Formeln... oder...
... berechnete Teilmaske...
ata