Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: MichaelS am 11.01.05 - 13:44:33
-
Hallo Leute,
bin neu hier, ich hoffe jemand kann mir weiterhelfen. :D
Das Problem:
ich habe ich VBA (Access 97) eine Routine geschrieben um die Mails
über Lotus Notes zu versenden.
Nun möchte dass, der User die Möglichkeit hat die Mails vor dem versenden zu bearbeiten. Ich meine das müsste Über "workspace.EDITDOCUMENT(True, domNotesDocumentMemo).GOTOFIELD("Subject") " funktionieren.
Nur erscheint hier die Fehlermeldung ("Extended Object Failure ") oder so ähnlich. ???
Hier der komplette Code:
***************************************
Public Sub test()
Dim domSession As New NotesSession
Dim domNotesDatabaseMailFile As NotesDatabase
Dim domNotesDocumentMemo As NotesDocument
Dim domNotesRichTextItemBody As NotesRichTextItem
Dim strattachment As String
Dim workspace As Object
Dim SendTo As String
' Put your passwork in the quotes below to skip propting
domSession.Initialize ("")
Set domNotesDatabaseMailFile = domSession.GetDatabase("", "mail\mschindl.nsf")
' Generate an error if previous attempts were unsuccessful.
If domNotesDatabaseMailFile Is Nothing Then
MsgBox ("Mail file not open")
Exit Sub
End If
SendTo = "Mailadresse"
Set domNotesDocumentMemo = domNotesDatabaseMailFile.CreateDocument
Call domNotesDocumentMemo.AppendItemValue("Form", "Memo")
Call domNotesDocumentMemo.AppendItemValue("From", domSession.CommonUserName)
Call domNotesDocumentMemo.AppendItemValue("SendTo", SendTo)
Call domNotesDocumentMemo.AppendItemValue("Subject", "Derzeitiger Stand zum Testsystem")
Set domNotesRichTextItemBody = domNotesDocumentMemo.CreateRichTextItem("Body")
domNotesRichTextItemBody.AppendText ("das ist ein test")
domNotesRichTextItemBody.AddNewLine (2)
' This is where you can add support for attachments.
strattachment = "Anhang"
Call domNotesRichTextItemBody.EmbedObject(EMBED_ATTACHMENT, "", strattachment) 'attaches the file to the
body field
' Send the document.
Set workspace = CreateObject("Notes.NotesUIWorkspace")
domNotesDocumentMemo.SaveMessageOnSend = True
Call workspace.EDITDOCUMENT(True, domNotesDocumentMemo).GOTOFIELD("Subject") ' hier erschneint die
' Fehlermeldung irgendwas mit
' "Extended Object failure"
Set domSession = Nothing
End Sub
**************************************************
Vielen Dank!
Michael.
-
Mach das nacheinander:
set uidoc = workspace.EDITDOCUMENT(True, dommNotesDocumentMemo)
call uidoc.GOTOFIELD("Subject")
Dann siehst Du wohl auch, wo das Problem wirklich liegt
-
Vielen Dank Semeaphoros,
werde später ausprobieren, bin zur Zeit an einem Rechner ohne Lotus Notes Client.
Gruß
Michaels
-
Hallo,
habe das jetzt so gemacht wie es Semeaphoros empfohlen hat.
beim abarbeiten dieser Zeile
Set uidoc = workspace.EDITDOCUMENT(True, domNotesDocumentMemo)
erscheint die Fehlermeldung: "Laufzeit fehler '7419' Incorrect argument Type: object expected"
Was nun ???
Vielen Dank!
MichaelS.
-
Hi,
wo hast du den die Variable uidoc deklariert?
Versuch's mal beim "gedimse" mit der Zeile
Dim uidoc As NotesUIDocument
Axel
-
Guter Blick, Axel ;)
Man sollte NIE-NIE-NIEMALS eine einzige Zeile Code schreiben, ohne vor
Option Explicit
oder
Option Declare (nur LS)
gesetzt zu haben. Das erspart soviel Zeit an vollkommen nutzloser Fehlersuche ...
Bernhard
-
Hallo,
So hier ist nochmal der komplette code mit dem gedimse, war aber auch schon so
das weiter oben war veraltert.
'********************************************
Public Sub test()
Dim domSession As New NotesSession
Dim domNotesDatabaseMailFile As NotesDatabase
Dim domNotesDocumentMemo As NotesDocument
Dim domNotesRichTextItemBody As NotesRichTextItem
Dim strattachment As String
Dim workspace As Object
Dim uidoc As NOTESUIDOCUMENT
' Put your passwork in the quotes below to skip propting
domSession.Initialize ("")
'On Error GoTo ErrorHandler
' Either SendTo, CopyTo, or BlindCopyTo is required.
Set domNotesDatabaseMailFile = domSession.GetDatabase("", "mail\mschindl.nsf")
' Generate an error if previous attempts were unsuccessful.
If domNotesDatabaseMailFile Is Nothing Then
MsgBox ("Mail file not open")
Exit Sub
End If
Dim SendTo As String
SendTo = "schindlm@tiscali.de"
Set domNotesDocumentMemo = domNotesDatabaseMailFile.CreateDocument
Call domNotesDocumentMemo.AppendItemValue("Form", "Memo")
Call domNotesDocumentMemo.AppendItemValue("From", domSession.CommonUserName)
Call domNotesDocumentMemo.AppendItemValue("SendTo", SendTo)
Call domNotesDocumentMemo.AppendItemValue("Subject", "Derzeitiger Stand zum Testsystem")
Set domNotesRichTextItemBody = domNotesDocumentMemo.CreateRichTextItem("Body")
domNotesRichTextItemBody.AppendText ("das ist ein test")
domNotesRichTextItemBody.AddNewLine (2)
' This is where you can add support for attachments.
strattachment = "C:\Dokumente und Einstellungen\User_BuyOne\Eigene Dateien\vertreter.txt"
Call domNotesRichTextItemBody.EmbedObject(EMBED_ATTACHMENT, "", strattachment) 'attaches the file to the body field
Set workspace = CreateObject("Notes.NotesUIWorkspace")
domNotesDocumentMemo.SaveMessageOnSend = True
Set uidoc = workspace.EDITDOCUMENT(True, domNotesDocumentMemo)
Call uidoc.GOTOFIELD("Subject")
'domNotesDocumentMemo.Send (False)
Set domSession = Nothing
End Sub
'***********************************************
Was mir noch auffällt dass, im "Dim uidoc As NOTESUIDOCUMENT" das NOTESUIDOCUMENT automatisch groß erscheint auch wenn man das klein schreibt. bei z. Bsp NotesSession ist das nicht so.
Ach so und ich habe versucht workspace als "workspace As New NOTESUIWORKSPACE" zu deklarieren, hier erscheint die Fehlermeldung "Fehler beim kompilieren: unzulässige Verwendung des Schlüsselworts 'New'"
den Verweis auf die Typenbibliothek existiert jedoch. >:(
Bitte um Hilfe
MichaelS.
-
Aha, das steht in der Designer-Hilfe bei NotesUIDocument:
Note This class is not supported in COM.
Ergo: Man müsste das über Ole lösen statt Com .....
-
Hi,
in der Online-Hilfe steht bei allen UI-Klassen, dass sie über die COM-Schnittstelle nicht unterstützt wird.
Ich glaube über diesen Weg kommt du nicht weiter.
Axel
-
Genau, das war auch, was mir dunkel schon den ganzen Tag im Kopf herumkurvte .... :) ..... da muss wirklich ein anderer Weg her.
-
Danke,
nur wenn ich mit OLE Klasse arbeite,
dann muss man eine Session wie z.Bsp hier starten
"Set objNotes = GetObject("", "Notes.Notessession")"
Das Problem ist, dass bei dieser Methode mit Starten des Clients auch Lotus Notes als Anwendung mit geöffnet wird.
Ihr habt natürlich recht mit der Ole Klasse hat das funktioniert.
Hab am Anfang auch damit angefangen hier hatte ich nur das Problem dass, die Anwendung immer mit startete. Ich will aber dem Benützer die Auswahl gebenn: "Gleich senden oder vorher editieren".
Muss man dass den wirklich mit zwei verschiedenen Routinen machen?
Und nur so nebenbei bei beenden von Notes erscheint dei Meldung "Sie haben noch ausgehende Mail anstehen. Möchten Sie diese jetzt übertragen"
Kann mit diese Meldung irgendwie deaktivieren am besten per Code(VBA).
Und unter welcher Adresse kann ich die Online Hilfe finden. Bin in dieser Thematik
noch ein Neuling.
Danke!
MichaelS
-
Hallo,
diesen Code habe ich vorher benützt.
das funktioniert soweit, nur, dass ich hier nicht weiss wie ich verhindern das die Anwendung sich auch mit öffnet.
'*******************************************
Public Sub test()
Dim objNotes As Object, objNotesDB As Object, objNotesMailDoc As Object, workspace As Object
Dim SendItem, rtitem
' Zuweisung der Objektvariablen
Set objNotes = GetObject("", "Notes.Notessession")
Set objNotesDB = objNotes.GetDatabase("", "")
' Öffnen der Standard-Maildatenbank / Erstellen neues Maildokument
Call objNotesDB.OPENMAIL
Set objNotesMailDoc = objNotesDB.CreateDocument
objNotesMailDoc.Form = "Memo"
Call objNotesMailDoc.Save(True, False)
Set SendItem = objNotesMailDoc.AppendItemValue("SendTo", "")
objNotesMailDoc.SendTo = "schindlm@tiscali.de"
'objNotesMailDoc.CopyTo = cc
'objNotesMailDoc.BlindCopyTo = bcc
objNotesMailDoc.Subject = "test"
Set rtitem = objNotesMailDoc.CreateRichTextItem("Body")
objNotesMailDoc.Body = "nachricht"
rtitem.AddNewLine (1)
Call rtitem.EmbedObject(1454, "", "C:\Dokumente und Einstellungen\User_BuyOne\Eigene Dateien\vertreter.txt")
Set workspace = CreateObject("Notes.NotesUIWorkspace")
Call workspace.EDITDOCUMENT(True, objNotesMailDoc).GOTOFIELD("Subject")
End Sub
'**************************************************
Dieser Code funktioniert auch ohne Verweis auf die Notes Bibliothek.
MichaelS
-
Naja, sooo gross ist der Unterschied nicht. auch bei COM wird die Serverapplikation gestartet, man sieht das nur nicht unbedingt so gut wie bei Ole, da würd ich mir jetzt mal keine Sorgen machen.
-
Was meinst du damit "Man sieht das nicht so gut"?
ich darfs mal zusammenfassen.
1) Über COM kann man im Hintergrund (ohne, dass Notes als Anwendung läuft) ein Mail versenden. In diesem Fall kann ich jedoch das Mail nicht zum editieren öffnen.
2) Über OLE kann ich ein Mail versenden und zum Editieren öffnen.
Jedoch wird hier die Lotus Notes Anwendung mitgeöffnet
Ist das soweit richtig?
Gruss
MichaelS
-
Jo, Michael, das ist richtig so. Wegen der OLE-Lösung: Du kannst ja kaum ein Notes-Mail editieren, wenn der Notes-Client nicht zur Verfügung steht, oder ? Das käme ja nicht so gut. FontEnd - Client muss laufen, ergo OLE. Für das Backend "reicht" COM.
Bernhard
-
Genau so ist es, logischerweise muss Notes sichtbar werden, wenn man editieren will. Allerdings mit dem Laufen das ist so eine Sache .... Notes "läuft" in beiden Fällen, einmal im Vordergrund mit voller Funktionalität (lässt sich aber minimieren), das andere mal im Hintergrund, damit natürlich auch ohne FrontEnd-Funktionalität.
-
... das andere mal im Hintergrund, damit natürlich auch ohne FrontEnd-Funktionalität ...
Deswegen heisst das ja auch "FrontEnd", oder, Jens ? Da hast Du Dich jetzt aber im Kreis gedreht und das Bekannte nochmals betont.
Bernhard
-
Nun Gut.
der Gedanke war folgender: Ist Lotus Notes aktiv, dann wird das Mail verschickt und Notes Frontend bleibt Offen.
Ist jedoch LS geschlossen. Dann muss ich zuerst die Frontend öffnen, soweit so gut. Anschliessend muss die Frontend geschlossen werden.
Ich möchte nicht unbedingt dem Benutzer zumuten die Anwendung immer manuell zu schliessen.
So und ich hier habe ich ein Problem, das Schliessen der Anwendung über die Api und ProzessId ist ja grundsätzlich kein Problem.
Nur erscheint hier bei local eingerichteter Mail der Hinweis:
"Sie haben ausgehende Mail anstehen. Möchten Sie sie jetzt übertragen"
In dieser Zeit steht mein Programm (ShellWait) und wartet auf das Beenden von LS.
Bei dieser Meldung hat man drei Auswahl-Möglichkeiten.
1) JA
2) Nein
3) Abbrechen.
mit "JA" und "Nein" kann ich leben,
da bei "Ja" betätigen die Replizierung gestartet wird und anschliessend LS beendet wird.
Bein "Nein" schliesst LS sofort.
Bei "Abbrechen" komm ich ins schwitzen: Mein Programm wartet in einer Schleife auf das Beenden von LS und LS bleibt natürlich in diesem Fall offen.
So und jetzt die Fragen:
gibt eine Möglichkeit Lotus Notes zu beenden ohne, dass dieser Warnhinweis erscheint.
Vielen Dank!
Michael.
-
oder, Jens ? Da hast Du Dich jetzt aber im Kreis gedreht und das Bekannte nochmals betont.
Richtig und bewusst, weil genau das offenbar noch nicht klar genug rüber gekommen war.
Michael: Dort, wo Du LS schreibst, meinst Du wohl eher LN - oder? Diese Meldung mit ausgehenden Mails lässt sich meines Wissens nicht unterbinden.
-
Hi,
ich sehe da auch keine Möglichkeit, die Meldung beim Beenden von Notes zu unterdrücken.
Wieso sollen eigentlich die Mails noch bearbeitet werden? Kannst du das nicht in Access handlen? In diesem Fall kannst du alles mit den Backend-Funktionen regeln.
Axel
-
Danke für euere Hilfe!
Semeaphoros ja ich meinte LS (war schon spät).
Ich habe das jetzt so gelöst.
Will der Benutzer die Mail im Hintergrund verschicken wird die Com-Prozedur aufrufen. Wenn er das Mail vorher nuch editieren will rufe ich OLE Prozedur auf, das ganze ist zwar nicht besonders elegant aber es funktioniert.
Gruss
MichaelS