BeforeItemMove fails with Exchange Shared Mailbox Calendar

  • Thread starter U2ltb24gRnJhbmNlc2Nv
  • Start date Views 1,816
U

U2ltb24gRnJhbmNlc2Nv

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.

"Simon Francesco" <SimonFrancesco@community.nospam> wrote in message

news:9C0BC854-C54C-4E58-82B3-ED00FB1AFE24@microsoft.com...
> 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");
>
 
U

U2ltb24gRnJhbmNlc2Nv

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.

"Simon Francesco" <SimonFrancesco@community.nospam> wrote in message

news:CE4AC624-1CE9-4C72-AA40-639B77C3DA06@microsoft.com...
> 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

>
 

Similar threads

Top