Domino 9 und frühere Versionen > ND8: Entwicklung

Feld im Userprofil befüllen

(1/5) > >>

gere:
Hallo zusammen,

Leider bin ich was Lotus Script angeht noch fleißig am Trainieren. Ich habe gerade ein kleines Problem, bei dem ich nicht weiterkomme. Ich habe eine Notes-Anwendung und dort einen Synchronisations-Button in einer Maske, mit dem unter anderem die Email-Adresse des Benutzers aus dem Domino Directory ausgelesen werden soll und in das Userprofil des aktuellen Benutzers in dieser Notes-Anwendung geschrieben werden soll. Das im Userprofil vorgesehene Feld heißt "EmailAddress".

Ich habe nun geschafft, die Email-Adresse aus dem Domino Directory direkt in das Test-Feld "Email" der gerade geöffneten Maske zu schreiben (siehe nachfolgender Code).

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim workspace As New NotesUIWorkspace
   Dim namesDb As New NotesDatabase("", "")
   Dim thisdb As NotesDatabase
   Dim namesView As NotesView
   Dim namesDoc As NotesDocument
   Dim nam As NotesName
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   
   Set nam = s.CreateName(s.UserName)
   
   Call namesDb.Open(s.CurrentDatabase.Server,"names.nsf")
   Set namesView = namesDb.GetView("($VIMPeople)")
   Set namesDoc = namesView.GetDocumentByKey(nam.Abbreviated)
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   
   uidoc.EditMode = True
   doc.Email = namesDoc.InternetAddress(0)
   
   Call doc.Save(True, False, True)
   
End Sub

Wenn ich allerdings von der momentan geöffneten Maske das Feld "EmailAddress" im UserProfile füllen will, bleibt das jeweils leer (siehe nachfolgender Code).

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim namesDb As New NotesDatabase("", "")
   Dim thisdb As NotesDatabase
   Dim namesView As NotesView
   Dim namesDoc As NotesDocument
   Dim nam As NotesName
   Dim pdoc As NotesDocument
   
   Set nam = s.CreateName(s.UserName)
   
   Call namesDb.Open(s.CurrentDatabase.Server,"names.nsf")
   Set namesView = namesDb.GetView("($VIMPeople)")
   Set namesDoc = namesView.GetDocumentByKey(nam.Abbreviated)
   Set thisDb = s.CurrentDatabase
   
   Set pdoc = thisDb.GetProfileDocument("UserProfile","Database")
   pdoc.EditMode = True   
   pdoc.EmailAddress = namesDoc.InternetAddress(0)
   
   Call pdoc.Save(True, False, True)
   
End Sub

Wo liegt denn hier der Fehler? Muss ich pdoc als NotesUIWorkspace deklarieren, damit das Feld "EmailAddress" befüllt werden kann?

Danke für Eure Hilfe,

gere

MadMetzger:
Was ist denn das für ein Dokument, das gerade offen ist. Irgendwie scheinst du hier Schwierigkeiten mit der Unterscheidung zwischen Backend und Frontend zu haben. Aber eben dieser Punkt ist sehr wichtig, wenn man mit Notes und Script unterwegs ist.

Eigentlich wundert es mich, dass der obere Code so auch funktioniert und die Adresse in dem Dokument ankommt. Oder gibt es in der Maske, mit der das Dokument geöffnet wurde das Feld Email gar nicht?

Driri:

--- Zitat ---pdoc.EditMode = True
--- Ende Zitat ---

Was willst Du mit dieser Zeile ? Die Property EditMode gibt es für ein NotesDocument nicht.

Du hast überhaupt kein Errorhandling drin. Zumindest eine Prüfung, ob die Objekte überhaupt sauber zugewiesen wurden, solltest Du einbauen (so ala "If Not (namesDoc Is Nothing)...").

Was sagt der Debugger, wenn Du den Code Step für Step laufen läßt ?

gere:
Hallo zusammen,

Danke für Eure Antworten.

@MadMetzger:

Der Synchronize-Button wird in der Aktionsleiste der momentan geöffneten Eingabemaske gedrückt. Ich habe mit dem oberen Code die Email-Adresse aus dem DD ausgelesen und in das Feld "Email" in der gerade offenen Maske geschrieben. Das hat soweit funktioniert. Wenn ich nun aber mit dem selben Button in der momentan geöffneten Maske die Emailadresse aus dem DD in das Feld "EmailAddress" im Userprofil schreiben will, funktioniert das nicht. Benutzt habe ich hierfür den unteren Code.

@Driri:

Mit der Zeile "uidoc.EditMode = True" versetze ich das aktuell geöffnete Dokument in den Edit-Modus. Das klappt sogar.

Die Frage ist nun, wie ich mit einem Button in der Aktionsleiste einer Maske einen Wert ins Userprofil schreiben kann. Irgendwie muss ich das Userprofil ja im Backend den Edit-Modus versetzen, das Feld füllen und dann wieder im Backend speichern. Nur wie?

Danke + Gruss
gere

koehlerbv:
Ingo meinte eine ganz andere Zeile.

Und: Im Backend gibt es keinen EditMode (ist auch unnötig).

Bernhard

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln