Domino 9 und frühere Versionen > Entwicklung
Problem mit Signatur <-> Richtext-Feld
(1/1)
DrNotes:
Hallo Spezialisten,
ich habe folgendes Problem:
Meine Systemumgebung:
-> jeder Mitarbieter hat eine eigene Mailbox, wo man seine Signatur definiert
-> Ich habe ein Projekte-Datenbanken-Portal, mit dem ich neue Projekte (derzeit 2000 Files) anlegen/zugreifen kann.
Jedes dieser Projekte ist eine eigene Datei (nsf).
->Jeder Mitarbeiter kann E-Mails aus der Projekte-Db schicken.
Meine Idee:
Wenn der Mitarbeiter ein E-Mail direkt aus der Projekte-Db sendet, soll die Signatur aus der Mailbox ins Memo-Formular geladen werden (das auslesen der jeweiligen Signatur funktioniert bereits und steht als String zur Verfügung).
Mein Problem:
Wenn der Mitarbeiter auf "Neues Memo" in der Projekte-Db klickt, hätte ich gerne, dass die Signatur im RText-Feld steht, ohne dass das Mail vorher abgespeichert und refresht wird, wie schon in anderen Artikeln besprochen (also im Prinzip ganz gleich wie in der Mail-Schablone).
Da ich mein Memo mit Compose(Memo) öffne, funktioniert die ganze Geschichte aber nicht so wie in der Mailbox (und die is irgendwie ziemlich kompliziert)
Hat da jemand ein Lösung?
Axel:
Hi,
ich habe das Ganze mal in grauer Vorzeit mit Script realisiert.
--- Code: ---Function CreateMailMemo(varSendTo As Variant, sSubject As String) As Integer
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim maildb As NotesDatabase
Dim maildoc As NotesDocument
Dim profile As NotesDocument
Dim sMailAdress As String
Dim sMailSubject As String
CreateMailMemo = 0
Set maildb = New NotesDatabase("","")
maildb.OpenMail
Set profile = maildb.GetProfileDocument("CalendarProfile")
Set maildoc = New NotesDocument(maildb)
maildoc.Form = "Memo"
maildoc.Logo = profile.DefaultLogo(0)
maildoc.Principal = profile.Owner(0)
maildoc.SendTo = varSendTo
maildoc.Subject = sSubject
Call workspace.EditDocument(True, maildoc)
End Function
--- Ende Code ---
Der Funktion, sie stammt aus einer Adress-DB, werden die Mailadresse und die Betreffszeile als Parameter übergeben.
Ob das Ganze auch mit der Formelsprache zu machen ist, kann ich nicht sagen. Ich hatte es damals versucht, bin aber gescheitert.
Axel
DrNotes:
--- Zitat von: Axel am 21.10.05 - 10:02:00 ---Hi,
ich habe das Ganze mal in grauer Vorzeit mit Script realisiert.
--- Code: ---Function CreateMailMemo(varSendTo As Variant, sSubject As String) As Integer
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim maildb As NotesDatabase
Dim maildoc As NotesDocument
Dim profile As NotesDocument
Dim sMailAdress As String
Dim sMailSubject As String
CreateMailMemo = 0
Set maildb = New NotesDatabase("","")
maildb.OpenMail
Set profile = maildb.GetProfileDocument("CalendarProfile")
Set maildoc = New NotesDocument(maildb)
maildoc.Form = "Memo"
maildoc.Logo = profile.DefaultLogo(0)
maildoc.Principal = profile.Owner(0)
maildoc.SendTo = varSendTo
maildoc.Subject = sSubject
Call workspace.EditDocument(True, maildoc)
End Function
--- Ende Code ---
Der Funktion, sie stammt aus einer Adress-DB, werden die Mailadresse und die Betreffszeile als Parameter übergeben.
Ob das Ganze auch mit der Formelsprache zu machen ist, kann ich nicht sagen. Ich hatte es damals versucht, bin aber gescheitert.
Axel
--- Ende Zitat ---
Naja das auslesen der Signatur hab ich ja schon (ich hab das Ganze mal auf einen Button gelegt), und das Reinkopieren funktioniert auch, aber blöderweise wird halt das Dokument gespeichert und neu geöffnet.
--> Irgendwann hab ich dann mal viele Dokumente drinnen, die eigentlich keiner wollte.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim mailbox As NotesDatabase
Dim MailPath As String
Dim user As String
Dim AbbreviatedName As NotesName
Dim VornameInitial As String
Dim Nachname As String
Dim VName As String
Dim profildocument As Notesdocument
Dim Signature As Variant
MailPath = session.GetEnvironmentString("IntecoMailDefaultDir", False)
Server = session.GetEnvironmentString("IntecoMasterServer", False)
User = session.UserName
Set AbbreviatedName = New NotesName(User)
User = AbbreviatedName.Common
VornameInitial = Left(User,1)
Nachname = Mid(User,Instr(User, " ")+1, Len(User) - Instr(User, " "))
VName =Left(VornameInitial & Nachname,8)
Set mailbox = session.GetDatabase( server, MailPath & Vname)
Set profildocument = mailbox.GetProfileDocument( "CalendarProfile")
Signature= profildocument.GetItemValue( "Signature_1" )
Messagebox( Signature( 0 ) )
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Dim rtitem As NotesRichTextItem
Set rtitem = doc.CreateRichTextItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
rtitem.values = "Supa"
Call rtitem.AddNewLine( 1 )
Call rtitem.AppendText( "Hier soll was rein" )
Call rtitem.AddTab( 2 )
Call rtitem.AppendText( "und hier noch mal was" )
Call doc.Save( False, True )
End If
Call Reopen(doc)
End Sub
Function ReOpen(docThis As NotesDocument) As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim dbThis As NotesDatabase
Dim unid As String
ReOpen = 0
Set dbThis = docThis.ParentDatabase
Call docThis.Save(True , True)
unid = docThis.UniversalID
docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden
Set uidoc = ws.CurrentDocument
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
' # ... das Feld SaveOptions wieder entfernen...
docThis.RemoveItem("SaveOptions")
Call docThis.Save( True , True )
End If
ReOpen = 1
Print "Das Dokument wurde erneut geöffnet"
End Function
Axel:
Hi,
wenn du das ganze im Frontend machst, dann bleibt dir nichts anderes übrig.
Besser ist es das Dokument im Backend zu erzeugen und dann anzuzeigen.
Beispielsweise so:
--- Code: ---Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim currentdb As NotesDatabase
Dim uidocNew As NotesUIDocument
Dim docNew As NotesDocument
Set currentdb = session.CurrentDatabase
Set docNew = New Document(currentdb)
'Füllen der Felder, auch der RTF-Felder
Call docNew.Save(True,False) 'Temp. Speichern des Backend-Doc. damit RTF-Feld angezeigt wird.
Set uidocNew = workspace.EditDocument(True, taskdoc) 'Dokument im Frontend öffnen
Call docNew.Remove(True) 'Das Dokument, das im Backend erstellt wurde, löschen
...
--- Ende Code ---
Wenn nun der User das Dokument ohne zu speichern beendet, ist das Dokument rückstandsfrei weg.
Axel
DrNotes:
--- Zitat von: Axel am 21.10.05 - 12:22:03 ---Hi,
wenn du das ganze im Frontend machst, dann bleibt dir nichts anderes übrig.
Besser ist es das Dokument im Backend zu erzeugen und dann anzuzeigen.
Beispielsweise so:
--- Code: ---Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim currentdb As NotesDatabase
Dim uidocNew As NotesUIDocument
Dim docNew As NotesDocument
Set currentdb = session.CurrentDatabase
Set docNew = New Document(currentdb)
'Füllen der Felder, auch der RTF-Felder
Call docNew.Save(True,False) 'Temp. Speichern des Backend-Doc. damit RTF-Feld angezeigt wird.
Set uidocNew = workspace.EditDocument(True, taskdoc) 'Dokument im Frontend öffnen
Call docNew.Remove(True) 'Das Dokument, das im Backend erstellt wurde, löschen
...
--- Ende Code ---
Wenn nun der User das Dokument ohne zu speichern beendet, ist das Dokument rückstandsfrei weg.
Axel
--- Ende Zitat ---
Hallo Axel, vielen Dank für deine Idee - hat bei mir leider nicht funktioniert.
Aber, ich habe jetzt eine Lösung, die funktioniert (und das ganze geht, ohne dass das Dokument gespeichert werden muss - genau so, wie ich es wollte).
Des Rätsels Lösung (eigentlich ganz einfach):
----------------------------------------------------------
Ich hab einfach die implementiere Funktion "In neues Memo Kopieren" abgewandelt, die ja im Prinzip auch so funktioniert.
Da übernehm ich einfach den Body des aktuell markierten Dokumentes nicht, sondern schreibe stattdesssen meinen Signatur-String rein und schon funktioniert das alles wunderbar (ohne Reopen etc.).
LG
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln