Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: fsinani am 03.09.06 - 16:33:57
-
Hallo amSonntagnixandresvorhaben Spezis,
bei diesem tollen Wetter habe ich mich einfach mal an meinen Designer gesetzt und komm hier jetzt nicht mehr weg.
Ich brauche eure Hilfe bei folgendem Problem:
Gegeben:
Eine Mailschablone 6.54 deutsch.
Der Chef möchte eine Corporate Identity Signatur einführen. Die soll bei allen gleich aussehen, aber halt natürlich mit den entsprechenden Telefonnummern und Abteilungsnamen.
Ich habe dann im Postopen der DB ein cript, welches aus ($VimPeople) das entsprechende Doc über session.username.abbreviate lädt und die ganzen benötigten Felder in das CalenderProfile des jenigen Users im Feld Signature_1 schreibt. Dieses Feld habe ich in der Maske CalendarProfile von "bearbeitbar" in "berechnet" geändert, damit keiner mehr was eigenes schreiben kann.
Durch den internen Mechanismus läuft das alles auch ganz gut, sogar wenn ich offline bin (das war der Grund, warum ich mich für den Weg mit dem CalenderProfil entschieden habe). Jedoch gibt es einen gravierenden Haken.
Änderungen im NAB (glob. Directory) werden zwar im Onlinemode sofort in das Kalenderprofil reingeschrieben, aber sie sind nicht sofort aktiv. Vermutlich werden die Informationen gecached. Wenn ich nämlichüber Werkzeuge/Vorgaben das Profil öffne und sofort mit OK wieder schliesse, ist alles in Ordnung. Ich möchte dem User aber nicht zumuten (eigentlich will der Chef das nicht!!), bei jeder Änderung, die Vorgaben öffnen und bestätigen zu müssen.
Meine Frage:
Wie refreshe ich das Calenderprofil über script, sodass der User bei starten seines Mailfiles sofort die aktuellste Info als Signatur in seinem Body sehen kann? Es muß aber im KalenderProfile geschrieben sein. Ich möchte den Weg vermeiden, über ein anderes Profil gehen zu müssen.
Vielen Dank im Voraus
fsinani
-
Du könntest mit
'... dein besiheriger Code
' ws uidoc dim...
'profiledoc ist das Backend-Dok. des Profils, das solltest Du schon am Wickel haben
set uidoc = ws.EditDocument( true, profiledoc )
call uidoc.Save
call uidoc.Close
das automatisch machen.
Andreas
-
Hallo Glombi,
danke für deine Antwort.
Das is ein Ausschnitt des Codes.
#####
Dim ws As New NotesUIWorkspace
Dim profdoc As NotesDocument
Set profdoc = db.GetProfileDocument("CalendarProfile")
call profdoc.ReplaceItemValue("Signature_1", Chr(13) & Chr(13) & Chr(13) & tmp)
'Call profdoc.Save(True,False)
Dim uiprofile As NotesUIDocument
Set uiprofile = ws.EditDocument(True, profdoc )
Call uiprofile.save
Call uiprofile.close
#####
steht, wie gesagt, im PostOpen des Datenbankscriptes.
Jetzt habe ich das Phänomen, dass ich beim öffnen der Maildb ein neues Memo erstelle und wieder schliessen will, was dann natürlich mit der Wollen SIe "senden... nur speichern...." Abfrage quittiert wird.
das Profil ist dadurch aber immer noch nicht aktiv.
fsinani
-
Hallo Glombi,
du hast mir dennoch helfen können, denn das hier:
Set uiprofile = ws.EditProfile("CalendarProfile")
call uiprofile.save
call uiprofile.close
... geht auf jeden Fall. Ich probier nochmal ob ich keiner Phatamorgana zum Opfer falle und melde mich nochmal
Vielen Dank nochmal
Edit:
Also ist alles in bester Ordnung. So genau funktioniert es. Nochmals vielen Dank, jetzt kann ich mit meiner Frau doch noch spazieren gehen :love:
-
Hallo liebe Gemeinde,
habe jetzt die Krise bekommen. Nachdem also mein Postopen Script jetzt funktioniert (zumindest bei der guten alten KACHEL - Homepage), habe ich jetzt ein dickes Problem mit einigen Usern, die die tolle "Welcome Page" verwenden. Da läuft mein Script auf einen Fehler, warscheinlich mit dem uidoc.save. Ist in diesem Kontext nicht ausführbar. Ich weiss jetzt leider nicht, was ich noch ändern kann, damit mein Postopen - Script auch bei den WelcomePage usern läuft.
jmd. von euch auch schonmal sone Erfahrung gemacht? Ich hab jetzt echt keine Lust, die ganze Programmierung wieder abzuändern?
Danke für eure Hilfe
-
Vielleicht gehts wenn Du den Traget Frame setzt. Also sowas in der Art:
call ws.SetTargetFrame("_blank")
Set uiprofile = ws.EditProfile("CalendarProfile")
call uiprofile.save
call uiprofile.close
oder
call ws.SetTargetFrame("_top")
call ws.SetTargetFrame("_self")
Probiere es mal damit.
Andreas
-
Vielen Dank für den Hinweis,
Das kann ich aber erst heute abend machen.
Ich gebe auf jeden Fall morgen wieder bescheid.
Danke
fsinani
-
Also wider erwarten habe ich mit einem Kollegen gesprochen, der da jetzt schon Zugriff hat und das testen kann.
Mal angenommen, das funzt mit call ws.SetTargetFrame("_top").
Was passiert aber, wenn die MailDB in einem anderen Frame (zb: _left) auf ist, bzw. kann ich den Code auch für diejenigen verwenden, die über die Kachelansicht arbeiten?
Danke im Voraus
fsinani
EDIT'
Tja, leider erfolglos, auch mit dem SetTargetFrame. Ich erhalte immer noch den Fehler, dass er das uidoc über die bereits in der WelcomePage geöffnete MailDB nicht bekommen kann. Meine Signatur wird dann auch garnicht ins Body übernommen.
Am besten wäre es, wenn der Mist garnicht erst über Frontend ins CalendarProfil geschrieben werden müsste, sondern über Backend, nur leider ging das ja irgendwie nicht so richtig.
Son mist.
-
So,
und jetzt klappt das alles ganz anders!!
O.K. habe alle ui - Sachen rausgeschissen. Speichere das CalendarProfile im Backend. Allerdings setze ich davor noch ein call CalendarProfil.ComputeWithForm(True,False)
Jetzt geht das.
Ichhatte das schon vorher mal ausprobiert, was aber nicht funktionierte. Jetzt habe ich herausgefunden, dass wohl mein Client (6.54) beschädigt war, denn nach der Neuinstallation geht es sowohl mit 6.54 alsauch mit 6.55.
Das ist mal wieder Toll, dass einem sone sch....e passiert.
Ich bedanke mich recht herrzlich für deine Hilfe Glombi.
bis zum nächsten Problem
ciao
-
Hallo!
Könntest Du mir wenn möglich bitte mal den kompletten Code für die Kalenderprofil-Aktualisierung posten. Habe hier das selbe Prob. Wäre spitze! :-[
-
Ich nehme auch eins :-) Wäre sehr verbunden wenn ich das Script sehen dürfte. Ich habe das Gefühl, dass die nette Änderung der Gesetzgebung bzgl. eMail-Signaturen bei vielen Chefs den gleichen Druck auf die IT auslöst :-)
Jenson
-
Kannst du mir bitte auch das script schicken. Mein Chef möchte auch eine einheitliche Signatur.
Vielen Dank
Wilfried
-
Sorry, daß ich mich erst so spät melde
also klar- ich kann euch das script dafür geben.
Ihr müsst aber bis morgen warten, da ich die DB nicht zuhause habe.
Erwartet jedoch nicht besonderes.
bis morgen
-
Sorry ich bin spät dran,
aber hättest du dieses Sricp auch für mich??
-
Und nochmal sorry,
haben einen ekelhaften Stromausfall gehabt, so kurz bevor wir unsere neue leistungsfähigere USV bekommen haben.
Tja, man muß auch ma verlieren können !!
Also nun dann jetzt erst der gewünschte Code:
im Postopen des DB Scriptes kommt folgender Code:
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim nab As NotesDatabase
Dim profdoc As NotesDocument
Dim nabview As NotesView
Dim nabdoc As NotesDocument
Dim nabName As New NotesName(s.UserName)
Dim key As String
Set db = s.CurrentDatabase
Set nab = s.GetDatabase(db.Server,"names.nsf") ' Achtung bei Verwendung mehrerer MailServer
Set nabview = nab.GetView("($VIMPeople)")
key = nabName.Abbreviated
If Not ( db.Server = "" ) Then ' Nur wenn DB auf Server nicht lokal
Set nabdoc = nabview.GetDocumentByKey(key)
'################# Signatur zusammenbauen################
' Funktion mit mehrfach - Moeglichkeit
Dim F_Val As Variant
Dim F_item As NotesItem
Set F_item = nabdoc.GetFirstItem("Department") ' Nur nötig, wenn Mehrfachwerte im Feld Department
f = 0
If Not F_item.Text = "" Then
Forall v In F_item.Values
tmp_Funktion = tmp_Funktion & v & Chr(13)
End Forall
Else
tmp_Funktion = ""
End If
tmp_name = nabname.Common + Chr(13)
tmp_Firma = nabdoc.CompanyName(0) + Chr(13)
tmp_PLZ = nabdoc.OfficeZip(0)
tmp_City = nabdoc.OfficeCity(0)
tmp_strasse = nabdoc.OfficeStreetAddress(0) + Chr(13)
tmp_fon = nabdoc.OfficePhoneNumber(0)
If Not tmp_fon = "" Then
tmp_telefon = "Phone" & Chr(9) & tmp_fon & Chr(13)
Else
tmp_Telefon = ""
End If
tmp_fax = nabdoc.OfficeFAXPhoneNumber(0)
If Not tmp_fax = "" Then
tmp_telefax = "Fax" & Chr(9) & tmp_fax & Chr(13)
Else
tmp_Telefax = ""
End If
tmp_mob = nabdoc.CellPhoneNumber(0)
If Not tmp_Mob = "" Then
tmp_Mobil = "Mobile" & Chr(9) & tmp_mob & Chr(13)
Else
tmp_Mobil = ""
End If
Dim M_Val As Variant
Dim M_item As NotesItem
Set M_item = nabdoc.GetFirstItem("InternetAddress")
Forall v In M_item.Values
tmp_M = tmp_M & v & Chr(13)
Exit Forall ' direkt nach der ersten Mailadresse rausspringen:
End Forall
tmp_Mail = "mailto:" & tmp_M
tmp_web ="http://www." & Strtoken(tmp_Mail,"@",2)
tmp_signatur = Chr(13) & Chr(13) & Chr(13) & tmp_name & tmp_Funktion & tmp_Firma & tmp_Strasse & tmp_PLZ & " " & tmp_City & Chr(13) & Chr(13) & tmp_Telefon & tmp_Telefax & tmp_Mobil & Chr(13) & tmp_Mail & tmp_web
'#######################################################
Set profdoc = db.GetProfileDocument("CalendarProfile")
Call profdoc.ReplaceItemValue("Signature_1", tmp_signatur )
Call profdoc.Save(True,False)
Dim uiprofile As NotesUIDocument
If Not profdoc.owner(0) = "" Then
Set uiprofile = ws.EditProfile("CalendarProfile")
Call uiprofile.save
Call uiprofile.close
Else
err_msg = Msgbox("Die Datenbank wird aktualisiert und muss dafür geschlossen werden. Bitte öffnen Sie sie anschliessend erneut.",16, "DATENBANKAKTUALISIERUNG")
Call db.close
End If
End If
CODE ENDE
In meinem Fall bin ich dann noch zusätzlich hingegeangen und habe im CalenderProfile die Bearbeitung der Signatur deaktiviert (von bearbeitbar in berechnet). Allerdings ist die Signatur trotzdem im Body entfernbar bzw. veränderbar.
Es gibt da wohl auch professionelle Tools, die das anders und unveränderbar können, die aber wat kosten.
Naja und bei uns reichte das halt so.
Ich hoffe,, ihr könnt es gebrauchen
@headshrinker,
>> wir das auch bei internen Mails gesetzt? <<
leider ja. Das liegt daran, daß ich mir die Mühe nicht machen wollte, in den unendlichen Weiten der Lotus Development - Klassen rumzusuchen, wann die Mail entgültig an den Mailer übergeben wird. Denn nur da kann man in die Mail etwas Text hinzufügen,
1. ohne daß ein Benutzer es mehr verändern kann und
2. man dann dort überprüfen kann, wohin die Mail geht.
Ich würde mir das aber gut überlegen, wie du das anstellen willst. Da eine solche Abfrage auch auf die Performance geht. Ausserdem musst du dir überlegen, was du machen willst, wenn z. B. die mail im SendTo 4 interne und 1 externen Empfänger hat. Die Abfrage darfst du dann auch auf CopyTo und BCCTo ausdehenen.
Bei 2000 Notesusern ist das wohl gut zu überlegen!!
fsinani
-
Moin,
der Trend geht eindeutig zur "zweit-USV" ;)
In meinem Fall bin ich dann noch zusätzlich hingegeangen und habe im CalenderProfile die Bearbeitung der Signatur deaktiviert (von bearbeitbar in berechnet). Allerdings ist die Signatur trotzdem im Body entfernbar bzw. veränderbar.
Hast Du dazu einen Wert im CalendarProfile verändert, so dass die User die Signatur nicht mehr ändern können, oder hast Du im Design der Datenbank etwas verändern müssen damit dass zuverlässig funktioniert?
Grüsse
Jenson
-
Hallo Jenson,
ja zweit-usv ist schön!
Also im CalendarProfile habe ich das Feld Signature_1, jedenfalls das Feld, wo die Signatur im CalendarProfile steht, von bearbeitbar auf berechnet umgestellt.
Das gleiche habe ich auf diesem Registerblatt mit allen Feldern gemacht.
Dann kann der User zumindest im Profil die Signatur nicht mehr ändern. Der Vorteil ist, daß das auch bei einer lokalen replik der Fall ist (z.B. für Ad´s)
fsinani