Atualizar uma série recorrente usando o EWS
Saiba como modificar compromissos em uma série recorrente usando a API Gerenciada do EWS ou o EWS no Exchange.
Você pode usar a API Gerenciada do EWS ou o EWS para atualizar uma série recorrente atualizando toda a série ou atualizando uma única ocorrência. Neste artigo, discutiremos como atualizar uma única ocorrência.
Modificar um único compromisso em uma série é muito semelhante à modificação de um compromisso de instância única. Você usa os mesmos métodos e operações, mas usa a ID do item da ocorrência que deseja alterar.
Quando você altera uma única ocorrência em uma série, essa ocorrência é adicionada a uma matriz de compromissos modificados associados ao mestre recorrente da série. Você pode usar a propriedade appointment.ModifiedOccurrences EWS Managed API ou o elemento ModifiedOccurrences EWS para acessar todos os compromissos em uma série que foram modificadas.
Modificar uma única ocorrência em uma série usando a API Gerenciada do EWS
Associar-se à ocorrência que você deseja modificar usando o método Appointment.BindToOccurrence com o valor de índice do item ou o método Appointment.Bind com a ID da ocorrência. Você obtém essa ID da propriedade Id de um objeto Appointment que corresponde à ocorrência ou da propriedade ItemId do objeto OccurrenceInfo que corresponde à ocorrência.
Atualize as propriedades no objeto Appointment da ocorrência.
Salve as alterações no objeto de nomeação da ocorrência usando o método Appointment.Save .
O exemplo a seguir atualiza um compromisso em uma série recorrente e verifica se o compromisso modificado é atualizado no mestre recorrente. Este exemplo pressupõe que você se autenticou em um servidor Exchange e adquiriu um objetoExchangeService chamado service. O recurrenceMasterId
parâmetro é um identificador associado ao mestre recorrente para que a ocorrência seja modificada.
public static ItemId ModifyARecurringSeries(ExchangeService service, ItemId recurrenceMasterId)
{
Appointment calendarItem = Appointment.Bind(service, recurrenceMasterId, new PropertySet(AppointmentSchema.AppointmentType));
Appointment recurrMaster = new Appointment(service);
if (calendarItem.AppointmentType == AppointmentType.RecurringMaster)
{
// Get the recurring master from an occurrence in a recurring series with the properties you need.
recurrMaster = Appointment.Bind(service,
recurrenceMasterId,
new PropertySet(AppointmentSchema.AppointmentType,
AppointmentSchema.Subject,
AppointmentSchema.FirstOccurrence,
AppointmentSchema.LastOccurrence,
AppointmentSchema.ModifiedOccurrences,
AppointmentSchema.DeletedOccurrences));
}
else
{
Console.WriteLine("Item id was not for a recurring master.");
return recurrenceMasterId;
}
// Bind to the second occurrence in the series with the properties to modify.
Appointment occurrenceToModify = Appointment.BindToOccurrence(service,
recurrMaster.Id,
2,
new PropertySet(AppointmentSchema.Location,
AppointmentSchema.Start,
AppointmentSchema.End,
AppointmentSchema.RequiredAttendees,
AppointmentSchema.Subject));
// Update the properties you want to change.
occurrenceToModify.Location = "Helipad of Contoso Bldg 1";
occurrenceToModify.Start = occurrenceToModify.Start.AddDays(1);
occurrenceToModify.End = occurrenceToModify.End.AddDays(1);
occurrenceToModify.RequiredAttendees.Add("Contoso CEO", "sadie@contoso");
occurrenceToModify.RequiredAttendees.Add("Contoso Head of Research", "ronnie@contoso.com");
occurrenceToModify.RequiredAttendees.Add("Contoso Head of Security", "alfred@contoso.com");
occurrenceToModify.Subject = occurrenceToModify.Subject.ToString() + ":Mandatory";
// Update the occurrence in your calendar folder and send meeting update requests to attendees.
// This method call results in an UpdateItem request to EWS.
occurrenceToModify.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);
// View updated and deleted occurrences on the recurring master prior to retrieving updated information.
Console.WriteLine("Modified Occurrences prior to updating recurring master: {0}",
(recurrMaster.ModifiedOccurrences == null ? "None" : recurrMaster.ModifiedOccurrences.Count.ToString()));
// Update the recurring master to view the modified and deleted occurrences.
recurrMaster = Appointment.Bind(service, recurrenceMasterId, new PropertySet(AppointmentSchema.ModifiedOccurrences,
AppointmentSchema.DeletedOccurrences));
// View updated and deleted occurrences on the recurring master after retrieving updated information.
Console.WriteLine("Modified Occurrences after updating recurring master:\t {0}",
(recurrMaster.ModifiedOccurrences == null ? "None" : recurrMaster.ModifiedOccurrences.Count.ToString()));
return recurrMaster.Id;
}
Modificar uma única ocorrência em uma série usando o EWS
Modificar uma única instância em uma série é essencialmente o mesmo que modificar um compromisso de instância única. Você pode especificar a ocorrência a ser alterada usando um ItemId ou um elemento OccurrenceItemId .
O exemplo a seguir mostra a solicitação XML quando você usa a operação UpdateItem para atualizar uma ocorrência em uma série recorrente de compromissos. O ItemId e o ChangeKey são abreviados para legibilidade.
<?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="Exchange2010" />
</soap:Header>
<soap:Body>
<m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToAllAndSaveCopy">
<m:ItemChanges>
<t:ItemChange>
<t:ItemId Id="AAMkA" ChangeKey="DwAAAB" />
<t:Updates>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Location" />
<t:CalendarItem>
<t:Location>Helipad of Contoso Bldg 1</t:Location>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:Start" />
<t:CalendarItem>
<t:Start>2014-03-27T19:33:00.000-07:00</t:Start>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:End" />
<t:CalendarItem>
<t:End>2014-03-27T20:33:00.000-07:00</t:End>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="calendar:RequiredAttendees" />
<t:CalendarItem>
<t:RequiredAttendees>
<t:Attendee>
<t:Mailbox>
<t:Name>Mack@contoso.com</t:Name>
<t:EmailAddress>Mack@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Sadie@contoso.com</t:Name>
<t:EmailAddress>Sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Magdalena@contoso.com</t:Name>
<t:EmailAddress>Magdalena@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso CEO</t:Name>
<t:EmailAddress>sadie@contoso</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso Head of Research</t:Name>
<t:EmailAddress>ronnie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
<t:Attendee>
<t:Mailbox>
<t:Name>Contoso Head of Security</t:Name>
<t:EmailAddress>alfred@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
</t:RequiredAttendees>
</t:CalendarItem>
</t:SetItemField>
<t:SetItemField>
<t:FieldURI FieldURI="item:Subject" />
<t:CalendarItem>
<t:Subject>Weekly Update Meeting:Mandatory</t:Subject>
</t:CalendarItem>
</t:SetItemField>
</t:Updates>
</t:ItemChange>
</m:ItemChanges>
</m:UpdateItem>
</soap:Body>
</soap:Envelope>
O servidor responde à solicitação UpdateItem com uma mensagem UpdateItemResponse que inclui um valor ResponseCode de NoError, que indica que a ocorrência foi atualizada com êxito e o ItemId do compromisso atualizado.