Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: bob am 16.08.02 - 18:04:13
-
Hi,
folgendes Script (für Aktionsbutton im Eingangsordner) in einem Mailfile macht eine "Quoted Reply" also eine Antwort in der jede Zeile mit Quotes beginnt.
Was mir jetzt noch fehlt, damit dies identisch ist mit "Antwort" etc.: falls an dem Dok nichts geändert wird und die Esc-Taste gedrückt wird, soll Notes das Dok einfach schließen ohne einer Abfrage "Fenster Schließen ....".
Danke schon im Voraus!
Bob
Und nun das Script (in "Click" der Aktion kopieren):
Sub Click(Source As Button)
Dim session As New NotesSession
Dim thisDB As NotesDatabase
Dim coll As NotesDocumentCollection
Dim uiws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidocReply As NotesUIDocument
Dim rtitemBody As Variant
Dim sBodyOriginal$
Dim sBodyConverted$
Dim vntMailDbFile,vntxdMailDbServer
Set thisDB = session.CurrentDatabase
Set coll = thisDB.UnprocessedDocuments
If coll.count > 1 Then
Msgbox "Diese Aktion kann nicht auf mehrere gewählte Dokumente ausgeführt werden !", 16, "Warnung:"
Exit Sub
End If
'We will process only one document even if the user marked multiple ... So the user won't lost the overview, and we will get no troubles with too many windows ...
Set doc = coll.GetNthDocument (1)
Set rtitemBody=doc.GetFirstItem("Body")
sBodyOriginal=rtitemBody.GetFormattedText(False,0)
vntMailDbServer=Evaluate("@Subset(@MailDbName;1)")
vntMailDbFile=Evaluate("@Subset(@MailDbName;-1)")
Set uidocReply=uiws.ComposeDocument(Cstr(vntMailDbServer(0)),Cstr(vntMailDbFile(0)), "Reply")
'If the user marked one document but his cursor points to another doc, the body of the marked doc will be converted,
'but From and Subject will be taken from the documents the cursor points to:
Call uidocReply.FieldSetText ("SendTo", doc.From (0) )
Call uidocReply.FieldSetText ("Subject", "Re: " & doc.Subject (0) )
sBodyConverted=ManipulateReplyText(doc, sBodyOriginal)
Call uidocReply.FieldSetText("Body", sBodyConverted)
End Sub
Function ManipulateReplyText (note As NotesDocument, body As String)
'Adding > to the begining of each line of the "History text" and
'Aligning the text Left (wrapping)
Print "Formatting ""History"" text"
Dim bd As Variant
Dim Header As NotesItem
Dim dateItem As NotesItem
Dim InFrom As NotesName
Dim GetInternetFullName$, HeaderString$, pos%, tmpString$, pos1%, dont%,tmp$
Dim y%, x%, b%, xx%, xb
'dividing the text to lines and addding the > sign
If note.hasitem("$AdditionalHeaders") Then
'starting here: inbound messages seem to have $AdditionalHeaders
Set Header=note.GetFirstItem("$AdditionalHeaders")
If Header.values(0) = "" Then
'GetInternetFullName=note.InheritedFrom(0)
GetInternetFullName=note.From(0)
Goto Continue
End If
Else
If Not note.HasItem("tmpAdditionalHeaders") Or note.tmpAdditionalHeaders(0)="" Then
'GetInternetFullName=note.InheritedFrom(0)
GetInternetFullName=note.From(0)
Goto continue
End If
Set Header=note.Getfirstitem("tmpAdditionalHeaders")
End If
HeaderString=Header.values(0)
pos=Instr(HeaderString,"From: ")
tmpString=Mid(HeaderString,pos+6)
pos1=Instr(tmpString,"<")
If pos1=0 Then 'The full name will appear in (...)
pos1=Instr(tmpString,"(")
tmpString=Mid(tmpString,pos1+1)
pos1=Instr(tmpString,")")
GetInternetFullName=Mid(tmpString,1,pos1-1)
dont=True
Goto Continue
End If
tmpString = Mid(tmpString,1,pos1-1)
pos=Instr(tmpString,|"|)
If pos<>0 Then
tmpString=Mid(tmpString,pos+1)
pos=Instr(tmpString,|"|)
GetInternetFullName=Mid(tmpString,1,pos-1)
Else
GetInternetFullName=tmpString
End If
Continue:
Set InFrom=New NotesName(GetInternetFullName)
' and starting here: I found that inbound messages had a PostedDate item, Not tmpSentOn
If note.HasItem("tmpSentOn") Then
postDate = note.tmpSentOn(0)
Else
Set dateItem = note.GetFirstItem("PostedDate")
postDate = dateItem.Text
End If
tmp="On " & postDate & note.tmpSentOn(0) & " " & InFrom.Common & " wrote:" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "> "
y=1
b=1
For x=1 To Len(body)
xx=Asc(Mid(body,x,1))
If x<>Len(body) Then xb=Asc(Mid(body,x+1,1))
'Now that we know the current and the next characters we can consider whether they will cause a line feed, so we can insert our ">".
If xx=10 Or xx=13 Or xx=11 Or xx=12 Then
'if this combination occurs then we skip the next one so we don't LF twice.
If xx=10 And xb=13 Or xx=13 And xb=10 Then
x=x+1
tmp=tmp & Chr (xx) & Chr (xb) & "> "
Else
tmp=tmp & Chr(xx) & "> "
End If
b=1
Else
tmp=tmp & Mid(body,x,1)
b=b+1
End If
Next
ManipulateReplyText=tmp
End Function
-
*** nach oben ***
-
schönes Script...nur kA was drin steht ;D
Egal, mal eine Idee: probier es mal mit SaveOptions = "0"
-
Hi,
vielleicht hab ich mich nicht deutlich genug ausgedrückt, jedenfalls die Saveoptions auf "0" setzen kann nicht das richtige sein.
Was macht das Script genau:
Man ist z.B. im Maileingang und klickt auf den Button "Antwort mit >", dann wird eine Art "Antwort mit Protokoll" erzeugt, wobei aber Formatierungen (fettschrift etc.) rausgenommen werden, und jede Zeile ein ">" enthält. Dies ist bei vielen Mail-Clients Standard aber eben nicht bei Notes (in R6 soll dies wohl implementiert sein).
Wenn man aber jetzt auf diesen Button klickt, aber dann doch nichts macht mit dem Dok (also keine Änderung) und mit ESC wieder rausgeht, kommt trotzdem ein Requester "Änderungen speichern? etc."
Und genau dies soll nicht passieren. Denn wenn man z.B. im Maileingang auf "Antwort mit Protokoll" geht, aber nichts ändert, kommt beim Schließen auch keine Abfrage.
Vielleicht hat doch noch jem. eine Lösung.
So long,
Bob
-
bob, ??? SaveOptions regelt schon immer die SpeicherAbfrage. Daher weiß ich jetzt nicht, was Du sonst noch benötigst?
Also nochmals: setze ein Feld namens "SaveOptions".
Default Wert beim Laden/Erzeugen des Docs eine textliche "0". Egal, was Du nun noch ins Doc reinschreibst als User, und dann ESC drückst= es kommt keine Meldung, nix.
Wenn aber eine Abfrage erfolgen soll (also SaveOptions auf "1"), mußt Du checken, ob sich was an irgendeinem Feld geändert hat. Das wären die Standardfelder SendTo, Blindcopyto, CopyTo, Subject und Body. Das Script dazu, wie man Felder "überwachen" kann, findest Du heute aktuell im Forum.
Notes Help:
Interaktionen mit dem Dialogfeld "Dokument speichern"
Die für die Felder "SaveOptions", "Sign" und "Encrypt" definierten Werte setzen die Benutzereinstellungen im Dialogfeld "Dokument speichern" außer Kraft.
Zusammengefasst:
SaveOptions = "0", wenn keine Abfrage bei ESC
kommen sollen.
SaveOptions = "1", wenn eine Abfrage mit Feldüberwachung bei ESC kommen soll.
-
Mit der
FIELD SaveOptions := "0"
Lösung muss man aber aufpassen, da dadurch das Speichern eines Dokument im UI explizit unterbindet. Das heisst auch, wenn der User Änderungen macht, werden diese nicht gespeichert !!!
Man kann das Dokument dann nur im Backend speichern, mit
doc.Save(...)
Gruß Andreas
-
"Man kann das Dokument dann nur im Backend speichern, mit doc.Save(...) " *kratz*
dann hätte man SaveOptions auch in Notes 3 nicht verwenden können. Daher geht man ja immer zwei Wege, um den aktuellen Zustand des Feldes "SaveOptions" (üblicherweise ein Berechnet Zur Anzeige auf @if leer - dann "0" - sonst Feld steht, damit man nicht hin und herschalten muß beim Closen/Re-Open) zu switchen.
1 Weg: man zwingt den User, einen Button zu verwenden, der beim Klick Field SaveOptions="1" setzt
2 Weg: man überwacht best. Felder auf Änderungen, die zum Switch "0">"1" führen
Kann man mit berechneten Felder-Formeln machen, Formel/ScriptButtons, QuerySave und und und...