Trabajando con Recurrencias

Trabajando con Recurrencias Diarias

Aspose.Email admite la creación de recurrencias diarias usando MapiCalendarDailyRecurrencePattern. Se pueden usar tres tipos diferentes de fin de recurrencia de calendario Mapi, incluyendo EndAfterNOccurrences, EndAfterDate y NeverEnd. Esta sección muestra la creación de diferentes patrones de recurrencia diaria.

Recurrencias Diarias: Tipo EndAfterNOccurrence

En este tipo de recurrencia, el número de repeticiones debe establecerse junto con otra información como sigue:

  1. Establezca fecha de inicio, fin y vencimiento.
  2. Cree un MapiTask.
  3. Establezca el estado de la tarea a NotAssigned.
  4. Cree el objeto de recurrencia diaria configurando propiedades como PatternType, Period, WeekStartDay, EndType y OccurenceCount.
  5. Establezca la propiedad MapiTask.setRecurrence a este objeto de recurrencia diaria.
  6. Guarde este mensaje en el disco.

El siguiente fragmento de código muestra cómo crear una tarea con tipo de fin de recurrencia EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date dueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 8, 1);
 
MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern rec = new MapiCalendarDailyRecurrencePattern();
rec.setPatternType(MapiCalendarRecurrencePatternType.Day);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY"));

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Daily_out.msg", TaskSaveFormat.Msg);

La siguiente función puede usarse para calcular el número de eventos entre las dos fechas:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

Establecer el Valor del Recuento de Ocurrencias

El siguiente fragmento de código muestra cómo establecer el valor del recuento de ocurrencias.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setWeekStartDay(DayOfWeek.Sunday);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
record.setOccurrenceCount(5);
task.setRecurrence(record);

Recurrencias Diarias: Tipo EndAfterDate

La opción "End By" en la Tarea Mapi se logra estableciendo la propiedad OccurrenceCount calculada por la función getOccurrenceCount(). Esta función toma la fecha de inicio, fecha de fin y la cadena RRULE.

Recurrencias Diarias: Estableciendo el Valor Every Day

El siguiente fragmento de código muestra cómo establecer el valor de period a 1 y el valor de INTERVAL a 1 también en la cadena RRULE.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY;INTERVAL=1"));
record.setEndDate(endByDate);

El valor Every Day puede establecerse en cualquier valor apropiado como se muestra en el siguiente ejemplo:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(2);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY;INTERVAL=2"));

Recurrencias Diarias: Tipo NeverEnd

El tipo de fin puede establecerse usando MapiCalendarRecurrenceEndType.NeverEnd. Period o INTERVAL pueden configurarse al valor requerido, por ejemplo 1, en el siguiente ejemplo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

Trabajando con Recurrencias Semanales

Aspose.Email ofrece funciones avanzadas para la creación de recurrencias semanales usando MapiCalendarWeeklyRecurrencePattern. Se pueden usar tres tipos diferentes de fin de recurrencia de calendario Mapi, incluyendo EndAfterNOccurrences, EndAfterDate y NeverEnd. Esta sección muestra la creación de diferentes patrones de recurrencia semanal.

Recurrencias Semanales: Tipo EndAfterNOccurrences

En este tipo de recurrencia, el número de repeticiones debe establecerse junto con otra información como sigue:

  1. Establezca fecha de inicio, fin y vencimiento.
  2. Cree un MapiTask.
  3. Establezca el estado de la tarea a NotAssigned.
  4. Cree el objeto de recurrencia semanal configurando propiedades como PatternType, Period, WeekStartDay, EndType y OccurenceCount.
  5. Establezca la propiedad MapiTask.setRecurrence a este objeto de recurrencia semanal.
  6. Guarde este mensaje en el disco.

El siguiente fragmento de código muestra cómo crear una tarea con tipo de fin de recurrencia EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date dueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 9, 1);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"));

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Weekly_out.msg", TaskSaveFormat.Msg);

La siguiente función puede usarse para calcular el número de eventos entre las dos fechas:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

Seleccionar Múltiples Días en una Semana

El siguiente fragmento de código muestra cómo seleccionar varios días en una semana.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();

rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO"));

Seleccionar Múltiples Días en una Semana y Establecer Intervalos

El siguiente fragmento de código muestra cómo seleccionar varios días de la semana y establecer intervalos.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(2);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"));

Recurrencias Semanales: Tipo EndAfterDate

La opción "End By" en la Tarea Mapi se logra estableciendo la propiedad OccurrenceCount calculada por la función getOccurrenceCount(). Esta función toma la fecha de inicio, fecha de fin y la cadena RRULE.

Recurrencias Semanales: Estableciendo el Valor Every Day

El siguiente fragmento de código muestra cómo establecer el valor de period a 1 y el valor de INTERVAL a 1 también en la cadena RRULE.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
rec.setEndDate(endByDate);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR;INTERVAL=1"));

El valor Every Day puede establecerse en cualquier valor apropiado y se pueden seleccionar varios días como se muestra en el siguiente ejemplo:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiCalendarWeeklyRecurrencePattern record = new MapiCalendarWeeklyRecurrencePattern();
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setPatternType(MapiCalendarRecurrencePatternType.Week);
record.setPeriod(2);
record.setWeekStartDay(DayOfWeek.Sunday);
record.setEndDate(endByDate);
record.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"));

Recurrencias Semanales: Tipo NeverEnd

El tipo de fin puede establecerse usando MapiCalendarRecurrenceEndType.NeverEnd. Period o INTERVAL pueden configurarse al valor requerido, por ejemplo 1, en el siguiente ejemplo.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern recurrence = new MapiCalendarWeeklyRecurrencePattern();
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Week);
recurrence.setPeriod(1);
recurrence.setWeekStartDay(DayOfWeek.Sunday);
recurrence.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
recurrence.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"));

Trabajando con Recurrencias Mensuales

Aspose.Email admite la creación de recurrencias mensuales usando MapiCalendarMonthlyRecurrencePattern. Se pueden usar tres tipos diferentes de fin de recurrencia de calendario Mapi, incluyendo EndAfterNOccurrences, EndAfterDate y NeverEnd. Esta sección muestra la creación de diferentes patrones de recurrencia mensual.

Recurrencias Mensuales: Tipo EndAfterNOccurrences

En este tipo de recurrencia, el número de repeticiones debe establecerse junto con otra información de la siguiente manera:

  1. Establezca fecha de inicio, fin y vencimiento.
  2. Cree un MapiTask.
  3. Establezca el estado de la tarea a NotAssigned.
  4. Cree el objeto de recurrencia mensual configurando propiedades como PatternType, Period, WeekStartDay, EndType y OccurenceCount.
  5. Establezca la propiedad MapiTask.setRecurrence a este objeto de recurrencia mensual.
  6. Guarde este mensaje en el disco.

El siguiente fragmento de código muestra cómo crear una tarea con tipo de fin de recurrencia EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date DueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 12, 31);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern rec = new MapiCalendarMonthlyRecurrencePattern();
rec.setDay(15);
rec.setPeriod(1);
rec.setPatternType(MapiCalendarRecurrencePatternType.Month);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"));
rec.setWeekStartDay(DayOfWeek.Monday);

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Monthly_out.msg", TaskSaveFormat.Msg);

La siguiente función puede usarse para calcular el número de eventos entre dos fechas:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

Establecer Número Fijo de Ocurrencias

El siguiente fragmento de código muestra cómo establecer un número fijo de ocurrencias.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern records = new MapiCalendarMonthlyRecurrencePattern();
records.setDay(15);
records.setPeriod(1);
records.setPatternType(MapiCalendarRecurrencePatternType.Month);
records.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
records.setOccurrenceCount(5);
records.setWeekStartDay(DayOfWeek.Monday);

Recurrencias Mensuales: Tipo EndAfterDate

La opción "End By" en la Tarea Mapi se logra estableciendo la propiedad OccurrenceCount calculada por la función getOccurrenceCount(). Esta función toma la fecha de inicio, fecha de fin y la cadena RRULE. El siguiente fragmento de código muestra cómo crear una recurrencia el día 15 de cada mes entre la fecha de inicio y fin.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 1);
Date dueDate = getDate(2015, 7, 1);
Date endByDate = getDate(2015, 12, 31);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(1);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
recurrence.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"));
recurrence.setWeekStartDay(DayOfWeek.Monday);
recurrence.setEndDate(endByDate);

task.setRecurrence(recurrence);
task.save(dataDir + "SetMonthlyEndAfterDateRecurrence_out.msg", TaskSaveFormat.Msg);

Recurrencias Mensuales: Tipo NeverEnd

El siguiente fragmento de código muestra cómo se puede establecer el tipo de fin usando MapiCalendarRecurrenceEndType.NeverEnd.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(1);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
recurrence.setWeekStartDay(DayOfWeek.Monday);

Trabajando con Recurrencias Anuales

Aspose.Email admite la creación de recurrencias anuales usando MapiCalendarMonthlyRecurrencePattern. Al establecer la propiedad period a 12, podemos lograr el patrón de recurrencia anual. Se pueden usar tres tipos diferentes de fin de recurrencia de calendario Mapi, incluyendo EndAfterNOccurrences, EndAfterDate y NeverEnd. Esta sección muestra la creación de diferentes patrones de recurrencia anual.

Recurrencias Anuales: Tipo EndAfterNOccurrences

En este tipo de recurrencia, el número de repeticiones debe establecerse junto con otra información de la siguiente manera:

  1. Establezca fecha de inicio, fin y vencimiento.
  2. Cree un MapiTask.
  3. Establezca el estado de la tarea a NotAssigned.
  4. Cree el objeto de recurrencia mensual configurando propiedades como PatternType, Period, WeekStartDay, EndType y OccurenceCount.
  5. Establezca la propiedad MapiTask.setRecurrence a este objeto de recurrencia mensual para lograr la recurrencia anual.
  6. Guarde este mensaje en el disco.

El siguiente fragmento de código muestra cómo crear una tarea con tipo de fin de recurrencia EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Date startDate = getDate(2015, 7, 1);
Date dueDate = getDate(2015, 7, 1);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(12);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
recurrence.setOccurrenceCount(3);

task.setRecurrence(recurrence);
task.save("Yearly.msg", TaskSaveFormat.Msg);

Recurrencias Anuales: Tipo EndAfterDate

La opción "End By" en la Tarea Mapi se logra estableciendo la propiedad OccurrenceCount calculada por la función getOccurrenceCount(). Esta función toma la fecha de inicio, fecha de fin y la cadena RRULE. El siguiente fragmento de código muestra cómo crear una recurrencia el día 15 de cada séptimo mes entre la fecha de inicio y fin.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern rec = new MapiCalendarMonthlyRecurrencePattern();
rec.setDay(15);
rec.setPeriod(12);
rec.setPatternType(MapiCalendarRecurrencePatternType.Month);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
rec.setEndDate(endByDate);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=YEARLY;BYMONTHDAY=15;BYMONTH=7;INTERVAL=1"));

Recurrencias Anuales: Tipo de Recurrencia NeverEnd

El siguiente fragmento de código muestra cómo se puede establecer el tipo de fin usando MapiCalendarRecurrenceEndType.NeverEnd.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(12);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

Generar Recurrencia a partir de la Regla de Recurrencia

La API de Aspose.Email proporciona la capacidad de generar un Patrón de Recurrencia a partir de una Regla de Recurrencia (RRULE). Analiza la información del RRULE según las especificaciones iCal RFC 5545 y genera el patrón de recurrencia usando el método MapiCalendarRecurrencePatternFactory.fromString. El siguiente fragmento de código muestra cómo generar un patrón de recurrencia a partir de la regla de recurrencia.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date endDate = getDate(2015, 8, 1);
MapiCalendar app1 = new MapiCalendar("test location", "test summary", "test description", startDate, endDate);

app1.setStartDate(startDate);
app1.setEndDate(endDate);

String pattern = "DTSTART;TZID=Europe/London:20150831T080000\r\nDTEND;TZID=Europe/London:20150831T083000\r\nRRULE:FREQ=DAILY;INTERVAL=1;COUNT=7\r\nEXDATE:20150831T070000Z,20150904T070000Z";
app1.getRecurrence().setRecurrencePattern(MapiCalendarRecurrencePatternFactory.fromString(pattern));

Agregar Archivo Adjuntado a Eventos de Calendario Recurrentes

La API de Aspose.Email proporciona la capacidad de agregar archivos adjuntos a eventos de calendario recurrentes.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = addHours(getDate(2018, 7, 19), 12);
MapiCalendar calendar = new MapiCalendar("location1", "summary1", "description1", startDate, addHours(startDate, 1));

MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
MapiCalendarRecurrencePattern pattern = new MapiCalendarDailyRecurrencePattern();
recurrence.setRecurrencePattern(pattern);
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setPeriod(1);
pattern.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

Date exceptionDate = addDays(startDate, 3);
MapiCalendarExceptionInfo exception = new MapiCalendarExceptionInfo();
exception.setLocation("exceptionLoc");
exception.setSubject("exceptionSubj");
exception.setBody("exceptionBody");
exception.setOriginalStartDate(exceptionDate);
exception.setStartDateTime(exceptionDate);
exception.setEndDateTime(addHours(exceptionDate, 5));
exception.setAttachments(new MapiAttachmentCollection(calendar));
exception.getAttachments().add("file.txt", "hello, world!".getBytes());

pattern.getExceptions().addItem(exception);
pattern.getModifiedInstanceDates().addItem(exceptionDate);
pattern.getDeletedInstanceDates().addItem(exceptionDate);
calendar.setRecurrence(recurrence);

try (PersonalStorage newPst = PersonalStorage.create(dataDir + "AddAttachmentToMapiExceptionInfo.pst", FileFormatVersion.Unicode))
{
    FolderInfo newFolder = newPst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
    newFolder.addMapiMessageItem(calendar);
}

Establecer Zona Horaria del Evento del Calendario

La API de Aspose.Email proporciona la capacidad de establecer la zona horaria del calendario:

  • información de zona horaria para la fecha de inicio/fin
  • información de zona horaria para una reunión recurrente
  • información de zona horaria que describe cómo convertir la fecha y hora de la reunión en una serie recurrente hacia y desde UTC

El siguiente fragmento de código muestra cómo establecer la información de zona horaria del calendario:

MapiCalendar event = new MapiCalendar("location", "summary", "description", startDate, endDate);
// UTC time zone
MapiCalendarTimeZone utcTimeZone = new MapiCalendarTimeZone("UTC");
event.setStartDateTimeZone(utcTimeZone);
event.setEndDateTimeZone(utcTimeZone);

MapiCalendarDailyRecurrencePattern pattern = new MapiCalendarDailyRecurrencePattern();
pattern.setPeriod(1);
pattern.setStartDate(startDate);
pattern.setEndDate(untilDate);
pattern.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setDayOfWeek(DayOfWeek.Monday);

MapiCalendarEventRecurrence r = new MapiCalendarEventRecurrence();
r.setRecurrencePattern(pattern);
r.setClipStart(startDate);
r.setClipEnd(pattern.getEndDate());
//https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidappointmenttimezonedefinitionrecur-canonical-property
r.setAppointmentTimeZoneDefinitionRecur(utcTimeZone); // <---
r.setTimeZoneStruct(utcTimeZone); // <---
event.setRecurrence(r);