Autor Thema: Finde Ursache für Type mismatch nicht  (Gelesen 2039 mal)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.919
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Finde Ursache für Type mismatch nicht
« 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	


Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Finde Ursache für Type mismatch nicht
« Antwort #1 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.
« Letzte Änderung: 13.09.18 - 09:00:50 von Peter Klett »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.873
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Finde Ursache für Type mismatch nicht
« Antwort #2 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.
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 schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.919
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Finde Ursache für Type mismatch nicht
« Antwort #3 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 geholt, aber wieso auch immer das Set davor gesetzt und auch beim Vergleichen den Unterschied nicht gesehen.

Also nochmal Danke an Euch.  :knuddel:
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz