Керування повтореннями
Робота з щоденними повтореннями
Aspose.Email підтримує створення щоденних повторень за допомогою MapiCalendarDailyRecurrencePattern. Можна використовувати три різні типи завершення повторення календаря Mapi, включаючи EndAfterNOccurrences, EndAfterDate та NeverEnd. У цьому розділі демонструється створення різних шаблонів щоденних повторень.
Щоденні повторення з кількістю випадків
У цьому типі повторення кількість повторень слід встановити разом з іншою інформацією наступним чином:
- Встановіть дату початку, завершення та виконання.
- Створити MapiTask.
- Встановити стан завдання на НеПризначено.
- Створіть об’єкт щоденного повторення, встановивши властивості, такі як PatternType, Period, WeekStartDay, EndType та OccurenceCount.
- Встановіть властивість MapiTask.Recurrence у цей об’єкт щоденного повторення.
- Збережіть це повідомлення на диск.
Наступний фрагмент коду показує, як створити завдання з типом закінчення повторення 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);
Наступну функцію можна використати для обчислення кількості подій між двома датами:
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;
}
Встановлення значення кількості повторень
Наведений фрагмент коду показує, як встановити значення кількості повторень.
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
};
task.Recurrence = record;
Щоденні повторення: тип EndAfterDate
"End By" опція у Mapi Task досягається встановленням властивості OccurrenceCount, яка обчислюється функцією GetOccurrenceCount(). Ця функція приймає дату початку, дату закінчення та рядок RRULE.
Щоденні повторення: встановлення значення Щодня
Наведений фрагмент коду показує, як встановити значення period у 1 та значення INTERVAL у 1 у рядку 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
};
Значення Every Day можна встановити у будь‑яке підходяще значення, як показано у наведеному прикладі:
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 2,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=2"),
};
Щоденні повторення: тип NeverEnd
Тип завершення можна встановити за допомогою MapiCalendarRecurrenceEndType.NeverEnd. Параметр Period або INTERVAL можна встановити на потрібне значення, наприклад 1, у наведеному нижче прикладі.
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};
Робота з щотижневими повтореннями
Aspose.Email надає розширені можливості для створення щотижневих повторень за допомогою MapiCalendarWeeklyRecurrencePattern. Можна використовувати три різні типи завершення повторень календаря Mapi, включаючи EndAfterNOccurrences, EndAfterDate та NeverEnd. У цьому розділі демонструється створення різних шаблонів щотижневих повторень.
Щотижневі повторення: тип EndAfterNOccurrences
У цьому типі повторення кількість повторень слід встановити разом з іншою інформацією наступним чином:
- Встановіть дату початку, завершення та виконання.
- Створити MapiTask.
- Встановити стан завдання на НеПризначено.
- Створіть об’єкт щотижневого повторення, встановивши властивості, такі як PatternType, Period, WeekStartDay, EndType та OccurenceCount.
- Встановіть властивість MapiTask.Recurrence у цей об’єкт щотижневого повторення.
- Збережіть це повідомлення на диск.
Наведений фрагмент коду показує, як створити завдання з типом завершення повторення 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);
Наступну функцію можна використати для обчислення кількості подій між двома датами:
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;
}
Вибір кількох днів у тижні
Наведений фрагмент коду показує, як вибрати кілька днів у тижні.
// 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"),
};
Вибір кількох днів у тижні та встановлення інтервалів
Наведений фрагмент коду показує, як вибрати кілька днів тижня та встановити інтервали.
// 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"),
};
Щотижневі повторення: тип EndAfterDate
"End By" опція у Mapi Task досягається встановленням властивості OccurrenceCount, яка обчислюється функцією GetOccurrenceCount(). Ця функція приймає дату початку, дату закінчення та рядок RRULE.
Щотижневі повторення: встановлення значення Кожен День
Наведений фрагмент коду показує, як встановити значення period у 1 та значення INTERVAL у 1 у рядку 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"),
};
Значення Every Day можна встановити у будь‑яке підходяще значення, а кілька днів можна вибрати, як показано у наведеному прикладі:
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"),
};
Щотижневі повторення: тип NeverEnd
Тип завершення можна встановити за допомогою MapiCalendarRecurrenceEndType.NeverEnd. Параметр Period або INTERVAL можна встановити на потрібне значення, наприклад 1, у наведеному нижче прикладі.
// 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"),
};
Робота з щомісячними повтореннями
Aspose.Email підтримує створення щомісячних повторень за допомогою MapiCalendarMonthlyRecurrencePattern. Можна використовувати три різні типи завершення повторень календаря Mapi, включаючи EndAfterNOccurrences, EndAfterDate та NeverEnd. У цьому розділі демонструється створення різних шаблонів щомісячних повторень.
Місячні повторення: тип EndAfterNOccurrences
У цьому типі повторення кількість повторень слід встановити разом з іншою інформацією наступним чином:
- Встановіть дату початку, завершення та виконання.
- Створити MapiTask.
- Встановити стан завдання на НеПризначено.
- Створіть об’єкт щомісячного повторення, встановивши такі властивості, як PatternType, Period, WeekStartDay, EndType та OccurenceCount.
- Встановіть властивість MapiTask.Recurrence у цей об’єкт щомісячного повторення.
- Збережіть це повідомлення на диск.
Наведений фрагмент коду показує, як створити завдання з типом завершення повторення 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);
Наступну функцію можна використати для обчислення кількості подій між двома датами:
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;
}
Встановити фіксовану кількість повторень
Наведений фрагмент коду показує, як встановити фіксовану кількість повторень.
// Set the Monthly recurrence
var records = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
WeekStartDay = DayOfWeek.Monday
};
Місячні повторення: тип EndAfterDate
"End By" опція у Mapi Task досягається встановленням властивості OccurrenceCount, яка обчислюється функцією GetOccurrenceCount(). Ця функція приймає дату початку, дату закінчення та рядок RRULE. Нижче наведено фрагмент коду, який показує, як створити повторення на 15‑те число кожного місяця між датами початку та закінчення.
// 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);
Місячні повторення: тип NeverEnd
Наведений фрагмент коду показує, як встановити тип завершення за допомогою MapiCalendarRecurrenceEndType.NeverEnd.
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
WeekStartDay = DayOfWeek.Monday,
};
Робота з щорічними повтореннями
Aspose.Email підтримує створення щорічних повторень за допомогою MapiCalendarMonthlyRecurrencePattern. Встановивши властивість period на 12, можна отримати щорічний шаблон повторення. Можна використовувати три різні типи завершення повторень календаря Mapi, включаючи EndAfterNOccurrences, EndAfterDate та NeverEnd. У цьому розділі демонструється створення різних шаблонів щорічних повторень.
Щорічні повторення: тип EndAfterNOccurrences
У цьому типі повторення кількість повторень слід встановити разом з іншою інформацією наступним чином:
- Встановіть дату початку, завершення та виконання.
- Створити MapiTask.
- Встановити стан завдання на НеПризначено.
- Створіть об’єкт щомісячного повторення, встановивши такі властивості, як PatternType, Period, WeekStartDay, EndType та OccurenceCount.
- Встановіть властивість MapiTask.Recurrence у цей об’єкт щомісячного повторення, щоб отримати щорічне повторення.
- Збережіть це повідомлення на диск.
Наведений фрагмент коду показує, як створити завдання з типом завершення повторення 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);
Щорічні повторення: тип EndAfterDate
"End By" опція у Mapi Task досягається встановленням властивості OccurrenceCount, яка обчислюється функцією GetOccurrenceCount(). Ця функція приймає дату початку, дату закінчення та рядок RRULE. Нижче наведено фрагмент коду, який показує, як створити повторення на 15‑те число кожного 7‑го місяця між датами початку та закінчення.
// 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;
Щорічні повторення: тип NeverEnd
Наведений фрагмент коду показує, як встановити тип завершення за допомогою MapiCalendarRecurrenceEndType.NeverEnd.
// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 12,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};
Створити повторення з правила повторення
API Aspose.Email забезпечує можливість створювати шаблон повторення з правила повторення (RRULE). Він аналізує інформацію з RRULE відповідно до специфікації iCal RFC 5545 та генерує шаблон повторення за допомогою методу MapiCalendarRecurrencePatternFactory.FromString. Нижче наведено фрагмент коду, який показує, як генерувати шаблон повторення з правила.
// 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);
Додати вкладення до повторюваних подій календаря
API Aspose.Email надає можливість додавати вкладення до повторюваних подій календаря.
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);
}