Recurrence Problems

We’ve encountered additional problems when saving recurring events from MapiCalendar items as .ics files. In a previous post I showed you examples where recurring events created .ics files that would result in null pointer errors when the files are read back (see url below)



Problem with Appointment.load when reading .ics files created by Aspose.mail 2.2.0.



This time, the problems are



1. Recurring rules are not correct for some of the custom meeting recurrences.

2. Exceptions to the recurring meetings are not being generated and stored in the .ics files.



To illustrate the problem, we’ve created six sample recurring events. Two behave as expected. Three fail due to problem 1, and one fails due to problem 2.



Attached is an excel file that compares the six cases. For each case, we compare .ics files from different sources.



1. Created by iCal on the Mac

2. Created by Outlook on Windows

3. Created by Aspose after reading the PST



Files being transferred.



1. “Recurs in PST.pst” is a PST file with 6 recurring appointments

2. “Test Recurs from Outlook” is a folder with 6 .ics files created by Outlook from the appointments in the PST file.

3. “Test Recurs from iCal” is folder with 6 .ics files created by iCal (setting up the same rules and conditions as already set up in the PST file)

4. “Test Recurs from Aspose” folder with 6 .ics files created using aspose.email to extract them.

5. “PSTExtractCalendar.java is java program to extract the .ics files from PST files.

6. “Recur Compare.xlsx” is a spreadsheet comparing the .ics files

7. “Problem Description.docx” is a document containing formatted version of this text.



Analysis



Looking at the recurrence rules generated by each of the three creators of the .ics files, you can see that something is wrong with the Aspose generation algorithms.



Problem 1. Meeting takes place every other month on 3rd Tuesday of the month.



iCal: FREQ=MONTHLY;COUNT=10;INTERVAL=2;BYDAY=3TU

Outlook: FREQ=MONTHLY;COUNT=10;INTERVAL=2;BYDAY=TU;BYSETPOS=3

Aspose: FREQ=MONTHLY;COUNT=10;INTERVAL=2;BYDAY=TU



As you can see by the difference between the aspose rule and the other two, there is more than one way to make the rule correct. The incorrect rule string generated by Aspose causes parsers to assume that the meeting is every Tuesday in the month.



Problem 2. Meeting takes place every three months on the 2nd Friday of the month.



iCal: FREQ=MONTHLY;COUNT=10;INTERVAL=3;BYDAY=2FR

Outlook: FREQ=MONTHLY;COUNT=10;INTERVAL=3;BYDAY=FR;BYSETPOS=2

Aspose: FREQ=MONTHLY;COUNT=10;INTERVAL=3;BYDAY=FR



I suspect that the failure here as the same root cause as Problem 1.



Problem 3. Meeting takes place every year on the 3rd Thursday in August.



iCal: FREQ=YEARLY;COUNT=10;INTERVAL=1;BYMONTH=8;BYDAY=3TH

Outlook: FREQ=YEARLY;COUNT=10;BYMONTH=8;BYDAY=TH;BYSETPOS=3

Aspose: FREQ=YEARLY;COUNT=10;INTERVAL=1;BYDAY=TH



The aspose rule here is missing the reference to month 8.





Problem 4. Meeting takes place every week but week 2 has different start time and week 3 has different location.



The RRule is correct in all cases, but the aspose .ics file does not have the additional entries for the exceptions. Text from .ics files included below.



Aspose generated .ics file:

BEGIN:VCALENDAR

VERSION:2.0

METHOD:REQUEST

PRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN

BEGIN:VEVENT

DTSTAMP:20121015T091345Z

DESCRIPTION:Weekly recurring meeting for ten weeks, but second week is moved in time.

\n

DTSTART:20110818T180000

DTEND:20110818T183000

SEQUENCE:0

SUMMARY:Boston Pops Concert

TRANSP:OPAQUE

UID:040000008200e00074c5b7101a82e00800000000a0cff42b845ecc01000000000000000010000000e45004caa45eba48a0c83a7deb93d788

RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=10;BYDAY=TH

END:VEVENT

BEGIN:VTIMEZONE

TZID:(GMT-08:00) Pacific Time (US & Canada)

BEGIN:DAYLIGHT

TZOFFSETFROM:-0800

TZOFFSETTO:-0700

END:DAYLIGHT

BEGIN:STANDARD

DTSTART:16011104T020000

TZNAME:Standard Time

TZOFFSETFROM:-0700

TZOFFSETTO:-0800

RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11

DTSTART:16010311T020000

TZNAME:Daylight Saving Time

RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3

END:STANDARD

END:VTIMEZONE

END:VCALENDAR









Outlook generated .ics file:

BEGIN:VCALENDAR

PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN

VERSION:2.0

METHOD:PUBLISH

X-MS-OLK-FORCEINSPECTOROPEN:TRUE

BEGIN:VTIMEZONE

TZID:Pacific Standard Time

BEGIN:STANDARD

DTSTART:16011104T020000

RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11

TZOFFSETFROM:-0700

TZOFFSETTO:-0800

END:STANDARD

BEGIN:DAYLIGHT

DTSTART:16010311T020000

RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3

TZOFFSETFROM:-0800

TZOFFSETTO:-0700

END:DAYLIGHT

END:VTIMEZONE

BEGIN:VEVENT

CLASS:PUBLIC

CREATED:20121013T195436Z

DESCRIPTION:Weekly recurring meeting for ten weeks, but second week is mov

ed in time.\n

DTEND;TZID=“Pacific Standard Time”:20110818T183000

DTSTAMP:20121013T195436Z

DTSTART;TZID=“Pacific Standard Time”:20110818T180000

LAST-MODIFIED:20121013T195436Z

PRIORITY:5

RRULE:FREQ=WEEKLY;COUNT=10;BYDAY=TH

SEQUENCE:0

SUMMARY;LANGUAGE=en-us:Boston Pops Concert

TRANSP:OPAQUE

UID:040000008200E00074C5B7101A82E00800000000A0CFF42B845ECC01000000000000000

010000000E45004CAA45EBA48A0C83A7DEB93D788

X-ALT-DESC;FMTTYPE=text/html:
N">\n\n\n\n\n\n\n\n\n

Weekly recurring meeting for ten weeks, but second week is moved in t

ime.

\n\n\n

X-MICROSOFT-CDO-BUSYSTATUS:BUSY

X-MICROSOFT-CDO-IMPORTANCE:1

X-MICROSOFT-DISALLOW-COUNTER:FALSE

X-MS-OLK-ALLOWEXTERNCHECK:TRUE

X-MS-OLK-AUTOSTARTCHECK:FALSE

X-MS-OLK-CONFTYPE:0

END:VEVENT

BEGIN:VEVENT

CLASS:PUBLIC

CREATED:20121013T195436Z

DESCRIPTION:Weekly recurring meeting for ten weeks, but second week is mov

ed in time.\n\nMeeting starts early this week!\n

DTEND:20110826T003000Z

DTSTAMP:20121013T195436Z

DTSTART:20110826T000000Z

LAST-MODIFIED:20121013T195436Z

RECURRENCE-ID:20110826T010000Z

SEQUENCE:0

TRANSP:OPAQUE

UID:040000008200E00074C5B7101A82E00800000000A0CFF42B845ECC01000000000000000

010000000E45004CAA45EBA48A0C83A7DEB93D788

X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
N">\n\n\n\n\n\n\n\n\n

Weekly recurring meeting for ten weeks, but second week is moved in t

ime.

\n\n

<SPAN LANG=

“en-us”>Meeting starts early this week!

\n\n\n

X-MICROSOFT-CDO-BUSYSTATUS:BUSY

END:VEVENT

BEGIN:VEVENT

CLASS:PUBLIC

CREATED:20121013T195436Z

DTEND:20110902T013000Z

DTSTAMP:20121013T195436Z

DTSTART:20110902T010000Z

LAST-MODIFIED:20121013T195436Z

LOCATION:Tom Shannon’s garage

RECURRENCE-ID:20110902T010000Z

SEQUENCE:0

TRANSP:OPAQUE

UID:040000008200E00074C5B7101A82E00800000000A0CFF42B845ECC01000000000000000

010000000E45004CAA45EBA48A0C83A7DEB93D788

X-MICROSOFT-CDO-BUSYSTATUS:BUSY

X-MS-OLK-AUTOFILLLOCATION:FALSE

END:VEVENT

END:VCALENDAR

Hi Steven,


I must appreciate your efforts to provide the detailed information as per your observations.

We would request you to please spare us some time to analyze this issue. We will soon share our findings with you and also log it for further investigation by our development team. We are thankful to you for your patience in this regard.

Hi Steven,


We are sorry for inconvenience caused to you.

We have analyzed all the information provided by you and re-produced the issue here. We have passed all the information to our development team for further analysis and will write back you here on the forum as soon as some feedback is received from the development team.

This issue is logged in our issue tracking system as NETWRKJAVA-33199.

The issues you have found earlier (filed as NETWORKNET-33540) have been fixed in this update.


This message was posted using Notification2Forum from Downloads module by aspose.notifier.