Gerenciando Recorrências

Trabalhando com Recorrências Diárias

O Aspose.Email oferece suporte à criação de recorrências diárias usando MapiCalendarDailyRecurrencePattern. Três tipos diferentes de término de recorrência de calendário Mapi podem ser usados, incluindo EndAfterNOccurrences, EndAfterDate e NeverEnd. Esta seção demonstra a criação de diferentes padrões de recorrência diária.

Recorrências Diárias com Contagem de Ocorrências

Neste tipo de recorrência, o número de recorrências deve ser definido juntamente com outras informações da seguinte forma:

  1. Defina data de início, fim e vencimento.
  2. Crie um MapiTask.
  3. Defina o estado da tarefa como NãoAtribuído.
  4. Crie o objeto de recorrência diária definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Defina a propriedade MapiTask.Recurrence para este objeto de recorrência diária.
  6. Salve esta mensagem no disco.

O trecho de código a seguir mostra como criar uma tarefa com tipo de término de recorrência 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);

A função a seguir pode ser usada para calcular o número de eventos entre as duas datas:

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

Definindo o Valor de Contagem de Ocorrências

O trecho de código a seguir mostra como definir o valor de contagem de ocorrências.

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

Recorrências Diárias: Tipo de Recorrência EndAfterDate

"Opção ‘End By’ na Tarefa Mapi é alcançada definindo a propriedade OccurrenceCount calculada pela função GetOccurrenceCount(). Esta função recebe a data de início, data de término e a string RRULE.

Recorrências Diárias: Definindo o valor Every Day

O trecho de código a seguir mostra como definir o valor period para 1 e o valor INTERVAL para 1 também na string 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
};

O valor Every Day pode ser definido para qualquer valor apropriado como mostrado no exemplo a seguir:


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

Recorrências Diárias: Tipo de Recorrência NeverEnd

O tipo de término pode ser definido usando MapiCalendarRecurrenceEndType.NeverEnd. O período ou INTERVAL pode ser definido para o valor necessário, por exemplo 1, no exemplo a seguir.

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

Trabalhando com Recorrências Semanais

O Aspose.Email oferece recursos avançados para a criação de recorrências semanais usando MapiCalendarWeeklyRecurrencePattern. Três diferentes tipos de término de recorrência de calendário Mapi podem ser usados, incluindo EndAfterNOccurrences, EndAfterDate e NeverEnd. Esta seção demonstra a criação de diferentes padrões de recorrência semanal.

Recorrências Semanais: Tipo de Recorrência EndAfterNOccurrences

Neste tipo de recorrência, o número de recorrências deve ser definido juntamente com outras informações da seguinte forma:

  1. Defina data de início, fim e vencimento.
  2. Crie um MapiTask.
  3. Defina o estado da tarefa como NãoAtribuído.
  4. Crie o objeto de recorrência semanal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Defina a propriedade MapiTask.Recurrence para este objeto de recorrência semanal.
  6. Salve esta mensagem no disco.

O trecho de código a seguir mostra como criar uma tarefa com o tipo de término de recorrência como 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);

A função a seguir pode ser usada para calcular o número de eventos entre as duas datas:

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

Selecionando Múltiplos Dias em uma Semana

O trecho de código a seguir mostra como selecionar múltiplos dias em uma semana.

// 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"),
};

Selecionando Múltiplos Dias em uma Semana e Definindo Intervalos

O trecho de código a seguir mostra como selecionar múltiplos dias em uma semana e definir intervalos.

// 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"),
};

Recorrências Semanais: Tipo de Recorrência EndAfterDate

"Opção ‘End By’ na Tarefa Mapi é alcançada definindo a propriedade OccurrenceCount calculada pela função GetOccurrenceCount(). Esta função recebe a data de início, data de término e a string RRULE.

Recorrências Semanais: Definindo o valor Every Day

O trecho de código a seguir mostra como definir o valor period para 1 e o valor INTERVAL para 1 também na string 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"),
};

O valor Every Day pode ser definido para qualquer valor apropriado e múltiplos dias podem ser selecionados como mostrado no exemplo a seguir:

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"),
};

Recorrências Semanais: Tipo de Recorrência NeverEnd

O tipo de término pode ser definido usando MapiCalendarRecurrenceEndType.NeverEnd. O período ou INTERVAL pode ser definido para o valor necessário, por exemplo 1, no exemplo a seguir.

// 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"),
};

Trabalhando com Recorrências Mensais

O Aspose.Email oferece suporte à criação de recorrências mensais usando MapiCalendarMonthlyRecurrencePattern. Três diferentes tipos de término de recorrência de calendário Mapi podem ser usados, incluindo EndAfterNOccurrences, EndAfterDate e NeverEnd. Esta seção demonstra a criação de diferentes padrões de recorrência mensal.

Recorrências Mensais: Tipo de Recorrência EndAfterNOccurrences

Neste tipo de recorrência, o número de recorrências deve ser definido juntamente com outras informações da seguinte forma:

  1. Defina data de início, fim e vencimento.
  2. Crie um MapiTask.
  3. Defina o estado da tarefa como NãoAtribuído.
  4. Crie o objeto de recorrência mensal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Defina a propriedade MapiTask.Recurrence para este objeto de recorrência mensal.
  6. Salve esta mensagem no disco.

O trecho de código a seguir mostra como criar uma tarefa com o tipo de término de recorrência como 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);

A função a seguir pode ser usada para calcular o número de eventos entre as duas datas:

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

Definir número fixo de ocorrências

O trecho de código a seguir mostra como definir um número fixo de ocorrências.

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

Recorrências Mensais: Tipo de Recorrência EndAfterDate

"Opção ‘End By’ na Tarefa Mapi é alcançada definindo a propriedade OccurrenceCount calculada pela função GetOccurrenceCount(). Esta função recebe a data de início, data de término e a string RRULE. O trecho de código a seguir mostra como criar uma recorrência no dia 15 de cada mês entre as datas de início e término.

// 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);

Recorrências Mensais: Tipo de Recorrência NeverEnd

O trecho de código a seguir mostra como definir o tipo de término usando MapiCalendarRecurrenceEndType.NeverEnd.

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

Trabalhando com Recorrências Anuais

O Aspose.Email oferece suporte à criação de recorrências anuais usando MapiCalendarMonthlyRecurrencePattern. Ao definir a propriedade period para 12, podemos obter o padrão de recorrência anual. Três diferentes tipos de término de recorrência de calendário Mapi podem ser usados, incluindo EndAfterNOccurrences, EndAfterDate e NeverEnd. Esta seção demonstra a criação de diferentes padrões de recorrência anual.

Recorrências Anuais: Tipo de Recorrência EndAfterNOccurrences

Neste tipo de recorrência, o número de recorrências deve ser definido juntamente com outras informações da seguinte forma:

  1. Defina data de início, fim e vencimento.
  2. Crie um MapiTask.
  3. Defina o estado da tarefa como NãoAtribuído.
  4. Crie o objeto de recorrência mensal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
  5. Defina a propriedade MapiTask.Recurrence para este objeto de recorrência mensal para obter a recorrência anual.
  6. Salve esta mensagem no disco.

O trecho de código a seguir mostra como criar uma tarefa com o tipo de término de recorrência como 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);

Recorrências Anuais: Tipo de Recorrência EndAfterDate

"Opção ‘End By’ na Tarefa Mapi é alcançada definindo a propriedade OccurrenceCount calculada pela função GetOccurrenceCount(). Esta função recebe a data de início, data de término e a string RRULE. O trecho de código a seguir mostra como criar uma recorrência no dia 15 de cada 7º mês entre as datas de início e término.

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

Recorrências Anuais: Tipo de Recorrência NeverEnd

O trecho de código a seguir mostra como definir o tipo de término usando MapiCalendarRecurrenceEndType.NeverEnd.

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

Gerar Recorrência a partir da Regra de Recorrência

A API Aspose.Email fornece a capacidade de gerar um Padrão de Recorrência a partir de uma Regra de Recorrência (RRULE). Ela analisa as informações do RRULE conforme as especificações iCal RFC 5545 e gera o padrão de recorrência usando o método MapiCalendarRecurrencePatternFactory.FromString. O trecho de código a seguir mostra como gerar um padrão de recorrência a partir de uma regra de recorrência.

// 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);

Adicionar um Anexo a Eventos de Calendário Recorrentes

A API Aspose.Email oferece a capacidade de adicionar anexos a eventos de calendário recorrentes.

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