PutCalendarEvent Method

Adds a calendar resource at the specified ResourceURI using the CalDAV PUT method.

Syntax

ANSI (Cross Platform)
int PutCalendarEvent(const char* lpszResourceURI);

Unicode (Windows)
INT PutCalendarEvent(LPCWSTR lpszResourceURI);
- (void)putCalendarEvent:(NSString*)resourceURI;
#define MID_CALDAV_PUTCALENDAREVENT 18

IPWORKS_EXTERNAL int IPWORKS_CALL IPWorks_CalDAV_Do(void *lpObj, int methid, int cparam, void *param[], int cbparam[], int64 *lpllVal);

Remarks

This method adds a new event to the calendar collection at the specified ResourceURI. The ResourceURI must be a fully qualified URL to the location on the CalDAV server to which this event will be saved. If the ResourceURI already exists, the event at that URI will be overwritten.

NOTE: Some CalDAV servers (Yahoo for example) require that the UID and the filename portion of the URI match. For example, if the UID is "hello_world" then the ResourceURI parameter of the PutCalendarEvent should be "https://caldav.calendar.yahoo.com/dav/user_name/Calendar/My_Calendar/hello_world.ics". If the UID and filename portion of the URI do not match, the Yahoo CalDAV server will return a "302 Found" response indicating that the requested resource resides under a different URI. (Meaning the event was not added to the calendar)

The following properties are used when creating a request with PutCalendarEvent or ExportICS, and will be filled after calling GetCalendarEvent or ImportICS. These will also be available from inside the EventDetails event, which is fired for each event received from the CalDAV server in response to a GetCalendarReport.

There is no standard format for resource URIs. Google for instance, uses "https://www.google.com/calendar/dav/" plus your email address to access the default calendar. So "https://www.google.com/calendar/dav/username@gmail.com/" is the base URI for the default calendar. If you have multiple calendars, replace the email address portion above with the Id of the calendar, plus "@group.calendar.google.com/". For instance: "https://www.google.com/calendar/dav/ev3nkr4ua83jej7q32oumn5eeo@group.calendar.google.com/". For Google, calendar events are stored in the "/events/" path. To retrieve a report on a calendar, you'd add "/events/" to one of the above paths. For example:

  CalDAV.GetCalendarReport("https://www.google.com/calendar/dav/username@gmail.com/events/");
Leaving the "/events/" out of the URI will result in an HTTP protocol error: 405 Method not allowed.

To add or retrieve an event, add the UID of the event you're creating or retrieving plus ".ics" to the path. Note that when putting an event with the PutCalendarEvent method, if the resourceURI and the UID do not match Google will create the event using the UID stored in the UID property. The actual location of will be newly added event will be returned in a "Location" header. This is the resource URI you must use to retrieve the event with GetCalendarEvent. For example:

  CalDAV.UID = "1234567890";
  CalDAV.PutCalendarEvent("https://www.google.com/calendar/dav/username@gmail.com/events/1234567890.ics");

Yahoo uses a different format for CalDAV access. Yahoo's ResourceURIs always start with "https://caldav.calendar.yahoo.com/dav/" plus your user name, plus "/Calendar/" plus the name of your calendar. For instance: "https://caldav.calendar.yahoo.com/dav/username/Calendar/Your_Name" for the default calendar. (Yahoo uses your name to create the default calendar). When using the CreateCalendar event to create a new calendar, replace "Your_Name" in the URI with the desired name of your new calendar. Event resources are located directly under the "/Calendar/Calendar_Name/" path. Like Google, the UID and filename portion of the resource URI must match, but Yahoo will actually return an HTTP protocol error if they differ. The examples below show a few possible transactions:

  CalDAVS1.User = "username";
  CalDAVS1.Password = "password";
  
  CalDAV.DisplayName = "My Hockey Calendar";
  CalDAV.CreateCalendar("https://caldav.calendar.yahoo.com/dav/username/Calendar/Hockey_Calendar/");
  
  CalDAV.StartDate = "20100401T040000";
  CalDAV.EndDate = "20100401T060000";
  CalDAV.UID = "qwerty1234567";
  CalDAV.Summary = "First Practice";
  CalDAV.Location = "Rink on 1st and main";
  CalDAV.EventType = vEvent;
  CalDAV.PutCalendarEvent("https://caldav.calendar.yahoo.com/dav/username/Calendar/Hockey_Calendar/qwerty1234567.ics");
  
  CalDAV.GetCalendarReport("https://caldav.calendar.yahoo.com/dav/username/Calendar/Hockey_Calendar/");

Error Handling (C++)

This method returns a result code; 0 indicates success, while a non-zero error code indicates that this method encountered an error during its execution. If an error occurs, the GetLastError() method can be called to retrieve the associated error message. (Note: This method's result code can also be obtained by calling the GetLastErrorCode() method after it returns.)

Copyright (c) 2022 /n software inc. - All rights reserved.
IPWorks 2020 C++ Edition - Version 20.0 [Build 8307]