Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Annette am 02.06.08 - 15:52:49
-
Hallo an alle Experten,
ich sitze gerade vor folgendem Problem und komme (auch mit Hilfe der bestehenden Einträge nicht so recht weiter) :P:
Über Script erstelle ich im Hintergund ein Profildokument und setzte den aktuellen Usernamen (canonicalize) in ein Autorennamenfeld (isAuthors = True).
Wenn dieser User das Profildokument über Script (uidoc = ws.edit.profile) öffnet, kann er das Dokument nicht bearbeiten. Lt. Eigenschaften ist aber das Feld "AuthorNames" vorhanden und auch gefüllt.
Hat vielleicht jemand eine ähnliche Erfahrung gehabt und eine Ursache/Lösung gefunden?
Vielen Dank für jede Hilfe, selbst komme ich irgendwie nicht weiter :-:
-
stell doch mal den Code rein
-
HAllo, der gekürzte Code sieht so aus:
Function WriteProfil(doc As NotesDocument) As Variant
Dim session As New NotesSession
Dim db As NotesDatabase
Dim profiledoc As NotesDocument
Dim level As Integer
Dim username As NotesName ' Person des Profildok
Dim StrKonfigFeld As String ' Name des Konfig-Feldes in dem die Feld-Liste steht
Dim StrKonfigFeldOwn As String ' Name des Konfig-Feldes in dem die Profil-Feld-Liste steht (nur bei eigenen Anträgen)
Dim VarProfilFeldListe As Variant
Dim StrProfilFeld As String, StrDokumentFeld As String
Dim VarAutoren(1) As Variant
On Error Goto Error_M
' bestimmte Werte in das Profildokument zurückschreiben
Set db = session.CurrentDatabase
level = db.CurrentAccessLevel
If level > 2 Then
Set username = New NotesName (doc.Submitter(0))
Set profiledoc = db.GetProfileDocument( "profil", username.Canonical)
' ... den Code zum Besetzen der anderen Felder habe ich der Übersichtlichkeit wegenentfernt
VarAutoren(0) = "[DBMgr]"
VarAutoren(1) = username.Canonical
Set item = profiledoc.ReplaceItemValue("AuthorNames", VarAutoren)
item.IsAuthors = True
' SPEICHERN
Call profiledoc.Save (True, True)
End If
WriteProfil = True
Exit Function
Error_M:
Call ErrorMessage(Cstr(Lsi_info(2)), Cstr(Erl()), Error, Err(), Cstr(Lsi_info(3)), Cstr(Lsi_info(12)))
Exit Function
End Function
-
Der Code zum BEarbeiten des PRofils ist folgender:
Function ProfilBearbeiten(doc As NotesDocument) As Variant
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim StrUserName As String
Dim username As NotesName
Dim uidoc As NotesUIDocument
Dim StrRollen As Variant
Dim DBMgrRole As Boolean
'=====================================================================================================
On Error Goto Error_M
DBMgrRole = False
Set db = session.currentdatabase
' 1.) ermitteln ob DBMgr oder normaler Anwender
'=====================================================================================================
StrRollen = db.QueryAccessRoles(session.UserName)
Forall x In StrRollen
If x = "[DBMgr]" Then
DBMgrRole = True
End If
End Forall
' a) Anwender ist DBMgr --> Auswahl des Profils
'==========================================================
If DBMgrRole = True Then
' kein Dokument übergeben (z. B. Aufruf aus Gliederung)
If doc Is Nothing Then
Set username = New NotesName(session.UserName)
' Antrag selbst erstellt
Elseif doc.Submitter(0) = "" Then
Set username = New NotesName(doc.Traveler(0))
' Antrag von Drittem
Else
Set username = New NotesName (doc.Submitter(0))
End If
StrUserName = ws.Prompt(PROMPT_OKCANCELEDIT, "Username", "Welches Profildokument soll bearbeitet werden?", Cstr(username.canonical), "")
If StrUserName = "" Then Exit Function
' b) Anwender ist kein DBMgr --> Profil des Anwenders öffnen
'==========================================================
Else
StrUserName = session.UserName
End If
' 2.) Profil zum Bearbeiten öffnen
'=====================================================================================================
Set uidoc = ws.EditProfile( "profil", StrUserName)
Exit Function
Error_M:
Call ErrorMessage(Cstr(Lsi_info(2)), Cstr(Erl()), Error, Err(), Cstr(Lsi_info(3)), Cstr(Lsi_info(12)))
Exit Function
End Function
-
Und was steht im Item Submitter? Warum musst Du dort überhaupt mit der Canonical-Property herumhantieren?
Bernhard
-
Die Unterscheidung Traveler/Submitter wird benötigt, weil das Dokument ggf. von einem Dritten erstellt wurde.
Das Format des Names ist durchgängig canonical, weil ich davon ausging, dass im Autorenfeld dieses Format keine Probleme macht. Es wird auf jeden Fall das richtige Profil geöffnet.
-
Hallo,
ein ähnliches Problem hatte ich auch schon mal.
Ich meine mich zu erinnern das es generell Probleme macht Profil-Dokument mit Autorenfeldern zu versehen. Profildokumente funktionieren nur richtig mit mindestens Editor-Zugriff und dann sind die Autoren-Felder für die Katz.
Verwende statt Profildokumenten lieber normale und einen View-Lookup, glaub mir gerade in größeren Projekte machen die Profildokumente einfach zu viele Probleme.
Grüße David
-
Es gab mal einen Beitrag, wo gezeigt wurde, die man Profildokumente durch normale Dokumente inkl. Zugriffsmethoden ersetzt.
Finde es nur auf die schnelle nicht wieder, ich glaub der Beitrag war von TMC Axel...
-
Guckst du hier: Klasse für UserProfile (http://www.free.dominoserver.de/computer/noteslibrary.nsf/d2d59a3d7fc73a2bc1256a6900638352/74e4b61d04ca824dc1256db20041582a!OpenDocument)
Axel
-
Aaaaah, Sorry Axel. Ja genau die.
-
Aaaaah, Sorry Axel.
Kein Problem.
Axel