Estoy tratando de reemplazar el cuadro de diálogo de recordatorio predeterminado. Como parte de eso, quiero acceder a más información sobre el elemento en el que se coloca el recordatorio para incluirlo en el nuevo cuadro de diálogo. He visto ejemplos antiguos (Office 2013 más o menos) en los que parece funcionar el sondeo de Reminder.Item para el tipo. Sin embargo, en Outlook 2021/VSTO en VS 2022, las declaraciones if fallan incluso para los elementos que sé que son MeetingItems.
Cuando me detengo y depuro, puedo obtener intellisense para abrir la vista dinámica y puedo decir que es un elemento de reunión (tiene un tema, categorías, organizador, etc.) pero el tipo es solo un objeto COM. Además, si utilizo la ventana inmediata para transmitir como MeetingItem, aparece este error: (r.Item como Outlook.MeetingItem).Error de categorías CS0433: el tipo 'MeetingItem' existe en ambos 'Microsoft.Office.Interop.Outlook, Version =15.0.0.0, Cultura=neutral, PublicKeyToken=71e9bce111e9429c' y 'Tareas, Versión=1.0.0.0, Cultura=neutral, PublicKeyToken=null'
Este es un nuevo proyecto de VSTO Outlook en el que todo lo que hice fue agregar el código a continuación (lo copié de mi otro proyecto para asegurarme de que no era un problema con el proyecto). No agregué ninguna referencia y el proyecto no se hace referencia a sí mismo. Supongo que si crea un VSTO Outlook AddIn y luego agrega este código, surgirán los mismos problemas.
¿Alguna idea de lo que está pasando aquí? ¿Por qué no puedo acceder a Reminder.Item y por qué VS cree que MeetingItem existe en mi proyecto además de las DLL de Office?
utilizando Outlook = Microsoft.Office.Interop.Outlook; usando Office = Microsoft.Office.Core;
Tareas de espacio de nombres { Clase parcial pública ThisAddIn { Outlook.Reminders privado m_Reminders;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
m_Reminders = Application.Reminders;
m_Reminders.BeforeReminderShow += Reminders_BeforeReminderShow;
}
private void Reminders_BeforeReminderShow(ref bool Cancel)
{
foreach (Outlook.Reminder r in m_Reminders)
{
if (r.IsVisible)
{
if (r.Item is Outlook.AppointmentItem)
{
Console.WriteLine("item is an appointment");
}
else if (r.Item is Outlook.MeetingItem)
{
Console.WriteLine("item is a meeting");
}
}
}
}
Solución del problema
Acceda a la Class
propiedad (todos los objetos OOM la exponen) Reminder.Item
usando el enlace en tiempo de ejecución para determinar el tipo de elemento. Tenga en cuenta que también puede tener y objetos TaskItem
regulares.MailItem
No hay comentarios.:
Publicar un comentario