Въведение в модели на повтаряне

Можете да разглеждате повтарящ модел като начин за описание на конкретен график. Той съдържа точно достатъчно информация, за да се изгради списък с появявания (дати и часове) според зададения график. Повтарящият се модел може да съдържа правила за повторение, които описват цикли, комбинирани в общия модел. Като цяло, колкото по-сложен е моделът, толкова повече правила за повторение ще съдържа. Повтарящите се модели могат да включват изключения (да не се бърка с изключения, представляващи грешки по време на изпълнение на приложението). Изключенията добавят или премахват дати на появяване към оригиналния модел. Изключенията могат да бъдат зададени като явни появявания или като сам модел. Примери за повтарящи се модели с изключения:

  • Всеки втори петък, освен от юни до август.
  • Първият ден от всеки месец, освен януари, когато трябва да бъде на 2‑рият.

Повтарящите се модели обикновено са периодични, но не е задължително. Повтарящият се модел може напълно да се опише като набор от предварително дефинирани дати и часове на появяване. RFC‑ът iCalendar определя компоненти, като VEVENT или VTODO, които представляват събития или задачи. Компонентите могат да имат свойства като начална дата и час, описание, местоположение, участници и повторение. Следователно, повтарящият се модел обикновено съществува като свойство на повторяемо задание или събитие. Свойства на повтарящия се модел, дефинирани от iCalendar, са:

  • DTSTART – началната дата и час на модела (също така представлява първото появяване, ако не е изрично изключено).
  • RRULE – задава правило за повторение на набор от повтаряния.
  • RDATE – определя списък от дати и часове, включени в набор от повтаряния.
  • EXRULE – задава правило за повторение на изключения от набор от повтаряния.
  • EXDATE – определя списък от дати и часове, изключени от набор от повтаряния.

Само DTSTART е задължителен и трябва да има само един DTSTART. Всички останали свойства са незадължителни и могат да се задават повече от веднъж. Aspose.iCalendar приема низ във формат iCalendar и чете модела на повтаряне в RecurrencePattern обект. Низът може да бъде пълно описание на iCalendar компонент (например цял VEVENT) или просто фрагмент, съдържащ само модела на повтаряне. След като моделът на повтаряне бъде зареден в обект RecurrencePattern, можете:

  • Изследвайте и променете модела програмно чрез методи и свойства, предоставени от Aspose.iCalendar
  • Генерирайте дати/часове на появяване в определен диапазон от дати.
  • Запазете модела във формат iCalendar.

Следният фрагмент от код показва частта RRULE, която съдържа правилото за повтаряне.

Вижте примерни повтарящи се модели за илюстрации как да се създадат повтарящи се модели.

За обектния модел Aspose.iCalendar

Именуваното пространство Aspose.iCalendar съдържа всички класове, предоставени от компонента Aspose.iCalendar. RecurrencePattern и RecurrenceRule са централните класове на Aspose.iCalendar и предоставят конкретни реализации на съответните елементи от RFC 2445.

Класът RecurrencePattern представлява целия повтарящ се модел. Можете да създадете нов модел от нулата, използвайки конструктора по подразбиране, или да заредите съществуващ модел в iCalendar формат чрез статичния метод FromiCalendar. Класът RecurrenceRule представлява частта RRULE или EXRULE от повтарящия се модел. RecurrenceRule предоставя редица свойства, които директно съвпадат с еквивалентите им в стандарта iCalendar. Например, ByMonth съответства на BYMONTH в iCalendar и т.н. Чрез преглеждане или задаване на стойностите на свойствата на RecurrenceRule можете да анализирате или промените правило за повторение. За повече информация и примерен код, вижте RecurrencePattern и RecurrenceRule в API справочника.

Примерни модели

Този раздел включва следните теми:

  • Последният ден от месеца.
  • Последният работен ден от всеки месец.
  • Последният понеделник от годината.
  • Петък от първата ISO 8601 седмица от годината.
  • Първият петък от годината.

Последният ден от месеца

Тези примери повтарящ се модел указва последния ден от месеца, всеки месец.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

По същия начин, ако искате появяване в ден преди последния ден от месеца, използвайте BYMONTHDAY=-2. Ако зададете BYMONTHDAY=31, то според стандарта iCalendar няма да се генерира появяване в месеците, които имат по-малко от 31 дни.

Последният работен ден от всеки месец

Тези примери повтарящ се модел указва последния работен ден от месеца, всеки месец. Работните дни се дефинират като дните, в които работите. В Европа, например, работните дни обикновено са от понеделник до петък.

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

Горното правило указва всички работни дни от месец и избира последния от тях. Краен резултат е последният работен ден в месеца.

Последният понеделник от годината

Този пример повтарящ се модел указва събитие, което се случва последния понеделник от годината.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Петък от първата ISO 8601 седмица от годината

Този пример повтарящ се модел указва петъка от първата седмица на годината. В спецификацията ISO 8601, първата седмица от годината е тази, която съдържа поне четири дни. Когато годината започва в събота, например, седмица 1 е следващата седмица, започваща в понеделник, 3 януари.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

Първият петък от годината

Този пример повтарящ се модел указва събитие, което се случва първия петък от годината.

FREQ=YEARLY;BYDAY=1FR

През 1999 г., например, първият петък от годината е 1999/01/01, докато петъкът от първата ISO 8601 седмица е 1999/01/08.