The free/busy data story


Exchange Free Busy (FB) data itself is not simple or easy to read. This will describe what the data looks like in the Exchange store, how it’s calculated and processed through the Outlook client.


 


FB describes when a user is busy over a range of time, it doesn’t describe each appointment in that time frame. So when you see a user is busy from 1pm to 3pm, you don’t know if that is one appointment or several appointments. Knowing this will help understand how the data is calculated and stored. When I say Busy, this could be “Busy” or “Tentative” or “OOF”, they are all calculated in the same way.


 


FB data is stored on the Exchange server in the NON_IPM_SUBTREE \ SCHEDULE+FREE BUSY \ <OU>… folder, at this point you will need to select your OU based on your topology. Inside this folder is a message for each user that has FB data and inside this message is the users actual FB data. This is the folder/message that Outlook is looking for when it’s requesting FB data for a user.


 


How the FB data is stored:


Got your favorite beverage in your most comfortable chair? Good…


FB data is represented by the number of min from the beginning of the month to the beginning of the appointment, and from the beginning of the month to the end of the appointment in GMT stored in the DTStart and DTEnd properties.


Yea right, ok let’s look at an example. I have only one meeting in my calendar on


Oct 14th 1999 from 10am to 11am booked as busy.


From Oct 1 1999 to Oct 31 1999 = 44640 min


 


Then the appointment start time in min is:


(24hrs)(13days)+10hrs = 322hrs + 7hrsGMT = 329hrs


Now convert to min


(329hrs)(60min) = 19740min


So


Start Time = 19740min


End Time = 19800min (calculated in the same way)


 


These need to be converting to hex


Start Time = 4d1c


End Time = 4d58


 


Now the month is calculated by:


Value = (year)(16)+month


 = (1999)(16)+10


 = 31994


 


So here is what our appointment will look like in the Exchange FB folder


Month = 31994


Start time = 4d1c


End time = 4d58


 


There are several properties in the Exchange public store where all this data is stored and all can be viewed using MDBVU32, here they are.


0x684f = merged month


0x6850 = merged day


0x6851 = tentative month


0x6852 = tentative day


0x6853 = busy month


0x6854 = busy day


0x6855 = OOF month


0x6856 = OOF day


 


For the ONLY busy appointment in our calendar, the properties will now be saved as:


 


0x684f 31994


0x6850 1C 4D 58 4D


0x6853 31994


0x6854 1C 4D 58 4D


 


The start and end times (i.e. 0x6850) are displayed sequentially on one line in pairs low byte first for each FB type. FB records are clustered by type. That is all the FB records for the same type are collected, and sorted by start time. If an adjacent appointments overlap, they are merged into one FB record.


 


If you had these appointments in your calendar:


1. 10am         11am            Busy


2. 10:30am    Noon             Busy


3. 2pm          4pm              Tentative


4. 3pm          5pm              Busy


 


Records 1,2 and 4 are collected and sorted by start time before being merged. After being merged there will be two Start/End pairs 10am – Noon and 3pm – 5pm for Busy and one pair for Tentative.


 


If you had these appointments in your calendar:


1. 10am         11am            Busy


2. 11am         1pm              Busy


3. 1pm          2pm              Busy


 


There would be one Start/End pair 10am – 2pm for Busy as in our example.


 


Due to the complex nature of the process, anytime there is a change in Outlook FB data, it is up to the client to calculate and post the FB message. When Outlook updates the FB data, it deletes all the data in the folder and reposts all new data instead of trying to append.


 


OWA follows the same process, except the Exchange server must process and post the data on behalf of the user.


 


Outlook allows you to post a range of FB data, you can post 2 months, the default or 12 months, or whatever, of FB data. If Outlook has posted 9 months of data, and a change is made with OWA that requires an update to the FB data, only 2 months of data will be posted. There is no individual mailbox setting in OWA that allows users to specify the amount of data to post, this is done across all mailboxes by the Exchange server.


 


The FB folders can be viewed through Exchange System Manager (ESM) or OWA


From Exchange 200x


ESM, Folders, Public Folders right-click, view system folders, Schedule + Free Busy, <your OU>, click the content tab


 


From OWA:


http://<server name>/public/non_ipm_subtree/


 


You will see the FB messages but not the content from OWA. If you wish to look at the content, use MDBVU32.


Eric Hartmann

Comments (3)
  1. Sig Weber says:

    Great info. Thanks!

    Worth to mention that you can use the following URL format to query the F/B data via XML:

    http://<ServerName>/public/?cmd=freebusy&start=2004-01-06T09:00:00-00:00&end=2004-01-06T19:00:00-00:00&interval=30&u=SMTP:user@example.com

    Parameters are self explaining, IMHO…

    I know that this is probably undocumented and/or unsupported but it’s a nice way to view the data quickly ;-)

  2. Nick Wade says:

    Sig – very interesting, mmm’kay? I’m wondering if this could generate a view of a number of users free/busy in a web page – i.e. a quick way to generate a "team calendar" view, without having to actually copy people’s cal entries to another calendar folder or something.

    Too bad I couldn’t code my way past Hello World ;-)

  3. Anonymous says:

    Here’s a scenario that I ran into with a customer recently. You’re a developer that is using the CDO

Comments are closed.

Skip to main content