Správa opakování
Práce s denními opakováními
Aspose.Email podporuje vytváření denních opakování pomocí MapiCalendarDailyRecurrencePattern. Lze použít tři různé typy konce opakování kalendáře Mapi, včetně EndAfterNOccurrences, EndAfterDate a NeverEnd. Tato sekce demonstruje vytváření různých denních vzorů opakování.
Denní opakování s počtem výskytů
V tomto typu opakování se má nastavit počet opakování spolu s dalšími informacemi následovně:
- Nastavte datum začátku, konce a termínu.
- Vytvořit MapiTask.
- Nastavit stav úkolu na Nepřiřazeno.
- Vytvořte objekt denního opakování nastavením vlastností jako PatternType, Period, WeekStartDay, EndType a OccurenceCount.
- Nastavte vlastnost MapiTask.Recurrence na tento objekt denního opakování.
- Uložte tuto zprávu na disk.
Níže uvedený úryvek kódu ukazuje, jak vytvořit úkol s typem ukončení opakování 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);
Následující funkci lze použít k výpočtu počtu událostí mezi dvěma daty:
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;
}
Nastavení hodnoty počtu výskytů
Následující úryvek kódu ukazuje, jak nastavit hodnotu počtu výskytů.
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
WeekStartDay = DayOfWeek.Sunday,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
};
task.Recurrence = record;
Denní opakování: Typ EndAfterDate
"End By" volba v úkolu Mapi je dosažena nastavením vlastnosti OccurrenceCount, vypočítané funkcí GetOccurrenceCount(). Tato funkce přijímá počáteční datum, koncové datum a řetězec RRULE.
Denní opakování: Nastavení hodnoty Každý den
Následující úryvek kódu ukazuje, jak nastavit hodnotu period na 1 a hodnotu INTERVAL na 1 také v řetězci 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
};
Hodnotu Every Day lze nastavit na libovolnou vhodnou hodnotu, jak je ukázáno v následujícím příkladu:
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 2,
EndType = MapiCalendarRecurrenceEndType.EndAfterDate,
OccurrenceCount = GetOccurrenceCount(StartDate, endByDate, "FREQ=DAILY;INTERVAL=2"),
};
Denní opakování: Typ NeverEnd
Typ konce lze nastavit pomocí MapiCalendarRecurrenceEndType.NeverEnd. Period nebo INTERVAL lze nastavit na požadovanou hodnotu, např. 1, v následujícím příkladu.
// Set the Daily recurrence
var record = new MapiCalendarDailyRecurrencePattern
{
PatternType = MapiCalendarRecurrencePatternType.Day,
Period = 1,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};
Práce s týdenními opakováními
Aspose.Email poskytuje bohaté funkce pro vytváření týdenních opakování pomocí MapiCalendarWeeklyRecurrencePattern. Lze použít tři různé typy konce opakování kalendáře Mapi, včetně EndAfterNOccurrences, EndAfterDate a NeverEnd. Tato sekce demonstruje vytváření různých týdenních vzorů opakování.
Týdenní opakování: Typ EndAfterNOccurrences
V tomto typu opakování se má nastavit počet opakování spolu s dalšími informacemi následovně:
- Nastavte datum začátku, konce a termínu.
- Vytvořit MapiTask.
- Nastavit stav úkolu na Nepřiřazeno.
- Vytvořte objekt týdenního opakování nastavením vlastností jako PatternType, Period, WeekStartDay, EndType a OccurenceCount.
- Nastavte vlastnost MapiTask.Recurrence na tento objekt týdenního opakování.
- Uložte tuto zprávu na disk.
Následující úryvek kódu ukazuje, jak vytvořit úkol s typem konce opakování 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);
Následující funkci lze použít k výpočtu počtu událostí mezi dvěma daty:
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;
}
Výběr více dnů v týdnu
Následující úryvek kódu ukazuje, jak vybrat více dnů v týdnu.
// 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"),
};
Výběr více dnů v týdnu a nastavení intervalů
Následující úryvek kódu ukazuje, jak vybrat více dnů v týdnu a nastavit intervaly.
// 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"),
};
Týdenní opakování: Typ EndAfterDate
"End By" volba v úkolu Mapi je dosažena nastavením vlastnosti OccurrenceCount, vypočítané funkcí GetOccurrenceCount(). Tato funkce přijímá počáteční datum, koncové datum a řetězec RRULE.
Týdenní opakování: Nastavení hodnoty Každý den
Následující úryvek kódu ukazuje, jak nastavit hodnotu period na 1 a hodnotu INTERVAL na 1 také v řetězci 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"),
};
Hodnotu Every Day lze nastavit na libovolnou vhodnou hodnotu a lze vybrat více dnů, jak je ukázáno v následujícím příkladu:
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"),
};
Týdenní opakování: Typ NeverEnd
Typ konce lze nastavit pomocí MapiCalendarRecurrenceEndType.NeverEnd. Period nebo INTERVAL lze nastavit na požadovanou hodnotu, např. 1, v následujícím příkladu.
// 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"),
};
Práce s měsíčními opakováními
Aspose.Email podporuje vytváření měsíčních opakování pomocí MapiCalendarMonthlyRecurrencePattern. Lze použít tři různé typy konce opakování kalendáře Mapi, včetně EndAfterNOccurrences, EndAfterDate a NeverEnd. Tato sekce demonstruje vytváření různých měsíčních vzorů opakování.
Měsíční opakování: Typ EndAfterNOccurrences
V tomto typu opakování se má nastavit počet opakování spolu s dalšími informacemi následovně:
- Nastavte datum začátku, konce a termínu.
- Vytvořit MapiTask.
- Nastavit stav úkolu na Nepřiřazeno.
- Vytvořte objekt měsíčního opakování nastavením vlastností jako PatternType, Period, WeekStartDay, EndType a OccurenceCount.
- Nastavte vlastnost MapiTask.Recurrence na tento objekt měsíčního opakování.
- Uložte tuto zprávu na disk.
Následující úryvek kódu ukazuje, jak vytvořit úkol s typem konce opakování 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);
Následující funkci lze použít k výpočtu počtu událostí mezi dvěma daty:
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;
}
Nastavit pevný počet výskytů
Následující úryvek kódu ukazuje, jak nastavit pevný počet výskytů.
// Set the Monthly recurrence
var records = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.EndAfterNOccurrences,
OccurrenceCount = 5,
WeekStartDay = DayOfWeek.Monday
};
Měsíční opakování: Typ EndAfterDate
"End By" volba v úkolu Mapi je dosažena nastavením vlastnosti OccurrenceCount, vypočítané funkcí GetOccurrenceCount(). Tato funkce přijímá počáteční datum, koncové datum a řetězec RRULE. Následující úryvek kódu ukazuje, jak vytvořit opakování 15. dne každého měsíce mezi počátečním a koncovým datem.
// 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);
Měsíční opakování: Typ NeverEnd
Následující úryvek kódu ukazuje, jak nastavit typ konce pomocí MapiCalendarRecurrenceEndType.NeverEnd.
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 1,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
WeekStartDay = DayOfWeek.Monday,
};
Práce s ročními opakováními
Aspose.Email podporuje vytváření ročních opakování pomocí MapiCalendarMonthlyRecurrencePattern. Nastavením vlastnosti period na 12 můžeme dosáhnout ročního vzoru opakování. Lze použít tři různé typy konce opakování kalendáře Mapi, včetně EndAfterNOccurrences, EndAfterDate a NeverEnd. Tato sekce demonstruje vytváření různých ročních vzorů opakování.
Roční opakování: Typ EndAfterNOccurrences
V tomto typu opakování se má nastavit počet opakování spolu s dalšími informacemi následovně:
- Nastavte datum začátku, konce a termínu.
- Vytvořit MapiTask.
- Nastavit stav úkolu na Nepřiřazeno.
- Vytvořte objekt měsíčního opakování nastavením vlastností jako PatternType, Period, WeekStartDay, EndType a OccurenceCount.
- Nastavte vlastnost MapiTask.Recurrence na tento objekt měsíčního opakování, aby se dosáhlo ročního opakování.
- Uložte tuto zprávu na disk.
Následující úryvek kódu ukazuje, jak vytvořit úkol s typem konce opakování 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);
Roční opakování: Typ EndAfterDate
"End By" volba v úkolu Mapi je dosažena nastavením vlastnosti OccurrenceCount, vypočítané funkcí GetOccurrenceCount(). Tato funkce přijímá počáteční datum, koncové datum a řetězec RRULE. Následující úryvek kódu ukazuje, jak vytvořit opakování 15. dne každého 7. měsíce mezi počátečním a koncovým datem.
// 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;
Roční opakování: Typ NeverEnd
Následující úryvek kódu ukazuje, jak nastavit typ konce pomocí MapiCalendarRecurrenceEndType.NeverEnd.
// Set the Yearly recurrence
var recurrence = new MapiCalendarMonthlyRecurrencePattern
{
Day = 15,
Period = 12,
PatternType = MapiCalendarRecurrencePatternType.Month,
EndType = MapiCalendarRecurrenceEndType.NeverEnd,
};
Generovat opakování z pravidla opakování
Aspose.Email API poskytuje možnost generovat vzor opakování z pravidla opakování (RRULE). Parsuje informace z RRULE podle specifikací iCal RFC 5545 a generuje vzor opakování pomocí metody MapiCalendarRecurrencePatternFactory.FromString. Následující úryvek kódu ukazuje, jak generovat vzor opakování z pravidla opakování.
// 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);
Přidat přílohu k opakujícím se kalendářovým událostem
Aspose.Email API poskytuje možnost přidávat přílohy k opakujícím se událostem kalendáře.
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);
}