Create Event Exception |
Post Reply |
Author | |
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
Posted: 31 January 2006 at 8:23am |
Hi, Its the same question I posted on the wrong forum, I am using the activeX control one. I wish to know, if I have a CalendarEvent "myEvent" with a recurrence object, and I wish to add an exception without the user clicking on the form. Normally, if I can get hold of an event of state (CalendarEventRecurrenceState.xtpCalendarRecurrenceOccurrence), I can make it as an exception. How will I get hold of such an instance of calendarEvent, or how can I replicate my MasterEvent so that I can make another event of state (CalendarEventRecurrenceState.xtpCalendarRecurrenceException) under this particular event. Thnx in advance for ur collaboration WaaZ |
|
sserge
Moderator Group Joined: 01 December 2004 Status: Offline Points: 1297 |
Post Options
Thanks(0)
|
Hi,
The idea is the folowing: - You have an instance of event occurrence (you can get it by HitTest or in another way). Recurrence state == xtpCalendarRecurrenceOccurrence   ; ; - Call pEvent.MakeAsRException() to change recurrence state (and store original occurrence Start/End times in separate members) - Than you may change other pEvent properties. - To commit your changes call pCalendar.DataProvider.ChangeEvent(pEvent) That's it. btw, if you enable "Show hidden members" option of the Object Browser, some other class members will be visible for you. They might sometimes be useful for extended operations. (please reply in this topic if needed) -- WBR, Serge |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
Thank you for the reply, it is really helpful. I have some other problem with this: What if at loading time, I am retrieving data from an external soucre (database or webservices) and that I need to create a CalendarEvent object with recurrences and exceptions. I will create an exception as follows since I have access to only the masterEvent: CalendarEvent masterEv = CalendarControl.DataProvider.CreateEvent(); Then I will clone this event so that I can create an Exception out of it as follows: CalendarEvent ExcepEv = masterEv.CloneEvent(); ExcepEv.MakeAsRException(); ExcepEv.Description = FromExternalSource.getField("description"); // and so on How do I attach ExcepEv with masterEv since it is not working. I am not having the exception displayed on the screen. I have tried : ExcepRv.MakeAsRExceptionEx(MasterEv.Id); which is not working either. Note: I do not have access to HitTest and I cannot get access to any CalendarEven object of type : Recurrence state == xtpCalendarRecurrenceOccurrence since I do not have access to the UI. I am at the initialization stage of the calendar with events date received from an external source. Thanks WaaZ |
|
sserge
Moderator Group Joined: 01 December 2004 Status: Offline Points: 1297 |
Post Options
Thanks(0)
|
Hi,
Note that MakeAsRExceptionEx() need pattern ID -- not master event ID. I'd also suggest you to look at some more info about Recurrences at the forum, especially http://forum.codejock.com/forum_posts.asp?TID=2929. -- WBR, Serge |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
I have done this also and have also put ChangeEvent(), but it does not change anything.. Is there some steps (some method calls) i need to make sure to have done so that it works? for instance, i have cloned the masterEvent itself, then MakeAsRExceptionEx() with masterEv.RecurrencePattern.Id. Thnks |
|
sserge
Moderator Group Joined: 01 December 2004 Status: Offline Points: 1297 |
Post Options
Thanks(0)
|
First steps:
- you have to create master event, - Set recurrence pattern properties, - update recurrence, - Add master event to data provider. Only after that exceptions could be processed. Ordering records by a Recurrence State is useful to add master event before exceptions. Other important step - set occurrence Start/End times before making an exception: pEvent.StartTime = pEventRS("RExceptionStartTimeOrig"); pEvent.EndTime = pEventRS("RExceptionEndTimeOrig"); pEvent.MakeAsRExceptionEx(pEventRS(" RecurrencePatternID")); Please try searching the forum for keyword 'recurrence' - you can find there a lot of useful information, not mentioned in my answer above. Does creating recurrence without exceptions work fine? If my advices above wouldn't help you, please send your loading procedure source code. -- WBR, Serge |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
Hi serge, I've tried this in my code and the result is that it is having an exception and its not overwriting the one that occurs that same day and same time. How do I make it overwrite a recurrence? CalendarEvent masterEv = CalendarControl.DataProvider.CreateEvent(); //DateTime tempdate = DateTime.Now;masterEv = CalendarControl.DataProvider.CreateEvent(); masterEv.Subject = "Master Ev";masterEv.Location = "Master Loca"; CalendarRecurrencePattern RecurEv = masterEv.CreateRecurrence(); DateTime dtStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 13, 8, 0); DateTime dtRecurencePattern_Start = new DateTime(DateTime.Now.Ticks); // durationRecurEv.StartTime = DateTime.Now;RecurEv.DurationMinutes = 60; // perioddtRecurencePattern_Start = DateTime.Now.AddDays(-4);RecurEv.StartDate = dtRecurencePattern_Start; dtRecurencePattern_Start = DateTime.Now.AddDays(10);RecurEv.EndDate = dtRecurencePattern_Start; RecurEv.Options.RecurrenceType = CalendarRecurrenceType.xtpCalendarRecurrenceDaily;RecurEv.Options.DailyEveryWeekDayOnly = false;RecurEv.Options.DailyIntervalDays = 1; masterEv.UpdateRecurrence(RecurEv); CalendarControl.DataProvider.AddEvent(masterEv); /************/ /************/ CalendarEvent excepEv = CalendarControl.DataProvider.CreateEventEx(masterEv.Id);excepEv.StartTime = DateTime.Now;excepEv.EndTime = DateTime.Now.AddMinutes(60);excepEv.Subject = "Excep Ev";excepEv.MakeAsRExceptionEx(RecurEv.Id); CalendarControl.DataProvider.AddEvent(excepEv); CalendarControl.DataProvider.ChangeEvent(masterEv); isNewEventfromUi = false;
............. Thnx |
|
sserge
Moderator Group Joined: 01 December 2004 Status: Offline Points: 1297 |
Post Options
Thanks(0)
|
Hi,
Some notes below: 1. You don't need CreateEventEx here. CalendarEvent excepEv = CalendarControl.DataProvider.CreateEventEx(masterEv.Id); Better to use CreateEvent. 2. This call adds exception. CalendarControl.DataProvider.AddEvent(excepEv); But this call kills all your exceptions: CalendarControl.DataProvider.ChangeEvent(masterEv); Are you sure you need this call??? ----- Master event contains recurrence pattern object. Pattern contains a collection of exceptions (which is empty in the beginning). After call AddEvent(masterEv) data provider store a copy of master event object (with Pattern). When you call AddEvent(excepEv) - data provider finds master event and adds exception to it's pattern collection of exceptions. After call ChangeEvent(masterEv) - data provider updates it's copy of master event. But your masterEv object instance has no exceptions in it's collection. 3. Using DateTime.Now does not let you debug this peace of code. I mean it will return different values for different lines. -- WBR, Serge |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
Please, can I have a sample that demonstrates how this can be achieved. Thanks WaaZ |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
The problem with the code is actually not to do with the time, since I've had a temporary DateTime variable to make sure that the same time is used for the recurrencePattern and the exception event. The actual problem in the code is that MakeAsRExceptionEx does not put the event in the collection in masterEv.RecurrencePattern.Exceptions. This means that the provided code result in masterEv not having an instance of EventEx in the collection of its exceptions. the code: ******************************* CalendarEvent masterEv = CalendarControl.DataProvider.CreateEvent(); //DateTime tempdate = DateTime.Now; masterEv = CalendarControl.DataProvider.CreateEvent(); masterEv.Subject = "Master Ev";masterEv.Location = "Master Loca"; CalendarRecurrencePattern RecurEv = masterEv.CreateRecurrence(); DateTime dtStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 13, 8, 0); DateTime dtRecurencePattern_Start = new DateTime(DateTime.Now.Ticks); // duration // RecurEv.StartTime = DateTime.Now;RecurEv.DurationMinutes = 60; // perioddtRecurencePattern_Start = DateTime.Now.AddDays(-4);RecurEv.StartDate = dtRecurencePattern_Start; dtRecurencePattern_Start = DateTime.Now.AddDays(10);RecurEv.StartTime = dtRecurencePattern_Start; RecurEv.EndDate = dtRecurencePattern_Start; RecurEv.Options.RecurrenceType = CalendarRecurrenceType.xtpCalendarRecurrenceDaily;RecurEv.Options.DailyEveryWeekDayOnly = false;RecurEv.Options.DailyIntervalDays = 1; masterEv.UpdateRecurrence(RecurEv); CalendarControl.DataProvider.AddEvent(masterEv); /************/ /************/ CalendarEvent excepEv = CalendarControl.DataProvider.CreateEventEx(masterEv.Id);excepEv.StartTime = dtRecurencePattern_Start.AddDays(-10); excepEv.EndTime = dtRecurencePattern_Start.AddDays(-10).AddMinutes(60); excepEv.Subject = "Excep Ev";excepEv.MakeAsRExceptionEx(RecurEv.Id); CalendarControl.DataProvider.AddEvent(excepEv); CalendarControl.DataProvider.ChangeEvent(masterEv);
******************************************* I've also tried playing around with the ChangeEvent, AddEvent and CreateEventEx and the above code is the one that works to the closest. Thnks WaaZ |
|
sserge
Moderator Group Joined: 01 December 2004 Status: Offline Points: 1297 |
Post Options
Thanks(0)
|
Hi WaaZ,
Some notes about your code. // Better to use CreateEvent here //CalendarEvent excepEv = CalendarControl.DataProvider.CreateEventEx(masterEv.Id); CalendarEvent excepEv = CalendarControl.DataProvider.CreateEvent(); // change status and copy dates only excepEv.MakeAsRExceptionEx(RecurEv.Id); // use ChangeEvent instead of AddEvent. //CalendarControl.DataProvider.AddEvent(excepEv); // This call add the event in the collection in // masterEv.RecurrencePattern.Exceptions. // (I mean DataProvider internal copy of masterEv) CalendarControl.DataProvider.ChangeEvent(excepEv); !!! // comment this line please; // this call kill your exception! // CalendarControl.DataProvider.ChangeEvent(masterEv); // update your instance masterEv = CalendarControl.DataProvider.GetEvent(masterEv.Id); //and check there. _________________ Below is a sample for you. Add these lines to standard Calendar VB sample application to the end of Form_Load() handler for frmMain. '--------------------------------------------- Dim dtTooday As Date dtTooday = Date Dim masterEv As CalendarEvent Dim recPattern As CalendarRecurrencePattern Set masterEv = CalendarControl.DataProvider.CreateEvent Set recPattern = masterEv.CreateRecurrence masterEv.Subject = "Recurrence for WaaZ" recPattern.StartTime = #3:00:00 PM# recPattern.DurationMinutes = 60 recPattern.StartDate = dtTooday recPattern.EndAfterOccurrences = 10 recPattern.Options.RecurrenceType = xtpCalendarRecurrenceDaily recPattern.Options.DailyIntervalDays = 1 recPattern.Options.DailyEveryWeekDayOnly = False masterEv.UpdateRecurrence recPattern CalendarControl.DataProvider.AddEvent masterEv '************************** Dim excepEv As CalendarEvent Set excepEv = CalendarControl.DataProvider.CreateEvent() ' original times excepEv.StartTime = DateAdd("d", 1, dtTooday) + #3:00:00 PM# excepEv.EndTime = DateAdd("n", 60, excepEv.StartTime) excepEv.MakeAsRExceptionEx recPattern.Id ' new times excepEv.StartTime = DateAdd("d", 1, dtTooday) + #2:00:00 PM# excepEv.EndTime = DateAdd("n", 260, excepEv.StartTime) excepEv.Subject = "Excep Ev (for WaaZ)" CalendarControl.DataProvider.ChangeEvent excepEv CalendarControl.Populate CalendarControl.RedrawControl _______________ -- WBR, Serge |
|
WaaZ
Senior Member Joined: 31 January 2006 Location: United Kingdom Status: Offline Points: 103 |
Post Options
Thanks(0)
|
Thnks. it works now. We are all looking foward for version 10. Thnks WaaZ |
|
Post Reply | |
Tweet
|
Forum Jump | Forum Permissions You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |