GOOGLE ADS

martes, 26 de abril de 2022

VSTO Outlook 2021 Reminder.Item tipo de objeto

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 Classpropiedad (todos los objetos OOM la exponen) Reminder.Itemusando el enlace en tiempo de ejecución para determinar el tipo de elemento. Tenga en cuenta que también puede tener y objetos TaskItemregulares.MailItem

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...