Autor Thema: Spezial-Script: keine Änderung umsetzen  (Gelesen 1741 mal)

Offline bob

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • R5
Spezial-Script: keine Änderung umsetzen
« 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
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline bob

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • R5
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #1 am: 20.08.02 - 19:55:10 »
*** nach oben ***
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #2 am: 21.08.02 - 03:24:33 »
schönes Script...nur kA was drin steht  ;D
Egal, mal eine Idee: probier es mal mit SaveOptions = "0"
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline bob

  • Aktives Mitglied
  • ***
  • Beiträge: 166
  • Geschlecht: Männlich
  • R5
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #3 am: 21.08.02 - 21:27:48 »
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
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #4 am: 22.08.02 - 09:24:16 »
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.
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Glombi

  • Gast
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #5 am: 23.08.02 - 09:48:11 »
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
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Spezial-Script: keine Änderung umsetzen
« Antwort #6 am: 23.08.02 - 09:59:47 »
"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...
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz