Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: gentleman am 24.09.04 - 11:35:09

Titel: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 11:35:09
hi,

ich habe eine db mit verschiedenen bearbeitungsberechtigungen, welche mir gerade probleme machen :)

Ich habe ein Feld mit dem Namen Signatur1, in dem der Username, des aktuellen Bearbeiters per Knopfdruck gespeichert wird.

So gehe ich vor, wenn ich erreichen will, dass die rolle markt nicht in den dok_status 5 rein darf (dok_status 5 wird ebenfalls in nem feld hinterlegt):

@If(@Contains(@UserRoles;"[Markt]") & (@If(@Contains(dok_status;"5")));@Do(@Prompt([OK]; "Halt";  "Sie haben keine Berechtigung zum Bearbeiten!"); @Return(""));

das funktioniert.


nur jetzt brauch ich ne formel, dass die rolle markt nicht in das dok 5 rein darf (siehe oben) ABER dass die rolle markt dann in dok_status 5 rein darf, wenn es der ersteller des dokuments ist - dieser wird im feld signatur1 hinterlegt...

aber ich komm nich drauf

hat da jemand nen tip?
wäre super klasse :)

danke schonmal
marc :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 11:38:28
Da fehlt doch nur noch
& Signatur1 != @UserName

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 11:45:46
hey,

danke für die schnelle antwort...

habs so probiert:

@If(@Contains(@UserRoles;"[Markt]") & Signatur1 != @V3UserName & (@If(@Contains(dok_status;"5")));@Do(@Prompt([OK]; "Halt";  "Sie haben keine Berechtigung zum Bearbeiten!"); @Return(""));

geht aber leider nicht :(
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 11:50:57
Zunächst fehlt Deiner Formel der Else-Zweig.

Wo hast Du die Formel eigentlich zu stehen ?

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: Driri am 24.09.04 - 11:51:21
Wieso nimmst Du denn eine andere Formel, als Bernhard dir empfiehlt ?

V3UserName gibt den gekürzten Usernamen zurück, wenn in Signatur1 der kanonische Name steht, kann das auch nur in die Hose gehen.
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 13:33:08
hi,

erstmal danke für die schnellen antworten.

ich hol mal schnell etwas aus.

ich hab ein feld signatur1.
in dieses feld wird der username geschrieben. das geschieht per buttonklick; auf dem button is der code:

FIELD Signatur1:=Signatur1;
@SetField("Signatur1";@Name([CN]; @Subset(@V3UserName; 1)));
@Command([ViewRefreshFields])

ok...

jetz hab ich das dokument das vom status 1-6 geht...
die rolle markt darf nur in status 1 und 3 rein, sonst nirgends!

ABER: die rolle markt darf auch in status 5 rein, wenn es der ersteller ist (also im feld signatur1 der name....) der rest der gruppe markt darf logischerweise nich rein.

V3UserName hab ich also genommen, weil auf dem button auch V3UserName verwendet worden is...

auf dem bearbeiten button (um in das dokument reinzukommen), ist der code, den ich hier suche...

ich komm echt nimmer weiter :(

würde mich sehr freuen wenn ihr mir da auf die sprünge helfen könntet :)

danke
marc
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 13:36:53
Ich habe keinen Plan, warum das bei Dir nicht funktionieren sollte ... Arbeitest Du evtl. lokal ohne konsistente ACL ?

Allerdings ist Dein Verfahren ein äusserst unsicheres: Du kannst ja keinen zwingen, den Bearbeiten-Button zu drücken, die User können StrgB verwenden, über's menü gehen, einen Doppelklick im Dokument machen ...

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 13:50:30
hi,

strg +b und und und geht nicht, is alles im querymodechange geregelt... von daher is es sicher...

Zitat: "Arbeitest Du evtl. lokal ohne konsistente ACL?" bin überfragt :) die db liegt aber auf nem server...

ich spiel nochmal a bissl rum, aber vorhin gings nich...
weder mit @V3UserName oder mit @UserName

danke trotzdem
marc :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 13:56:34
strg +b und und und geht nicht, is alles im querymodechange geregelt... von daher is es sicher...

Im PostOpen prüfst Du auch ?

Zitat: "Arbeitest Du evtl. lokal ohne konsistente ACL?" bin überfragt :) die db liegt aber auf nem server...

Hm, dann passt das auf jeden Fall.
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 14:02:07
Im PostOpen prüfst Du auch ?

ne da nich...
aber man kommt in das dok nich rein ohne die richtigen rechte - alles schon getestet...

mein autor problem besteht allerdings nach wie vor :(

gibts da nich ne andere möglichkeit das zu lösen???

danke
marc :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 14:03:43
Dann selektiere mal in der Ansicht ein Dokument und drücke Strg-B. Da wird dann keine QueryModeChange ausgeführt ...

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 14:05:38
hey,

genialer tip - haste recht, da gehts... :)
muss im postopen der gleiche code wie im querymodechange stehen?

danke
marc :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: jovel am 24.09.04 - 14:08:22
Das ist doch nicht weiter tragisch, wenn der nicht berechtigte User sich zwar die Finger wund editieren kann, aber seine Änderungen nicht speichern darf... und das abzufackeln ist nun wirklich kein Problem und der User hat sich zu früh gefreut  :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 14:12:01
Das ist doch nicht weiter tragisch, wenn der nicht berechtigte User sich zwar die Finger wund editieren kann, aber seine Änderungen nicht speichern darf... und das abzufackeln ist nun wirklich kein Problem und der User hat sich zu früh gefreut  :)

dann musst du aber den speichern button mit codes versehen...
is schon cooler wenn man da gleich gar ned rein darf... :)
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 14:12:06
Im PostOpen brauchst Du nur den EditMode auf False zu setzen. Achtung - dabei triggerst Du dann QueryModeChange !

Wieso arbeitest Du eigentlich nicht mit Autorenfeldern ? Da wärst Du das ganze Gedöhns doch los und hast eine sicherere Anwendung.

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: jovel am 24.09.04 - 14:18:26
Etwas Code im Speichern-Button sollte schon sein, damit die User-Gemeinde über ESC keinen Unfug anstellt.  ;)
Ich bin aber auch ein Verfechte von Leser- und Autorenfeldern. Das gibt mehr Sicherheit, aber lass dir ein Hintertürchen offen, damit du noch an die Dok`s kommst.
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 14:20:31
Wieso arbeitest Du eigentlich nicht mit Autorenfeldern ? Da wärst Du das ganze Gedöhns doch los und hast eine sicherere Anwendung.

AH! zu viele infos auf einmal :D
das teil kenn ich ned :D

und zum postopem...
hab in der hilfe das gefunden:
  Dim workspace As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Set uidoc = workspace.CurrentDocument
  uidoc.EditMode = True

dabei bringt er zwar ne meldung - bearbeiten nich möglich, aber wenn man die bestätigt, dann kommt man trotzdem rein :D
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 14:31:17
If DeineBedingung then
   Source.EditMode = False
End If

reicht doch vollkommen ...

Bernhard
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 16:14:29
If DeineBedingung then
   Source.EditMode = False
End If

hi,

wollte eigentlich nimmer stören, aber das klappt nicht!

has so probiert:
   If source.EditMode And Not source.IsNewDoc Then
      Source.EditMode = False
   End If

und noch einige male anders...
klappt aber nicht. es erscheint zwar die meldung bearbeiten nicht möglich, aber wenn man ok drückt is man drin...

marc
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 16:22:15
Die Meldung sollte ja im QueryModeChange stehen - und dessen Code wäre nun interessant. Wenn dort davon ausgegangen ist, dass der EditMode True ist ...

Bernhard

PS: Geh' die Events mal im Debugger durch und schau Dir die UIDoc-Properties in den jeweiligen Events an.

PPS: Mit Autorenfelder wäre Dir das nicht passiert - in Workflow-Apps sind die IMHO einfach ein Must-have. Bei Marketing steht das zwar nicht gerade zu erwarten  ;D, aber wenn sich da ein etwas begabterer User einen Agent selber schraubt, dann nutzt Dir Deine Front-End-"Sicherheit" gar nichts.
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: gentleman am 24.09.04 - 17:07:42
OK :)
hier mal mein querymodechangecode:

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
   Dim session As New NotesSession     
   Dim workspace As New NotesUIWorkspace
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim ein As String
   ein = session.GetEnvironmentString("ProblemEintritt")
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.document 
   Dim acl As notesacl
   Set db = session.CurrentDatabase
   Dim entry As notesaclentry
   Set acl = db.ACL
   Set entry = acl.GetEntry(Session.UserName)
   
   If doc.dok_status(0) = "6. Abgeschlossen" And Not entry.IsRoleEnabled( "[Admin]" ) Then
      Messagebox "Dokument ist bereits abgeschlossen!", OK, "Fehler"
      continue = False
   Else
      If doc.dok_status(0) = "hugo" Then
         continue = True
      Else
         If Not (ein = "Ja") Then
            Messagebox "Eine Bearbeitung des Dokuments ist nur über die Schaltfläche ''Bearbeiten'' möglich", OK, "Fehler"
            continue = False
         End If
      End If
   End If
End Sub


und das mit den autorenfeldern bringt mir nix....
ich brauch ja nich den autor, sondern den der die Signatur abgibt (muss nich zwingend der autor sein)
d.h. wenn einer das erstellt, heisst das nich gleich, dass er auch in status 5 rein darf :)

marc
Titel: Re: Dokument bearbeiten, wenn Feld = Username
Beitrag von: koehlerbv am 24.09.04 - 17:23:51
   Set entry = acl.GetEntry(Session.UserName)
   
   If doc.dok_status(0) = "6. Abgeschlossen" And Not entry.IsRoleEnabled( "[Admin]" ) Then

Gefährlich, gefährlich. Arbeitest Du nur mit Namenseinträgen in der ACL ? An Gruppen kommst Du so ja gar nicht 'ran ...

und das mit den autorenfeldern bringt mir nix....
ich brauch ja nich den autor, sondern den der die Signatur abgibt (muss nich zwingend der autor sein)
d.h. wenn einer das erstellt, heisst das nich gleich, dass er auch in status 5 rein darf :)

Nun, das hat jetzt aber nix mit Autorenfeldern zu tun. Selbst der Ersteller eines Doks muss ja zwingend in einem Autorenfeld stehen. Du als Entwickler bestimmst das doch, wer in dem / den Autorenfeldern steht.

Ich glaube, da musst Du nochmal etwas Literatur in die Hand nehmen  ;)

Bernhard