Compartir a través de


Eliminación de citas en una serie periódica mediante EWS en Exchange

Obtenga información sobre cómo eliminar citas en una serie periódica mediante la API administrada de EWS o EWS en Exchange.

Puede usar la API administrada de EWS o EWS para eliminar una serie de citas o reuniones, o solo una instancia de la serie. El proceso que se usa para eliminar una serie completa es esencialmente el mismo que el proceso que se usa para eliminar una sola repetición. Use los mismos métodos de API administrada de EWS o operaciones de EWS que usa para eliminar una cita o reunión de instancia única. La diferencia está en el identificador de elemento que se incluye en el método o la operación. Comencemos por ver cómo ambos escenarios son los mismos.

Para eliminar una serie periódica o una única aparición en una serie periódica, debe encontrar la repetición o la serie que desea eliminar y, a continuación, llamar al método o la operación adecuados para quitarla. Aunque simplemente puede eliminar cualquier tipo de cita, se recomienda mantener actualizados a los asistentes o al organizador y cancelar las reuniones que el usuario ha organizado y rechazar las reuniones que el usuario no organizó.

¿En qué se diferencian los escenarios? Todo se trata del objeto Appointment que se usa para invocar el método (para la API administrada de EWS) o el identificador de elemento incluido en la solicitud de operación (para EWS). Para eliminar una serie completa, necesita el objeto Appointment o el identificador de elemento para el patrón periódico. Para eliminar una sola aparición, necesita el objeto Appointment o el identificador de elemento para la aparición.

Eliminación de una cita periódica mediante la API administrada de EWS

En este ejemplo se supone que se ha autenticado en un servidor de Exchange y ha adquirido un objeto ExchangeService denominado servicio. El parámetro recurringItem es un objeto Appointment para el patrón periódico o una sola aparición. El parámetro deleteEntireSeries indica si se va a eliminar toda la serie de la que forma parte el elemento recurringItem .

public static bool DeleteRecurringItem(ExchangeService service, Appointment recurringItem, bool deleteEntireSeries)
{
    Appointment appointmentToDelete = null;
    // If the item is a single appointment, fail.
    if (recurringItem.AppointmentType == AppointmentType.Single)
    {
        Console.WriteLine("ERROR: The item to delete is not part of a recurring series.");
        return false;
    }
    // Check the Appointment that was passed. Is it
    // an occurrence or the recurring master?
    if (recurringItem.AppointmentType == AppointmentType.RecurringMaster)
    {
        if (!deleteEntireSeries)
        {
            // The item is the recurring master, so deleting it will delete
            // the entire series. The caller indicated that the entire series
            // should not be deleted, so fail.
            Console.WriteLine("ERROR: The item to delete is the recurring master of the series. Deleting it will delete the entire series.");
            return false;
        }
        else
        {
            appointmentToDelete = recurringItem;
        }
    }
    else
    {
        if (deleteEntireSeries)
        {
            // The item passed is not the recurring master, but the caller
            // wants to delete the entire series. Bind to the recurring
            // master to delete it.
            try
            {
                appointmentToDelete = Appointment.BindToRecurringMaster(service, recurringItem.Id);
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: {0}", ex.Message);
                return false;
            }
        }
        else
        {
            // The item passed is not the recurring master, but the caller
            // only wants to delete the occurrence, so just
            // delete the passed item.
            appointmentToDelete = recurringItem;
        }
    }
    if (appointmentToDelete != null)
    {
        // Remove the item, depending on the scenario. 
        if (appointmentToDelete.IsMeeting)
        {
            CalendarActionResults results;
            // If it's a meeting and the user is the organizer, cancel it.
            // Determine this by testing the AppointmentState bitmask for 
            // the presence of the second bit. This bit indicates that the appointment
            // was received, which means that someone sent it to the user. Therefore,
            // they're not the organizer.
            int isReceived = 2;
            if ((appointmentToDelete.AppointmentState & isReceived) == 0)
            {
                results = appointmentToDelete.CancelMeeting("Cancelling this meeting.");
                return true;
            }
            // If it's a meeting and the user is not the organizer, decline it.
            else
            {
                results = appointmentToDelete.Decline(true);
                return true;
            }
        }
        else
        {
            // The item isn't a meeting, so just delete it.
            appointmentToDelete.Delete(DeleteMode.MoveToDeletedItems);
            return true;
        }
    }
    return false;
}

Para usar este ejemplo, debe enlazar a una repetición o al patrón periódico y pasar el objeto Appointment resultante al método . Tenga en cuenta que si accede a citas mediante una clase CalendarView , los elementos resultantes son todas repeticiones únicas. Por el contrario, si usa la clase ItemView , los elementos resultantes son todos patrones periódicos.

Eliminación de una cita periódica mediante EWS

Eliminar una serie periódica mediante EWS es lo mismo que eliminar una reunión de instancia única. De hecho, las solicitudes SOAP tienen el mismo formato. De nuevo, la clave es el identificador de elemento usado en la solicitud. Si el identificador de elemento corresponde al patrón periódico, se eliminará toda la serie. Si el identificador de elemento corresponde a una sola aparición, solo se eliminará esa aparición.

Nota:

En los ejemplos de código siguientes, los atributos ItemId, ChangeKey y RecurringMasterId se acortan para mejorar la legibilidad.

En este ejemplo se usa la operación CreateItem con un elemento CancelCalendarItem para cancelar una reunión para la que el usuario es el organizador. El valor del elemento ReferenceItemId indica el elemento que se va a cancelar y puede ser el identificador de elemento de un patrón periódico o una única aparición.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SendAndSaveCopy">
      <m:Items>
        <t:CancelCalendarItem>
          <t:ReferenceItemId Id="AAMkADA5..." ChangeKey="DwAAABYA..." />
          <t:NewBodyContent BodyType="HTML">Cancelling this meeting.</t:NewBodyContent>
        </t:CancelCalendarItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

En este ejemplo se usa la operación CreateItem con un elemento DeclineItem para rechazar una reunión para la que el usuario no es el organizador. Como en el ejemplo anterior, el valor del elemento ReferenceItemId indica el elemento que se va a rechazar y puede ser el identificador de elemento de un patrón periódico o una única aparición.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SendAndSaveCopy">
      <m:Items>
        <t:DeclineItem>
          <t:ReferenceItemId Id="AAMkADA6..." ChangeKey="DwAAABYA..." />
        </t:DeclineItem>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

En este ejemplo se usa la operación DeleteItem para eliminar una única aparición de una cita sin asistentes. El elemento OccurrenceItemId especifica la aparición que se va a eliminar, que se construye a partir del identificador de elemento del patrón periódico y del índice de la repetición.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" 
    xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Eastern Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:DeleteItem DeleteType="MoveToDeletedItems" SendMeetingCancellations="SendToAllAndSaveCopy">
      <m:ItemIds>
        <t:OccurrenceItemId RecurringMasterId="AAMkADA8..." InstanceIndex="3" />
      </m:ItemIds>
    </m:DeleteItem>
  </soap:Body>
</soap:Envelope>

Tenga en cuenta que puede obtener el mismo resultado reemplazando el elemento OccurrenceItemId por un elemento ItemId que contenga el identificador de elemento de la repetición, como se muestra.

<m:ItemIds>
  <t:ItemId Id="AAMkADA7..." ChangeKey="DwAAABYA..." />
</m:ItemIds>

Vea también