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

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • 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.896
  • 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.924
  • 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