RDOItems object collection

 

RDOItems collection represents the child messages of a given RDOFolder object.

Returned by: RDOFolder.Items, HiddenItems.

DeletedItems returns an RDODeletedItems collection, which is derived from RDOItems

 

The example below logs to the default MAPI session and prints out the subjects of all the messages from the Inbox folder:

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Folder = Session.GetDefaultFolder(olFolderInbox)
for each Msg in Folder.Items
  Debug.Print(Msg.Subject)
next

 

Note that the performance of the code enumerating through the RDOItems collection is significantly increased if the collection's columns are preset with RDOItems.MAPITable.Columns and only properties specified in the columns property are retrieved from the returned items.

In this case the messages are never opened and only the data from MAPI table is used. If a property not specified in columns is requested or if the message is modified, the item will be opened resulting in degraded performance.

 

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Folder = Session.GetDefaultFolder(olFolderInbox)
set Items = Folder.Items

'let Redemption know which properties we will be requesting later
Items.MAPITable.Columns = "Subject, SenderName"
Items.MAPITable.Sort "ReceivedTime", false
for each Item in Items

  'read the properties specified in the MAPITable.Columns property above
  Debug.Print Item.Subject & " - " & Item.SenderName
next

 

 

Properties

Methods

Events

 


Derived from: IDispatch


Properties


Count

integer, read-only. The number of messages in the RDOItems collection

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Folder = Session.GetDefaultFolder(olFolderInbox)

MsgBox "There are " & Folder.Items.Count & " messages in " & Folder.Name

RawTable

IUnknown, read-only. Returns the IMAPITable Extended MAPI interface used internally by the RDOItems collection

 

 

Session

RDOSession, read-only. Returns the parent MAPI session represented by the RDOSession object

 

 

_Item(Index)

Index - variant: integer or a string. A default object property.

Retrieves a message with a given index (1 to Count) or a given subject

Returns RDOMail object

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Folder = Session.GetDefaultFolder(olFolderInbox)

for i = 1 to Folder.Items.Count

  Debug.Print Folder.Items(i).Subject

next

 

MAPITable

MAPITable, read-only. Returns the MAPITable Redemption object which can be used to manipulate the collection (restrict, find, etc).

'sort all items in the Inbox by Subject and loop through them
PR_NORMALIZED_SUBJECT = &H0E1D001E
set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Folder = Session.GetDefaultFolder(olFolderInbox)
set Items = Folder.Items
Items.MAPITable.Sort PR_NORMALIZED_SUBJECT, false
for each item in Items
  Debug.Print(item.Subject)
next


'Print out the subject and entry id of all messages in the Inbox

'received in January 2007

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
Set folder = Session.GetDefaultFolder(olFolderInbox)
set Items = folder.Items
set Recordset = Items.MAPITable.ExecSQL("SELECT Top 5 Subject, EntryID from Folder " & _
        "where (ReceivedTime >= '2007-01-01') and (ReceivedTime <= '2007-02-01') " & _
        "order by ReceivedTime desc")
while not Recordset.EOF
  Debug.Print(Recordset.Fields("Subject").Value & " - " & Recordset.Fields("EntryID").Value)
  Recordset.MoveNext
wend
 


Methods


Add(Type)

Adds a new message to the folder. Returns the newly added RDOMail object.

 

Type - variant, optional. either string specifying the message class (e.g. "IPM.Note") or a file name (see below) or one of the OlItemType values (integer), e.g. olPostItem.

 

If a fully qualified file name is passed in, Add returns an RDODocumentItem object with its properties appropriately populated.

 

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Inbox = Session.GetDefaultFolder(olFolderInbox)
set Msg = Inbox.Items.Add("IPM.Note")
Msg.BCC = "dmitry@dimastr.com; outspy@dimastr.com"
Msg.Subject = "test"
Msg.Save

 

Find(Filter)

Locates and returns the first item (RDOMail or an appropriate object derived from RDOMail, such as RDOContactItem) matching the specified SQL style query (see example).

If no item matches the query, null is returned.

To locate subsequent matching items, call FindNext repeatedly until null is returned.

See also Restrict method.

 

Filter - string. SQL style query specifying the condition. Can either be a WHERE part only (e.g. "LastName = 'Streblechenko' ") or a complete SQL expression with the SELECT, WHERE and ORDER BY clauses (see example).

The properties specified in the SQL query must either use the Outlook Object Model (or RDO) property name (e.g. Subject, Email1Address) or a DASL style property name (e.g. "http://schemas.microsoft.com/mapi/proptag/0x0037001E", "http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/8083001E")

When a DASL property name is used, it must be enclosed in double quotes.

Use OutlookSpy to figure out the DASL property names - select an item in Outlook, click IMessage button on the OutlookSpy toolbar, select the property, see the "DASL" edit box on he right hand side of the window.

 

Including the SELECT clause allows Redemption to pre-fetch the properties from the folder contents table without opening the item resulting in a significant performance gain (see example). If you later access a property not specified in the SELECT clause, Redemption will open the item.

 

Including the ORDER BY clause sorts the collection in the specified order.

 

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Contacts = Session.GetDefaultFolder(olFolderContacts)
set Items = Contacts.Items
set Contact = Items.Find("SELECT Email1Address, FileAs from Folder " & _

                                       " WHERE LastName = 'Streblechenko' " & _

                                       " ORDER BY FirstName desc")
while Not (Contact Is Nothing)
    Debug.Print Contact.FileAs & ": " & Contact.Email1Address
    set Contact = Items.FindNext
wend

 

FindNext

Returns the next object matching the restriction specified in a previous call to Find. It returns null if no next object exists, for example, if already positioned at the end of the collection.

An error will be raised if the Find method was not previously called.

 

see example above

GetFirst

Returns the first message in the specified RDOItems collection. Returns Nothing if no first message exists, for example, if there are no messages.

 

 

GetLast

Returns the last message in the specified RDOItems collection. Returns Nothing if no last message exists, for example, if there are no messages.

 

 

GetNext

Returns the next message in the specified RDOItems collection. It returns Nothing if no next message exists, for example, if already positioned at the end of the collection.

 

 

GetPrevious

Returns the previous message in the specified RDOItems collection. It returns Nothing if no previous message exists, for example, if already positioned at the beginning of the collection.

 

 

CopyMultiple(EntryIdsOrArrayOfMessages, TargetFolder)

Copy multiple messages in a single call.

See also MoveMultiple method.

 

EntryIdsOrArrayOfMessages - either an array of messages, array of entry ids (strings), or a string with multiple entry ids separated by ";" or CR/LF.

 

TargetFolder - RDOFolder object that specifies the destination folder where the messages must be copied.

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Folder = Session.GetFolderFromID(Application.ActiveExplorer.CurrentFolder.EntryID)
Dim Messages()
set Selection = Application.ActiveExplorer.Selection
Redim Messages(Selection.Count)
for i = 1 to Selection.Count
   
Messages(i-1) = Application.ActiveExplorer.Selection(i).EntryID
next
Folder.Items.CopyMultiple Messages, Session.GetDefaultFolder(olFolderInbox)

MoveMultiple(EntryIdsOrArrayOfMessages, TargetFolder)

Move multiple messages in a single call.

See also CopyMultiple method.

 

EntryIdsOrArrayOfMessages - either an array of messages, array of entry ids (strings), or a string with multiple entry ids separated by ";" or CR/LF.

 

TargetFolder - RDOFolder object that specifies the destination folder where the messages must be moved.

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Folder = Session.GetFolderFromID(Application.ActiveExplorer.CurrentFolder.EntryID)
Dim Messages()
set Selection = Application.ActiveExplorer.Selection
Redim Messages(Selection.Count)
for i = 1 to Selection.Count
   
Messages(i-1) = Application.ActiveExplorer.Selection(i).EntryID
next
Folder.Items.MoveMultiple Messages, Session.GetDefaultFolder(olFolderInbox)

Item(Index)

Index - variant: integer or a string.

Retrieves a message with a given index (1 to Count) or a given subject

Returns RDOMail object

 

 

Remove(Index, DeleteFlags)

Deletes a message with the specified index (1 to Count)

Index - integer, 1 through Count

DeleteFlags - integer, optional. One of the redDeleteFlags enumeration values:

dfSoftDelete (0) - default. Deletes the item. Can still be recoverable if retention policy is set on Exchange Server.

dfMoveToDeletedItems (1) - the item is moved to the Deleted Items folder

dfHardDelete (2) - Exchange only. Permanently deletes the item; will not be recoverable

 

 

RemoveMultiple(EntryIdsOrArrayOfMessages, DeleteFlags)

Deletes multiple messages in a single call.

See also RDOFolder.EmptyFolder method.

 

EntryIdsOrArrayOfMessages - either an array of messages, array of entry ids (strings), or a string with multiple entry ids separated by ";" or CR/LF.

 

DeleteFlags - integer, optional. One of the redDeleteFlags enumeration values:

dfSoftDelete (0) - default. Deletes the item. Can still be recoverable if retention policy is set on Exchange Server.

dfMoveToDeletedItems (1) - the item is moved to the Deleted Items folder

dfHardDelete (2) - Exchange only. Permanently deletes the item; will not be recoverable

 

 set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Folder = Session.GetFolderFromID(Application.ActiveExplorer.CurrentFolder.EntryID)
Dim Messages()
Redim Messages(Application.ActiveExplorer.Selection.Count)
for i = 1 to Application.ActiveExplorer.Selection.Count
   
Messages(i-1) = Application.ActiveExplorer.Selection(i).EntryID
next
Folder.Items.RemoveMultiple(Messages)

Restrict(Filter)

Applies a filter to the RDOItems collection, returning a new RDOItems collection containing all of the items from the original that match the filter. The original RDOItems collection is not affected.

 

This method is an alternative to using the Find method or FindNext method to iterate over specific items within a collection. The Find or FindNext methods are faster than filtering if there are a small number of items. The Restrict method is significantly faster if there is a large number of items in the collection, especially if only a few items in a large collection are expected to be found.

 

Note however that Exchange Server in the online mode caches the restriction (1 week by default) and recalculates it every time any item in the folder is modified.

If your restriction is constant, this can be lead to a significant performance boost. If however you apply different restrictions, this can significantly degrade the server performance.

 

Filter - string. SQL style query. See Find method help for more information

 

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Contacts = Session.GetDefaultFolder(olFolderContacts)
set Items = Contacts.Items
set RestrictedItems = Items.Restrict("SELECT Email1Address, FileAs from Folder " & _

                                                       " where LastName = 'Streblechenko' " & _

                                                       " ORDER BY FirstName desc")
for each Contact in RestrictedItems
    Debug.Print Contact.FileAs & ": " & Contact.Email1Address
next

Sort(Columns, Descending)

Sorts the collection of items by the specified property or properties.

 

Columns - can either be an integer property tag or a variant array of integer property tags or a comma separated string of the OOM or DASL property names (see example)

 

Descending - optional. Either a boolean or a variant array of boolean values corresponding to the Columns parameter.

 

set Session = CreateObject("Redemption.RDOSession")
Session.Logon
set Contacts = Session.GetDefaultFolder(olFolderInbox)
set Items = Contacts.Items
Items.Sort "Subject", false
for each Item in Items

    Debug.Print Item.Subject
next

 


Events:


ItemChange(Item)

Fires when a message in the contents or associated contents table is modified.

Item - RDOMail object

 

 

ItemAdd(Item)

Fires when a new message is added to the contents or associated contents table.

Item - RDOMail object

Dim WithEvents Items As Redemption.RDOItems
...

Set Session = New Redemption.RDOSession
Session.Logon
Set Store = Session.Stores.DefaultStore
Set Inbox = Store.GetDefaultFolder(olFolderInbox)
Set Items = Inbox.Items
...

Sub Items_ItemAdd(ByVal Mail As RDOMail)
  MsgBox "Item added: " & Mail.Subject
End Sub
 

ItemRemove(InstanceKey)

Fires when a message is removed from the contents or associated contents table.
By the time this asynchronous even is fired, the message is already deleted, hence no entry id is available.

InstanceKey - a hex value of the PR_INSTANCE_KEY property of the deleted table row. Note that PR_INSTANCE_KEY is not available from the message itself, only from the MAPI table (see MAPITable property). InstanceKey is only guaranteed to be the same for the same instance of the table, hence this event is useful only if the value of PR_INSTANCE_KEY was previously cached.

 

 

CollectionModified

Fires when the contents or associated contents table is modified and the underlying MAPI implementation cannot provide more detailed information about the change, e.g. when too many messages were modified at the same time.

When the event fires, it must be assumed that the entire contents of the collection are no longer valid.