2017-02-23 14 views
0

Ich habe eine C# -Anwendung, in der ich einige "erweiterte" wiederkehrende Ereignisse erstellen muss.So erstellen Sie erweiterte wiederkehrende Ereignisse

Zum Beispiel muss ich jeden Monat, Mittwoch und Sonntag jedes Jahr im Juni, Juli und August eine Aufgabe erstellen.

Oder jede zweite Woche das ganze Jahr hindurch möchte ich jeden Montagmorgen, jeden Montagabend und jeden Freitagmittag eine Aufgabe erstellen, aber nicht im Dezember.

Das mag albern klingen, aber es spiegelt einige Bedürfnisse in der realen Welt wider.

So ist das überhaupt möglich? Ich kann anscheinend keine Werkzeuge oder Technologien finden, die diese Art von Wiederholung unterstützen, ohne sie in mehreren Fällen aufzuteilen.

+1

Verwenden Sie die Betriebssysteme Taskplaner? oder schau mal @ https://www.quartz-scheduler.net/features.html –

+0

Danke für deinen Kommentar. Soweit ich sehen kann, unterstützt quartz.net die Wiederholungsfunktion, die ich oben angegeben habe. – Farsen

Antwort

0

Das ist überhaupt nicht albern :). Ich arbeite auch am selben. Ich verwende RRULE-Eigenschaft von iCalendar, um diese Funktionalität zu erreichen. iCalendar ist eine Standardmethode zum Übertragen von Kalenderinformationen zwischen Computersystemen. Sie können http://www.kanzaki.com/docs/ical/rrule.html und https://icalendar.org/ durchgehen, um das gesamte wiederkehrende Szenario (täglich, wöchentlich, monatlich, jährlich) zu verstehen.

-Code für einzelne und wiederkehrendes Ereignis

iCal Eigenschaften mit Hilfe der Erstellung
public string MakeRecurringEvent(AppointmentEvent message) 
    { 
    string startDay = "VALUE=DATE:" + GetFormatedDate(message.StartDate) + "T" + GetFormattedTime(message.StartTime); 
    string endDay = "VALUE=DATE:" + GetFormatedDate(message.StartDate) + "T" + GetFormattedTime(message.EndTime); 

    var organizer = "Listen To Customer Site Admin"; 
    var attendee = message.Attendee; 
    string filePath = string.Empty; 
    string path = HttpContext.Current.Server.MapPath(@"..\Content\Calendar\iCal\"); 
    filePath = path + message.Subject + ".ics"; 
    writer = new StreamWriter(filePath); 

    writer.WriteLine("BEGIN:VCALENDAR"); 
    writer.WriteLine("VERSION:2.0"); 
    writer.WriteLine("METHOD:REQUEST"); 
    writer.WriteLine("PRODID:-//hacksw/handcal//NONSGML v1.0//EN"); 
    writer.WriteLine("BEGIN:VEVENT");  
    writer.WriteLine("ORGANIZER;CN=\"{0}\":MAILTO:{1}", organizer, message.Organizer); 
    string[] arrAttendees = message.Attendee.Split(','); 
    for (int countAtt = 0; countAtt < arrAttendees.Length - 1; countAtt++) 
    { 
     writer.WriteLine("ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=\"{0}\":MAILTO:{1}", attendee, 
     arrAttendees[countAtt], arrAttendees[countAtt]); 
    }   
    writer.WriteLine("DTSTART;" + startDay); 
    writer.WriteLine("DTEND;" + endDay); 
    if (message.IsRecurring) 
    { 
     switch (message.Frequency) 
     { 
      case "Daily": 
       writer.WriteLine("RRULE:FREQ=DAILY;UNTIL={0}", GetFormatedDate(message.EndDate)); 
       break; 
      case "Weekly": 
       writer.WriteLine("RRULE:FREQ=WEEKLY;UNTIL={0}", GetFormatedDate(message.EndDate)); 
       break; 
      case "Monthly1": 
       writer.WriteLine("RRULE:FREQ=MONTHLY;INTERVAL={0};UNTIL={1}",message.RecurranceMonth, GetFormatedDate(message.EndDate)); 
       break; 
      case "Monthly2": 
       writer.WriteLine("RRULE;TZID=America/New_York:FREQ=MONTHLY;UNTIL={0};BYDAY=\"{1}\"", GetFormatedDate(message.EndDate)+"T"+ GetFormattedTime(message.StartTime), "1FR");     
       break; 
     } 

    } 


    writer.WriteLine("LOCATION:" + message.Location); 
    writer.WriteLine("UID:{0}", Guid.NewGuid()); 
    writer.WriteLine("DESCRIPTION", message.From); 
    writer.WriteLine("SUMMARY:" + message.Subject);  
    writer.WriteLine("ORANIZER:MAILTO:{0}", message.Organizer);   
    writer.WriteLine("X-ALT-DESC:FMTTYPE=text/html:{0}", message.Body); 
    writer.WriteLine("END:VEVENT"); 
    writer.WriteLine("END:VCALENDAR"); 
    writer.Close(); 
    return filePath; 
} 
+0

Danke für deine Antwort :) die RRULE scheint ziemlich flexibel. Aber haben Sie eine Benutzeroberfläche zum Erstellen solcher erweiterten Regeln erstellt? – Farsen

+0

Ja. Ich habe Bildschirm für das selbe verursacht und ich speichere auch einzelnes und wiederkehrendes Ereignis in der Datenbank meiner Anwendung. Ich habe Wiederholungsmusterreferenz vom Aussichtskalenderereignis/-termin genommen. Ich poste ein Wiederholungsmuster, das ich für meine Anwendung erstellt habe. – manika

Verwandte Themen