CPAO: Using Colors for Categories and Private Items
It seems that one of the "holy grails" for the Calendar Printing Assistant is to be able to colorize entire appointments with the category colors for those appointments. There is a way to signify the category with CPAO - which is the colored dot that I have used / showed in previous posts. However - since Outlook actually makes the entire appointment the color of the assigned category - people want to see this in CPAO as well.
Well - after editing these templates for a couple years I did find a way that you CAN actually color entire appointments with the category color. However - this is a tedious task, it is difficult to manage, and it is limited in ability. So it can be done - but it may or may not be worth the effort and administrative upkeep.
Also - you can colorize Private Items - and that is a bit easier to do and does not require any upkeep - so I'll show that as well.
So here is a sample of a template I created to demonstrate this:
Yes - this is actually a template I created and it is really showing the color categories without the dots.
Also please note the private item at 5:00 on Monday - it is colored gray.
This template was modified starting with the Work Week 02 Letter template, and I added the necessary code to do the category and private item coloring. I also modified the timescale to include more of the day, and modified the header a bit - as that seems to help get the data in the appointments a little better since the timescale was increased.
So here is the code I added for the colorization:
...
...
<TimeSlot Orientation="Fill" StartHour="7" EndHour="19"
MinorUnit="30" Style="SingleBody"
Background="Transparent">
<Appointment Style="SingleAppointment" Background="White">
<!-- Make the Background actually match the category... -->
<!-- The Category Name is used for this - and since it can
be changed in Outlook, it is only feasible if it is
NEVER changed -->
<!-- and ALL clients who print using CPAO must use the same
names for the same colors -->
<!-- AND - even with this, users should only ever use ONE
category per meeting/appt. as only one will work -->
<ConditionalFormat Condition="Categories eq 'Red Category'"
Background="Red"/>
<ConditionalFormat Condition="Categories eq 'Blue Category'"
Background="Blue"/>
<ConditionalFormat Condition="Categories eq 'Green
Category'" Background="Green"/>
<ConditionalFormat Condition="Categories eq 'Orange
Category'" Background="Orange"/>
<ConditionalFormat Condition="Categories eq 'Yellow
Category'" Background="Yellow"/>
<!-- Make the appt GRAY if it's marked as PRIVATE... -->
<!-- Had to put this below the Category section so that it
would work over a category -->
<ConditionalFormat Condition="Sensitivity eq 'Private'"
Background="Gray"/>
<Bar Orientation="Left" Visibility="Collapsed" Width="5"
BorderThickness="0,0,1,0">
<ConditionalFormat Condition="BusyStatus eq 'Free'"
Visibility="Visible"
Style="SingleAppointmentBarFree"/>
<ConditionalFormat Condition="BusyStatus eq 'Tentative'"
Visibility="Visible"
Style="SingleAppointmentBarTentative"/>
<ConditionalFormat Condition="BusyStatus eq 'OutOfOffice'"
Visibility="Visible"
Style="SingleAppointmentBarOOF"/>
</Bar>
<Content Orientation="Fill" Margin="2,0,2,0" Separator="116"
FontSize="8pt" SeparatorFontFamily="Wingdings"
TextWrapping="WrapWithOverflow">
<ContentElement Source="OddTimes"/>
<ContentElement Source="Subject" FontWeight="Bold"/>
<ContentElement Source="Location"/>
<ContentElement Source="Organizer"/>
</Content>
</Appointment>
</TimeSlot>
...
...
So to go through this briefly - I set the background color of the appointments to "White" - which is something I have shown before. So all appointments will have a White background unless the category is different. This is where the conditional statements come in.
These conditional statements will test the Category Name - not the Category Color. If the Category Name matches the Category Name from Outlook, then it will color the background with the color that I choose.
Please note that users can change the Category Name in Outlook - so that is one of the big caveats of doing this. Also - I - as the person editing the template - must know that "X" Category Name matches up to "Y" Category Color. That is so I will put in the right info so that the right color will show for the particular appointment with the particular category name applied to it.
So as long as you can get a mapping of color to Outlook category name - then you can get this working. But the user can never change the name of the category. Or else if they do - then you will have to go back in and update the template accordingly. Same problem if a category is added - it would have to be added to the template and refreshed. Also - if a user assigns 2 or more categories, then this won't work and the appointment will go back to the default color - in this case White.
Now for the Private Items - the code is very similar. There is a test to see if the Sensitivity is set to Private. If so - then the background color is set to Gray. You could set it to any color you like. Since this is more static as far as the test - it is MUCH easier to implement and maintain.
So - yes, it can be done. Depending on the environment where it's deployed, it could work very well. But it could also break a whole lot in other environments.
I attached the Content.xml for this template so you can use or compare with a template you're working on...
Cheers!
Comments
Anonymous
November 18, 2010
The comment has been removedAnonymous
May 29, 2013
This post gets referenced a lot so hopeflly some people might find this of use. For AllDayAppointments there is a simpler method: <AllDayAppointment ... Background="#[CategoryColor]">Anonymous
October 16, 2013
I love your templates! Could you please upload the catx file for this calendar template as I am hopeless at editing - have already wasted a number of hours and got nowhere. I would really appreciate your help.Anonymous
June 10, 2014
How do I add color bars to events on a month calendar?
Thanks.Anonymous
November 10, 2014
I tried this out, I used
This added only 2 colors, bright red and blue. Very unattractive colors and it didnt do yellow or green :(
More than needing category colors, I am looking for alphabetical sorting! Please help!Anonymous
November 20, 2014
The comment has been removedAnonymous
November 20, 2014
https://onedrive.live.com/redir?resid=CD989BC809297130!426&authkey=!AHFiZUKAbRaz500&ithint=file%2ctxt
This is my code, I need to find out how to sort the AllDayAppointments alphabetically! Please help!Anonymous
January 21, 2015
First off, thanks for taking the time to put this (and all of your other articles) together! It has been a tremendous help. Now, for my questions:
1) Instead of setting the color to grey, what is the correct way to set "visibility = false"?
2) Is it possible to use an AND statement? For example, I'd like to do something like "ConditionalFormat Condition="Sensitivity eq 'Private' AND is an all day appointment" Visibility="Hidden".
Thanks again!
Cheers