العمل مع التكرارات

Contents
[ ]

العمل مع التكرارات اليومية

يدعم Aspose.Email إنشاء التكرارات اليومية باستخدام MapiCalendarDailyRecurrencePattern. يمكن استخدام ثلاثة أنواع مختلفة من نهايات تكرار تقويم Mapi بما في ذلك EndAfterNOccurrences، EndAfterDate و NeverEnd. يوضح هذا القسم إنشاء أنماط تكرار يومية مختلفة.

التكرارات اليومية: نوع النهاية EndAfterNOccurrence

في هذا النوع من التكرارات، يجب تعيين عدد التكرارات إلى جانب المعلومات الأخرى كما يلي:

  1. عيّن تاريخ البدء، الانتهاء وتاريخ الاستحقاق.
  2. إنشاء MapiTask.
  3. عيّن حالة المهمة إلى NotAssigned.
  4. أنشئ كائن التكرار اليومي عن طريق تعيين الخصائص مثل PatternType، Period، WeekStartDay، EndType و OccurenceCount.
  5. عيّن خاصية MapiTask.setRecurrence إلى كائن التكرار اليومي هذا.
  6. احفظ هذه الرسالة على القرص.

يوضح مقتطف الشيفرة التالي كيفية إنشاء مهمة بنوع نهاية تكرار EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date dueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 8, 1);
 
MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern rec = new MapiCalendarDailyRecurrencePattern();
rec.setPatternType(MapiCalendarRecurrencePatternType.Day);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY"));

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Daily_out.msg", TaskSaveFormat.Msg);

يمكن استخدام الدالة التالية لحساب عدد الأحداث بين التاريخين:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

تعيين قيمة عدد التكرارات

يوضح مقتطف الشيفرة التالي كيفية تعيين قيمة عدد التكرارات.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setWeekStartDay(DayOfWeek.Sunday);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
record.setOccurrenceCount(5);
task.setRecurrence(record);

التكرارات اليومية: نوع النهاية EndAfterDate

يتم تحقيق خيار "End By" في مهمة Mapi عن طريق تعيين خاصية OccurrenceCount التي يتم حسابها بواسطة الدالة getOccurrenceCount(). تأخذ هذه الدالة تاريخ البدء، تاريخ الانتهاء وسلسلة RRULE.

التكرارات اليومية: تعيين قيمة Every Day

يوضح مقتطف الشيفرة التالي كيفية تعيين قيمة الفترة إلى 1 وقيمة INTERVAL إلى 1 في سلسلة RRULE كذلك.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY;INTERVAL=1"));
record.setEndDate(endByDate);

يمكن تعيين قيمة Every Day إلى أي قيمة مناسبة كما هو موضح في المثال التالي:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(2);
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=DAILY;INTERVAL=2"));

التكرارات اليومية: نوع النهاية NeverEnd

يمكن تعيين نوع النهاية باستخدام MapiCalendarRecurrenceEndType.NeverEnd. يمكن تعيين الفترة أو INTERVAL إلى القيمة المطلوبة، مثلاً 1 في المثال التالي.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Daily recurrence
MapiCalendarDailyRecurrencePattern record = new MapiCalendarDailyRecurrencePattern();

record.setPatternType(MapiCalendarRecurrencePatternType.Day);
record.setPeriod(1);
record.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

العمل مع التكرارات الأسبوعية

توفر Aspose.Email ميزات غنية لإنشاء تكرارات أسبوعية باستخدام MapiCalendarWeeklyRecurrencePattern. يمكن استخدام ثلاثة أنواع مختلفة من نهايات تكرار تقويم Mapi بما في ذلك EndAfterNOccurrences، EndAfterDate و NeverEnd. يوضح هذا القسم إنشاء أنماط تكرار أسبوعية مختلفة.

التكرارات الأسبوعية: نوع النهاية EndAfterNOccurrences

في هذا النوع من التكرارات، يجب تعيين عدد التكرارات إلى جانب المعلومات الأخرى كما يلي:

  1. عيّن تاريخ البدء، الانتهاء وتاريخ الاستحقاق.
  2. إنشاء MapiTask.
  3. عيّن حالة المهمة إلى NotAssigned.
  4. أنشئ كائن التكرار الأسبوعي عن طريق تعيين الخصائص مثل PatternType، Period، WeekStartDay، EndType و OccurenceCount.
  5. عيّن خاصية MapiTask.setRecurrence إلى كائن التكرار الأسبوعي هذا.
  6. احفظ هذه الرسالة على القرص.

يوضح مقتطف الشيفرة التالي كيفية إنشاء مهمة بنوع نهاية تكرار EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date dueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 9, 1);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"));

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Weekly_out.msg", TaskSaveFormat.Msg);

يمكن استخدام الدالة التالية لحساب عدد الأحداث بين التاريخين:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

اختيار أيام متعددة في الأسبوع

يوضح مقتطف الشيفرة التالي كيفية اختيار أيام متعددة في الأسبوع.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();

rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO"));

اختيار أيام متعددة في الأسبوع وتعيين الفواصل

يوضح مقتطف الشيفرة التالي كيفية اختيار أيام متعددة في الأسبوع وتعيين الفواصل.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(2);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"));

التكرارات الأسبوعية: نوع النهاية EndAfterDate

يتم تحقيق خيار "End By" في مهمة Mapi عن طريق تعيين خاصية OccurrenceCount التي يتم حسابها بواسطة الدالة getOccurrenceCount(). تأخذ هذه الدالة تاريخ البدء، تاريخ الانتهاء وسلسلة RRULE.

التكرارات الأسبوعية: تعيين قيمة Every Day

يوضح مقتطف الشيفرة التالي كيفية تعيين قيمة الفترة إلى 1 وقيمة INTERVAL إلى 1 في سلسلة RRULE كذلك.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern rec = new MapiCalendarWeeklyRecurrencePattern();
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
rec.setPatternType(MapiCalendarRecurrencePatternType.Week);
rec.setPeriod(1);
rec.setWeekStartDay(DayOfWeek.Sunday);
rec.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
rec.setEndDate(endByDate);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR;INTERVAL=1"));

يمكن تعيين قيمة Every Day إلى أي قيمة مناسبة ويمكن اختيار أيام متعددة كما هو موضح في المثال التالي:

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiCalendarWeeklyRecurrencePattern record = new MapiCalendarWeeklyRecurrencePattern();
record.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
record.setPatternType(MapiCalendarRecurrencePatternType.Week);
record.setPeriod(2);
record.setWeekStartDay(DayOfWeek.Sunday);
record.setEndDate(endByDate);
record.setDayOfWeek(MapiCalendarDayOfWeek.Friday | MapiCalendarDayOfWeek.Monday);
record.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR,MO;INTERVAL=2"));

التكرارات الأسبوعية: نوع النهاية NeverEnd

يمكن تعيين نوع النهاية باستخدام MapiCalendarRecurrenceEndType.NeverEnd. يمكن تعيين الفترة أو INTERVAL إلى القيمة المطلوبة، مثلاً 1 في المثال التالي.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the weekly recurrence
MapiCalendarWeeklyRecurrencePattern recurrence = new MapiCalendarWeeklyRecurrencePattern();
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Week);
recurrence.setPeriod(1);
recurrence.setWeekStartDay(DayOfWeek.Sunday);
recurrence.setDayOfWeek(MapiCalendarDayOfWeek.Friday);
recurrence.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=WEEKLY;BYDAY=FR"));

العمل مع التكرارات الشهرية

يدعم Aspose.Email إنشاء التكرارات الشهرية باستخدام MapiCalendarMonthlyRecurrencePattern. يمكن استخدام ثلاثة أنواع مختلفة من نهايات تكرار تقويم Mapi بما في ذلك EndAfterNOccurrences، EndAfterDate و NeverEnd. يوضح هذا القسم إنشاء أنماط تكرار شهرية مختلفة.

التكرارات الشهرية: نوع النهاية EndAfterNOccurrences

في هذا النوع من التكرارات، يجب تعيين عدد التكرارات إلى جانب المعلومات الأخرى كما يلي:

  1. عيّن تاريخ البدء، الانتهاء وتاريخ الاستحقاق.
  2. إنشاء MapiTask.
  3. عيّن حالة المهمة إلى NotAssigned.
  4. أنشئ كائن التكرار الشهري عن طريق تعيين الخصائص مثل PatternType، Period، WeekStartDay، EndType و OccurenceCount.
  5. عيّن خاصية MapiTask.setRecurrence إلى كائن التكرار الشهري هذا.
  6. احفظ هذه الرسالة على القرص.

يوضح مقتطف الشيفرة التالي كيفية إنشاء مهمة بنوع نهاية تكرار EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 16);
Date DueDate = getDate(2015, 7, 16);
Date endByDate = getDate(2015, 12, 31);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern rec = new MapiCalendarMonthlyRecurrencePattern();
rec.setDay(15);
rec.setPeriod(1);
rec.setPatternType(MapiCalendarRecurrencePatternType.Month);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"));
rec.setWeekStartDay(DayOfWeek.Monday);

if (rec.getOccurrenceCount() == 0)
{
    rec.setOccurrenceCount(1);
}

task.setRecurrence(rec);
task.save(dataDir + "Monthly_out.msg", TaskSaveFormat.Msg);

يمكن استخدام الدالة التالية لحساب عدد الأحداث بين تاريخين:

private static long getOccurrenceCount(Date start, Date endBy, String rrule)
{
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd");
    CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:" + formatter.format(start) + "\r\nRRULE:" + rrule);
    DateCollection dates = pattern.generateOccurrences(start, endBy);
    return dates.size();
}

تعيين عدد ثابت من التكرارات

يوضح مقتطف الشيفرة التالي كيفية تعيين عدد ثابت من التكرارات.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern records = new MapiCalendarMonthlyRecurrencePattern();
records.setDay(15);
records.setPeriod(1);
records.setPatternType(MapiCalendarRecurrencePatternType.Month);
records.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
records.setOccurrenceCount(5);
records.setWeekStartDay(DayOfWeek.Monday);

التكرارات الشهرية: نوع النهاية EndAfterDate

يتم تحقيق خيار "End By" في مهمة Mapi عن طريق تعيين خاصية OccurrenceCount التي يتم حسابها بواسطة الدالة getOccurrenceCount(). تأخذ هذه الدالة تاريخ البدء، تاريخ الانتهاء وسلسلة RRULE. يوضح مقتطف الشيفرة التالي كيفية إنشاء تكرار في اليوم الـ15 من كل شهر بين تاريخ البدء والانتهاء.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = getDate(2015, 7, 1);
Date dueDate = getDate(2015, 7, 1);
Date endByDate = getDate(2015, 12, 31);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Monthly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(1);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
recurrence.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=MONTHLY;BYMONTHDAY=15;INTERVAL=1"));
recurrence.setWeekStartDay(DayOfWeek.Monday);
recurrence.setEndDate(endByDate);

task.setRecurrence(recurrence);
task.save(dataDir + "SetMonthlyEndAfterDateRecurrence_out.msg", TaskSaveFormat.Msg);

التكرارات الشهرية: نوع النهاية NeverEnd

يوضح مقتطف الشيفرة التالي كيفية تعيين نوع النهاية باستخدام MapiCalendarRecurrenceEndType.NeverEnd.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(1);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);
recurrence.setWeekStartDay(DayOfWeek.Monday);

العمل مع التكرارات السنوية

يدعم Aspose.Email إنشاء التكرارات السنوية باستخدام MapiCalendarMonthlyRecurrencePattern. من خلال تعيين خاصية الفترة إلى 12، يمكننا تحقيق نمط التكرار السنوي. يمكن استخدام ثلاثة أنواع مختلفة من نهايات تكرار تقويم Mapi بما في ذلك EndAfterNOccurrences، EndAfterDate و NeverEnd. يوضح هذا القسم إنشاء أنماط تكرار سنوية مختلفة.

التكرارات السنوية: نوع النهاية EndAfterNOccurrences

في هذا النوع من التكرارات، يجب تعيين عدد التكرارات إلى جانب المعلومات الأخرى كما يلي:

  1. عيّن تاريخ البدء، الانتهاء وتاريخ الاستحقاق.
  2. إنشاء MapiTask.
  3. عيّن حالة المهمة إلى NotAssigned.
  4. أنشئ كائن التكرار الشهري عن طريق تعيين الخصائص مثل PatternType، Period، WeekStartDay، EndType و OccurenceCount.
  5. عيّن خاصية MapiTask.setRecurrence إلى كائن التكرار الشهري هذا لتحقيق التكرار السنوي.
  6. احفظ هذه الرسالة على القرص.

يوضح مقتطف الشيفرة التالي كيفية إنشاء مهمة بنوع نهاية تكرار EndAfterNOccurrence.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
Date startDate = getDate(2015, 7, 1);
Date dueDate = getDate(2015, 7, 1);

MapiTask task = new MapiTask("This is test task", "Sample Body", startDate, dueDate);
task.setState(MapiTaskState.NotAssigned);

// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(12);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.EndAfterNOccurrences);
recurrence.setOccurrenceCount(3);

task.setRecurrence(recurrence);
task.save("Yearly.msg", TaskSaveFormat.Msg);

التكرارات السنوية: نوع النهاية EndAfterDate

يتم تحقيق خيار "End By" في مهمة Mapi عن طريق تعيين خاصية OccurrenceCount التي يتم حسابها بواسطة الدالة getOccurrenceCount(). تأخذ هذه الدالة تاريخ البدء، تاريخ الانتهاء وسلسلة RRULE. يوضح مقتطف الشيفرة التالي كيفية إنشاء تكرار في اليوم الـ15 من كل شهر سابع بين تاريخ البدء والانتهاء.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern rec = new MapiCalendarMonthlyRecurrencePattern();
rec.setDay(15);
rec.setPeriod(12);
rec.setPatternType(MapiCalendarRecurrencePatternType.Month);
rec.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
rec.setEndDate(endByDate);
rec.setOccurrenceCount(getOccurrenceCount(startDate, endByDate, "FREQ=YEARLY;BYMONTHDAY=15;BYMONTH=7;INTERVAL=1"));

التكرارات السنوية: نوع النهاية NeverEnd

يوضح مقتطف الشيفرة التالي كيفية تعيين نوع النهاية باستخدام MapiCalendarRecurrenceEndType.NeverEnd.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// Set the Yearly recurrence
MapiCalendarMonthlyRecurrencePattern recurrence = new MapiCalendarMonthlyRecurrencePattern();
recurrence.setDay(15);
recurrence.setPeriod(12);
recurrence.setPatternType(MapiCalendarRecurrencePatternType.Month);
recurrence.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

إنشاء تكرار من قاعدة التكرار

توفر واجهة برمجة تطبيقات Aspose.Email القدرة على توليد نمط التكرار من قاعدة التكرار (RRULE). تقوم بتحليل المعلومات من RRULE وفقًا لمواصفات iCal RFC 5545 وتولد نمط التكرار باستخدام طريقة MapiCalendarRecurrencePatternFactory.fromString. يوضح مقتطف الشيفرة التالي كيفية توليد نمط التكرار من قاعدة التكرار.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
// The path to the File directory.
String dataDir = RunExamples.getDataDir_Outlook();

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

app1.setStartDate(startDate);
app1.setEndDate(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.getRecurrence().setRecurrencePattern(MapiCalendarRecurrencePatternFactory.fromString(pattern));

إضافة مرفق إلى أحداث التقويم المتكررة

توفر واجهة برمجة تطبيقات Aspose.Email القدرة على إضافة مرفقات إلى أحداث التقويم المتكررة.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
String dataDir = RunExamples.getDataDir_Outlook();

Date startDate = addHours(getDate(2018, 7, 19), 12);
MapiCalendar calendar = new MapiCalendar("location1", "summary1", "description1", startDate, addHours(startDate, 1));

MapiCalendarEventRecurrence recurrence = new MapiCalendarEventRecurrence();
MapiCalendarRecurrencePattern pattern = new MapiCalendarDailyRecurrencePattern();
recurrence.setRecurrencePattern(pattern);
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setPeriod(1);
pattern.setEndType(MapiCalendarRecurrenceEndType.NeverEnd);

Date exceptionDate = addDays(startDate, 3);
MapiCalendarExceptionInfo exception = new MapiCalendarExceptionInfo();
exception.setLocation("exceptionLoc");
exception.setSubject("exceptionSubj");
exception.setBody("exceptionBody");
exception.setOriginalStartDate(exceptionDate);
exception.setStartDateTime(exceptionDate);
exception.setEndDateTime(addHours(exceptionDate, 5));
exception.setAttachments(new MapiAttachmentCollection(calendar));
exception.getAttachments().add("file.txt", "hello, world!".getBytes());

pattern.getExceptions().addItem(exception);
pattern.getModifiedInstanceDates().addItem(exceptionDate);
pattern.getDeletedInstanceDates().addItem(exceptionDate);
calendar.setRecurrence(recurrence);

try (PersonalStorage newPst = PersonalStorage.create(dataDir + "AddAttachmentToMapiExceptionInfo.pst", FileFormatVersion.Unicode))
{
    FolderInfo newFolder = newPst.createPredefinedFolder("Calendar", StandardIpmFolder.Appointments);
    newFolder.addMapiMessageItem(calendar);
}

تعيين المنطقة الزمنية لحدث التقويم

توفر واجهة برمجة تطبيقات Aspose.Email القدرة على تعيين المنطقة الزمنية للتقويم:

  • معلومات المنطقة الزمنية لتاريخ البدء/الانتهاء
  • معلومات المنطقة الزمنية لاجتماع متكرر
  • معلومات المنطقة الزمنية التي تصف كيفية تحويل تاريخ ووقت الاجتماع في سلسلة متكررة إلى ومن توقيت UTC

يوضح مقتطف الشيفرة التالي كيفية تعيين معلومات المنطقة الزمنية للتقويم:

MapiCalendar event = new MapiCalendar("location", "summary", "description", startDate, endDate);
// UTC time zone
MapiCalendarTimeZone utcTimeZone = new MapiCalendarTimeZone("UTC");
event.setStartDateTimeZone(utcTimeZone);
event.setEndDateTimeZone(utcTimeZone);

MapiCalendarDailyRecurrencePattern pattern = new MapiCalendarDailyRecurrencePattern();
pattern.setPeriod(1);
pattern.setStartDate(startDate);
pattern.setEndDate(untilDate);
pattern.setEndType(MapiCalendarRecurrenceEndType.EndAfterDate);
pattern.setPatternType(MapiCalendarRecurrencePatternType.Day);
pattern.setDayOfWeek(DayOfWeek.Monday);

MapiCalendarEventRecurrence r = new MapiCalendarEventRecurrence();
r.setRecurrencePattern(pattern);
r.setClipStart(startDate);
r.setClipEnd(pattern.getEndDate());
//https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/pidlidappointmenttimezonedefinitionrecur-canonical-property
r.setAppointmentTimeZoneDefinitionRecur(utcTimeZone); // <---
r.setTimeZoneStruct(utcTimeZone); // <---
event.setRecurrence(r);