Lotus Notes / Domino Sonstiges > Tipps und Tricks
Formel für Mail mit Vorlage
Deti:
--- Zitat von: wflamme am 18.11.02 - 18:40:48 ---Ev. hilft der Code unter 'New Memo - Using Stationary'? Oder um welche Art Vorlagen geht es?
--- Ende Zitat ---
Hallo Wolfgang,
ich glaube, das ist der Code, den auch Christopher schon genannt hat:
Sub Click(Source As Button)
Dim session As New notessession
Dim uiws As New notesuiworkspace
Dim collection As notesdocumentcollection
Dim noteUIEditDocument As notesuidocument
Dim database As NotesDatabase
Set noteCursorDoc = session.currentdatabase.createdocument
Set database = session.currentdatabase
Set collection = uiws.Picklistcollection(PICKLIST_CUSTOM, False, database.server, database.filepath, "Vorlage", "Vorlage wählen", "Wählen Sie bitte eine Vorlage für das neue Memo.")
Set noteCursorDoc = collection.getfirstdocument
If Not noteCursorDoc Is Nothing Then
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
End If
End Sub
Kannst Du mir sagen, wie ich diesen Code abändern muss, um z.B. eine Vorlage mit dem Namen "test" zu öffnen. Im obigen Code wird ja lediglich das Fenster für die Auswahl der Mailvorlage geöffnet. Ich möchte aber eine feste Vorlage direkt zur Erzeugung eines neuen Memos heranziehen.
Ich habe den Teil ab "Set collection..." weggelassen und stattdessen eingegeben:
noteUIEditDocument = "test"
Das funktioniert aber nicht. Ich nehme an, die Syntax stimmt nicht oder ich muss einen Pfad o.ä. angeben.
Hast Du (oder Christopher, falls Du noch mitliest) einen Tipp, wie es gehen könnte ?
Gruß
Deti
Rob Green:
um eine hartverdrahtete Vorlage zu nutzen, könnte man folgendes tun, in einem Agent natürlich, der über ein Smarticon per @command([toolsrunmacro];"(AgentXYZ)") aufgerufen wird.
für eine Vorlage, die stets in der gleichen DB liegt, in der auch der User arbeitet:
Dim Session as New NotesSession
Dim DB As NotesDatabase
Set DB = Session.currentdatabase
Dim VorlageDoc As NotesDocument
Dim ProfileDocument As NotesDocument
Dim var_unid as String
'in einem Profildoc ist die DocUNID des 1 Vorlagedocs gespeichert, diese benötigt man, um das Vorlagedoc im Script zu fokussieren
Set ProfileDocument = DB.GetProfileDocument( "PROFIL_XYZ")
var_unid = Feld_Mit_DocUNID_Der_Vorlage(0)
'und hier bekomme ich das Vorlagendoc
Set VorlageDoc = DB.GetDocumentByUNID( var_unid )
'und hier kopiert man das Vorlagendoc in ein neues Doc
Call VorlageDoc.CopyToDatabase( DB )
'der letzte Abschnitt ruft das neue Doc im Editmode in das Frontend des Users auf
Dim uiws As New notesuiworkspace
Dim noteUIEditDocument As notesuidocument
Set noteUIEditDocument = uiws.Editdocument(False, VorlageDoc)
Für eine Vorlage, die stets in einer zentralen DB liegt, und der User die Vorlage in seiner persönlichen DB zum Erstellen von Docs verwendet:
Dim Session as New NotesSession
Dim ZielDB as NotesDatabase
Set ZielDB = Session.currentdatabase
Dim VorlageDB As NotesDatabase
Set VorlageDB = New NotesDatabase( "Server_123", "Zentral.nsf" )
Dim VorlageDoc As NotesDocument
Dim ProfileDocument As NotesDocument
Dim var_unid as String
Set ProfileDocument = VorlageDB.GetProfileDocument( "PROFIL_XYZ")
var_unid = Feld_Mit_DocUNID_Der_Vorlage(0)
Set VorlageDoc = VorlageDB.GetDocumentByUNID( var_unid )
Call VorlageDoc.CopyToDatabase( ZielDB )
Dim uiws As New notesuiworkspace
Dim noteUIEditDocument As notesuidocument
Set noteUIEditDocument = uiws.Editdocument(False, VorlageDoc)
Müßte so gehen, habs nicht ausgetestet.
Warum ich die DocUNID genommen habe, ergibt sich aus dieser Überlegung: http://nsftools.com/tips/NotesTips.htm#noteids
wflamme:
Zunächst mal ist das Grundprinzip, basierend auf einer Aktion wie beim NewMemo-Using stationery:
Set noteCursorDoc = collection.getfirstdocument
If Not noteCursorDoc Is Nothing Then
...also das (gewählte) Vorlagedokument im Backend identifizieren...
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
... Vorlage zum Bearbeiten im Editiermodus öffnen.
Deine Idee war also grundsätzlich richtig, wir müssen im letzten Ausdruck nur ein anderes Vorlage-Backend-Dokument übergeben.
Es gibt natürlich mehrere Möglichkeiten.
Die einfachste ist folgende: Man erstellt eine versteckte Kopie der Ansicht 'Vorlage' zB '($Vorlagenauswahl)' und nimmt die Spaltenformel aus der Spalte 'Vorlage' als erste sortierte Spalte.
Dann kannst Du mit:
Dim vw as notesview
Dim strWantedTemplate={Test}
Set vw=database.GetView({($Vorlagenauswahl)})
Set noteCursorDoc=vw.GetDocumentByKey(strWantedTemplate$)
If Not noteCursorDoc Is Nothing Then
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
Else
MsgBox {Vorlage "Test" nicht gefunden!}
End If
End Sub
... das Dokument über den Key direkt aus der Ansicht finden.
Wenn Du keine neue Vorlagenansicht erstellen willst, dann fällt der Zugriff über den Key weg. Man kann zwar den Key über mehrere Spalten bilden, aber die müssen dazu alle sortiert sein und das ist in dieser Ansicht leider nicht der Fall. Außerdem stören Name und Erstelldatum in der Ansicht, die müßten ja in den Key mit rein.
Alternativen:
- GetDocumentByUNID
Dazu müßte man Wege finden, die UNID der gerade aktuellen Vorlage "Test" rauszufischen, beißt sich also in den Schwanz (räusper, hat niemand was anzügliches zu sagen? gut, dann weiter.)
- die Ansicht "Vorlage" mit GetNextDocument durchlaufen, bis ein Dokument gefunden wird, das im MailStationeryName oder im Subject "Test" stehen hat. Also etwa so:
Dim vw as notesview
Dim strWantedTemplate={Test}
Set vw=database.GetView({Vorlage})
Set noteCursorDoc=vw.GetFirstDocument
Do While Not noteCursorDoc Is Nothing
'Kriterien für richtige Vorlage
If noteCursorDoc.Subject(0)=strWantedTemplate$ Or noteCursorDoc.MailStationeryName(0)=strWantedTemplate$ Then
'/Kriterien für richtige Vorlage
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
Exit Sub
Else
Set noteCursorDoc=vw.GetNextDocument(noteCursorDoc)
Loop
MsgBox {Vorlage "} & strWantedTemplate$ & {" nicht gefunden!}
End Sub
Das dauert zwar etwas länger, aber in der Regel hat man ja nicht tausende von Vorlagen abzuklappern.
HTH
Rob Green:
@wflamme, man sollte noch einwerfen, daß das Ganze auf den Libraries der Mailschablone basiert und wenn die nicht da sind, geht nix. Ist häufiger der Fall, da viele Developer ihre eigene Sache aufziehen, da die Struktur der Notes Mail Libraries zu komplex zum schnellen Einlesen ist.
wflamme:
@Rob
Verstehe ich nicht. Kannst Du den Einwand bitte ein bischen unvorsichtiger formulieren? :)
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln