|
In preparation for opening the Architecture 101 Courseware Beta Test Program, I found that I needed a couple of Wizards. The first was a signup wizard was for people entering the program. I wanted to capture a bit of information about who they are, their tech background, the hardware and software they'll be using, etc. The second wizard was for feedback. I'm wanting to improve the courseware in a number of specific ways, and so I wanted a way of collecting the various types of feedback I'd like testers to supply.

So, I began, of course, with a small PureMVC-based application for the signup wizard. There is no branching or alternate paths, just a form seperated into logical pieces, then sent as a simple HTTP POST request to a Perl-based service that I wrote several years ago. After implementing the SignupWizard, I realized I had one of 2 possible futures ahead. Copy the SignupWizard program and modify it to suit for collecting feedback, or abstract as much of it as reasonable into a framework and then implement the FeedbackWizard based upon the new framework. Didn't take long to make that choice. It took a bit longer to choose the name: Pinball. The FeedbackWizard needed to handle branching, though. The first page of the wizard asks what type of feedback you're giving. Then, based upon the type you want, the steps change to accomodate. I looked at a number of survey wizard builder sites on the net, and saw that the 'skip logic' problem is one that can be quite hard to grapple with. But in the end, I came up with a good solution that's super easy to use. I completed the FeedbackWizard and then went back and reimplemented the SignupWizard to be based on the same framework very quickly. The framework requires very little from you, but provides a robust way to create an RIA wizard to capture information in a reliable way. To implement a wizard based on the Pinball Framework, you must have a remote service which you can communicate with via HTTP GET or POST. You create or modify a CSS file to style your wizard (hey, all you template designers are you getting this?). Using Flex, you create a WizardPages, each of which can read and write to a common model. You create and initialize a configuration value object to control size and behavior, and you define a value object for a common model. For 'branching' you can define multiple possible sequences of steps, and send an event at anytime that switches to a different sequence. There are tons more features I could describe here, but I have a Courseware Beta Test Program to kick off. But soon there will be plenty of documentation and examples, etc. -=Cliff> |