Autor Thema: Feld im Userprofil befüllen  (Gelesen 8628 mal)

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Feld im Userprofil befüllen
« am: 21.05.08 - 10:11:45 »
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

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Feld im Userprofil befüllen
« Antwort #1 am: 21.05.08 - 10:23:48 »
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

  • Gast
Re: Feld im Userprofil befüllen
« Antwort #2 am: 21.05.08 - 10:29:37 »
Zitat
pdoc.EditMode = True

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 ?

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #3 am: 21.05.08 - 10:58:06 »
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #4 am: 21.05.08 - 11:04:11 »
Ingo meinte eine ganz andere Zeile.

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

Bernhard

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #5 am: 21.05.08 - 11:12:16 »
@koehlerbv

Sorry, falsch gelesen. Damit dachte ich, das Userprofil irgendwie in den Edit-Modus zu versetzen. War eben ein Versuch, aber genau das ist ja der Knackpunkt, an dem ich gerade hänge. Wie kann ich einen Wert in eine (Profil-)Maske schreiben, die momentan nicht geöffnet ist.

gere

Driri

  • Gast
Re: Feld im Userprofil befüllen
« Antwort #6 am: 21.05.08 - 11:16:50 »
Zitat
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?

Falsch  ;)

Im Backend gibt es keinen EditMode, wie Bernhard schon sagte. Wenn Du das Backend-Dokument sauber im Zugriff hast, kannst Du die Items direkt ändern und das Dokument speichern.

Entweder so, wie Du das schon im Code stehen hast oder über ReplaceItemValue.

doc.Itemname = Wert
Call doc.ReplaceItem("Itemname", Wert)


Darum auch die Frage nach dem Debugger. Bis auf die Zeile pdoc.EditMode = True sieht das auf den ersten Blick korrekt aus.


Driri

  • Gast
Re: Feld im Userprofil befüllen
« Antwort #7 am: 21.05.08 - 11:18:46 »
Was mir gerade noch auffällt, ist diese Codezeile hier :

Zitat
Set pdoc = thisDb.GetProfileDocument("UserProfile","Database")

Steht das wirklich so bei Dir im Code ? Weil dann würde ich mal einen Blick in die Designer Hilfe werfen.
« Letzte Änderung: 21.05.08 - 11:22:15 von Driri »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #8 am: 21.05.08 - 11:20:16 »
Lies Ingos Posting doch mal bitte aufmerksam. Ingo schreibt da auch was vom Debugger, vom Überprüfen von Objekten und vom ErrorHandling.

Und: Dein Code schreibt schon einen Wert in ein ProfileDocument. Die Frage ist nur, ob Du da überhaupt das ProfileDocument beschreibst, welche Du eigentlich beschreiben willst bzw. das, was Du dann öffnest. Du schreibst von "UserProfile", verwendest aber den String "Database" als Schlüssel. Ungewöhnlich ...

Bernhard

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #9 am: 21.05.08 - 11:45:36 »
Also der Debuggen zeigt, dass die Variable pdoc ins Leere zeigt. Also liegt mein Problem dort begraben.
Habe nun die Zuweisung folgendermaßen geändert:

Set pdoc = thisDb.GetProfileDocument("UserProfile", s.getUserName(0))

Die Maske des Userprofils heißt "UserProfile", das ist soweit korrekt. Und da ich ja in das UserProfile des aktuellen Benutzers schreiben will, habe ich nun s.getUserName(0) als Sting verwendet. Allerdings wirft mir Notes nun beim Speichern den Fehler "Not a member: GETUSERNAME" aus. Hier nochmal der ganze Code zur Übersicht:

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", s.getUserName(0))
   pdoc.EditMode = True   
   pdoc.EmailAddress = namesDoc.InternetAddress(0)
   
   Call pdoc.Save(True, False, True)
   
End Sub


Wie kann ich denn der Variable pdoc das Userprofil zuweisen?

gere

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Feld im Userprofil befüllen
« Antwort #10 am: 21.05.08 - 11:50:48 »
es ist:

To get: name$ = notesSession.UserName

also einfach:


Set pdoc = thisDb.GetProfileDocument("UserProfile", s.username)


grüsse

Dau-in


Edit PS: Das ist eine Property und liefert einen String und kein Array, daher kein 'get', siehe Hilfe (ist normal eine Methode) und kein (0), da kein Arrayelement spezifizierbar.
« Letzte Änderung: 21.05.08 - 11:55:35 von DAU-in »
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Driri

  • Gast
Re: Feld im Userprofil befüllen
« Antwort #11 am: 21.05.08 - 11:58:20 »
Und noch einmal der Hinweis : Benutz die Designerhilfe, die ist wirklich gut.

Ich kann mir auch nicht jeden Befehl und jede Syntax merken und nutze beim Programmieren immer mal wieder die Hilfe  ;)


Achja, Du hast immer noch die Zeile pdoc.EditMode = True drin, die kannst Du rausnehmen. Vermutilch füllt dir das Script sonst ein Item "EditMode" in dem Profildokument mit True.

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #12 am: 21.05.08 - 12:58:09 »
OK vielen Dank. Es kommt momentan bei der Ausführung des Codes kein Fehler mehr. Allerdings wird das Feld "EmailAddress" im Profil auch nicht befüllt. Das sollte eigentlich durch die Zeile
pdoc.EmailAddress = namesDoc.InternetAddress(0) passieren. Was fehlt mir denn jetzt noch? Bin da etwas ratlos im Moment.

gere

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Feld im Userprofil befüllen
« Antwort #13 am: 21.05.08 - 13:06:26 »
was zeigt der Debugger für namesDoc.InternetAddress(0)  denn an?

ist namesDoc das richtige Dokument?

und heisst das Feld auf dem Profildokument wirklich EmailAddress?

Ist ein Lieblingsfehler von mir, im Backend das Item Adress belegen und im Frontend sich über den Wert des Feldes Address wundern.

grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #14 am: 21.05.08 - 16:53:29 »
Also das Feld heißt wirklich EmailAddress.
Der Debugger zeigt für namesDoc.InternetAddress(0) folgendes an:

bla bla...
+NAMESDOC
   +ITEMS
      +[16]
         +Name ----> "InternetAddress"
         +Values ---> "Vorname.Nachname@Firma.xy"
bla bla...


Wenn ich namesDoc.InternetAddress(0) als Msgbox ausgeben lasse, bekomme ich den richtigen Wert angezeigt. Nur ins Profil läßt er sich nicht schreiben! Komme hier keinen Schritt weiter.

gere

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Feld im Userprofil befüllen
« Antwort #15 am: 21.05.08 - 16:59:50 »
Was sagt denn der Debugger für dein pdoc, nachdem du die "Übernahme" ausgeführt hast?

Wird überhaupt ein Profildokument gefunden? Was klappt genau nicht?

Offline gere

  • Aktives Mitglied
  • ***
  • Beiträge: 216
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #16 am: 21.05.08 - 17:14:56 »
Der Debugger sagt für pdoc:

bla bla...
+PDOC
   +ITEMS
      +[3]
         NAME ---> "EmailAddress"
         VALUES ---> "vorname.nachname@firma.xy"
         .
         .
         TEXT ---> "vorname.nachname@firma.xy" 
bla bla...

Das Userprofil wird gefunden, allerdings wird nach Ausführen der "Übernahme" das Feld "EmailAddress" nicht befüllt.


Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Feld im Userprofil befüllen
« Antwort #17 am: 21.05.08 - 17:40:36 »
Kannst du bitte einmal den aktuellen Code posten?


edith: du hast aber schon Schreibrechte auf dem Profildokument?
« Letzte Änderung: 21.05.08 - 17:42:07 von DAU-in »
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline MadMetzger

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.052
  • Geschlecht: Männlich
  • f.k.a. Alexis Pyromanis
Re: Feld im Userprofil befüllen
« Antwort #18 am: 21.05.08 - 20:12:15 »
Woran machst du das denn eigentlich fest, dass die Adresse nicht in das Feld übernommen wird? Denn der Debugger sagt glasklar, dass in dem Dokument ein Item (nicht Feld) mit Namen "EmailAdresse" mit der richtigen Füllung existiert.

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: Feld im Userprofil befüllen
« Antwort #19 am: 21.05.08 - 22:55:47 »
Hat das Profildokument Autorenfelder ?

Prüf mal mit Notespeek, wieviele Profildokumente es in der DB für den Benutzer gibt  ;)

Woran machst Du fest, dass das reinschreiben nicht klappt ?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz