Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: schroederk am 13.09.18 - 08:23:50

Titel: Finde Ursache für Type mismatch nicht
Beitrag von: schroederk am 13.09.18 - 08:23:50
Hallo,

mit meinen bescheidenen Lotusscript-Kenntnissen finde ich den Fehler einfach nicht und brauche Eure Hilfe:

Die angegebene Zeile im Errorhandling stimmt ja bei mir meist nicht wirklich, daher grenze ich das Problem immer mit Konsolen-Ausgaben ein.
Da genau vor der Zeile das Print ausgeführt wird und direkt dahinter nicht mehr, muss es zwangsläufig die folgende Zeile sein:

Set mailinfo = mynotesdir.GetMailInfo(chair, True)

Aber mailinfo ist vom Typ Variant und mynotesdir vom Typ NotesDirectory. Also wo soll der Type mismatch sein?
Hier das ganze Script:

Code
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim col As NotesDocumentCollection
	Dim col1 As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim doc1 As NotesDocument
	Dim view As NotesView
	Dim item As NotesItem
	Dim mynotesdir As NotesDirectory
	Dim uid As String
	Dim chair As String
	Dim chairx As String
	Dim mailinfo As Variant
	Dim mailsrv As Variant
	Dim maildb As Variant
	Dim searchformula As String
	Dim rtBody As NotesRichTextItem
	Dim rtBodyTmp As Variant
	Dim mytext As String
	Dim tmpName As NotesName
	Set db=s.CurrentDatabase
	Set col=db.UnprocessedDocuments
	Set mynotesdir = s.getDirectory("Server/SRV/Gruppe")
	mytext = "Dial-In: xxx xxxx xxxx xxx"+Chr(13)+"Room number: xxxx"+Chr(13)+"Pin: xxxx"+Chr(13)
	
	On Error GoTo ErrHandler

	Print "Process Start"
	Print CStr(col.Count) + " selected documents"
	Set doc=col.getfirstdocument
	While Not doc Is Nothing
		Set item = doc.GetFirstItem( "ResourceName" )
		Print "Item=" + item.text
		If item.text = "Telefonkonferenzraum Geschäftsführung" Then
			Print "Entry found"
			' Hole ApptUNID und Chair und suche dann nach ApptUNID in Mail-DB vom Chair
			uid = doc.GetItemValue("ApptUNID")(0)				' eindeutige ID des Kalendereintrags
			Print "uid="+uid
			chairx = doc.getItemValue("Chair")(0)				' Vorsitzende der Einladung
			Set tmpName = New NotesName(chairx)					' NotesNamen erzeugen
			chair = CStr(tmpName.Common)						' Aus NotesNamen nur den Namen lesen
			Print "Chair="+chair			
			Set mailinfo = mynotesdir.GetMailInfo(chair, True)	' <<<<< hier tritt der Fehler auf
			Print "test"		
			maildb = CStr(mailinfo(3))							' Mail-DB des Benutzers
			mailsrv = CStr(mailinfo(0))							' Mail-Server des Benutzers
			Print "Found " + maildb + " on Server " + mailsrv
			Set db = s.GetDatabase(mailsrv, maildb, False)		' Datenbank öffnen
			If Not db.IsOpen Then Call db.Open("", "")
			Set view = db.GetView("Calendar")					' Kalenderview öffnen

			searchFormula = {ApptUNID = "} + uid + {"}
			Set col = db.search(searchformula,Nothing,0)		' Nach eindeutiger ID suchen
			Set doc1 = col1.GetFirstDocument
			If doc1.ApptUNID = uid Then		' Sicherhaltshalber prüfen, ob das richtige Dokument gefunden wurde
				Print "Document found"
				Set rtBody = doc.GetFirstItem("Body")
				Set rtBodyTmp = doc.CopyItem(rtBody, "Body")	' alten Body zwischenspeichern
				Call rtBody.remove()							' Body löschen
				Set rtBody = New NotesRichTextItem(doc, "Body") ' Body neu erstellen
				Call rtBody.AppendText(myText)					' neuen Text anfügen
				Call rtBody.AppendRTItem(rtBodyTmp)				' alten Body anfügen
				Call rtBodyTmp.remove()							' Zwischenspeicher wieder löschen
				Call doc.Save(True, False, False)
				Print "Document edited... closing"
			End If

		End If
		Set doc=col.GetNextDocument(doc) 
	Wend
	Print "Process end"
ErrResume:
	Exit Sub
ErrHandler: 
	Print "** Error occured ** " &  Str(Err) & ": " & Error$ & " in line " & Str(Erl) & ". Agent stopped."
	Resume ErrResume	


Titel: Re: Finde Ursache für Type mismatch nicht
Beitrag von: Peter Klett am 13.09.18 - 08:56:37
Lass mal das Set vor mailinfo weg. Set wird verwendet, um Objekte zu setzen

Z.B.

Dim doc As NotesDocument
Dim wert As Variant

Objekt doc mit Set setzen
Set doc = ...

aber das Variant ohne Set
wert = doc.Wert


Wobei ein Variant alles sein kann. GetMailInfo gibt ein Array zurück, da kein Set. Gäbe es z.B. ein NotesDocument zurück, dann benutzt Du Set.
Titel: Re: Finde Ursache für Type mismatch nicht
Beitrag von: Tode am 13.09.18 - 09:00:53
Peter hat Dir ja die Lösung gepostet.

Als Zusatzinfo: Wenn Du im Designer in der Sub / Function bist, dann drücke: Strg + Alt + L ==> Fehlernummer aus Meldung eingeben ==> Enter. Dann kommst Du genau zur richtigen Zeile.
Titel: Re: Finde Ursache für Type mismatch nicht
Beitrag von: schroederk am 13.09.18 - 10:48:01
Ihr habt mir schonmal sehr weitergeholfen.
Da sieht man leider, dass ich zu selten und zu wenig in Lotusscript mache.

Ich hatte mir das Beispiel von https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_EXAMPLES_GETMAILINFO_METHOD.html (https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_EXAMPLES_GETMAILINFO_METHOD.html) geholt, aber wieso auch immer das Set davor gesetzt und auch beim Vergleichen den Unterschied nicht gesehen.

Also nochmal Danke an Euch.  :knuddel: