Gestione delle ricorrenze

Lavorare con le ricorrenze giornaliere

Aspose.Email supporta la creazione di ricorrenze giornaliere usando MapiCalendarDailyRecurrencePattern. È possibile utilizzare tre diversi tipi di fine della ricorrenza del calendario Mapi, tra cui EndAfterNOccurrences, EndAfterDate e NeverEnd. Questa sezione dimostra la creazione di diversi modelli di ricorrenza giornaliera.

Ricorrenze giornaliere con conteggio delle occorrenze

In questo tipo di ricorrenza, il numero di ricorrenze deve essere impostato insieme alle altre informazioni come segue:

  1. Imposta data di inizio, fine e scadenza.
  2. Crea un MapiTask.
  3. Imposta lo stato dell’attività su NonAssegnato.
  4. Crea l’oggetto di ricorrenza giornaliera impostando le proprietà come PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Imposta la proprietà MapiTask.Recurrence a questo oggetto di ricorrenza giornaliera.
  6. Salva questo messaggio su disco.

Il seguente snippet di codice mostra come creare un’attività con tipo di fine ricorrenza EndAfterNOccurrence.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan timeSpan = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(timeSpan);

DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 8, 1);
DueDate = DueDate.Add(timeSpan);
endByDate = endByDate.Add(timeSpan);
 
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;

// Set the Daily recurrence
var rec = new MapiCalendarDailyRecurrencePattern
{
    PatternType = MapiCalendarRecurrencePatternType.Day,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY"),
};

if (rec.OccurrenceCount==0)
{
    rec.OccurrenceCount = 1;
}

task.Recurrence = rec;
task.Save(dataDir + "Daily_out.msg", TaskSaveFormat.Msg);

La seguente funzione può essere usata per calcolare il numero di eventi tra le due date:

private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{
    CalendarRecurrence pattern = new CalendarRecurrence(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"), rrule));
    DateCollection dates = pattern.GenerateOccurrences(start, endBy);
    return (uint)dates.Count;
}

Impostare il valore del conteggio delle occorrenze

Il seguente frammento di codice mostra come impostare il valore del conteggio delle occorrenze.

// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
    PatternType = MapiCalendarRecurrencePatternType.Day,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    OccurrenceCount = 5,
};
task.Recurrence = record;

Ricorrenze giornaliere: Tipo di ricorrenza EndAfterDate

"End By" option in the Mapi Task is achieved by setting the OccurrenceCount property calculated by the GetOccurrenceCount() function. This function takes start date , end date and RRULE string.

Ricorrenze giornaliere: impostazione del valore Ogni giorno

Il seguente frammento di codice mostra come impostare il valore period a 1 e il valore INTERVAL a 1 nella stringa RRULE.

// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
    PatternType = MapiCalendarRecurrencePatternType.Day,
    Period = 1,
    EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=1"),
    EndDate = endByDate
};

Il valore Every Day può essere impostato a qualsiasi valore appropriato come mostrato nell’esempio seguente:


// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
	PatternType = MapiCalendarRecurrencePatternType.Day,
	Period = 2,
	EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
	OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=2"),
};

Ricorrenze giornaliere: Tipo di ricorrenza NeverEnd

Il tipo di fine può essere impostato usando MapiCalendarRecurrenceEndType.NeverEnd. Period o INTERVAL possono essere impostati al valore richiesto, ad esempio 1, nell’esempio seguente.

// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
    PatternType = MapiCalendarRecurrencePatternType.Day,
    Period = 1,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};

Lavorare con le ricorrenze settimanali

Aspose.Email fornisce ricche funzionalità per la creazione di ricorrenze settimanali usando MapiCalendarWeeklyRecurrencePattern. È possibile utilizzare tre diversi tipi di fine della ricorrenza del calendario Mapi, tra cui EndAfterNOccurrences, EndAfterDate e NeverEnd. Questa sezione dimostra la creazione di diversi modelli di ricorrenza settimanale.

Ricorrenze settimanali: Tipo di ricorrenza EndAfterNOccurrences

In questo tipo di ricorrenza, il numero di ricorrenze deve essere impostato insieme alle altre informazioni come segue:

  1. Imposta data di inizio, fine e scadenza.
  2. Crea un MapiTask.
  3. Imposta lo stato dell’attività su NonAssegnato.
  4. Crea l’oggetto di ricorrenza settimanale impostando le proprietà come PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Imposta la proprietà MapiTask.Recurrence a questo oggetto di ricorrenza settimanale.
  6. Salva questo messaggio su disco.

Il seguente frammento di codice mostra come creare un’attività con tipo di fine della ricorrenza impostato a EndAfterNOccurrence.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(ts);

DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 9, 1);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);

MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;

// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    DayOfWeek = MapiCalendarDayOfWeek.Friday,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"),
};

if (rec.OccurrenceCount == 0)
{
    rec.OccurrenceCount = 1;
}

task.Recurrence = rec;
task.Save(dataDir + "Weekly_out.msg", TaskSaveFormat.Msg);

La seguente funzione può essere usata per calcolare il numero di eventi tra le due date:

private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{            
    CalendarRecurrence pattern = new CalendarRecurrence(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"),rrule));            
    DateCollection dates = pattern.GenerateOccurrences(start, endBy);            
    return (uint)dates.Count;
}

Selezionare più giorni in una settimana

Il seguente frammento di codice mostra come selezionare più giorni in una settimana.

// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO"),
};

Selezionare più giorni in una settimana e impostare gli intervalli

Il seguente frammento di codice mostra come selezionare più giorni in una settimana e impostare gli intervalli.

// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 2,
    WeekStartDay = DayOfWeek.Sunday,
    DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"),
};

Ricorrenze settimanali: Tipo di ricorrenza EndAfterDate

"End By" option in the Mapi Task is achieved by setting the OccurrenceCount property calculated by the GetOccurrenceCount() function. This function takes start date , end date and RRULE string.

Ricorrenze settimanali: impostazione del valore Ogni giorno

Il seguente frammento di codice mostra come impostare il valore period a 1 e il valore INTERVAL a 1 nella stringa RRULE.

// Set the weekly recurrence
var rec = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    DayOfWeek = MapiCalendarDayOfWeek.Friday,
    EndDate = endByDate,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR;INTERVAL=1"),
};

Il valore Every Day può essere impostato a qualsiasi valore appropriato e più giorni possono essere selezionati come mostrato nell’esempio seguente:

var record = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 2,
    WeekStartDay = DayOfWeek.Sunday,
    EndDate = endByDate,
    DayOfWeek = MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"),
};

Ricorrenze settimanali: Tipo di ricorrenza NeverEnd

Il tipo di fine può essere impostato usando MapiCalendarRecurrenceEndType.NeverEnd. Period o INTERVAL possono essere impostati al valore richiesto, ad esempio 1, nell’esempio seguente.

// Set the weekly recurrence
var recurrence = new MapiCalendarWeeklyRecurrencePattern
{
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
    PatternType = MapiCalendarRecurrencePatternType.Week,
    Period = 1,
    WeekStartDay = DayOfWeek.Sunday,
    DayOfWeek = MapiCalendarDayOfWeek.Friday,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"),
};

Lavorare con le ricorrenze mensili

Aspose.Email supporta la creazione di ricorrenze mensili usando MapiCalendarMonthlyRecurrencePattern. È possibile utilizzare tre diversi tipi di fine della ricorrenza del calendario Mapi, tra cui EndAfterNOccurrences, EndAfterDate e NeverEnd. Questa sezione dimostra la creazione di diversi modelli di ricorrenza mensile.

Ricorrenze mensili: Tipo di ricorrenza EndAfterNOccurrences

In questo tipo di ricorrenza, il numero di ricorrenze deve essere impostato insieme alle altre informazioni come segue:

  1. Imposta data di inizio, fine e scadenza.
  2. Crea un MapiTask.
  3. Imposta lo stato dell’attività su NonAssegnato.
  4. Crea l’oggetto di ricorrenza mensile impostando le proprietà come PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Imposta la proprietà MapiTask.Recurrence a questo oggetto di ricorrenza mensile.
  6. Salva questo messaggio su disco.

Il seguente frammento di codice mostra come creare un’attività con tipo di fine della ricorrenza impostato a EndAfterNOccurrence.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 16);
StartDate = StartDate.Add(ts);

DateTime DueDate = new DateTime(2015, 7, 16);
DateTime endByDate = new DateTime(2015, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);

MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;

// Set the Monthly recurrence
var rec = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 1,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"),
    WeekStartDay = DayOfWeek.Monday,

};

if (rec.OccurrenceCount == 0)
{
    rec.OccurrenceCount = 1;
}

task.Recurrence = rec;
//task.Save(dataDir + "Monthly_out.msg", TaskSaveFormat.Msg);

La seguente funzione può essere usata per calcolare il numero di eventi tra le due date:

private static uint GetOccurrenceCount(DateTime start, DateTime endBy, string rrule)
{
    CalendarRecurrence pattern = new CalendarRecurrence(string.Format("DTSTART:{0}\r\nRRULE:{1}", start.ToString("yyyyMMdd"), rrule));
    DateCollection dates = pattern.GenerateOccurrences(start, endBy);       
    return (uint)dates.Count;
}

Imposta un numero fisso di occorrenze

Il seguente frammento di codice mostra come impostare un numero fisso di occorrenze.

// Set the Monthly recurrence
var records = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 1,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
    OccurrenceCount = 5,
    WeekStartDay = DayOfWeek.Monday
};

Ricorrenze mensili: Tipo di ricorrenza EndAfterDate

"End By" option in the Mapi Task is achieved by setting the OccurrenceCount property calculated by the GetOccurrenceCount() function. This function takes start date , end date and RRULE string. The following code snippet shows you how to create a recurrence on 15th of each month between start and end by date.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 1);
StartDate = StartDate.Add(ts);

DateTime DueDate = new DateTime(2015, 7, 1);
DateTime endByDate = new DateTime(2015, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);

MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;

// Set the Monthly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 1,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"),
    WeekStartDay = DayOfWeek.Monday,
    EndDate = endByDate
};

task.Recurrence = recurrence;
//task.Save(dataDir + "SetMonthlyEndAfterDateRecurrence_out.msg", TaskSaveFormat.Msg);

Ricorrenze mensili: Tipo di ricorrenza NeverEnd

Il seguente frammento di codice mostra come impostare il tipo di fine usando MapiCalendarRecurrenceEndType.NeverEnd.

var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 1,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
    WeekStartDay = DayOfWeek.Monday,
};

Lavorare con le ricorrenze annuali

Aspose.Email supporta la creazione di ricorrenze annuali usando MapiCalendarMonthlyRecurrencePattern. Impostando la proprietà period a 12, è possibile ottenere il modello di ricorrenza annuale. È possibile utilizzare tre diversi tipi di fine della ricorrenza del calendario Mapi, tra cui EndAfterNOccurrences, EndAfterDate e NeverEnd. Questa sezione dimostra la creazione di diversi modelli di ricorrenza annuale.

Ricorrenze annuali: Tipo di ricorrenza EndAfterNOccurrences

In questo tipo di ricorrenza, il numero di ricorrenze deve essere impostato insieme alle altre informazioni come segue:

  1. Imposta data di inizio, fine e scadenza.
  2. Crea un MapiTask.
  3. Imposta lo stato dell’attività su NonAssegnato.
  4. Crea l’oggetto di ricorrenza mensile impostando le proprietà come PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Imposta la proprietà MapiTask.Recurrence a questo oggetto di ricorrenza mensile per ottenere la ricorrenza annuale.
  6. Salva questo messaggio su disco.

Il seguente frammento di codice mostra come creare un’attività con tipo di fine della ricorrenza impostato a EndAfterNOccurrence.


TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(DateTime.Now);
DateTime StartDate = new DateTime(2015, 7, 1);
StartDate = StartDate.Add(ts);
DateTime DueDate = new DateTime(2015, 7, 1);
DateTime endByDate = new DateTime(2020, 12, 31);
DueDate = DueDate.Add(ts);
endByDate = endByDate.Add(ts);
MapiTask task = new MapiTask("This is test task", "Sample Body", StartDate, DueDate);
task.State = MapiTaskState.NotAssigned;

// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
	Day = 15,
	Period = 12,
	PatternType = MapiCalendarRecurrencePatternType.Month,
	EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
	OccurrenceCount = 3,
};
task.Recurrence = recurrence;
task.Save("Yearly.msg", TaskSaveFormat.Msg);

Ricorrenze annuali: Tipo di ricorrenza EndAfterDate

"End By" option in the Mapi Task is achieved by setting the OccurrenceCount property calculated by the GetOccurrenceCount() function. This function takes start date, end date and RRULE string. The following code snippet shows you how to create a recurrence on 15th of each 7th month between start and end by date.

// Set the Yearly recurrence
var rec = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 12,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
    EndDate = endByDate,
    OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=YEARLY;BYMONTHDAY=15;BYMONTH=7;INTERVAL=1"),
};
task.Recurrence = rec;

Ricorrenze annuali: Tipo di ricorrenza NeverEnd

Il seguente frammento di codice mostra come impostare il tipo di fine usando MapiCalendarRecurrenceEndType.NeverEnd.

// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
    Day = 15,
    Period = 12,
    PatternType = MapiCalendarRecurrencePatternType.Month,
    EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};            

Generare ricorrenza da regola di ricorrenza

Aspose.Email API fornisce la capacità di generare un modello di ricorrenza da una Regola di Ricorrenza (RRULE). Analizza le informazioni dal RRULE secondo le specifiche iCal RFC 5545 e genera il modello di ricorrenza usando il metodo MapiCalendarRecurrencePatternFactory.FromString. Il seguente frammento di codice mostra come generare un modello di ricorrenza dalla regola di ricorrenza.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Outlook();

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

app1.StartDate = startDate;
app1.EndDate = 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.Recurrence.RecurrencePattern = MapiCalendarRecurrencePatternFactory.FromString(pattern);

Aggiungi un allegato agli eventi di calendario ricorrenti

L’API Aspose.Email fornisce la possibilità di aggiungere allegati a eventi di calendario ricorrenti.

DateTime startDate = new DateTime(2018, 7, 19).AddHours(12);
MapiCalendar calendar = new MapiCalendar("location1", "summary1", "description1", startDate, startDate.AddHours(1));

MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
MapiCalendarRecurrencePattern pattern = recurrence.RecurrencePattern = new MapiCalendarDailyRecurrencePattern();
pattern.PatternType = MapiCalendarRecurrencePatternType.Day;
pattern.Period = 1;
pattern.EndType = MapiCalendarRecurrenceEndType.NeverEnd;

DateTime exceptionDate = startDate.AddDays(3);
MapiCalendarExceptionInfo exception = new MapiCalendarExceptionInfo
{
    Location = "exceptionLoc",
    Subject = "exceptionSubj",
    Body = "exceptionBody",
    OriginalStartDate = exceptionDate,
    StartDateTime = exceptionDate,
    EndDateTime = exceptionDate.AddHours(5),
    Attachments = new MapiAttachmentCollection(calendar)
};
exception.Attachments.Add("file.txt", Encoding.ASCII.GetBytes("hello, world!"));

pattern.Exceptions.Add(exception);
pattern.ModifiedInstanceDates.Add(exceptionDate);
pattern.DeletedInstanceDates.Add(exceptionDate);
calendar.Recurrence = recurrence;

using (var newPst = PersonalStorage.Create(dataDir + "AddAttachmentToMapiExceptionInfo.pst", FileFormatVersion.Unicode))
{
    var newFolder = newPst.CreatePredefinedFolder("Calendar", StandardIpmFolder.Appointments);
    newFolder.AddMapiMessageItem(calendar);
}