Autor Thema: Problem mit Signatur <-> Richtext-Feld  (Gelesen 2271 mal)

Offline DrNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 183
  • Geschlecht: Männlich
Problem mit Signatur <-> Richtext-Feld
« am: 21.10.05 - 09:22:00 »
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?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Problem mit Signatur <-> Richtext-Feld
« Antwort #1 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

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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline DrNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 183
  • Geschlecht: Männlich
Re: Problem mit Signatur <-> Richtext-Feld
« Antwort #2 am: 21.10.05 - 10:19:46 »
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

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


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


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Problem mit Signatur <-> Richtext-Feld
« Antwort #3 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
...

Wenn nun der User das Dokument ohne zu speichern beendet, ist das Dokument rückstandsfrei weg.


Axel

 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline DrNotes

  • Aktives Mitglied
  • ***
  • Beiträge: 183
  • Geschlecht: Männlich
Re: Problem mit Signatur <-> Richtext-Feld
« Antwort #4 am: 22.10.05 - 07:46:43 »
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
...

Wenn nun der User das Dokument ohne zu speichern beendet, ist das Dokument rückstandsfrei weg.


Axel

 

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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz