BeforeItemMove fails with Exchange Shared Mailbox Calendar

S

Simon Francesco

I have successfully connected to and listened to the BeforeItemMove event on
a local (pst) calendar, but I cannot seem to get this event to fire for
shared calendars that I have open.
I am using Outlook 2007 connected to Exchange 2003.

All the code between the scenarios is the same except the code to resolve
and get the folder. Smippets below.
I have investiaged the more generic loss of scope of COM objects etc and
retain references to the folders to maintain their lifespan and as I said it
works in the local calendar but not shared calendars.
Could anyone shed some light on this for me?

TIA Simon

/// <summary>
/// Finds and resolves the requested folder, if found it attaches
/// to the BeforeItemMove event to listen for deletes etc
/// and adds the folder to the Application Level MonitoredFolders List
/// </summary>
/// <param name="folderToMonitor">Either the local name of the
Calendar or the
/// Recipients name in the case of an Exchange Mailbox</param>
private void StartMonitoringCalendarFolder(String folderToMonitor)
{
var folder = GetFolder(folderToMonitor);
if (folder != null)
{
//StartListening for Deletes
folder.BeforeItemMove += folder_BeforeItemMove;
//Record that we are listening, and maintain ref to COM
objects
monitoredFolders.Add(folderToMonitor, new
FolderWrapper(folder));
}
}

/// <summary>
/// Finds and returns the requested folder, allows for
/// whether Outlook is using Exchange or not.
/// Returns null if not found.
/// </summary>
/// <param name="folderToMonitor">Either the local name of the
Calendar or the
/// Recipients name in the case of an Exchange Mailbox</param>
/// <returns></returns>
private Outlook.Folder GetFolder(String folderName)
{
Outlook.Folder folder = null;
switch (this.Application.Session.ExchangeConnectionMode)
{
case
Microsoft.Office.Interop.Outlook.OlExchangeConnectionMode.olNoExchange:
var currentFolder =
(Outlook.Folder)this.Application.Session.DefaultStore.GetRootFolder();
//Walk the folder tree and look for folder name
folder = FindFolder(folderName, currentFolder);
break;

default: //all other Exchange modes, TODO: we may run into
sync issues if Outlook is offline
Outlook.Recipient recourceMailBox =
this.Application.Session.CreateRecipient(folderName);
recourceMailBox.Resolve();
if (!recourceMailBox.Resolved)
{

System.Diagnostics.Trace.WriteLine(String.Format("Folder Monitoring: Unable
to resolve folder: {0}", folderName));
return null;
}
folder =
(Outlook.Folder)this.Application.Session.GetSharedDefaultFolder(recourceMailBox, Outlook.OlDefaultFolders.olFolderCalendar);
break;
}
if (folder == null)
{
System.Diagnostics.Trace.WriteLine(String.Format("Folder
Monitoring: Unable to find folder: {0}", folderName));
}

return folder;

}

//Example call: StartMonitoringCalendarFolder("Bob Smith");
 
K

Ken Slovak - [MVP - Outlook]

The shared folders must be opened with the entire mailbox as part of the
Outlook profile. Then that would work.
 
S

Simon Francesco

Hi Ken,
Thanks for your response.

I have taken your advice and had a look at this, and tried to add the other
mailboxes but it appears I can only have one open?

If I try to right click the root folder as one does, for opening multiple
data files, I only get an Open Other->Other User's Folder option and then I
have to specify if I want the calendar or inbox etc, and this has the same
net effect as opening a shared calendar. Am I missing something?


What I am trying to achieve is this.
Using Exchange 2003 and Outlook 2007, Many users in a company, a limited
number of shared calendars (implemented as Mailboxes) for scheduling events
that certain users have writeable permissions to.

User A opens their Outlook, and then opens the calendar view, chooses 'Open
A shard Calendar' and chooses the mailbox of the venues they want to review
and manage events for. These show using the nice side-by-side or overlaid
calendar views in Outlook.

REQUIREMENT:
That extra information beyond that of the appointment information is stored
in a database and kept in sync.
To this end we collect and stored extra info using a Form Region. This all
works nicely.
PROBLEM:
We can monitor for changes and creations using the Form Region, but we
cannot at this stage successfully monitor for deletes, either with the Form
Region closed or open.

The idea is that the additional calendars seamlessly form part of what the
user can see in their own profile.

Any thoughts.
Cheers Simon
 
K

Ken Slovak - [MVP - Outlook]

To add an additional mailbox you open the profile settings (I use the Mail
applet in the Control Panel when Outlook isn't running). You edit the
settings and select the More Settings button in the profile properties, then
on the Advanced tab you add the additional mailbox or mailboxes. I add
support, sales and webmaster mailboxes that way to my normal profile so I
get those as well as my own mailbox.

This can be done manually or by using a profile tool.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top