by Rich Rousseau
9. March 2009 22:41
The SQL Server Reporting Services Report Viewer control, found in Report Manager, SharePoint, and custom ASP.Net applications, utilizes a print control that contains a reference to a GDI library with a security vulnerability. Microsoft updated the vulnerable GDI library by deploying a new print control. Microsoft then sent out KB956391, which deployed a killbit that disables the old print control. The problem here is that if you haven't deployed the updated Report Viewer control to all your environments, then all your clients, who automatically received the killbit, are no longer able to print. They receive the "Unable to load client print control" error.
If you're in an enterprise environment where everyone is a limited user, you have secondary problem. Once the Report Viewer control is updated the client needs administrative privileges to install the updated ActiveX client print control. There have been reports of problems installing the updated ActiveX print control. I have experienced both successful and problematic manual installs. If your enterprise has the means to execute remote installations as an administrator, then you can simply take the contents of the RSClientPrint.cab file, copy them to the remote client, then remotely run a regserve32 on the RSClientPrint.dll file.
You can find the updated RSClientPrint.cab file in the ReportServer\bin folder of your SP3 or KB954607 updated SSRS installation.
Microsoft recently issued additional guidance on this issue.
Additional Resources
MSDN Forum Post
Brian Hartman's excellent summary of the issue
Mariae's solution summary
by Rich Rousseau
6. March 2009 07:31
Robert Bruckner, the developer behind the Tablix data region control in SQL Server Reporting Services 2008, is kicking off a series of posts on the capabilities of the control. The Tablix control is a combination of the Table and Matrix controls from previous versions of reporting services, and at its most basic allows for dynamic addition of both rows and columns. It is also the base control for many of the other common controls used in SSRS 2008. I will be following this series closely. Read more at Tablix – The Matrix Revolution.
BR>
by Rich Rousseau
3. March 2009 17:50
Came across a very useful catalog of user experience (UX) design patterns called Quince. It's provided by Infragistics and the catalog itself is a really well done Silverlight application. It allows you to group UX patterns in unique ways that make it easier to find what you're looking for or to discover new patterns you could be using. The Wireframe and User Task views are particularly interesting. When selected, each pattern has a description that explains when it should be used and why. Best of all, each pattern has several real life examples you can scroll through. I think this will be a great repository for when I need some functional UI inspiration.
http://quince.infragistics.com
by Rich Rousseau
9. January 2009 07:36
Recently I needed to know if a particular windows patch was installed on my machine. I went to Add/Remove Programs and checked the "Show Updates" option, but the list there was too long and my eyes too tired to try and scan them all manually. I thought this should be an easy task for PowerShell, but I didn't know how to access a list of installed updates. I decided WMI would be a good place to start and did quite a few searches using "Get-WmiObject -List". I queried a few different providers that I thought would list them, but I wasn't getting anywhere. I'm sure there is a WMI Provider that lists all windows updates, but couldn't find it.*
Luckily, a
coworker of mine who I had been discussing this with helped immensely when he pointed me to a
script that would list all installed software. The script uses a registry entry that lists all "uninstallable" software. I knew I could easily search the registry using PowerShell and set about looking for my particular update with the following...
dir HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | where {$_.Name -Like '*kb956391*'}
*I have since found that Win32_QuickFixEngineering will list all windows hotfixes…
Get-WmiObject -Query 'select * from Win32_QuickFixEngineering' | where {$_.HotFixID -eq 'KB956391'}
by Rich Rousseau
19. December 2008 07:18
I was recently styling a SQL Server Reporting Services 2005 report that contained a subreport as one of its columns. This was a tabular report that needed an alternating background color for each row. The trouble with this is that the subreport cell doesn't expose a BackgroundColor property in the report designer.
No BackgroundColor Property!
For my first attempt at fixing this, I created a parameter on the subreport called BGColor and setup the subreport's text box BackgroundColor property to get its value from the parameter.

Setting the Subreport BackgroundColor via Parameter.
This worked fine as long as the cell containing the subreport remains its original size. However my report had columns that sometimes displayed more than one line of text, which caused the row height to expand by a few lines. This expanded the cell around the subreport, but the subreport did not expand to fill this new area.
Bad Report!
At this point I decided it didn't make sense that the cell containing the subreport didn't have a BackgroundColor property. A quick search for the RDL schema showed that it's legal to have a BackgroundColor element in the Style element of a subreport element. Armed with this new information, I opened the RDL file in Notepad2 and added the following…
<Subreport Name="subreport1">
<ReportName>SubReport</ReportName>
<Style>
<BackgroundColor>=iif(RowNumber(Nothing) Mod 2, "Gray", "White")</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
</Style>
<ZIndex>1</ZIndex>
</Subreport>
The BackgroundColor of the subreport will now fill the entire cell even when the cell is expanded.
Note: The visual studio report designer will not display the background color. You'll need to deploy the report to an actual Report Server to see the full background color.
Good Report!
by Rich Rousseau
20. August 2007 23:39
Some quick functions I created to reduce my time at the subversion command line. The trick here is that I couldn't just alias the commands, I needed to create some small functions for each...
function st {Invoke-Expression "svn status"}
function sup {Invoke-Expression "svn update"}
function sci {Invoke-Expression "svn ci"} --I use the %SVN_EDITOR% env var for my checkin message editing
function sin {Invoke-Expression "svn info"}
You could easily modify these to accept parameters...
function srv ([string]$filename){Invoke-Expression "svn revert $filename"}
I imagine I'll want these to be more flexible in the future, but for now they're saving me a lot of typing!
by Rich Rousseau
4. May 2007 03:56
I didn't go to MIX, but I did read a few blog posts of people who did. Definately need to dive deeper this weekend. Here is my quick overview of what was announced/released...
DLR
- Dynamic Language Runtime
- Lets your .net code iteract with dynamic languages like Ruby, Python, Javascript
- Lets those languages interact with your .net code! Neat!
CLR on a Mac
- A browser plug-in that will run .net 3.x apps
- OSX Only
- Intel based Macs only?
- Safari, Firefox, IE
- Subset of the BCL
- Rewritten CLR
Silverlight
- Lots of classes to make working with media easier.
- 720p
Some links for further review...
http://www.silverlight.net/
http://www.microsoft.com/silverlight/
Wanna try it?
Get the plug-in. - Quick install. No need to restart computer, but you will have to restart the browser. Definately works in FireFox.
Go to
http://silverlight.net/fox/
by Rich Rousseau
14. November 2006 00:29
"Hello World" Programs
A compilation of how people in various areas and stages of their development careers might write the well known "Hello World" program. Very funny stuff. I love how "Enterprisy" the Master Programmer and Seasoned Professional are...
http://www.infiltec.com/j-h-wrld.htm (via
Netorama)
by Rich Rousseau
24. March 2006 04:30
Not all DateAdd()s are created equal.
Example:
VBScript
DateAdd("m", -1, CDate("01/01/2006"))
Expected Result: 12/01/2005
Actual Result: 12/01/
2006 - WTF?
TSQL
DateAdd(m, -1, '20060101')
Expected Result: 12/01/2005
Actual Result: 12/01/2005
Moral of the story, not all functions behave like you expect them to. Test, test and retest.