C#VSTO Outlook ItemSend Pedido de ejecución del evento
outlook-addin (2)
Estoy usando VSTO para crear un evento cuando se envía un correo electrónico. El objetivo es cambiar los archivos adjuntos. Ya tengo otros complementos que se ejecutan en el evento ItemSend, pero el problema es que quiero que mi complemento se ejecute primero. A medida que leo, no hay orden de ejecución en el evento Outlook addins enviado, pero debe haber algún orden aunque solo sea por nombre o guid ....
Intento esta solución (el problema es que si tengo abierta 2 ventanas de correo, la primera ventana no ejecuta el evento ... :( hay algún problema de sobrescritura)
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.Inspectors.NewInspector += new InspectorsEvents_NewInspectorEventHandler(Custom_Inspector);
//This run in the end off all ItemSend Events.... :(
//this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(MyFunction2);
}
private void Custom_Inspector(Inspector Inspector)
{
if (Inspector != null && Inspector.CurrentItem != null && Inspector.CurrentItem is Outlook.MailItem)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem.EntryID == null)
{
((ItemEvents_10_Event)mailItem).Send += new ItemEvents_10_SendEventHandler(MyFunction);
}
}
}
void MyFunction(ref bool Cancel)
{
MailItem mailItemContext = ((Inspector)this.Application.ActiveWindow()).CurrentItem as MailItem;
if (mailItemContext != null)
{
//my custom code here
}
}
this.Application.Inspectors.NewInspector + = new InspectorsEvents_NewInspectorEventHandler (Custom_Inspector);
Para NewInspector
evento NewInspector
de la clase Inspectors, debe mantener activo el objeto fuente, es decir, evitar que pase el recolector de elementos no utilizados. Por lo tanto, recomendaría declarar una instancia de la clase Inspectors en el ámbito global, en el nivel de clase.
El modelo de objetos de Outlook no proporciona nada para cambiar el orden de los eventos. Desde mi experiencia, los complementos se cargan en función del valor de ProgID (ordenados alfabéticamente) y los eventos se activan en el orden inverso, es decir, una cola de LIFO.
Eugene 100000 gracias! en realidad, los eventos del complemento de orden de Outlook por orden alfabético inverso. Pero, por cierto, ¿cómo configurar NewInspector en primera clase? Necesito definir la clase interna ThisAddIn a prop call:
public partial class ThisAddIn
{
public Microsoft.Office.Interop.Outlook.Inspectors _inspector;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_inspector = this.Application.Inspectors;
_inspector.NewInspector += new InspectorsEvents_NewInspectorEventHandler(Custom_Inspector);
}
}