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:
- Defina data de início, fim e vencimento.
- Crie um MapiTask.
- Defina o estado da tarefa como NãoAtribuído.
- Crie o objeto de recorrência diária definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
- Defina a propriedade MapiTask.Recurrence para este objeto de recorrência diária.
- 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:
- Defina data de início, fim e vencimento.
- Crie um MapiTask.
- Defina o estado da tarefa como NãoAtribuído.
- Crie o objeto de recorrência semanal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
- Defina a propriedade MapiTask.Recurrence para este objeto de recorrência semanal.
- 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:
- Defina data de início, fim e vencimento.
- Crie um MapiTask.
- Defina o estado da tarefa como NãoAtribuído.
- Crie o objeto de recorrência mensal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
- Defina a propriedade MapiTask.Recurrence para este objeto de recorrência mensal.
- 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:
- Defina data de início, fim e vencimento.
- Crie um MapiTask.
- Defina o estado da tarefa como NãoAtribuído.
- Crie o objeto de recorrência mensal definindo propriedades como PatternType, Period, WeekStartDay, EndType e OccurenceCount.
- Defina a propriedade MapiTask.Recurrence para este objeto de recorrência mensal para obter a recorrência anual.
- 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);
}