Úvod do opakovacích vzorů

Můžete vzor opakování vnímat jako způsob, jak popsat konkrétní rozvrh. Obsahuje právě tolik informací, kolik stačí k vytvoření seznamu výskytů (dat a časů) podle daného rozvrhu. Vzor opakování může obsahovat pravidla opakování, která popisují cykly, jež se spojují do celkového vzoru. Obecně čím je vzor opakování složitější, tím více pravidel opakování bude obsahovat. Vzory opakování mohou zahrnovat výjimky (nesmíte je zaměňovat s výjimkami představujícími chyby, které nastanou během provádění aplikace). Výjimky přidávají nebo odstraňují data výskytu z původního vzoru. Výjimky mohou být zadány jako explicitní výskyty nebo jako samostatný vzor. Příklady vzorů opakování s výjimkami:

  • Každý druhý pátek, kromě období od června do srpna.
  • První den každého měsíce, kromě ledna, kdy má být druhý.

Vzor opakování je nejčastěji periodický, ale nemusí být. Vzor opakování může být kompletně popsán jako množina předdefinovaných dat a časů výskytu. RFC iCalendar definuje komponenty, jako jsou VEVENT nebo VTODO, které představují události nebo úkoly. Komponenty mohou mít vlastnosti jako datum a čas začátku, popis, místo, účastníci a opakování. Vzor opakování tedy normálně existuje jako vlastnost opakující se úlohy nebo události. Vlastnosti vzoru opakování definované iCalendar jsou:

  • DTSTART – počáteční datum a čas vzoru (také představuje první výskyt, pokud není výslovně vyloučen).
  • RRULE – určuje pravidlo opakování pro opakovací sadu.
  • RDATE – definuje seznam datumů a časů, které mají být zahrnuty do opakovací sady.
  • EXRULE – určuje pravidlo opakování pro výjimky z opakovací sady.
  • EXDATE – definuje seznam výjimek datumů a časů z opakovací sady.

Jediný povinný prvek je DTSTART a musí být pouze jeden. Všechny ostatní vlastnosti jsou volitelné a mohou být zadány vícekrát. Aspose.iCalendar přijímá řetězec ve formátu iCalendar a načte z něj vzor opakování do RecurrencePattern objekt. Řetězec může být úplný popis komponenty iCalendar (například kompletní VEVENT) nebo jen fragment obsahující pouze vzor opakování. Jakmile je vzor opakování načten do objektu RecurrencePattern, můžete:

  • Prozkoumat a upravit vzor programově pomocí metod a vlastností poskytovaných knihovnou Aspose.iCalendar.
  • Vygenerovat data/časy výskytů v zadaném časovém rozmezí.
  • Uložit vzor ve formátu iCalendar.

Následující úryvek kódu ukazuje, že část RRULE obsahuje pravidlo opakování.

Podívejte se na ukázkové vzory opakování pro ilustraci, jak vytvořit vzory opakování.

O modelu objektů Aspose.iCalendar

Jmenný prostor Aspose.iCalendar obsahuje všechny třídy poskytované komponentou Aspose.iCalendar. RecurrencePattern a RecurrenceRule jsou ústřední třídy Aspose.iCalendar a poskytují konkrétní implementace odpovídajících elementů RFC 2445.

Třída RecurrencePattern představuje celý vzor opakování. Nový vzor opakování můžete vytvořit od nuly pomocí výchozího konstruktoru nebo načíst existující vzor ve formátu iCalendar pomocí statické metody FromiCalendar. Třída RecurrenceRule představuje část RRULE nebo EXRULE vzoru opakování. RecurrenceRule vystavuje řadu vlastností, které přímo mapují na jejich protějšky ve standardu iCalendar. Například ByMonth mapuje na BYMONTH v iCalendar a tak dále. Prozkoumáním nebo nastavením hodnot vlastností RecurrenceRule můžete analyzovat nebo upravovat pravidlo opakování. Další informace a ukázky kódu najdete v části RecurrencePattern a RecurrenceRule v API Reference.

Ukázkové vzory

Tato sekce obsahuje následující témata:

  • Poslední den v měsíci.
  • Poslední pracovní den každého měsíce.
  • Poslední pondělí v roce.
  • Pátek prvního týdne ISO 8601 v roce.
  • První pátek v roce.

Poslední den v měsíci

Tyto příklady vzor opakování určuje poslední den v měsíci, každý měsíc.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

Podobně, pokud chcete výskyt v den před posledním dnem měsíce, použijte BYMONTHDAY=-2. Pokud zadáte BYMONTHDAY=31, pak podle standardu iCalendar nebude v měsících s méně než 31 dny žádný výskyt vygenerován.

Poslední pracovní den každého měsíce

Tyto příklady vzor opakování určuje poslední pracovní den v měsíci, každý měsíc. Pracovní dny jsou definovány jako dny, kdy pracujete. V Evropě jsou to například pondělí až pátek.

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

Výše uvedené pravidlo určuje všechny pracovní dny v měsíci a vybírá z nich poslední. Výsledkem je poslední pracovní den v měsíci.

Poslední pondělí v roce

Tento příklad vzor opakování určuje událost, která nastane poslední pondělí v roce.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Pátek prvního týdne ISO 8601 v roce

Tento příklad vzor opakování určuje pátek první týdne roku. Ve specifikaci ISO 8601 je první týden roku ten, který má alespoň čtyři dny. Když rok začne v sobotu, například, první týden je ten bezprostředně následující, počínaje pondělím 3. ledna.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

První pátek roku

Tento příklad vzor opakování určuje událost, která nastane první pátek v roce.

FREQ=YEARLY;BYDAY=1FR

V roce 1999 je například první pátek roku 1999/01/01, zatímco pátek první týdne podle ISO 8601 je 1999/01/08.