היכרות עם תבניות חזרה

אפשר לחשוב על recurrence pattern כדרך לתאר לוח זמנים מסוים. היא מכילה רק את המידע הדרוש לבניית רשימת הופעות (תאריכים ושעות) בהתאם ללוח הזמנים הנתון. תבנית חזרה עשויה לכלול כללי חזרה המתארים מחזורים המשולבים ליצירת התבנית הכוללת. באופן כללי, ככל שתבנית החזרה מורכבת יותר, כך היא תכיל יותר כללי חזרה. תבניות חזרה יכולות לכלול exceptions (לא לבלבל עם חריגות המייצגות שגיאות המתרחשות בזמן ריצה של האפליקציה). חריגות מוספות או מסירות תאריכי הופעה לתבנית המקורית. ניתן לציין חריגות כהופעות מפורשות או כתבנית בעצמן. דוגמאות לתבניות חזרה עם חריגות:

  • כל יום שישי השני, למעט מחודשים יוני עד אוגוסט.
  • הראשון של כל חודש, למעט ינואר, שבו זה צריך להיות ב‑2.

תבניות חזרה הן לרוב מחזוריות, אך הן אינן חייבות להיות כך. ניתן לתאר תבנית חזרה באופן מלא כקבוצה של תאריכים ושעות של אירועים מוגדרים מראש. ה‑RFC של iCalendar מגדיר components, כגון VEVENT או VTODO המייצגים אירועים או משימות. לרכיבים יכולים להיות מאפיינים כגון זמן תחילת אירוע, תיאור, מיקום, משתתפים וחזרה. לכן, תבנית חזרה קיימת בדרך כלל כמאפיין של משימה חוזרת או של אירוע. מאפייני תבנית חזרה המוגדרים על ידי iCalendar הם:

  • DTSTART - תאריך ושעת ההתחלה של התבנית (כמו כן מייצג את האירוע הראשון אם לא הוצא במפורש).
  • RRULE - מציין כלל חזרה עבור קבוצת חזרה.
  • RDATE - מגדיר רשימת תאריכים ושעות שייכללו בקבוצת חזרה.
  • EXRULE - מציין כלל חזרה עבור חריגים מתוך קבוצת חזרה.
  • EXDATE - מגדיר רשימת תאריכים ושעות של חריגים מתוך קבוצת חזרה.

רק DTSTART נדרש ויש צורך ב‑DTSTART אחד בלבד. כל שאר המאפיינים הם אופציונליים וניתן לציין אותם יותר מפעם אחת. Aspose.iCalendar מקבל מחרוזת בפורמט iCalendar וקורא את תבנית החזרה אל RecurrencePattern אובייקט. המחרוזת יכולה להיות תיאור מלא של רכיב iCalendar (למשל, VEVENT מלא) או רק קטע שמכיל רק את תבנית החזרה. לאחר טעינת תבנית החזרה לאובייקט RecurrencePattern, ניתן:

  • בדוק ושנה את התבנית באופן תכנותי דרך השיטות והמאפיינים שמספקת Aspose.iCalendar
  • צור תאריכים/זמנים של אירוע בטווח תאריכים מוגדר.
  • שמור את התבנית בפורמט iCalendar.

קטע הקוד הבא מציג שהחלק RRULE מכיל את כלל החזרה.

הסתכל על ה‑ תבניות חזרה לדוגמה להדגמות כיצד ליצור תבניות חזרה.

About Aspose.iCalendar Object Model

המרחב השמות Aspose.iCalendar מכיל את כל המחלקות המסופקות על ידי רכיב Aspose.iCalendar. RecurrencePattern ו‑RecurrenceRule הן המחלקות המרכזיות של Aspose.iCalendar, ומספקות מימושים קונקרטיים של ה‑elements המתאימים בתקן RFC 2445.

המחלקה RecurrencePattern מייצגת את כל תבנית החזרה. ניתן ליצור תבנית חזרה חדשה מאפס באמצעות הבנאי ברירת המחדל או לטעון תבנית קיימת בפורמט iCalendar באמצעות המתודה הסטטית FromiCalendar. המחלקה RecurrenceRule מייצגת את חלק ה‑RRULE או EXRULE של תבנית חזרה. RecurrenceRule מציגה מספר מאפיינים המתאימים במדויק למקבילים שלהם בתקן iCalendar. לדוגמה, ByMonth מומר ל‑BYMONTH ב‑iCalendar וכן הלאה. על‑ידי בחינה או שינוי של ערכי המאפיינים של RecurrenceRule ניתן לנתח או לשנות כלל חזרה. לקבלת מידע נוסף ודוגמאות קוד, ראו RecurrencePattern ו‑RecurrenceRule באינדקס ה‑API.

Sample Patterns

מקטע זה כולל את הנושאים הבאים:

  • היום האחרון של החודש.
  • יום העבודה האחרון של כל חודש.
  • יום שני האחרון של השנה.
  • יום שישי של השבוע הראשון לפי תקן ISO 8601 של השנה.
  • יום שישי הראשון של השנה.

The Last Day of The Month

דוגמאות אלו תבנית חזרה מציין את היום האחרון של החודש, בכל חודש.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

באופן דומה, אם ברצונך ליצור הופעה ביום שלפני היום האחרון של החודש, השתמש ב‑BYMONTHDAY=-2. אם תציין BYMONTHDAY=31, אז לפי תקן iCalendar, לא ייווצרו הופעות בחודשים שיש בהם פחות מ‑31 יום.

The Last Workday of Every Month

דוגמאות אלו תבנית חזרה מציין את יום העבודה האחרון של החודש, בכל חודש. ימי עבודה מוגדרים כימים שבהם עובדים. באירופה, לדוגמה, ימי עבודה הם בדרך כלל מיום שני עד יום שישי.

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

הכלל שלמעלה מגדיר את כל ימי העבודה של חודש ובוחר את האחרון מהם. התוצאה הסופית היא יום העבודה האחרון בחודש.

The Last Monday of The Year

דוגמה זו תבנית חזרה מציין אירוע המתרחש ביום שני האחרון של השנה.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Friday of the First ISO 8601 Week of the Year

דוגמה זו תבנית חזרה מציין את יום שישי של השבוע הראשון של השנה. במפרט ISO 8601, השבוע הראשון של השנה הוא השבוע המורכב ממינימום ארבעה ימים. כאשר השנה מתחילה ביום שבת, לדוגמה, השבוע הראשון הוא השבוע הבא מיד, המתחיל ביום שני, 3 בינואר.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

First Friday of the Year

דוגמה זו תבנית חזרה מציין אירוע המתרחש ביום שישי הראשון של השנה.

FREQ=YEARLY;BYDAY=1FR

בשנת 1999, לדוגמה, יום שישי הראשון של השנה הוא 1999/01/01, בעוד שיום שישי של השבוע הראשון לפי תקן ISO 8601 הוא 1999/01/08.