LitwareHR is our sample application demonstrating how to use Microsoft technologies to build a SaaS solution. Originally the plan was to have two clients - a web client and a smart client, both communicating with the server hosted services. However the original release of Litware included only the Web client.

I am pleased to see the Litware team have been busy and have now released a smart client for LitwareHR using.... WPF and the approaches outlined in the Composite UI Application Block and the Smart Client Software Factory.

The smart client is available for download from Codeplex and Eugenio has a very nice series of blog posts in July covering the architecure of the smart client.

The following features are demonstrated by the new client: 

  • Tenant branding. This is achieved by downloading the tenant logo used in the Web app and customized through the private site.
  • Network awareness. LitwareHR-SC gracefully handles network unavailability by caching new requests and synchronizing data when connectivity becomes available again. The underlying technology used for "in-transit" transactions (new "Opened Positions") is the "Disconnected Service Agent and Connection Monitor Application Blocks" published in the Microsoft Smart Client Software Factory.
  • Tenant customization. Entities and views definitions, extended and customized by a tenant using the private web site are all replicated to the client storage and used for dynamically constructing the UI.
  • Rich visualization of information. The "Browse Open Positions" use case uses a WPF based control for exploring the information, with rich animations.
  • Use of LitwareHR Functional and Non-Functional On-Line Services. LitwareHR services were *not* modified for this project. The metadata APIs are heavily used for entity definitions and customization options. 
  • Composability. LitwareHR-SC ships with a default shell, but because it is implemented as a CAB module, it can certainly be placed and activated in other containers: other winforms apps, Office apps, etc. Most of the "business services" contained in the module can be consumed from a custom UI (either by direct referencing or through the CAB Events).