2012-05-11 18 views
6

Uno de nuestros requisitos es crear archivos iCalendar (.ics) y enviarlos a cada uno en un archivo adjunto. Estamos utilizando DDay.Ical.dll para crear archivos ICS como en:¿Cómo cancelar un evento de calendario usando archivos ics?

// Create a new iCalendar 
iCalendar iCal = new iCalendar(); 

// Create the event, and add it to the iCalendar 
Event evt = iCal.Create<Event>(); 

// Set information about the event 
evt.Start = new iCalDateTime(SomeStartTime); 
evt.End = new iCalDateTime(SomeEndTime); 
evt.Location = "At so and so place"; 
evt.Description = "Some Description"; 
evt.Summary = "About Some Subject"; 
iCal.Method = "PUBLISH"; 

// Serialize (save) the iCalendar 
iCalendarSerializer serializer = new iCalendarSerializer(); 
serializer.Serialize(iCal, @"iCalendar.ics"); 

proceso completo es:

  1. Usuario1 crear un archivo iCal para la fecha y hora específica y enviarla a Usuario2.
  2. User2 abrirá el archivo ics y aceptará la invitación. Se creará un elemento de cita en la perspectiva LOCAL del Usuario2.

Ahora, supongamos que, por alguna razón, si se cancela una cita, el Usuario1 TIENE que crear un archivo ics y enviarlo al Usuario2, para que el Usuario2 pueda cancelar su evento desde la perspectiva local.

¿Cómo crear dicho archivo ics?

Respuesta

10

El archivo se crea de la misma manera que el archivo ics original. El estado del evento será diferente. UID identificará el evento y el número de secuencia indicará la prioridad de la actualización, y luego se anotarán los detalles del evento (cambios o cancelaciones)

Si desea cambiar/cancelar un evento después de enviar una invitación, debe identificar el evento/cita por su UID, y asigna un número de SECUENCIA más grande que el evento ics original.

UID (identificador único): http://tools.ietf.org/html/rfc5545#page-117

Secuencia: http://tools.ietf.org/html/rfc5545#page-138

y establecer el estado del evento

  /"CANCELLED" ;Indicates event was cancelled. 

Estado: http://tools.ietf.org/html/rfc5545#page-92

oh - y el método Si necesita enviar una cancelación para un evento, el UID debe ser el mismo que el original, incluso t y las propiedades del componente deben configurarse para cancelar Ex. MÉTODO: CANCELAR ESTADO: CANCELADA

Por supuesto esto sólo 'cancelar' el evento si el destinatario luego hace click para cargar/suscripción en la misma aplicación de calendario como la primera vez. Para las aplicaciones que se han 'suscrito' a los ics remotos: cuando vuelvan a hacer una 'actualización', compruebe que la actualización se debe procesar y sobrescriba el evento original.

+1

Estaba probando esto con mi cliente de Outlook, sorprendentemente cuando cancelo una reunión de Outlook y leo el archivo ics en el extremo receptor, no encuentro la bandera de ESTADO allí, y mucho menos cancelada. Además, el VEVENT está configurado para CANCELAR, pero no estoy seguro de si eso es una indicación suficientemente buena de si se canceló la reunión. ¿Puede decirme qué otras cosas puedo verificar en el lado del receptor para saber si esta es una reunión cancelada? Lo necesito para un flujo de trabajo! – k2ibegin

Cuestiones relacionadas