This project is read-only.

Calendar

The "Calendar"-list are the personal calendar entries stored in the mailbox of the user.

MSDN Reference Links:
Synchronizing Folders by Using the FolderSync Command:
http://msdn.microsoft.com/en-us/library/ee201107(v=exchg.80).aspx
WBXML Code Page 4 - Calendar:
http://msdn.microsoft.com/en-us/library/ee178579(v=exchg.80).aspx

Inputs / Querystring parameters:

  • serverAddress
    • The address of the Exchange Server to connect to.
    • Sample: "https://mail.contoso.com/Microsoft-Server-ActiveSync/"
  • credentials
    • The base64-encoded combination of username & password. Can be formatted either as "domain\username:password" or "email:password".
    • Sample I: "John@Contoso.com:password" =>"Sm9obkBDb250b3NvLmNvbTpwYXNzd29yZA=="
    • Sample II: "Contoso\John:password" => "Q29udG9zb1xKb2huOnBhc3N3b3Jk"
  • DeviceID
    • A unique identifier for the device. Keep this parameter consistent - Exchange keeps a list of device ids and will get confused if a device changes properties randomly.
Sample: IMEI12345678
  • DeviceType
    • Identifies the type of device, and does not have to be unique.
Sample: "API Device"

Algorithm / XML documents

Synchronizing all calendar entries is a three-step process:
  • Do a FolderSync to retrieve the Server Ids for all folders. Use this to identify the folder for "Default Calendar".
  • Do a FolderSync with a SyncKey of 0 to acquire a new SyncKey.
  • Do a FolderSync with the new SyncKey and the Folder Id for the "Default Calendar".

The "Type" for "Default Calendar" is "8". (Can be found in the EASProtocol.Enums.FolderSyncTypes.DefaultCalendar.)
"User Created Calendar"-folder has not been implemented yet.

The XML documents used are the following

Discover Folder Ids:
<?xml version="1.0" encoding="utf-8"?>
<FolderSync xmlns="FolderHierarchy">
  <SyncKey>0</SyncKey>
</FolderSync>

Get SyncKey:
<?xml version="1.0" encoding="utf-8"?>
<Sync xmlns="AirSync">
  <Collections>
    <Collection>
      <SyncKey>0</SyncKey>
      <CollectionId>FolderId</CollectionId>
    </Collection>
  </Collections>
</Sync>

Get Calendar
<?xml version="1.0" encoding="utf-8"?>
<Sync xmlns="AirSync">
  <Collections>
    <Collection>
      <SyncKey>SyncKey</SyncKey>
      <CollectionId>FolderId</CollectionId>
    </Collection>
  </Collections>
</Sync>

The API will return something similar to this (in JSON format):
[
  {
    "TimeZone": "sample string 1",
    "AllDayEvent": "sample string 2",
    "Attendees": "sample string 3",
    "Attendee": "sample string 4",
    "Email": "sample string 5",
    "Name": "sample string 6",
    "BusyStatus": "sample string 7",
    "Categories": "sample string 8",
    "Category": "sample string 9",
    "DTStamp": "sample string 10",
    "EndTime": "sample string 11",
    "Exception": "sample string 12",
    "Exceptions": "sample string 13",
    "Deleted": "sample string 14",
    "ExceptionStartTime": "sample string 15",
    "Location": "sample string 16",
    "MeetingStatus": "sample string 17",
    "Organizer_Email": "sample string 18",
    "Organizer_Name": "sample string 19",
    "Recurrence": "sample string 20",
    "Type": "sample string 21",
    "Until": "sample string 22",
    "Occurences": "sample string 23",
    "Interval": "sample string 24",
    "DayOfWeek": "sample string 25",
    "DayOfMonth": "sample string 26",
    "WeekOfMonth": "sample string 27",
    "MonthOfYear": "sample string 28",
    "Reminder": "sample string 29",
    "Sensitivity": "sample string 30",
    "Subject": "sample string 31",
    "StartTime": "sample string 32",
    "UID": "sample string 33",
    "AttendeeStatus": "sample string 34",
    "AttendeeType": "sample string 35",
    "DisallowNewTimeProposal": "sample string 36",
    "ResponseRequested": "sample string 37",
    "AppointmentReplyTime": "sample string 38",
    "ResponseType": "sample string 39",
    "CalendarType": "sample string 40",
    "IsLeapMonth": "sample string 41",
    "FirstDayOfWeek": "sample string 42",
    "OnlineMeetingConfLink": "sample string 43",
    "OnlineMeetingExternalLink": "sample string 44"
  }
]

A limitation to be aware of is that in the current release only the default Calendar Entry list is implemented.

The implication of this is that all entries will be returned, but only in "Truncated" form. This means that not all of the properties above will be included, and many of the properties in the JSON response will be "null" even though they are not null on the server.

This is to avoid transferring extraneous information. You are to pull down the list, and then request specific items to get all the details.

Fetching individual calendar entries is on the to-do list for the project.

Last edited Aug 16, 2013 at 7:22 PM by ahell, version 2

Comments

No comments yet.