Toon posts:

[vb] snel in een collection het verwijderde item traceren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hier kom ik even niet uit. Ik heb een programma dat zorgt voor de synchronisatie van de kalender in Outlook met een ander programma. Synchronisatie an sich werkt, maar er moet ook een zogeheten Real Time synchronisatie plaats vinden. Wanneer iets in Outlook word verwijderd moet dit onmiddelijk in het andere programma duidelijk zijn en vice versa. Dit geldt uiteraard ook voor wijzigingen en toevoegingen.

Voor de wijzigingen en toevoegingen is dit niet zo spannend. In de Outlook.Items class zitten events voor ItemAdd en ItemChange, waarbij het betreffende item als object wordt meegegeven.

Echter: het ItemRemove event heeft dit niet, dus ik moet een algoritme schrijven dat het deleted item wel kan achterhalen. Dit alles moet natuurlijk zo snel mogelijk gebeuren.

Ik zat zelf te denken aan een originele collection bijhouden en een collection na het verwijderen van het item en die twee dan vergelijken. Maar:

1. Hoe doe ik dit op een mooie manier
2. Hoe doe ik dit op een snelle manier

Alvast heel erg bedankt.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Ik zou eerst de aantalen vergelijken. Dus even het aantal laatste items even opslaat. Dus alleen het nummer hoeveel het er waren. En met een specifieke interval controlleer je of dit aantal nog hezelfde is.

Is het aantal lager, dan is er logischewijs iets verwijdert en dan kun je gaan kijken welk object dit is.

Verwijderd

Topicstarter
questa schreef op 27 oktober 2004 @ 13:11:
Is het aantal lager, dan is er logischewijs iets verwijdert en dan kun je gaan kijken welk object dit is.
Logisch, maar hoe kan ik snel kijken welk object dit is?

ActiveSync bijvoorbeeld die doet dit bijna onmiddelijk terwijl als je alle objecten in een loop gaat nalopen en vergelijken... Duurt toch wel ff, toch?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Verwijderd schreef op 27 oktober 2004 @ 13:21:
[...]


Logisch, maar hoe kan ik snel kijken welk object dit is?

ActiveSync bijvoorbeeld die doet dit bijna onmiddelijk terwijl als je alle objecten in een loop gaat nalopen en vergelijken... Duurt toch wel ff, toch?
Heb jij hetzelf al geprobeert hoelang het duurt. Objecten vergelijken is niet echt een heftige klus. Dit kan in prenciepe vrij snel gebeuren.

Hoelang duurt het nu?

Verwijderd

Topicstarter
questa schreef op 27 oktober 2004 @ 13:44:
[...]
Hoelang duurt het nu?
Lol ik ging er vanuit dat het vrij lang zou duren... 1074 dingen vergelijken in een halve seconde vind ik wel oke haha :-D

Anywayz, bedankt :).

Verwijderd

Topicstarter
Dit is mijn oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub BuildOriginalItems()
    Dim str_Restrict As String

    str_Restrict = "[LastModificationTime] > '" & LastSyncString & "'"

    Dim OriginalOutlookItems As Outlook.Items
    Dim OriginalOutlookItem As Object
    Set OriginalOutlookItems = mobj_OutlookItems.Restrict(str_Restrict)
    Set mobj_OriginalOutlookItems = New Collection
    For Each OriginalOutlookItem In OriginalOutlookItems
        mobj_OriginalOutlookItems.Add OriginalOutlookItem.EntryID, OriginalOutlookItem.EntryID
    Next OriginalOutlookItem
    Set OriginalOutlookItems = Nothing
End Sub

Private Sub mobj_OutlookItems_ItemRemove()
    If Not mbool_InitRealTime Then Exit Sub

    Dim OutlookItem As Object

On Error Resume Next

    For Each OutlookItem In mobj_OutlookItems
        mobj_OriginalOutlookItems.Remove OutlookItem.EntryID
        Err.Clear
    Next OutlookItem

On Error GoTo 0

    Dim i As Long
    For i = 1 To mobj_OriginalOutlookItems.Count
        Debug.Print "Deleted Item:  " & CStr(mobj_OriginalOutlookItems.Item(i))
    Next i

    BuildOriginalItems
End Sub
Pagina: 1