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-ID: 214642

Url: https://administrator.de/forum/die-anzahl-der-elemente-die-gleichzeitig-geoeffnet-werden-koennen-wurde-vom-serveradministrator-begrenzt-214642.html

Ausgedruckt am: 04.04.2025 um 12:04 Uhr

colinardo
colinardo 21.08.2013 aktualisiert um 12:18:09 Uhr
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
ahstax
ahstax 22.08.2013 um 14:07:17 Uhr
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
colinardo
colinardo 22.08.2013 aktualisiert um 14:16:18 Uhr
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
ahstax
ahstax 09.09.2013 um 14:20:05 Uhr
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!!!
pfefferb
pfefferb 02.12.2014 um 09:44:49 Uhr
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