Continuing with my series on extending Community Server for non-conventional purposes, now that we've leveraged the ComponentArt Grid to display jobs on the home page of our CS-based Jobs Management Application, it's time to employ Chameleon Controls and Forms to display job details.

Ben Tiedt, the (in my book, brilliant) principal author of the Chameleon and Forms architecture in CS2007 announced on the Tellicast #3 that he's working on a book on Controls, Forms and other Chameleon goodies, so as we await Ben's book I'll touch on a few of the high points in rolling our own Chameleon Controls and Forms.
We're displaying a custom data object on the job details page above obviously, an object derived from the WeblogPost object that I'm calling the JobPost object. We need a custom Chameleon Control to display the JobPost properties not found in WeblogPost. Our JobPostData Chameleon control, like other Chameleon controls, contains properties, links and a datasource. It's the datasource that's the trick here, since the GetCurrentPost is obtained through layered url, application configuration and [Current]Application.GetPost() processing, so unless we want to build a new CS application simply to return a JobPost object, we're going to bind to a standard Post type (WeblogPost), then populate our JobPost object through a custom Data Provider and custom JobControlUtility class. Each application suite of Chameleon controls uses a CSControlUtility-derived class, as the WeblogControlUtility class is used by the CS Blogs. Our JobControlUtility will serve up JobPost data for our custom controls and forms.
Now that we've populated our custom JobPostData control object we can start dropping JobPostData control fields on our Post.aspx page, and with full intellisense in VS2005.
Now for some "extra cheese" as CS MVP Dave Voss said on a CS Forums post earlier this week, we can add a custom Chameleon Form to our details page--simply by placing it among the JobPostData control fields--and even spice up our form with some Telligent.Glow library hotness like using the DateTimeSelector controls for job dates.
The form is much like our Chameleon JobPostData control in that it also contains properties and a datasource which binds to the form field properties, and our JobControlUtility class populates the date form fields just as we used it to populate the JobPostData control.
After seeing how Chameleon can be used to create new controls and forms, I think you'll concur that Ben Tiedt is THE MAN!