Autor Thema: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden  (Gelesen 15163 mal)

Offline Bernhard66

  • Frischling
  • *
  • Beiträge: 3
Hallo zusammen,

ich bin neu hier und auch kein Programmierer :-(
In unserem Unternehmen sind wir gerade dabei, Lotus Notes in eine Excel-Anwendung einzubinden. Hierfür soll per VBA eine bestehende Notes Vorlage aus einem Gruppenbriefkasten geöffnet werden, Emailempfänger und Betreff aus Excel in die Vorlage übernommen werden und das Mail automatisch versendet werden (also nicht manuell). Und genau beim letzten Schritt des Versendens erhalten wir eine Fehlermeldung, die wie folgt lautet:

"Lotus/IMB doesn't recommend to use 'ESC' and send. Please use send buttons or save as draft"

Unser VBA-Spezialist kann den Fehler leider nicht beheben. Er verwendet folgenden Code:

    Sub LNote()

        Dim LoNotes As Object, MailDoc As Object, session As Object, View As Object, _
            noteCursorDoc As Object, StationeryObject As Object, MDC As Object, _
            NewMail As Object, Doc As Object
           
        Dim workspace As Variant
        Dim Mail_Server As String, Mail_File As String, Sl_Temp As String, _
            TempName As String, TempSubject As String, ADR As String, MailT As String
            '---------------------------------------------------------------------------------'
            '                                                                                 '
            '---------------------------------------------------------------------------------'
            Set session = CreateObject("Notes.NotesSession")
            '---------------------------------------------------------------------------------'
            ' Gruppenbriefkasten   (BIITE ÄNDERN!!)                                           '
            '---------------------------------------------------------------------------------'
            Mail_Server = session.GetEnvironmentString("aus Datenschutzgründen entfernt", True)
            Mail_File = session.GetEnvironmentString("aus Datenschutzgründen entfernt", True)
            '---------------------------------------------------------------------------------'
            ' ...entsprechend .....                                                           '
            '---------------------------------------------------------------------------------'
            Set LoNotes = session.GetDatabase("aus Datenschutzgründen entfernt")
           
            If (LoNotes.IsOpen = False) Then LoNotes.OPENMAIL
            '---------------------------------------------------------------------------------'
            '                                                                                 '
            '---------------------------------------------------------------------------------'
            Set View = LoNotes.GetView("Stationery")
            Set workspace = CreateObject("Notes.NotesUIWorkspace")
            Set noteCursorDoc = View.GetFirstDocument
            '---------------------------------------------------------------------------------'
            ' Mail-Vorlage bestimmen (leere Vorlage)                                          '
            '---------------------------------------------------------------------------------'
            Sl_Temp = "0   TEMPLATE"
            '---------------------------------------------------------------------------------'
            ' Vorhandene Vorlagen durchlaufen und suchen ....                                 '
            '---------------------------------------------------------------------------------'
            Do While Not noteCursorDoc Is Nothing
           
               Set StationeryObject = noteCursorDoc.getFirstItem("Subject")
               TempSubject = StationeryObject.Text
               Set StationeryObject = noteCursorDoc.getFirstItem("MailStationeryName")
               TempName = StationeryObject.Text
               '------------------------------------------------------------------------------'
               ' Vorlage gefunden                                                             '
               '------------------------------------------------------------------------------'
               If (UCase(TempSubject) = Sl_Temp Or UCase(TempName) = Sl_Temp) Then
                   GoTo EditMail
               '------------------------------------------------------------------------------'
               ' Vorlage noch nicht gefunden, nächster Eintrag .....                          '
               '------------------------------------------------------------------------------'
               Else
                  Set noteCursorDoc = View.GetNextDocument(noteCursorDoc)
               End If
            Loop
            '---------------------------------------------------------------------------------'
            ' Vorlage nicht vorhanden                                                         '
            '---------------------------------------------------------------------------------'
           
            Exit Sub
            '---------------------------------------------------------------------------------'
            ' Vorlage editieren                                                               '
            '---------------------------------------------------------------------------------'
EditMail:   Set NewMail = workspace.EDITDOCUMENT(True, noteCursorDoc)
           
            ADR = "xxx@xxxx.DE"
            With NewMail
                 Call .FieldSetText("EnterSendTo", ADR)
                 Call .FieldSetText("Subject", "WG: Neues Testverfahren")
                 Call .FieldSetText("Body", "Freier Text")
                 '----------------------------------------------------------------------------'
                 ' DIESER AUFRUF FÜHRT IN LOTUS NOTES ZU EINER FEHLERSITUATION!!              '
                 '----------------------------------------------------------------------------'
                 
                 Call .send(True)
           
            End With
    End Sub


Hat jemand eine Idee, woran es liegen könnte, dass das mail nicht versendet werden kann? Die automatische Rechtschreibprüfung in LN haben wir bereits deaktiviert....

Danke vorab und schönen Gruß
Bernhard

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Mal abgesehen dass der Code für eine Mail die man nicht editieren will "suboptimal" ist (das würde komplett ohne NotesUIWorkspace auskommen) wäre natürlich schön gewesen zu wissen, wie genau die Fehlermeldung lautet.

Ich weiss es aber auch so: Send ist sowohl eine Methode der Klasse NotesDocument, als auch eine Methode der Klasse "NotesUIDocument". Und euer NewMail- Objekt ist ein NotesUIDocument.
Für NotesUIDocument hat die Methode aber keinen Parameter. Die Zeile müsste lauten:
Code
.send

Bitte in Zukunft Code in Code- Tags einschliessen, das erleichtert das lesen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Fedaykin

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • Geschlecht: Männlich
  • Ya Hya Chouhada!
Hallo Bernhard

Wenn Du das einfach abschicken willst dann

ersetze doch mal:
Code
EditMail:   Set NewMail = workspace.EDITDOCUMENT(True, noteCursorDoc)
           
            ADR = "xxx@xxxx.DE"
            With NewMail
                 Call .FieldSetText("EnterSendTo", ADR)
                 Call .FieldSetText("Subject", "WG: Neues Testverfahren")
                 Call .FieldSetText("Body", "Freier Text")
                 '----------------------------------------------------------------------------'
                 ' DIESER AUFRUF FÜHRT IN LOTUS NOTES ZU EINER FEHLERSITUATION!!              '
                 '----------------------------------------------------------------------------'
                 
                 Call .send(True)
            
            End With

durch:
Code
ADR = "xxx@xxxx.DE"

noteCursorDoc.ReplaceItemValue "SendTo", ADR
noteCursorDoc.ReplaceItemValue "Subject", "WG: Neues Testverfahren"
noteCursorDoc.ReplaceItemValue "Body", "Freier Text"

noteCursorDoc.send False, False

Denn entweder zum Bearbeiten öffnen oder automatisch abschicken. Beides gleichzeitig passt irgendwie nicht zusammen.

Gruss
Remo
« Letzte Änderung: 25.11.15 - 17:25:35 von Fedaykin »
Ich sage Euch: "Man muss noch Chaos in sich haben, um einen tanzenden Stern gebären zu können."

Offline Bernhard66

  • Frischling
  • *
  • Beiträge: 3
Dankeschön an Torsten und Remo! Wenn wir die beiden Lösungen getestet haben, geben wir euch eine Rückmeldung, ob es funktioniert.

Die Fehlermeldung lautet, das hatte ich eingangs beschrieben, wie folgt:

"Lotus/IMB doesn't recommend to use 'ESC' and send. Please use send buttons or save as draft"

Bei der Vorlage, die wir verwenden, handelt es sich um eine Vorlage ohne Inhalt.  Sie dient eigentlich nur dazu, das Layout der Firma samt Logo und Fußzeile verwenden zu können. Der Inhalt des Body ändert sich und wird je nach Art des Geschäftsvorfalles automatisch einkopiert. Die Mail wird also editiert vor dem Versand.

Nochmals Danke
Bernhard



Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Wenn die Mail editiert werden soll, macht ein Senden des Dokuments im Script aber keinen Sinn.

Also

Mail erstellen und öffnen zum Editieren

oder

Mail komplett erstellen und versenden

Aber

Mail erstellen, öffnen zum Editieren und dann (im gleichen Script) versenden kann nicht funktionieren, der Versand erfolgt dann vor der Änderung durch den Benutzer.

Offline Bernhard66

  • Frischling
  • *
  • Beiträge: 3
Die beiden Lösungsvorschläge funktionieren leider nicht.   ???

Nochmals zum Verständnis: das leere Template wird aus einem Gruppenbriefkasten heraus über VBA aufgerufen, über VBA befüllt (Betreff, Inhalt etc.) und soll nach den vorgenannten Schritten auch über VBA versendet werden. Das Template wird nicht manuelle editiert!

Wir freuen uns über weitere hilfreiche Lösungsvorschläge.

Danke
Bernhard

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
Hm... ich dachte immer, UI und COM vertragen sich nicht? In der Notes Designer Hilfe steht zumindest auch "This class is not supported in COM" z.B. bei NotesUiWorkspace.

Idee:
Wirf den ganzen UI Kram raus und arbeite ausschließlich im Backend.

Tip:
Wenn Ihr mit Vorlagen arbeitet... dann paß auf beim Mail-Body. Den möchtest Du bestimmt nicht komplett überschreiben.

Viel Erfolg!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
@thkn777: ACHTUNG: COM != OLE !!!!

Mit der Zeile:
Set session = CreateObject("Notes.NotesSession")

erstellst Du ein OLE- Objekt (quasi eine "Fernsteuerung" eines laufenden Notes- Clients, der auch gestartet wird, wenn er noch nicht läuft) -> Alles ist erlaubt, auch NotesUIWorkspace und Konsorten. Die Einschränkungen bezüglich COM aus der Hilfe gelten NICHT.

Mit
Set session = CreateObject("Lotus.NotesSession")

erstellst Du ein COM- Objekt: Hier gehen nur Backend- Klassen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Code
Set NewMail = workspace.EDITDOCUMENT(True, noteCursorDoc)
           
            ADR = "xxx@xxxx.DE"
            With NewMail
                 Call .FieldSetText("EnterSendTo", ADR)
                 Call .FieldSetText("Subject", "WG: Neues Testverfahren")
                 Call .FieldSetText("Body", "Freier Text")
Was wird wohl passieren wenn an dieser Stelle jemand (oder später wenn das Dokument noch offen ist) STRG +S drückt?

Code
Call .send(True)
            
            End With
Warum wollt Ihr eigendlich das Stationary versenden? Braucht Ihr das nicht mehr?
« Letzte Änderung: 08.01.16 - 16:05:53 von Andrew Harder »
Andy

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
@Tode
Ich scheine tatsächlich bisher nur letzteres gebraucht / benutzt zu haben.

Sorry, falls ich Verwirrung gestiftet habe...  ::) :-[

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz