The free/busy data story
Published Jun 02 2004 11:42 AM 3,065 Views

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

3 Comments
Not applicable
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 ;)
Not applicable
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 ;)
Not applicable
Here’s a scenario that I ran into with a customer recently. You’re a developer that is using the CDO
Version history
Last update:
‎Jul 01 2019 02:57 PM
Updated by: