Das Notes Forum

Lotus Notes / Domino Sonstiges => OLE/COM-Programmierung => Thema gestartet von: Bernhard66 am 25.11.15 - 11:40:54



Titel: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Bernhard66 am 25.11.15 - 11:40:54
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


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Tode am 25.11.15 - 12:10:42
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...


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Fedaykin am 25.11.15 - 12:13:47
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


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Bernhard66 am 25.11.15 - 12:56:46
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




Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Peter Klett am 25.11.15 - 13:41:27
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.


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Bernhard66 am 25.11.15 - 15:11:35
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


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: thkn777 am 08.01.16 - 11:05:35
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!


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Tode am 08.01.16 - 14:20:52
@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...


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: Andrew Harder am 08.01.16 - 15:58:52
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?


Titel: Re: per VBA Vorlage öffnen, Adressaten einfügen und Mail versenden
Beitrag von: thkn777 am 26.01.16 - 16:01:11
@Tode
Ich scheine tatsächlich bisher nur letzteres gebraucht / benutzt zu haben.

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