Autor Thema: Lotus-Notes-Vorlage via Excel-Makro aufrufen  (Gelesen 66222 mal)

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Lotus-Notes-Vorlage via Excel-Makro aufrufen
« am: 17.01.18 - 15:46:30 »
Hallo,

ich versuche seit geraumer Zeit mithilfe eines Excel-Makros, eine Mail-Vorlage in Lotus Notes (8.5.3FP6 SHF784) zu öffnen und nutze dazu folgenden Code:

Code
Sub SendMail()

Dim Maildb As Object
Dim UserName As String
Dim MailDbName As String
Dim MailDoc As Object
Dim session As Object
Dim Recipient As String
Dim attachment As String

Set session = CreateObject("Notes.NotesSession")
Set Maildb = session.currentdatabase
Set MailDoc = Maildb.CreateDocument("", "", "Vorlage")

attachment = "<Pfad zum Anhang>"

MailDoc.Form = "Memo"
Recipient = "MaxMustermann@live.com"
MailDoc.sendto = Recipient
MailDoc.Subject = "Betreff"
MailDoc.body = "Nachrichtentext"

stAttachment = ActiveWorkbook.FullName
Set AttachME = MailDoc.CREATERICHTEXTITEM("stAttachment")
Set EmbedObj = AttachME.EMBEDOBJECT(1454, "", attachment, "stAttachment")
                        
MailDoc.SAVEMESSAGEONSEND = True
MailDoc.SEND 0, Recipient
Set Maildb = Nothing
Set MailDoc = Nothing
Set AttachME = Nothing
Set session = Nothing
Set EmbedObj = Nothing

End Sub

Leider scheitere ich daran, dass Notes die Vorlage nicht aufrufen will. Habe schon diverse Lösungsansätze von Usern mit ähnlich gelagertem Problem ausprobiert, jedoch waren dort noch weitere andere Baustellen, sodass ich zu diesem konkreten Problem noch keine wirkliche Lösung finden konnte.

Muss die Vorlage (lokal im Client über "Werkzeuge->Vorlage->Neue Vorlage" erstellt) mit einem anderen Befehl angesteuert bzw. aufgerufen werden?

Btw: Agentenrechte nicht vorhanden.

Danke im Voraus.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #1 am: 17.01.18 - 16:24:56 »
Ok.... Also erstmal ein paar Fragen:

- Willst Du eine NEUE Vorlage erstellen, oder eine vorhandene öffnen?
- Willst Du die Mail zum bearbeiten öffnen oder direkt versenden?
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...

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #2 am: 17.01.18 - 17:52:09 »
Die Vorlage existiert bereits und soll nur noch durch das Makro geöffnet werden.

Ursprünglich war geplant, die Mail direkt zu versenden. Falls umsetzbar, wäre es jedoch super, wenn sie nach Erstellung durch das Makro noch einmal überprüft und ggf. bearbeitet werden könnte.


Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.249
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #3 am: 17.01.18 - 18:26:18 »
Dein Code versendet die Mail, das muss ersetzt werden mit:
Code
Dim ws As Object
Set ws = CreateObject("Notes.NotesUIWorkspace")
set mailUiDoc = ws.editDocument( true, mailDoc )
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.14
--
Nur ein toter Bug, ist ein guter Bug!

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #4 am: 18.01.18 - 08:07:08 »
Das klappt schonmal einwandfrei, top!

Jetzt bleibt nur noch das Problem mit der zu öffnenden Vorlage.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #5 am: 18.01.18 - 08:46:33 »
Du holst Dir die Ansicht mit allen Vorlagen mittels NotesDatabase.getView( "Stationery" ).
Dann holst Du die entsprechende Vorlage aus dieser Ansicht über NotesView.GetDocumentByKey( "Name der Vorlage") (geht nicht, weil Ansicht nicht sortiert nach Name)
einen NotesViewNavigator und einer While- Schleife, in der Du die NotesViewEntry- Elemente prüfst, ob Sie Deinen Vorlagennamen haben.

Dann benutzt Du den Code aus dem "QueryOpendocument"- Event der Ansicht (Stationary) um aus dieser Vorlage eine neue Mail zu generieren:

Code
			Dim note As New NotesDocument(db)
			Call vorlagedoc.copyallitems(note)
			Call note.ReplaceItemValue("Form",vorlagedoc.Form(0))
			Call note.RemoveItem("$VersionOpt")
			Call note.RemoveItem("$NoPurge")
			Call note.RemoveItem("ProtectFromArchive")
			Call note.RemoveItem("MailStationeryName")
			Call note.RemoveItem("IsMailStationery")
			Call note.ReplaceItemValue("tmpSkipSignature","1")
			

Dann füllst Du den Empfänger und ggf. andere Daten (wie Du es in Deinem Code schon machst) und versendest das Ding über note.Send
« Letzte Änderung: 18.01.18 - 08:48:18 von Tode »
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...

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #6 am: 18.01.18 - 10:43:41 »
Okay, also mit dem NotesViewNavigator bin ich nun leicht überfordert. Wenn ich versuche, den Navigator via

Code
Set NotesViewNavigator = NotesView.CreateViewNav

festzulegen, gibt er mir den Laufzeitfehler 91 (Objektvariable oder With-Blockvariable nicht festgelegt).

Wenn ich NotesView via

Code
Set NotesView = NotesDatabase.getView("Stationary")

festlegen möchte, gibt er mir den Laufzeitfehler 438 (Objekt unterstützt diese Eigenschaft oder Methode nicht).

Irgendwie steh' ich auf dem Schlauch...  ???


Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #7 am: 18.01.18 - 12:39:53 »
Also wenn Du die View schon nicht bekommst, wirst Du Dir von der nicht vorhandenen View auch keinen Navigator erstellen können.
Soweit logisch.
Leider fehlt der Rest vom Code, muss man dann halt raten.

Am besten mal den Testcode in einen Agent packen und den Debugger anwerfen.
sollte in etwa so etwas sein - fast zu 100% aus der Notes Designerhifle kopiert:
Code
Dim session As NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim nav As NotesViewNavigator

set session = New NotesSession
Set db = session.CurrentDatabase
Set view = db.GetView("Stationary")
Set nav = view.CreateViewNav()
Andy

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #8 am: 18.01.18 - 12:54:40 »
Du kennst aber schon den Unterschied zwischen Klassen (NotesDatabase, NotesView, NotesViewNavigator) und daraus instantiierten Variablen, oder?
Weil wenn nicht, dann müssten wir Dir hier den kompletten Code runtertippen und Du müsstest ihn einsetzen ohne zu verstehen, was da passiert... Das ist nicht Sinn des Forums.

Denn: Code im Auftrag zu schreiben ist mein Job (und der von vielen anderen im Forum), das werde ich nicht kostenlos im Forum anbieten.
Hilfe zur Selbsthilfe dagegen schon.

EDIT: Nur nebenbei: Dein Set MailDB = session.CurrentDatabase funktioniert nur, wenn die Mail- Datenbank zufällig die gerade geöffnete Datenbank im Client ist... Wenn Du gerade im persönlichen Adressbuch stehst, dann wird der ganze Code knallen...

Set MailDB = Session.CreateDatabase( "", "" )
Call mailDB.OpenMail()

wäre richtig...
« Letzte Änderung: 18.01.18 - 12:57:23 von Tode »
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...

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #9 am: 18.01.18 - 15:01:38 »
Also mit den Notes-Klassen kann das VBA hier leider nichts anfangen. Evtl. wurde die .dll auch noch gar nicht registriert. Aus einer Prüfung der regedit wir leider auch nichts, da keine Rechte vorhanden sind. :$

Im Folgenden dennoch mal der Code bis zur (geplanten) Erstellung des Navigators:

Code
Dim session As Object
Dim db As Object
Dim view As Object
Dim nav As Object

set session = New NotesSession
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationary")
Set nav = view.CreateViewNav()

In der letzten Zeile gibt er nach wie vor den Laufzeitfehler 91. Vermutlich wegen der fehlenden library...

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #10 am: 18.01.18 - 15:19:00 »
Dass VBA mit den Klassen nichts anfangen kann ist vollkommen egal und normal. Mache doch bitte mal nach Call db.OpenMail ein Msgbox db.Title & " - " & db.Server & " - " & db.FilePath

Ist das wirklich die Mail- Datenbank des aktuellen Benutzers?

Ach ja: Stationary ist falsch. Die Ansicht heisst Stationery
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...

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #11 am: 18.01.18 - 16:39:05 »
Wie's aussieht läuft der Navigator nun. Die Mail-Datenbank ist auch tatsächlich die richtige.

Allerdings scheitere ich nun bereits im Ansatz bei der While-Schleife zum Prüfen der NotesViewEntry-Einträge und werde mich wohl oder übel nach einer anderen Lösung umsehen müssen.

Dennoch nochmal vielen Dank für die Hilfe und Unterstützung.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #12 am: 18.01.18 - 16:53:18 »
Nicht gleich verzweifeln... Einmal gebe ich Dir noch nen "Schubs" in die richtige Richtung:

Code
found = False
Set ve = nav.GetFirstEntry()
While found = false and not ve is Nothing
  Set vorlagedoc = ve.Document
  If vorlagedoc.GetitemValue( "MailStationeryName" )(0) = "Name Deiner Vorlage" Then
    found = True
  End If
  Set ve = nav.GetNextentry(ve)
Wend

if found = True then
  '- hier kommt der code, um eine Kopie zu erstellen
End If

Aber vermutlich wäre es wirklich das beste, jemanden zu engagieren... Denn von ErrorHandling, Reaktion wenn die Vorlage nicht existiert, Dokument zum bearbeiten öffnen, etc. haben wir ja überhaupt noch nicht gesprochen...
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...

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #13 am: 19.01.18 - 07:46:38 »
In der Zeile

Code
Set ve = nav.GetFirstEntry()

wird der Laufzeitfehler 438 gemeldet. Muss ve hier als was anderes als Object deklariert werden?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.249
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #14 am: 19.01.18 - 09:13:09 »
zeig doch mal deinen ganzen Code, nur eine Zeile ist da nicht ausreichend.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.14
--
Nur ein toter Bug, ist ein guter Bug!

Offline Drehstuhlpilot

  • Frischling
  • *
  • Beiträge: 11
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #15 am: 19.01.18 - 09:42:17 »
Code
Sub SendMail()

Dim db As Object
Dim session As Object
Dim view As Object
Dim nav As Object
Dim vorlagedoc As Object
Dim ve As Object

Set session = CreateObject("Notes.NotesSession")
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationery")
Set nav = view.CreateViewNav()
Set ve = nav.GetFirstEntry()

found = False
While found = False And Not ve Is Nothing
    Set vorlagedoc = ve.Document
    If vorlagedoc.GetitemValue("MailStationeryName")(0) = "<Vorlagenname>" Then
        found = True
    End If
    Set ve = nav.GetNextentry(ve)
Wend

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.249
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #16 am: 19.01.18 - 09:57:23 »
OK, da eh auf das Backend-Dokument zugegriffen wird und nicht der NotesView-Index ausgewertet wird - kann man sich den NotesViewNavigator auch schenken und die Ansicht auf klassischer, einfachen Art durchlaufen, das ist bei den Mail-Vorlagen auch nicht falsch, der Code sieht dann so aus:
Code
Dim db As Object
Dim session As Object
Dim view As Object
Dim vorlagedoc As Object

Set session = CreateObject("Notes.NotesSession")
Set db = session.GetDatabase("", "")
Call db.OpenMail
Set view = db.GetView("Stationery")

Set vorlagedoc = view.getFirstDocument
Do Until vorlagedoc Is Nothing
    If vorlagedoc.getItemValue("MailStationeryName")(0) = "<Vorlage>" Then Exit Do
    Set vorlagedoc = view.getNextDocument(vorlagedoc)
Loop

If Not vorlagedoc Is Nothing Then MsgBox "Vorlage: " + vorlagedoc.getItemValue("MailStationeryName")(0)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.14
--
Nur ein toter Bug, ist ein guter Bug!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.723
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #17 am: 19.01.18 - 10:03:45 »
Ich glaube, das Problem ist ein anderes: Ich glaube, dass VBA mit dem Set nicht zurecht kommt, was man in LotusScript ja unbedingt braucht... Probiere das mal wegzulassen... Bin mir aber nicht sicher...
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...

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.249
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #18 am: 19.01.18 - 10:08:17 »
Set wird in VBA genauso benötigt wie in LotusScript.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.14
--
Nur ein toter Bug, ist ein guter Bug!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.249
  • Geschlecht: Männlich
Re: Lotus-Notes-Vorlage via Excel-Makro aufrufen
« Antwort #19 am: 19.01.18 - 10:15:15 »
Der Fehler beim NotesViewNavigator besteht in "nav.GetFirstEntry", das müsste korrekter weise "nav.GetFirst" heißen, für den Fall das ihr mit dem NotesViewNavigator weitermachen wollt ;)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.14
--
Nur ein toter Bug, ist ein guter Bug!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz