es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el objeto AppointmentItem de Outlook utilizando GlobalAppointmentID.

Estoy desarrollando un calendario para mi empresa que se sincroniza con el Calendario de Outlook.

Actualmente puedo:
* importar citas desde Outlook y mostrarlas en mi calendario
* actualizar mis citas cuando las citas de Outlook se actualizan
* crear citas de Outlook cuando se crean citas en mi calendario

El único problema que tengo es actualizar/eliminar citas de Outlook cuando mis citas se actualizan/eliminan.

Tengo el GlobalAppointmentID de las citas correspondientes, pero parece que no puedo buscar con ese ID.

He intentado:

using Microsoft.Office.Interop;

private void GetAppointment(string myGlobalAppointmentID)
{
Outlook.Application oApp = new Outlook.Application();

Outlook.NameSpace mapiNamespace = oApp.GetNamespace("MAPI");

Outlook.MAPIFolder calendarFolder = mapiNamespace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
Outlook.Items outlookCalendarItems = calendarFolder.Items;

Outlook.AppointmentItem appointmentItem = (Outlook.AppointmentItem)outlookCalendarItems.Find("[GlobalAppointmentID] = '{0}'", myGlobalAppointmentID);

//actualizar o eliminar appointmentItem aquí (lo cual sé cómo hacer)
}

Sigo recibiendo una Excepción de ‘La condición no es válida’.
Aparentemente Outlook no permite buscar en propiedades binarias (como GlobalAppointmentID).

Utilizo las mismas funciones outlookCalendarItems.Find() y calendarFolder.Items.Restrict() sin problemas en otras instancias.

También intenté usar Redemption pero tampoco pude hacer que funcionara.
¿Alguien tiene experiencia o alguna sugerencia?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para buscar y actualizar/eliminar citas de Outlook utilizando el GlobalAppointmentID en C

    Desafortunadamente, Outlook no permite buscar en propiedades binarias como GlobalAppointmentID. Sin embargo, existen soluciones alternativas para actualizar o eliminar citas de Outlook utilizando GlobalAppointmentID. Una de esas soluciones es utilizar la propiedad EntryID en lugar de GlobalAppointmentID. La propiedad EntryID es única para cada elemento de Outlook y se puede utilizar para buscar y localizar citas en Outlook.

    Aquí tienes un ejemplo de código para utilizar la propiedad EntryID para obtener y actualizar una cita de Outlook utilizando C#:

    using Microsoft.Office.Interop.Outlook;
    using System;
    
    private void UpdateOutlookAppointment(string globalAppointmentId)
    {
        // Instanciar la aplicación de Outlook
        Application outlookApp = new Application();
    
        // Obtener el espacio de nombres desde el objeto de la aplicación de Outlook
        NameSpace outlookNamespace = outlookApp.GetNamespace("MAPI");
    
        // Obtener la carpeta predeterminada para las citas
        MAPIFolder calendarFolder = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
    
        // Crear un filtro para obtener la cita con el GlobalAppointmentID especificado
        string filter = "[GlobalAppointmentID] = '" + globalAppointmentId + "'";
    
        // Buscar la cita
        Items outlookAppointments = calendarFolder.Items.Restrict(filter);
        AppointmentItem outlookAppointment = null;
        if (outlookAppointments.Count > 0)
        {
            // Obtener la primera cita que coincide con los criterios de búsqueda
            outlookAppointment = outlookAppointments[1] as AppointmentItem;
    
            // Actualizar la cita
            outlookAppointment.Subject = "Nuevo asunto de la cita";
            outlookAppointment.Start = DateTime.Now.AddHours(2);
            outlookAppointment.End = DateTime.Now.AddHours(3);
            outlookAppointment.Save();
        }
    }
    

    Para eliminar una cita utilizando EntryID, puedes utilizar el siguiente código:

    private void DeleteOutlookAppointment(string globalAppointmentId)
    {
        // Instanciar la aplicación de Outlook
        Application outlookApp = new Application();
    
        // Obtener el espacio de nombres desde el objeto de la aplicación de Outlook
        NameSpace outlookNamespace = outlookApp.GetNamespace("MAPI");
    
        // Obtener la carpeta predeterminada para las citas
        MAPIFolder calendarFolder = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
    
        // Crear un filtro para obtener la cita con el GlobalAppointmentID especificado
        string filter = "[GlobalAppointmentID] = '" + globalAppointmentId + "'";
    
        // Buscar la cita
        Items outlookAppointments = calendarFolder.Items.Restrict(filter);
        AppointmentItem outlookAppointment = null;
        if (outlookAppointments.Count > 0)
        {
            // Obtener la primera cita que coincide con los criterios de búsqueda
            outlookAppointment = outlookAppointments[1] as AppointmentItem;
    
            // Eliminar la cita
            outlookAppointment.Delete();
        }
    }
    

    En conclusión, utilizar la propiedad EntryID es una solución alternativa para buscar y actualizar o eliminar citas de Outlook en lugar de utilizar la propiedad GlobalAppointmentID.

Comments are closed.