Autor Thema: SaveOptions = 0 funktioniert nicht  (Gelesen 17088 mal)

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
SaveOptions = 0 funktioniert nicht
« am: 08.01.08 - 21:29:40 »
Hallo zusammen,

ich habe leider ein ganz schön nerviges Problem, dass mich nun schon den ganzen Tag kostet. Ich habe schon sehr viele Forenbeiträge studiert und einiges versucht, doch leider bleibt folgendes Problem bestehen:

Ich schreibe gerade meine Praxisarbeit und wollte eine automatische E-Mail-Weiterleitung mit Word-Anhang und Protokolldatei abhängig von der Firmenhierchie der jeweiligen Notes-Nutzer über einen Aktionsbutton erstellen.

Nachdem der Button gedrückt wird, soll jedoch geprüft werden, ob der E-Mail-Kopf (als Empfänger, Betreff,usw.) und der Body leer sind. Wenn nicht sollen sie geleert werden bzw. es wäre schön, wenn der Body zwischengespeichert werden könnte, um ihn später nach dem Anhängen der Word-Dateien wieder einzufügen. Leider wird dabei ständig gefragt, ob ich speichern möchte - dieses schon häufig diskutierte Thema: Dialogbox. Obwohl ich schon ein SaveOptions eingbaut habe, kommt dieser Fehler. Ich habe auch schon in der Maske Memo solch ein Feld gesetzt, wie es hier in einigen Forenbeiträgen schon geschildert wurde, leider ohne Erfolg.

Domino Server: 5.0.13a LN-Client: 6.5

Hier ein Auszug aus dem Script:

Sub Click(Source As Button)
   
   ' DEKLARATION
   ' LN - Vorgaben
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Newuidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim attachment As NotesRichTextItem ' Anhang
   Dim targetFile As String
   Dim textOfBody As String
   
   ' INITIALISIERUNG
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Set attachment = New NotesRichTextItem(doc, "attachment")

   targetFile = "C:\Lotus\tmp\Word_08.01.2008.doc"
   '____________________________________________________________________________
   'FEHLERVORBEUGUNG
   
   ' löscht alle Einträge im E-Mail-Kopf
   uidoc.FieldClear("EnterSendTo")
   uidoc.FieldClear("EnterCopyTo")
   uidoc.FieldClear("EnterBlindCopyTo")
   uidoc.FieldClear("FaxToList")
   uidoc.FieldClear("subject")
   
   ' Liest den Text aus dem Body aus
   textOfBody = uidoc.FieldGetText("Body")
   
   If Len(textOfBody) > 0 Then
      Msgbox "Fehler - Abbruch!"   
      uidoc.FieldClear("Body")       
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   '_______________________________________________________________
   ' Fügt die Dateien an
   
   ' Gehe zu Feld attachment   
   Call uidoc.GotoField("attachment")
   ' Hängt die Datei an, wenn attachment vom Typ Richtext ist und lässt sie anzeigen
   If attachment.type = 1 Then
      Call attachment.EmbedObject( EMBED_attachment, "",targetFile)
      Call attachment.Update
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'wird geschlossen
      Set newUiDoc = workspace.EditDocument(True, doc) 
      Delete uidoc 'Referenz auf das alte Frontend-Dokument löschen       
      Set Doc = newUiDoc.Document
      Call doc.RemoveItem("SaveOptions")
   End If
   
End Sub


Zur Zeit ist es allerdings so getrickt, dass ein Abbruch erfolgt, wenn der Body beschrieben ist. Dennoch erfolgt die Speichermeldung, wenn das das Memo geschlossen werden soll.

Wenn man nichts im E-Mailkopf, noch in Body stehen hat, dann kommt nach dem Datei-Anhängen auch keine Dialogbox zum Speichern. Da klappt das dann mit den SaveOptions, nur nicht oben in der Fehlervorbeugung, nachdem ich Werte in die E-Mail eingetragen habe!?

Es wäre nett, wenn sich jemand meiner annehmen könnte, bin nämlich gerade am verzweifeln.

Danke schon mal im Voraus!

MfG Ork

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: SaveOptions = 0 funktioniert nicht
« Antwort #1 am: 08.01.08 - 21:57:45 »
... so auf die schnelle - ich würde zunächst mit der Abbruch-Bedingung Text-im-BodyFeld beginnen, und dann erst weitere Felder löschen, so daß im uidoc keine weiteren Bearbeitungen stattgefunden haben...

Toni
Grüßle Toni :)

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #2 am: 08.01.08 - 22:06:25 »
Hallo Toni,

erstmal vielen Dank für die schnelle Antwort.

Ich habe jetzt folgenden Teil ausdokumentiert:

uidoc.FieldClear("EnterSendTo")
   uidoc.FieldClear("EnterCopyTo")
   uidoc.FieldClear("EnterBlindCopyTo")
   uidoc.FieldClear("FaxToList")
   uidoc.FieldClear("subject")


Aber leider ohne Erfolg.

Ich habe gerade noch gedacht, ob es an der Schablone liegen kann, die ich bearbeite. Es ist die mail50.ntf.
Kann das ein Problem sein??


Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #3 am: 08.01.08 - 22:22:57 »
Das kommt davon, wenn UI-Klassen und Backendklassen genutzt werden.

Du setzt per doc.saveoptions etwas ins Backenddocument und erwartest dann, dass das angezeigte UIdoc das mitbekommt. Tut es aber nicht.

Merke: Vermeide die Mischung, solange es nur irgendwie geht.

Es gibt aber auch ein uidoc.fieldsettext bzw. ein uidoc.refresh/.reload

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: SaveOptions = 0 funktioniert nicht
« Antwort #4 am: 08.01.08 - 22:35:45 »
... die Mischung der Frontend und Backend-Klassen ist im zweiten Teil auf jeden Fall zu vermeiden, ansonsten musst du das uidoc über EditDocument neu instanzieren...

Es gibt aber auch noch andere Sachen, die ich anders lösen würde - die Schablone ist es nicht...

Toni
Grüßle Toni :)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #5 am: 08.01.08 - 22:39:08 »
Das kommt davon, wenn UI-Klassen und Backendklassen genutzt werden.
Richtig! Wenn man den Stunt wagt, muss man wissen, was man tut. Wirklich wissen.

Du setzt per doc.saveoptions etwas ins Backenddocument und erwartest dann, dass das angezeigte UIdoc das mitbekommt. Tut es aber nicht.
Das ist eindeutig falsch - das funktioniert nun wirklich, und dieses Funktionieren entspricht auch der Logik.

Ich bin heute aber zu müde, um mir über den Code von oben noch Gedanken zu machen. Und mit "Orks" habe ich es sowieso nicht so (warum können die Leute nur keine Namen unter ihre Postings schreiben? Alles Feiglinge?)

Bernhard

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #6 am: 08.01.08 - 22:52:43 »
Hallo Bernhard,

mein richtiger Name ist Okko, da ist Ork gar nicht so weit weg.

Ich habe den Code ein wenig abgekürzt, um mein Problem genauer zu schildern, aber wenn ein wenig gemäkelt ;-) wird, was ich natürlich als positive Kritik verstehe und versuche auch umzusetzen, füge ich mal den gesamten Quelltext ein. Ich hoffe (oder aber der Spezis schlagen die Hände über dem Kopf zusammen :-) ), da wird dann klarer, warum ich wie Bernhard so schön formuliert hat"den Stunt gewagt habe".

Hier der gesamte code:

Sub Click(Source As Button)
   
   ' DEKLARATION
   ' LN - Vorgaben
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim newUiDoc As NotesUIDocument
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim newDoc As NotesDocument   
   Dim view As NotesView
   Dim attachment As NotesRichTextItem ' Anhang
   
   ' Datei- und Verzeichnisverwaltung
   Dim sourceFile As Variant ' Quelldatei im Netzwerk
   Dim targetFile As String ' Zieldatei - nach dem Kopieren aus dem Netzwerk
   Dim netDirectory As String ' Netwerkpfad zur Vorlagenauswahl
   Dim nameProtocolFile As String ' Name der Protokolldatei
   Dim protocolFile As String ' Pfad zur Protokolldatei
   Dim localTargetDirectory As String ' Lokales Zielverzeichnis für die Word-Datei
   Dim formats As String ' Formate, die in der Vorlagenauswahl angezeigt werden sollen
   Dim wordObj As Variant ' Variable für die Word-Dokumenten-Verwaltung in Lotus Script
   Dim fso As Variant ' Variable für die Verzeichnisverwaltung
   
   ' Meldungen
   Dim faultMessageNetwork As String ' Fehlermeldung für nicht korrekten Netzwerkpfad
   Dim faultMessageAttachment As String ' Fehlermeldung für schon vorhandenen Anhang
   Dim faultMessageBody As String ' Fehlermeldung für schon eingetragenen Text im Body
   Dim faultMessageTime As String ' Fehlermeldung für die Überschreitung der Wartezeit unter Word
   Dim faultMessageWordFile As String ' Fehlermeldung für eine noch offene Temp-Datei - nicht zu speichern
   Dim faultMessageWordSave As String ' Fehlermeldung für noch offene Word-Dokumente, die noch zu speichern sind
   Dim infoMessage As String ' Hinweisnachricht für den Benutzer
   
   ' MS Word
   Dim dateOldFile As String ' Änderungsdatum der Word-Datei
   Dim dateNewFile As String ' Neues Änderungsdatum der Word-Datei
   Dim waitingTime As Integer  '  Wartezeit bis zur Abspeicherung des Word-Dokuments in Sekundensprüngen
   Dim saveOptionsWordTime As String ' Speicheroptionen beim erzwungenem Schliessen von Word - gilt für alle geöffneten Dokumente
   Dim wordAktiv As Boolean ' Schleifenvariable - MS Word aktiv = true, nicht aktiv = false
   Dim splittedFile As String ' Name der ausgewählten Word-Datei
   
   ' E-Mail Angaben
   Dim subject As String ' Mailbetreff
   Dim email_Kdr As String, email_StffChef As String, email_StffFw As String, email_TEFhr As String
   Dim emailA As String, email1 As String, email2 As String, email3 As String
   
   ' Protokollvariablen
   ' Die einzelnen Zeilen der Protokoll-Datei   
   Dim protocolLine1 As String, protocolLine2 As String, protocolLine3 As String, protocolLine4 As String, protocolLine5 As String, protocolLine6 As String, protocolLine7 As String   
   Dim dateTime As Variant ' Variable zum Auslesen der Antragszeit
   Dim newDate As String, newTime As String ' Zeit kann nur als String in die Protokolldatei geschrieben werden
   Dim name1 As String, name2 As String, name3 As String
   
   ' Diverse
   Dim counter As Integer ' Zähler für Warteschleifen
   Dim numOfAttachments As Variant ' Anzahl der enthaltenen Anhänge vor Benutung des Buttons
   Dim textOfBody As String ' Text aus dem Body vor Benutzung des Buttons
   
   ' Datenbankzugriff
   Dim addressbook As String
   Dim viewData As String
   Dim server As String
   Dim userName As String
   
   ' INITIALISIERUNG
   Set uidoc = workspace.CurrentDocument
   Set doc = uidoc.Document
   Set attachment = New NotesRichTextItem(doc, "attachment")
   
   ' WERTZUWEISUNGEN
   
   ' Wertzuweisungen für Datei- und Verzeichnisverwaltung
   netDirectory = "C:\tmp" ' Netzwerkpfad zum Vorlagenordner
   formats = "Microsoft Word|*.doc" ' Anzuzeigende Format in Vorlagenordner - nur MS Word
   localTargetDirectory = "C:\Lotus\tmp"   ' Ordner für temporäre Speicherung von MS Word-Datei und Potokoll-Datei
   nameProtocolFile = "Protokoll-EMail-Authentifiizierung" & ".txt" ' Name der Protokolldatei
   protocolFile = localTargetDirectory & "\" & nameProtocolFile ' Pfad zur Protokolldatei
   
   ' Meldungen   
   faultMessageNetwork = "Beim Öffnen des Netzwerkordners ist ein Fehler aufgetreten! Der Vorgang wird hiermit beendet!"
   infoMessage = "Bitte vergessen Sie nicht die Datei in Microsoft Word zu speichern!"
   faultMessageWordTime = "Die Wartezeit zum Abspeichern des Dokuments wurde überschritten! Der Vorgang wird hiermit beendet!"   
   faultMessageWordSave = "Ein offenes Microsoft Word-Dokument verhindert den korrekten Ablauf des Programms! Bitte speichern Sie Ihr(e) Dokument(e)!"
   faultMessageWordFile = "Ein offenes Microsoft Word-Dokument verhindert den korrekten Ablauf des Programms! Microsoft Word wird nun geschlossen!"
   faultMessageAttachment = "Es existiert bereits ein Datei-Anhang! Dieser Vorgang steht somit nicht mehr zur Verfügung und wird hiermit beendet!"
   faultMessageBody = "Es wurde bereits Text in die E-Mail eingetragen! Dieser darf erst nach dem Anhang der Vorlagen eingetragen werden!Der Vorgang wird hiermit beendet!"
   
   ' MS Word
   waitingTime = 20 ' Enstpricht 20 Sekunden, bevor MS Word mit Fehlermeldung geschlossen wird
   saveOptionsWordTime = "0" ' 0 - speichern wird nicht abgefragt, 1- speichern wird vor dem Schließen abgefragt
   
   ' Datenbankangaben
   userName = Environ$("username") ' Name des Antragssteller, ausgelesen aus Umgebungsvariable
   server = "ln-server/certifier"    ' Name des Mailservers
   addressbook = "names.nsf" ' Name des Adressbuchs
   dataView= "People" ' Name der Ansicht aus Adressbuch
   
   ' Diverse Angaben
   counter = 0   '  Zählvariable für mehrere Schleifen
   wordAktiv = True ' Setzt die Variable auf: MS Word ist noch aktiv -> Schleifenvariable
   
   '_________________________________________________________________________________________
   'FEHLERVORBEUGUNG
   
   ' löscht alle Einträge im E-Mail-Kopf
   uidoc.FieldClear("EnterSendTo")
   uidoc.FieldClear("EnterCopyTo")
   uidoc.FieldClear("EnterBlindCopyTo")
   uidoc.FieldClear("FaxToList")
   uidoc.FieldClear("subject")
   
   ' Liest den Text aus dem Body aus
   textOfBody = uidoc.FieldGetText("Body")
   
   If Len(textOfBody) > 0 Then
      Msgbox faultMessageBody,MB_OK & MB_ICONSTOP ,"Warnhinweis"      
      uidoc.FieldClear("Body")       
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   
   
   ' Prüft, ob sich schon ein Anhang in dem Dokument befindet.
   
   ' Nutzung der Formelsprache
   Const NotesMacro$ = "@Attachments"
   ' Gibt die Anzahl der Anhänge aus   
   numOfAttachments = Evaluate(NotesMacro$, doc)
   
   If  numOfAttachments(0) > 0 Then
      Msgbox faultMessageAttachment,MB_OK & MB_ICONSTOP ,"Warnhinweis"
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   '_________________________________
   ' Netzwerk-Prüfung über Pfad
   
   ' Falls das Netzwerkverzeichnis nicht vorhanden ist, wir der Vorgang abgebrochen
   If Dir$(netDirectory,16) = "" Then
      Msgbox faultMessageNetwork,MB_OK & MB_ICONSTOP ,"Warnhinweis"
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   '__________________________________________________________________________________________   
   ' Verzeichnisbearbeitung
   
   ' Löscht Zwischenverzeichnis alter Dokumente
   If Dir$(localTargetDirectory,16) <> "" Then    
      Set fso = createObject("Scripting.FileSystemObject")
      Do   
         On Error Resume Next      
         fso.deleteFolder localTargetDirectory, False
         If Err = 213 Then ' Falls das zu verwendende Dokument bereits in MS Word geöffnet ist, wird es geschlossen
            Err = 0
            Msgbox faultMessageWordFile,MB_OK & MB_ICONEXCLAMATION,"Information"
            Set wordObj = getObject("","Word.Application")
            wordObj.Application.quit saveOptionsWordTime
            Call wordObj.quit() ' Verbindung zu MS Word löschen
            Set wordObj  = Nothing ' Verbindung zu MS Word löschen
            Msgbox "Microsoft Word wurde beendet!",MB_OK & MB_ICONINFORMATION ,"Hinweis"
         Else
            wordAktiv = False
            ' Erzeugt neuen Ordner, weil der alte gelöscht wurde
            Mkdir localTargetDirectory
         End If
      Loop While wordAktiv = True
   Else
      ' Wenn noch kein Ordner da, erstelle einen
      Mkdir localTargetDirectory
   End If
   
   ' Setzt die Variable wieder der Anfangswert
   wordAktiv = True
   
   '_________________________________________________________________________________________
   ' PROGRAMMSTART
   
   ' Netzwerk-Vorlage wird lokal gespeichert
   
   ' Öffnet den Netzordner zur Dateiauswahl
   sourceFile = workspace.OpenFileDialog(False,"Vorlagenauswahl",formats,netDirectory)
   
   ' Prüfe ob eine Datei vorhanden ist
   If Isempty(sourceFile) Then Exit Sub   
   
   ' Datei umbenennen (mit neuem Verzeichnis)
   targetFile = localTargetDirectory  &"\Word_" & Cstr(Today) & ".doc"
   Filecopy sourceFile(0) , targetFile
   
   ' Speichert das aktuelle Datum in einer Variablen   
   dateOldFile = Filedatetime(targetFile)
   
   '__________________________________________________________________________________________   
   ' Microsoft Word
   
   ' Ein laufendes MS Word wird geschlossen
   
   ' Benutzerhinweis
   Msgbox infoMessage,MB_OK & MB_ICONEXCLAMATION,"Information"
   
   ' Damit MS Word nicht mit einem Fehler abbricht, muss MS Word vorher geschlossen sein bzw. geschlossen werden
   Do
      On Error Resume Next
      Set wordObj = getObject("","Word.Application")
      If Err = 208 Then ' Wenn MS Word nicht aktiv ist, wird der Fehler auf 0 gesetzt und die Schleife wird verlassen
         Err = 0
         wordAktiv = False
      Else ' Word ist mit  Dokument(en) aktiv
         Msgbox faultMessageWordSave,MB_OK & MB_ICONEXCLAMATION,"Information"      
         wordObj.Application.WindowState = 2 ' Wordfenster minimiert
         wordObj.Application.WindowState = 1 ' Wordfenster maximiert
         wordObj.Application.quit ' Word wird geschlossen
         Msgbox "Microsoft Word wurde beendet!",MB_OK & MB_ICONINFORMATION ,"Hinweis" ' Stop in dem Programm, um dem Nutzer die Zeit für das Speichern zu gewähren         
      End If
   Loop While wordAktiv = True
   
   ' Verbindung zwischen Variable und MS Word löschen   
   Call wordObj.quit()
   Set wordObj  = Nothing
   '_________________________________
   ' Öffnet Microsoft Word mit ausgewählter Word-Datei
   Set wordObj = getObject(targetFile,"Word.Document")
   
   ' Word wird als aktives Fenster angezeigt   
   wordObj.Application.Visible = True
   wordObj.Application.WindowState = 1
   
   '_________________________________
   'Schliessen von MS Word
   
   ' Überprüft, ob das Word-Dokument in geänderterweise gespeichert worden ist. Falls
   ' während der Überprüfung die Wartezeit überschritten wird, wird das Programm abgebrochen
   Do
      dateNewFile = Filedatetime(targetFile)
      Sleep 1 ' wegen der CPU-Auslastung eingebaut - leichte Performance-Schwächen - kann auch entfernt werden
      counter = counter +1 ' Zählvariable wird um 1 erhöht
      If counter = waitingTime  Then
         wordObj.Application.quit saveOptionsWordTime
         Msgbox faultMessageWordTime,MB_OK & MB_ICONSTOP ,"Warnhinweis"
         doc.SaveOptions = "0" 'speichern wird nicht abgefragt
         Call uidoc.Close(True) 'Memo wird geschlossen
         Exit Sub
         Exit Do   
      End If
      If dateOldFile <> dateNewFile Then
         On Error Resume Next      
         wordObj.Application.quit saveOptionsWordTime ' Schließt nach dem Speichern des Doks das Programm MS Word
         If Err = 207 Then Err = 0 ' Falls es vorher manuell geschlossen wird, wird der Fehler wieder auf 0 gesetzt
      End If
   Loop While dateOldFile = dateNewFile
   '__________________________________________________________________________________________
   ' Erstellung der Log-Datei
   
   ' Datum für die Antragserstellung
   
   ' Splittet die Zeit der Dokumenten-Fertigstellung in Datum und Zeit   
   dateTime= Split(dateNewFile," ",2)
   newDate = dateTime(0)
   newTime = dateTime(1)
   '__________________________________
   ' Verbindungsherstellung zu Personendaten
   
   ' Stellt die Verbindung zur Datenbank Adressbuch her und wählt das erste Dokument aus der Ansicht People aus -> erste Person
   Set db = New NotesDatabase(server, addressbook)
   Set view = db.GetView( dataView)
   Set newDoc = view.GetFirstDocument
   '__________________________________
   ' Suche der E-Mail-Adresse des  Antragssteller
   
   Do
      ' Falls das aktuelle Dokument mit dem NT Benutzernamen übereinstimmt, wird die E-Mail-Adresse erzeugt
      If userName = getName(newDoc) Then
         emailA = createEmail(newDoc)   
         Exit Do         
      End If      
      Set newDoc = view.GetNextDocument(newDoc) ' nächste Datensatz / Person
   Loop While Not username = getName(newDoc)
   
   '__________________________________   
   ' Erstellt die E-Mail-Adressen für die Vorgesetzten
   
   ' Erstellt E-Mail vom Kommandeur
   
   email_Kdr = createMailFromPerson("Kdr", newDoc, db)
   
   If email_Kdr = "" Then
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   
   '__________________________________
   ' Erstellt E-Mail vom Staffelchef
   
   email_StffChef = createMailFromPerson("StffChef", newDoc, db)
   
   If email_StffChef = "" Then
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   
   '__________________________________
   ' Erstellt E-Mail vom TeileinheitsFührer
   
   email_TEFhr = createMailFromPerson("TEFhr", newDoc, db)
   
   If email_TEFhr = "" Then
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   
   '__________________________________
   ' Erstellt E-Mail vom StaffelFeldwebel
   
   email_StffFw = createMailFromPerson("StffFw", newDoc, db)
   
   If email_StffFw = "" Then
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'Memo wird geschlossen
      Exit Sub
   End If
   
   '__________________________________________________________________________________________
   ' Namensermittlung des ausgewählten Word-Dokuments
   
   ' Zählvariable für die Do-Schleife
   counter = 0
   
   ' Name der ausgewählten Word-Vorlage wird ermittelt
   
   ' Der Pfad samt Word-Datei werden am Backslash aufgeteilt und als einzelne Elemente gespeichert
   sourceFile = Split(sourceFile(0),"\")
   ' In der Schleife werden alle Elemente durchsucht, bis die Vorlage gefunden worden ist.
   ' Dann wird die Word-Vorlage vom Format getrennt und gespeichert.
   Do
      If sourceFile(counter) Like "*.doc" Then
         sourceFile = Split(sourceFile(counter),".")
         splittedFile = sourceFile(0)
      End If
      counter = counter + 1
   Loop While sourceFile(1) <> "doc"
   
   ' Zählvariable wird wieder auf den Anfangswert gesetzt
   counter = 0
   '__________________________________
   ' Festlegung der Empänger anhand des ausgewählten Dokuments
   
   Select Case splittedFile
   Case "Urlaubsantrag":
      subject = "Urlaubsantrag - " & userName
      email1 = email_TEFhr
      email2 = email_StffFw
      email3 = email_StffChef
   Case "Kfz-Anforderung":
      subject = "Kfz-Anforderung - " & userName
      email1 = email_TEFhr
      email2 = email_StffChef
      email3 = email_Kdr
   End Select
   ' Zuteilung der Name durch die Angabe der E-Mail Adressen
   name1 = getNameFromMail(email1)
   name2 = getNameFromMail(email2)
   name3 = getNameFromMail(email3)
   '__________________________________
   ' Inhalt der Protokolldatei
   
   protocolLine1 = "         Protokoll-Datei"
   protocolLine2 = " "
   protocolLine3 = "Antragssteller:   E-Mail: " & emailA & "  Antrag erstellt am: " & newDate & " um " & newTime & "  Name: " & userName
   protocolLine4 = "________________________________________________________________________________________________________________________"
   protocolLine5 = "Genehmigungsinhaber1:    E-Mail: " & email1 & "  Beurteilung:  Zeit(Datum, Uhrzeit):  Name: " & name1
   protocolLine6 = "Genehmigungsinhaber1:    E-Mail: " & email2 & "  Beurteilung:  Zeit(Datum, Uhrzeit):  Name: " & name2
   protocolLine7 = "Genehmigungsinhaber1:    E-Mail: " & email3 & "  Beurteilung:  Zeit(Datum, Uhrzeit):  Name: " & name3   
   
   fileNum = Freefile() ' Erzeugt eine ID für eine zu öffende Datei
   Open protocolFile For Output As fileNum ' Öffnet die Datei aus protocolFile zur ID zum beschreiben
   Print #fileNum,protocolLine1
   Print #fileNum,protocolLine2
   Print #fileNum,protocolLine3
   Print #fileNum,protocolLine4
   Print #fileNum,protocolLine5
   Print #fileNum,protocolLine6
   Print #fileNum,protocolLine7
   Close #fileNum
   '__________________________________________________________________________________________
   ' E-Mail - Einstellungen
   
   doc.EnterSendTo = email1
   doc.subject = subject   
   '__________________________________________________________________________________________
   ' Fügt die Dateien an
   
   ' Gehe zu Feld attachment   
   Call uidoc.GotoField("attachment")
   ' Hängt die Datei an, wenn attachment vom Typ Richtext ist und lässt sie anzeigen
   If attachment.type = 1 Then
      Call attachment.EmbedObject( EMBED_attachment, "",targetFile)
      Call attachment.EmbedObject( EMBED_attachment, "",protocolFile)
      Call attachment.Update
      doc.SaveOptions = "0" 'speichern wird nicht abgefragt
      Call uidoc.Close(True) 'wird geschlossen
      Set newUiDoc = workspace.EditDocument(True, doc) 
      Delete uidoc 'Referenz auf das alte Frontend-Dokument löschen       
      Set Doc = newUiDoc.Document
      Call doc.RemoveItem("SaveOptions")
      newUiDoc.Refresh
   End If
   
End Sub


Es gibt auch noch 5 Funktionen, bei denen ich aber nicht davon ausgehe, dass diese den Fehler verursachen können.

Hoffe weiterhin auf tolle Statements!!

LG Ork

@ Bernhard: LG Okko ;-)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: SaveOptions = 0 funktioniert nicht
« Antwort #7 am: 08.01.08 - 23:03:11 »
... was meinen Teil angeht - morgen ist auch noch ein Tag - dafür reicht meine Aufnahmefähigkeit heute nicht mehr...

Toni
Grüßle Toni :)

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #8 am: 08.01.08 - 23:08:27 »
Noch mal hallo Toni,

ist kein Problem, muss morgen sowie so noch andere Dinge weiter schreiben.

Vielen Dank und dann bis morgen!!

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: SaveOptions = 0 funktioniert nicht
« Antwort #9 am: 09.01.08 - 10:36:58 »
... ich hab' mir deinen Code angeschaut. Schön kommentiert, da sieht man wenigstens was  ;D

Mir ist nichts aufgefallen, warum du den Spagat mit Frontend und Backend machst. An allen Stellen, an denen du einen Close ausführst würde ich ...
Code
doc.SaveOptions = "0" 'speichern wird nicht abgefragt
... gegen ...
Code
uidoc.FieldSetText( "SaveOptions" , "0" ) 'speichern wird nicht abgefragt
... ersetzen

Zu Beginn deines Codes löschst du die Inhalte der Empfänger-Felder und des Betreffs - ich würde zunächst die beiden Abbruch-Bedingungen mit Attachments und Text im Body durchführen - und dann die Felder leeren - was aber in deinem Fall keine Rolle spielt...

An welcher Stelle erscheint denn die Speicheraufforderung - eventuell würde ich Print-Statements einbauen, dann hast du mehr Kontrolle über den aktuellen Verlauf. Ansonsten mal im Debugger nachschauen, an welcher Stelle genau die Aufforderung kommt, denn da liegt ja der Hund begraben...

Toni
Grüßle Toni :)

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #10 am: 09.01.08 - 16:44:18 »
Hallo Toni,

danke für die frühe Mühe, doch leider vergebens. Ich habe über den Debugger das mal durchfahren lassen und sobald ich, wie schon zuvor beschrieben, Text in den Body eintrage, kommt die Speichermeldung, nachdem
Code
Call uidoc.Close(True) 'Memo wird geschlossen
aus dem Teil
Code
' löscht alle Einträge im E-Mail-Kopf
	uidoc.FieldClear("EnterSendTo") 
	uidoc.FieldClear("EnterCopyTo") 
	uidoc.FieldClear("EnterBlindCopyTo") 
	uidoc.FieldClear("FaxToList") 
	uidoc.FieldClear("subject") 
	
	' Liest den Text aus dem Body aus
	textOfBody = uidoc.FieldGetText("Body")
	
	If Len(textOfBody) > 0 Then
		Msgbox faultMessageBody,MB_OK & MB_ICONSTOP ,"Warnhinweis"		
		uidoc.FieldClear("Body") 		
		doc.SaveOptions = "0" 'speichern wird nicht abgefragt
		Call uidoc.Close(True) 'Memo wird geschlossen
		Exit Sub
	End If
Wenn ich jetzt deinen Rat befolge und das mit der Methode FieldSetText mache, fordert er bei mir ein Feld. Dieses habe ich dann auch erstellt. Dennoch bringt er an dieser Stelle die Speicherabfrage. Dann habe ich das Feld manuell auf "0" festgelegt: Trotzdem die Abfrage nach dem Speichern.

Ich habe keine Ahnung, woran das liegen könnte... :-:

Vielleicht hat ja noch jemand eine Idee!!??!!

Bis denne Ork

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #11 am: 09.01.08 - 17:12:33 »
Okko, es reicht vollkommen aus, wenn man SaveOptions im Backend setzt - ich widerspreche hier ausnahmesweise mal Toni.

A-Bär: Das ganze Procedere funktioniert nicht, sowie Du in einem RTF herumhantierst (egal wie - via FrontEnd oder via Backend - bei letzterem gehen dann die Änderungen verloren).

Du musst das wirklich sauber trennen in solch einem Fall.
Ein paar Erfahrungswerte von mir:
Wurde vor Aufruf der Routine ggf. im Frontend (manuell) etwas an einem RTF geändert: Als erstes Dokument speichern.
Wird an einem UIDoc etwas via Backend geändert: Dokument (Backend) speichern, schliessen (Frontend) und wieder öffnen (Frontend).
Anders klappt das nicht und kann auch gar nicht klappen.

Bernhard

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #12 am: 09.01.08 - 18:18:16 »
Hallo Bernhard,

aber bei dem ersten Code, den ich veröffentlicht habe, in dem wirklich nicht viel enthalten war, passiert das selbe an der gleichen Stelle. Da muss es doch einen Grund für geben. Ausserdem, wie hänge ich denn ein Dokument an, wenn nicht über das NotesDocument?? Welche Klassen sind den überhaupt Frontend und welche für Backend: Ich glaube manchmal, dass in einigen Forumeinträgen da einiges durcheinander gewürfelt wird: NoteDocument - Frontend; NotesUIDocument - Backend??

Ciao Okko

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: SaveOptions = 0 funktioniert nicht
« Antwort #13 am: 09.01.08 - 18:38:51 »
UI = UserInterface

allet, wo UI drin vorkommt, ist i.d.R. Frontend

NotesUIWorkspace <--> NotesSession
NotesUIView class <--> NotesView class

NoteasUIDocument class<--> Notesdocument class


aus deinem code:
uidoc.FieldClear("Body")  --> frontend      
doc.SaveOptions = "0" 'speichern wird nicht abgefragt  --> Backend
Call uidoc.Close(True) 'Memo wird geschlossen --> Frontend

ich sehe immer zu, dass ich in meinem Code das Zeug wirklich in Abschnitten sauber getrennt habe nach Frontend und Backend, sonst verliere ich den Überblick

grüsse

Dau-in


« Letzte Änderung: 09.01.08 - 18:41:41 von DAU-in »
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #14 am: 09.01.08 - 19:10:20 »
Super das ist schon mal ein Anfang.

Nur selbst, wenn ich mir ein simples Beispiel raussuche, wie zum Beispiel folgendes:

Code
Sub Click(Source As Button)
	
	' DEKLARATION
	' LN - Vorgaben 
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim textOfBody As String
	
	' INITIALISIERUNG
	Set uidoc = workspace.CurrentDocument

	
	'________________________________________________________________________________
	'FEHLERVORBEUGUNG
	
	' löscht alle Einträge im E-Mail-Kopf
	Call uidoc.FieldClear("EnterSendTo") 
	Call uidoc.FieldClear("EnterCopyTo") 
	Call uidoc.FieldClear("EnterBlindCopyTo") 
	Call uidoc.FieldClear("FaxToList") 
	Call uidoc.FieldClear("subject") 
	
	' Liest den Text aus dem Body aus
	textOfBody = uidoc.FieldGetText("Body")
	
	If Len(textOfBody) > 0 Then
		Msgbox "Fehler - Abbruch!"	
		Call uidoc.FieldClear("Body") 		
		Call uidoc.FieldsetText("SaveOptions","0")
		Call uidoc.Close(True) 'Memo wird geschlossen
		Exit Sub
	End If
	
End Sub

Dabei habe ich in der Maske Memo ein Feld namens SaveOptions eingetragen, mit keinem Wert zum bearbeiten.

Trotzdem bekomme ich die Abfrage nach dem Speichern!

Noch irgendwelche Vorschläge...??

@Bernhard, ansonsten klappt das Programm aber ohne Probleme, ausser dieser Punkt mit den Änderungen vorm Klicken des Buttons!

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: SaveOptions = 0 funktioniert nicht
« Antwort #15 am: 09.01.08 - 19:40:22 »
Hi,

seltsam!

Ich würde mal noch vorschlagen,
da Du ja jetzt ein bearbeitbares Feld "SaveOptions" in der Maske hast, dass

Du ein Dokument öffnest,
in das SaveOptions manuell eine 0 eingibst,
im Dokument noch eine Änderung (manuell Text eingeben) machst
und dann das Dokument mit [ESC] verlässt.

Kommt dann immernoch die "Wollen sie Speichern"-Meldung?
Wenn ja dann ist doch noch eine Funktion da die Dir das SaveOptions verdreht.
(z.B. QueryClose, ev. in einer Teilmaske....)

-nachtrag:-
noch was ist mir aufgefallen:
Ich habe gerade noch gedacht, ob es an der Schablone liegen kann, die ich bearbeite. Es ist die mail50.ntf.
Kann das ein Problem sein??
ist es eventuell nicht die Meldung "Wollen Sie Speichern" mit "Ja/Nein/Abbrechen"
sondern die Meldung "Mail Senden" /"Send Mail"
mit "Speichern&Senden/nur Senden/nur Speichern/Verwerfen/Abbrechen"?

Gruss, Pete(r)
« Letzte Änderung: 09.01.08 - 20:04:35 von pete_bla »
pete(r)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #16 am: 09.01.08 - 20:03:58 »
Pete, QueryClose hat mit SaveOptions schon nichts mehr am Hut - wenn das ausgeführt wird, sind bereits alle Messen gelesen.

Bernhard

Offline pete_bla

  • Senior Mitglied
  • ****
  • Beiträge: 455
  • Geschlecht: Männlich
  • dot net gitz net!
Re: SaveOptions = 0 funktioniert nicht
« Antwort #17 am: 09.01.08 - 20:07:56 »
Hi

@Bernhard:  ist das dann auch gerade gestellt, (war nur ein Beispiel von mir) - schön!

Dennoch schlage ich vor,
das mit dem manuellem Ändern / Schliessen zu testen
- es ist ein Hinweis zur Eingrenzung des Problems!

Gruss, Pete(r)




pete(r)

Offline Ork

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #18 am: 09.01.08 - 20:30:30 »
Hallo da ist das Problemkind wieder,

also ich habe das mal so gemacht wie Pete(r) geschrieben hat...leider immer noch mit der Meldung.

@ Pete(r): Ja es ist folgende Meldung: Speichern&Senden/nur Senden/nur Speichern/Verwerfen/Abbrechen"?

Ich hoffe, ich habe jetzt nicht alle verrückt gemacht und das Problem liegt ganz wo anders?!

Okko

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: SaveOptions = 0 funktioniert nicht
« Antwort #19 am: 09.01.08 - 20:36:53 »
Ja, wenn die Meldungen gleich richtig gepostet werden ...  :-P
In Deiner Maske gibt es ein Item MAILOPTIONS !!! Da hilft dann auch das Blocken via SaveOptions nix mehr.

Bitte immer gleich die ganze Story posten.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz