Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: wuschel am 13.11.06 - 16:49:01
-
Hallo,
ich habe eine Maske, bei der der Bearbeitungsmodus nicht automatisch aktiviert wird. Dokumente werden also normalerweise im Lesemodus angezeigt. Unter bestimmten Umständen möchte ich jetzt im Postopen den Bearbeitungsmodus einschalten, ein paar Änderungen an Feldern durchführen und das Dokument wieder in den Lesemodus nehmen:
@If (Status="6" & @IsMember(@UserName;AktBearbeiterListe); @Do(
@Command([EditDocument];"1");
@setfield...
@Command([EditDocument];"0")
);@Success)
Leider erhalte ich beim letzen Umschalten die Fehlermeldung "Document command is not available".
Hat jemand ne Idee, warum dies so ist oder wie ich das ganze besser lösen könnte?
Gruß Matthias
-
Ich glaub mit Script kannst du das im Backend machen und am Ende uidoc.refresh.
Ist vielleicht einfacher.
Wenn in dem Postopen bereits Formelsprachen-Code drin ist, kannst du einen Agenten aufrufen, der in Script programmiert ist.
-
Hallo,
ich hab jetzt so einiges ausprobiert, aber ich komme einfach nicht weiter. Also,
- das Dokument soll generell im Lesemodus geöffnet werden
- bei bestimmten Usern soll das Dokument im Bearbeitungsmodus geöffnet werden und das Öffnen soll protokolliert werden
- im POSTOPEN wird also unter Umständen der EditMode eingeschaltet, anschließend sind einige Felder editierbar.
ABER
- hat das Dokument einen bestimmten Status erreicht, soll zwar weiterhin protokolliert werden, dass diese bestimmten User das Dokument geöffnet haben, die Felder des Dokuments dürfen jedoch nicht mehr verändert werden.
Ich wollte das in diesem Fall so lösen, dass im POSTOPEN der Bearbeitungsmodus eingeschaltet wird, die Protokollinformationen in bestimmte Felder eingetragen werden, das Dokument gespeichert wird und anschließend der Lesemodus wieder eingeschaltet wird.
Unabhängig von Formelsprache oder LS erhalte ich aber in jedem Fall einen harten Programmabbruch. Und zwar offensichtlich dann, wenn ich speichern möchte, also vor dem Zurückschalten in den Lesemodus. Lasse ich den Speicherbefehl weg, läuft alles durch, der Anwender erhält aber als Eingabeaufforderung die Anfrage auf Speicherung, ist also murks.
Hat jemand ne Idee oder einen Hinweis, wie ich das vielleicht ganz anders lösen könnte.
(Berechnete Anzeigefelder helfen in diesem Fall nichts, da ich u.a. ein RTF-Feld habe, in dem ich Anhänge speichere. Und hier habe ich bisher keine Möglichkeit gefunden, dieses Feld berechnen zu lassen.)
-
Wozu setzt Du denn das Dokument in den EditMode, nur um Protokollinformationen zu speichern? Mach das doch im Backend.
Bernhard
-
Ich würde das Doc grundsätzlich nur im Lesemodus öffnen. Schaltfläche "Bearbeiten" nur zeigen , wenn bestimmte Rolle vorhanden.
Wenn der bestimmte Status da ist, das Bearbeiten nicht mehr erlauben. (Was soll denn da überhaupt protokolliert werden, wenn man nix mehr darf?)
-
@bernhard: mein gesamter POSTOPEN ist in Formelsprache, daher suchte ich hier eine Lösung (oder kann ich auch hier ins Backend schreiben?)
@klauss: es muss protokolliert werden, dass die Mitarbeiter das Dokument gesehen haben.
-
Nicht durchdacht. Was machst du mit Benutzern die zwar lesen aber nicht editieren dürfen. Was machst du mit Benutzern die nur Leseberechtigung auf der DB haben was machst du mit .....
Guckst du hier (http://www.openntf.org/Projects/pmt.nsf/ProjectHome?ReadForm&Query=Application%20Activity%20Tracking). das ist vielleicht eine mögliche Lösung für dein Problem.
-
@Thomas:
wieso nicht durchdacht?
Hast Du noch nie eine Prüfinstanz in einem Miniworkflow gehabt, die einfach NUR sichtgenehmigen soll und KEINE Felder verändern können soll?
Und wieso soll ich Benutzer haben, die nur eine Leseberechtigung auf der DB haben?
-
so habe ich das auch.. oder so ähnlich und komme nicht wirklich weiter:
Also mal von Anfang an:
Ich habe eine Datenbank mit Vordrucken erstellt. Mich interessiert wieoft der User den Vordruck öffnet.
Also habe ich jeden User Editor rechte gegeben. Außerdem 2 Rollen definiert Editor und Leser
der Editor sieht auch die Felder die er editieren darf der Leser sieht nur die berechneten Felder.
im Postopen habe ich folgende Formel reingeschrieben:
@Command( [EditDocument]; "1" );
FIELD Statistik:=@If(Statistik="";@Text(@Now);Statistik:@Text(@Now));
FIELD Statistik_1:=@If(Statistik_1="";1;Statistik_1+1);
@Command( [EditDocument]; "1" );
@Command([FileSave];"1")
Somit wird jeder Zugriff gezählt. Der Leser kriegt davon nichts mit weil für ihn alle Felder trotzdem dicht sind. Jetz würde ich o .g . Fomel gerne erweitern so das wenn ein User mit Rolle Editor zugreift eben nichts gezählt wird sondern dasDokument am besten erst garnicht in in Edit-Modus geht. Leider kriege ich das nicht hin.
WEnn ich folgende Eintrage:
@If(@IsMember("[Leser]";@UserRoles);
@PostedCommand( [EditDocument]; "1" );
FIELD Statistik:=@If(Statistik="";@Text(@Now);Statistik:@Text(@Now));
FIELD Statistik_1:=@If(Statistik_1="";1;Statistik_1+1);
@PostedCommand( [EditDocument]; "1" );
@PostedCommand([FileSave];"1");
@Return(""))
funktioniert es nicht sonder es kommt eine Felermeldung...
Zahl erwartet
Gruß
Cash
-
So kann das auch nichts werden.
Generell: Was Du da machst für "Statistiken", ist nicht besonders smart. Ein Dokument kannst Du Dir dann so maximal 1.700 mal anschauen, dann ist Ende Gelände - das Feld "Statistik" ist voll.
Weiters: Statistik_1 ist unnötig - das wäre das gleiche wie @Elements (Statistik).
Warum man sich aber gar nicht weiter mit der Sache beschäftigen muss: Selbst, wenn Du den EditMode wieder auf False setzen könntest, braucht der User ja nur Strg-B zu drücken ... Vielleicht habe ich das aber nur missverstanden.
Mir erschliesst sich nicht, was Du mit dem @If-Konstrukt überhaupt gedacht hast zu erreichen: Die Formel widerspricht ja jeglicher Syntax für @If.
Du wirst das nur sauber hinbekommen, wenn Du statt @functions LotusScript verwendest.
Bernhard
-
Das es nicht smart ist habe ich mir schon gedacht. Nur leider habe ich bisher keinen Schimmer von LotusScript.
Das beste ist aber die User haben auch keinen schimmer ;D und deshalb kommen die auch nicht auf STRG+B
und 1700 wird dort auch nie erreicht, denn sooft werden die Vordrucke nicht aufgerufen.
Das Unternehmen ist nicht so groß...
Habe auch gerade erst angefangen in Notes Datenbanken zu erstellen. Werde in diesen Jahr noch 6 Tage Fortbildung dort haben, aber bis dahin bin ich halt am probieren. Ob gut oder nicht ist mir erstmal egal hauptsache es läuft...
Mit dem If Konstrukt habe ich versucht zu sagen wenn User hat Rolle Leser dann
gehe in EditMode und fühle die beiden Statistik Felder, wenn nicht mach garnichts.
Gruß
Cash
-
Gemeint haben dürftest Du :
@If(@IsMember("[Leser]";@UserRoles);
@Do(
@PostedCommand( [EditDocument]; "1" );
FIELD Statistik:=@If(Statistik="";@Text(@Now);Statistik:@Text(@Now));
FIELD Statistik_1:=@If(Statistik_1="";1;Statistik_1+1);
@PostedCommand( [EditDocument]; "1" );
@PostedCommand([FileSave];"1")
);
@Return(""))
Ein 'Strg-B' zu verhindern ist auch kein Hexenwerk (auch wenns nur mit Script klappt)
So z.B. lässt Du alle Ottos draußen:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim s As New notessession
continue = source.Editmode And (Instr("OTTO", Ucase(s.username)) > 0)
End Sub
Gruß
Otto
-
mit dem Do funktioniert leider auch nicht. Zwar macht er keine Fehlermeldung aber zählen tut er auch nicht.
Wenn ich mit Rolle Editor reingehe bin ich nicht im EditMode (so soll es sein). Bei der Rolle Leser sieht es zwar gut aus aber die Statistikfelder erhöhen sich nicht.
Cash
-
Sorry, das war wohl etwas missverständlich.
Ich wollte mit dem eingefügten @do eigentlich nur auf die @if-Syntax hinweisen; die ist nämlich so ausgelegt, dass Deine Formel schon mal daher an die Wand fährt.
Weiterhin: wenn Du Deine Formel so im Postopen stehen hast, im
Querymodechange aber den Übergang zum Editmode blockst ...
Wenn Du unbedingt auf @Formel bestehst, bau mal diese im Queryopen ein:
@If(@IsMember("[Leser]";@UserRoles);
@Do(
FIELD Statistik:=@If(Statistik="";@Text(@Now);Statistik:@Text(@Now));
FIELD Statistik_1:=@If(Statistik_1="";1;Statistik_1+1);
@Prompt(1;@Text(Statistik_1); "EDITMODE!")
);
@Return(""))
Gruß
Otto