معرفی الگوهای تکرار
میتوانید یک recurrence pattern را بهعنوان روشی برای توصیف برنامه زمانی خاص درنظر بگیرید. این الگو به اندازه کافی اطلاعات دارد تا فهرستی از وقوعها (تاریخها و زمانها) را بر پایه برنامه دادهشده ایجاد کند. یک الگوی تکرار ممکن است شامل قوانین تکرار باشد که چرخههایی را توصیف میکنند که با هم ترکیب میشوند تا الگوی کلی را تشکیل دهند. بهطور کلی، هر چه الگوی تکرار پیچیدهتر باشد، قوانین تکرار بیشتری خواهد داشت. الگوهای تکرار میتوانند شامل exceptions باشند (بهاشتباه با استثناهایی که نشانگر خطاهای رخ داده در زمان اجرا هستند، مخلوط نشوند). استثناها تاریخهای وقوع را به الگوی اصلی اضافه یا حذف میکنند. استثناها میتوانند بهصورت وقوعهای صریح یا بهعنوان یک الگو خودشان مشخص شوند. مثالهایی از الگوهای تکرار با استثناها:
- هر دومین جمعه، بهجز ماههای ژوئن تا آگوست.
- اولین روز هر ماه، بهجز ژانویه که باید در روز دوم باشد.
الگوهای تکرار اغلب دورهای هستند، اما لازم نیست. یک الگوی تکرار میتواند کاملاً به عنوان مجموعهای از تاریخها و زمانهای پیشتعریفشده توصیف شود. RFC iCalendar components را تعریف میکند، مانند 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، اولین هفتهٔ سال هفتهای است که حداقل چهار روز دارد. بهعنوان مثال، زمانی که سال با شنبه شروع میشود، هفتهٔ ۱ همان هفتهای است که بلافاصله پس از آن، از دوشنبهٔ ۳ ژانویه آغاز میشود.
FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR
اولین جمعهٔ سال
این نمونه الگوی تکرار یک رویداد را که در اولین جمعهٔ سال اتفاق میافتد، مشخص میکند.
FREQ=YEARLY;BYDAY=1FR
بهعنوان مثال در سال 1999، اولین جمعهٔ سال برابر است با 1999/01/01، در حالی که جمعهٔ اولین هفتهٔ ISO 8601 برابر است با 1999/01/08.