Изтриване на Ical събитие не работи

Създавам динамично ical събитие в моето уеб приложение и когато някой отмени срещата в приложението, ние генерираме *.ics файл за изтриване на ical събитие към техния имейл, за да премахнем събитието в неговия календар.

Създаването работи перфектно, но когато се опитаме да изтрием срещата, която сме създали, това не го премахва от календара

Създаване на код на събитие Ical:

 string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "PRODID:-//dev.com//iCal//EN",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "X-FUNAMBOL-ALLDAY:0",
      "METHOD:REQUEST",
      "BEGIN:VEVENT",
      "UID:" + Args.EventUID, 
      "SEQUENCE:1",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "ORGANIZER: [email protected]",
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "STATUS:CONFIRMED",
      "TRANSP:OPAQUE",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "END:VEVENT", 
      "END:VCALENDAR" 
 }; 

Създаването на събитие работи перфектно на iphone/android/outlook

Изтриване на част от събитието:

    string[] contents = { 
      "BEGIN:VCALENDAR",
      "VERSION:2.0",
      "METHOD:CANCEL",
      "X-WR-CALNAME:development",
      "X-WR-RELCALID:928C8448-048A-4aa2-BE27-A920773AF3DC",
      "PRODID:-//dev.com//iCal//EN",
      "X-FUNAMBOL-ALLDAY:0",
      "BEGIN:VEVENT",                                
      "UID:" + Args.EventUID,
      "SEQUENCE:2",
      "DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"), 
      "LOCATION: " + Args.EventLocation, 
      "DESCRIPTION;ENCODING=ESCAPED-CHAR:" + Args.EventName,
      "SUMMARY:" + Args.EventDescription, 
      "ORGANIZER: [email protected]",
      "PRIORITY:" + Args.EventPriority.ToString(), 
      "STATUS:CANCELLED",
      "TRANSP:OPAQUE",
      "END:VEVENT", 
      "END:VCALENDAR" 
  };

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

ical UID при създаване и изтриване са еднакви.


person Venkata K. C. Tata    schedule 12.08.2014    source източник
comment
знаете ли, че има рамка за това? никога не сме имали проблеми, каквито са: sourceforge.net/projects/dday-ical   -  person    schedule 20.08.2014


Отговори (3)


Първо, разгледайте внимателно UID. Знам, че казвате, че са еднакви, но проверете! Бяло пространство? случай?

След това поставете PRODID на втория ред, веднага след BEGIN (Игнорирайте валидаторите, когато ви кажат да поставите VERSION на втория ред.) Това звучи тривиално, полето дори не се използва, но особено Outlook е абсурдно придирчив. Копирайте работещ пример. Тествайте и ми кажете дали греша.

След това SEQUENCE се индексира от 0. Клиентите могат да интерпретират SEQUENCE:1 като актуализация и да се чудят къде е оригиналната покана.

След това проверете структурата и mime типа заглавки на вашите имейли. Получих най-добри резултати, като изпратих прост имейл от една част с Тип съдържание: текст/календар; method="[REQUEST/CANCEL]" в MIME заглавката.

Все още не работи? Опитайте да добавите елемент ATTENDEE, с изискване на участие, rsvp true и т.н., повтаряйки имейл адреса на получателя.

Все още има проблеми? Използвайте онлайн валидаторите на Icalendar, за да проверите резултата си, но също така копирайте точно работещ пример. Изпратете си покана, след това я отменете от gmail и/или outlook. Всичко е важно - структурата на съобщението, подредбата на полетата в Icalendar, MIME хедърите на имейла. Изпращането до GMail ви позволява да видите точно какво сте получили, чрез опцията gmail show original.

Забелязвам, че не правите нищо за опаковане. Ical редовете са ограничени до 75 знака, не много, а препълващите редове трябва да започват с интервал. Валидатор бързо ще ви каже.

person bbsimonbb    schedule 20.08.2014

Разликата може също да бъде дали приложението за календар се е „абонирало“ или „импортирало“ ics файла? Абонираните събития трябва да се актуализират, импортираните обикновено може да не, тъй като потребителят може да ги е променил - може да се различават между приложенията за календар.

person anmari    schedule 24.08.2014

Опитайте да използвате PUBLISH като METHOD и 0 като SEQUENCE за изпращане и 1 като SEQUENCE за изтриване.

Пример за подаване:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:0",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CONFIRMED",
"END:VEVENT",
"END:VCALENDAR"
};

Пример за изтриване:

string[] contents = {
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//site.domain//iCal//EN",
"METHOD:CANCEL",
"BEGIN:VEVENT",
"UID:" + Args.EventUID,
"SEQUENCE:1",
"DTSTART:" + Args.EventStartTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"DTEND:" +  Args.EventEndTime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"),
"SUMMARY:" + Args.EventDescription,
"STATUS:CANCELLED",
"END:VEVENT",
"END:VCALENDAR"
};
person ingroxd    schedule 12.11.2014