Freigeben über


Löschen von Terminen in einer Serie mit EWS in Exchange

Erfahren Sie, wie Sie Termine in einer Serie mithilfe der verwalteten EWS-API oder EWS in Exchange löschen.

Sie können die verwaltete EWS-API oder EWS verwenden, um eine Reihe von Terminen oder Besprechungen oder nur eine Instanz in der Reihe zu löschen. Der Prozess, den Sie zum Löschen einer ganzen Reihe verwenden, ist im Wesentlichen derselbe wie der Prozess, den Sie verwenden, um nur ein einzelnes Vorkommen zu löschen. Sie verwenden die gleichen EWS Managed API-Methoden oder EWS-Vorgänge, die Sie zum Löschen eines einzelnen Instanztermins oder einer Besprechung verwenden. Der Unterschied besteht in der Element-ID, die in der Methode oder dem Vorgang enthalten ist. Sehen wir uns zunächst an, wie beide Szenarien identisch sind.

Um eine Serie oder ein einzelnes Vorkommen in einer Serie zu löschen, müssen Sie das zu löschende Vorkommen oder die Datenreihe suchen und dann die entsprechende Methode oder den entsprechenden Vorgang aufrufen, um sie zu entfernen. Während Sie einfach jede Art von Termin löschen können, empfehlen wir Ihnen, alle Teilnehmer oder den Organisator auf dem neuesten Stand zu halten und Besprechungen abzubrechen, die der Benutzer organisiert hat, und Besprechungen abzulehnen, die der Benutzer nicht organisiert hat.

Inwiefern unterscheiden sich die Szenarien? Es geht um das Appointment-Objekt , das zum Aufrufen der Methode (für die EWS Managed API) verwendet wird, oder um die Element-ID, die in der Vorgangsanforderung (für EWS) enthalten ist. Zum Löschen einer ganzen Reihe benötigen Sie das Appointment-Objekt oder die Element-ID für den wiederkehrenden Master. Um ein einzelnes Vorkommen zu löschen, benötigen Sie das Appointment-Objekt oder die Element-ID für das Vorkommen.

Löschen einer Terminserie mithilfe der verwalteten EWS-API

In diesem Beispiel wird davon ausgegangen, das Sie sich an einem Exchange-Server angemeldet haben und das ExchangeService-Objekt service erhalten haben. Der recurringItem-Parameter ist ein Appointment-Objekt für den wiederkehrenden Master oder ein einzelnes Vorkommen. Der parameter deleteEntireSeries gibt an, ob die gesamte Reihe gelöscht werden soll, zu der das recurringItem gehört.

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;
}

Um dieses Beispiel zu verwenden, müssen Sie entweder eine Bindung an ein Vorkommen oder den wiederkehrenden Master herstellen und das resultierende Appointment-Objekt an die -Methode übergeben. Beachten Sie, dass beim Zugreifen auf Termine mithilfe einer CalendarView-Klasse alle resultierenden Elemente einzelne Vorkommen sind. Wenn Sie hingegen die ItemView-Klasse verwenden, sind die resultierenden Elemente alle wiederkehrenden Master.

Löschen einer Terminserie mithilfe von EWS

Das Löschen einer Serie mit EWS entspricht dem Löschen einer Besprechung mit einer einzelnen Instanz. Tatsächlich haben die SOAP-Anforderungen das gleiche Format. Auch hier ist der Schlüssel die Element-ID, die in der Anforderung verwendet wird. Wenn die Element-ID dem wiederkehrenden Master entspricht, wird die gesamte Reihe gelöscht. Wenn die Element-ID einem einzelnen Vorkommen entspricht, wird nur dieses Vorkommen gelöscht.

Hinweis

In den folgenden Codebeispielen werden die Attribute ItemId, ChangeKey und RecurringMasterId zur Lesbarkeit gekürzt.

In diesem Beispiel wird der CreateItem-Vorgang mit einem CancelCalendarItem-Element verwendet, um eine Besprechung abzubrechen, deren Organisator der Benutzer ist. Der Wert des ReferenceItemId-Elements gibt das element an, das abgebrochen werden soll, und kann die Element-ID eines wiederkehrenden Master oder eines einzelnen Vorkommens sein.

<?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>

In diesem Beispiel wird der CreateItem-Vorgang mit einem DeclineItem-Element verwendet, um eine Besprechung abzulehnen, für die der Benutzer nicht der Organisator ist. Wie im vorherigen Beispiel gibt der Wert des ReferenceItemId-Elements das abzulehnende Element an und kann die Element-ID eines wiederkehrenden Masters oder eines einzelnen Vorkommens sein.

<?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>

In diesem Beispiel wird der DeleteItem-Vorgang verwendet, um ein einzelnes Vorkommen eines Termins ohne Teilnehmer zu löschen. Das zu löschende Vorkommen wird durch das OccurrenceItemId-Element angegeben, das aus der Element-ID des wiederkehrenden Masters und dem Index des Vorkommens erstellt wird.

<?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>

Beachten Sie, dass Sie das gleiche Ergebnis erzielen können, indem Sie das OccurrenceItemId-Element durch ein ItemId-Element ersetzen, das die Element-ID des Vorkommens enthält, wie gezeigt.

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

Siehe auch