ahstax
Goto Top

Die Anzahl der Elemente, die gleichzeitig geöffnet werden können, wurde vom Serveradministrator begrenzt...

Hallo,

ich möchte aus einem öffentlichen Exchange-Ordner die Position der letzten, von meinem Programm bearbeiteten Mail/Item herausfinden. Dazu verwende ich folgenden Code:

 Public Sub SucheLetzteBearbeiteteMail()

        Cursor = Cursors.WaitCursor

        txtBxVerlaufAktualisieren("* Suche nach letzter bearbeiteten Mail, bitte warten...")  

        'objApplication = New Microsoft.Office.Interop.Outlook.Application()  
        'objNamespace = objApplication.GetNamespace("MAPI")  
        'objUeberwachterOrdner = objNamespace.Folders("Öffentliche Ordner - " & strPrimarySmtpAddress).Folders.....Item("FolderName")  

        intAnzahlMails = objUeberwachterOrdner.Items.Count
       
        For m As Integer = 1 To 200

            If objUeberwachterOrdner.Items.Item(m).EntryID = strFobjLastMailItemEntryID Then

                bolGefunden = True
                intPosLetzteMail = m
                m = 200
               
                txtBxVerlaufAktualisieren("  ** Letzte bearbeitete Mail an Position " & intPosLetzteMail & " gefunden")  
            Else
                'MsgBox("nicht unter den ersten " & m & " Mails")  

            End If

        Next

        If bolGefunden = False Then
            txtBxVerlaufAktualisieren("  ** Letzte bearbeitete Mail nicht gefunden.")  
        End If

            txtBxVerlaufAktualisieren("* Suche nach letzter bearbeiteten Mail beendet.")  

            Cursor = Cursors.Default

    End Sub

Das ist vermutlich nicht die eleganteste Möglichkeit, funktioniert aber soweit...
BIS AUF... wenn ich hier:

 For m As Integer = 1 To 200

eine höhere Zahl als 200 vorgebe, erhalte ich die Meldung
"Die Anzahl der Elemente, die gleichzeitig geöffnet werden können, wurde vom Serveradministrator begrenzt..."
Wie kann ich das vermeiden, ohne die Anzahl der Elemente, die gleichzeitig geöffnet werden können erhöhen zu müssen?

Einiges hab ich schon ausprobiert, z.B.

objUeberwachterOrdner = nothing
objUeberwachterOrdner = objNamespace.Folders("Öffentliche Ordner - " & strPrimarySmtpAddress).Folders.....Item("FolderName")  

objUeberwachterOrdner.Items.item(m).close()
objUeberwachterOrdner.Items.item(m).dispose()

Aber das war wohl der falsche Ansatz...


Neugierige Grüße,
Andreas

Content-Key: 214642

Url: https://administrator.de/contentid/214642

Printed on: April 19, 2024 at 04:04 o'clock

Member: colinardo
colinardo Aug 21, 2013 updated at 10:18:09 (UTC)
Goto Top
Hallo Andreas,
kann zwar gerade nicht an einem Exchange testen, aber du könntest versuchen mit zwei verschachtelten Schleifen zu arbeiten. Dabei wird die Gesamtanzahl der Mails durch 200 geteilt und die innere Schleife arbeitet dann immer nur 200 Mails hintereinander ab. solange bis alle Mails abgearbeitet wurden. Der Rest der Division durch 200 wird dann am Ende noch abgearbeitet.
Eventuell bringt das was, musst du testen.

intAnzahlMails = objUeberwachterOrdner.Items.Count
intT = Int(intAnzahlMails / 200)
intRest = intAnzahlMails Mod 200
found = False
For i = 1 To intT
	If found = True Then 
		Exit For
	End If
	n = (i * 200 )+1 
	For y = n To (n+200)-1
		If checkMail(y) Then
			intPosLetzteMail = y
			found = True
			Exit For
		End If
	Next
	if i = intT and intRest <> 0 then
		for y = n To (n+intRest)
			If checkMail(y) Then
				intPosLetzteMail = y
				found = True
				Exit For
			End If
		next
	end if
Next

if found then
	txtBxVerlaufAktualisieren("  ** Letzte bearbeitete Mail an Position " & intPosLetzteMail & " gefunden")  
else
	txtBxVerlaufAktualisieren("  ** Letzte bearbeitete Mail nicht gefunden.")   
End if


Function checkMail(pos)
	
    If objUeberwachterOrdner.Items.Item(pos).EntryID = strFobjLastMailItemEntryID Then
	checkMail = True
    Else
        checkmail = False
    End If
End Function

Alternativ könntest du mal mit einer for each -Schleife arbeiten und dann die Mails anhand der EntryID der Mail identifizieren.

Grüße Uwe
Member: ahstax
ahstax Aug 22, 2013 at 12:07:17 (UTC)
Goto Top
Hallo Uwe,

Danke für Deine Antwort!

Schleife in Schleife hab ich schon probiert, brachte leider auch nichts...

For Each hab ich noch nicht probiert. Kann man da ne Reihenfolge vorgeben? Bezüglich der E-Mails also ausgehend von der Jüngsten älter werdend?

Grüße,
Andreas
Member: colinardo
colinardo Aug 22, 2013 updated at 12:16:18 (UTC)
Goto Top
Zitat von @ahstax:
For Each hab ich noch nicht probiert. Kann man da ne Reihenfolge vorgeben? Bezüglich der E-Mails also ausgehend von der
Jüngsten älter werdend?
nein, deshalb hatte ich geschrieben das du zur eindeutigen Identifizierung der Mail die Eigenschaft "EntryID" des MailItems benutzt. Dies ist eine eindeutige Kennung die für jede Nachricht in Outlook unterschiedlich ist.

Grüße Uwe
Member: ahstax
ahstax Sep 09, 2013 at 12:20:05 (UTC)
Goto Top
Hallo,

ich habe es nun mit zwei Schleifen gelöst. Die erste ist eine For Each, die zweite eine For mit Zähler. Funktioniert. Keine Ahnung warum. Passt aber so...!
Danke für die Hilfe!!!
Member: pfefferb
pfefferb Dec 02, 2014 at 08:44:49 (UTC)
Goto Top
Hi!
Ich stehe nun vor dem gleichen Problem... habe aber keine Ahnung, wie die Lösung mit einer For-Each-Schleife und einer Zählerschleife aussehen könnte. Könntest Du den Code dazu posten? Das ware sehr hilfreich!
Grüße
Pfeffer