مقدمة عن أنماط التكرار

يمكنك التفكير في نمط التكرار كطريقة لوصف جدول معين. يحتوي على ما يكفي من المعلومات لبناء قائمة من الوقائع (تواريخ وأوقات) وفقًا للجدول المعطى. قد يحتوي نمط التكرار على قواعد تكرار تصف دورات تتجمع لتشكل النمط العام. بشكل عام، كلما كان نمط التكرار أكثر تعقيدًا، زادت عدد قواعد التكرار التي سيحتويها. يمكن أن تشمل أنماط التكرار استثناءات (ليس لتُخلط مع الاستثناءات التي تمثل أخطاء تحدث أثناء تنفيذ التطبيق). تضيف الاستثناءات أو تُزيل تواريخ حدوث من النمط الأصلي. يمكن تحديد الاستثناءات كوقائع صريحة أو كنمط بحد ذاته. أمثلة على أنماط التكرار مع الاستثناءات:

  • كل جمعة ثانية، ما عدا الفترة من يونيو إلى أغسطس.
  • اليوم الأول من كل شهر، ما عدا شهر يناير، حيث يجب أن يكون في اليوم الثاني.

أنماط التكرار عادةً ما تكون دورية، لكنها ليست مضطرّة لذلك. يمكن وصف نمط التكرار بالكامل كمجموعة من تواريخ وأوقات حدوث محددة مسبقًا. يعرّف RFC الخاص بـ iCalendar المكوّنات، مثل VEVENT أو VTODO التي تمثل أحداثًا أو مهامًا. يمكن للمكوّنات أن تحتوي على خصائص مثل تاريخ ووقت البداية، الوصف، الموقع، الحضور والتكرار. لذا، عادةً ما يكون نمط التكرار خاصية لمهمة متكررة أو حدث. خصائص نمط التكرار التي يعرّفها iCalendar هي:

  • DTSTART - تاريخ ووقت بدء النمط (يمثل أيضًا الحدوث الأول إذا لم يُستثنى صراحة).
  • RRULE - يحدد قاعدة تكرار لمجموعة التكرار.
  • RDATE - يحدد قائمة تواريخ وأوقات للإضافة إلى مجموعة التكرار.
  • EXRULE - يحدد قاعدة تكرار للاستثناءات من مجموعة التكرار.
  • EXDATE - يحدد قائمة استثناءات التاريخ والوقت من مجموعة التكرار.

فقط الخاصية 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.