Stan S
Posts: 184
Joined: 2007-09-04
|
It appears that the problem comes up with 7.4.4067.2005, though could be merely a coincidence.
One of our end users uses a LOTS of plugins that process attachments, including ours. Our plugin intercepts AttachFile command to display its own FileDialog. Some other plugin does that, too.
So on a specific machine, our plugin receives AttachFile command even though it's been processed (and probably canceled) by another plugin. I can see it because dialogs are different.
If I do not process this command, however, Outlook would not display 2nd dialog box.
I am checking .Canceled property on event and it's false.
Could it be that you guys do not process Canceled property on the COM event? Other than that, is there a way to force Outlook to process event from our plugin first?
Thanks,
Stan |
|
Andrei Smolin
Add-in Express team
Posts: 18794
Joined: 2006-05-11
|
Hello Stan,
I've created two add-ins intercepting the AttachFile command. In the add-ins' code the command is cancelled if a Ribbon check box (each add-in shows a checkbox) is selected:
private void adxRibbonCommand1_OnAction(object sender, IRibbonControl control, bool pressed, ADXCancelEventArgs e) {
System.Diagnostics.Debug.WriteLine("!!! MyAddin153. adxRibbonCommand1_OnAction");
e.Cancel = adxRibbonCheckBox1.Pressed;
System.Diagnostics.Debug.WriteLine("!!! MyAddin153. e.Cancel=" + e.Cancel.ToString());
}
In addition, the add-ins print some debug info at startup. Here's what I have:
Loading
[5164] !!! MyAddin152. AddinModule_AddinInitialize
[5164] !!! MyAddin153. AddinModule_AddinInitialize
[5164] !!! MyAddin152. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin153. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin152. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin153. AddinModule_OnRibbonBeforeLoad
Clicking the AttachFile button
[5164] !!! MyAddin153. adxRibbonCommand1_OnAction
[5164] !!! MyAddin153. e.Cancel=False
[5164] !!! MyAddin152. adxRibbonCommand1_OnAction
[5164] !!! MyAddin152. e.Cancel=False
If I unregister MyAddin153, change its ProgId from "MyAddin153.AddinModule" to "AAAAAA.AddinModule" and register the add-in anew, I get the following results:
Loading
[5164] !!! MyAddin153. AddinModule_AddinInitialize
[5164] !!! MyAddin152. AddinModule_AddinInitialize
[5164] !!! MyAddin153. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin152. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin153. AddinModule_OnRibbonBeforeLoad
[5164] !!! MyAddin152. AddinModule_OnRibbonBeforeLoad
Clicking the AttachFile button
[5164] !!! MyAddin152. adxRibbonCommand1_OnAction
[5164] !!! MyAddin152. e.Cancel=False
[5164] !!! MyAddin153. adxRibbonCommand1_OnAction
[5164] !!! MyAddin153. e.Cancel=False
That is, the add-ins load in the alphabetical order of their ProgIds. They handle a Ribbon command in the reverse order.
Testing these add-ins shows: if one add-in cancels the command, the other one cannot "uncancel" the command.
The only question remains: if the first add-in cancels the command, would it be possible for the other add-in to find this out? The current Add-in Express version cannot answer this question as it sets the Cancel parameter to false before your code is invoked. To get the answer we've debugged the corresponding fragment of the Add-in Express code. The answer is No, an add-in handling a given Ribbon command cannot find out whether another add-in cancels the command or not.
Hope this helps.
Andrei Smolin
Add-in Express Team Leader |
|
Stan S
Posts: 184
Joined: 2007-09-04
|
Hi Andrei, that makes sense, thank you for detailed explanation!
(even though it can't magically resolve the problem, but it's what it is, we'll have to work through it with the customer)
Stan |
|
Andrei Smolin
Add-in Express team
Posts: 18794
Joined: 2006-05-11
|
You are welcome!
Andrei Smolin
Add-in Express Team Leader |
|