I'm beginning to build an interface for our field techs to close out work orders and we have many different required paper forms for different customers. I had hoped to build a system where i can set up a Page for each form (all in .Net 4.0/wpf and possibly using caliburn.micro if it's not a bad choice), and based on rules, display certain pages automatically. I've started out by setting up a basic framework consisting of a wpf form with 3 buttons (back, next/finish, cancel) and a Frame. In the end i hope to have an object i can pass an identifier that will go get all the information it needs, decide which pages to show, show them in order, and update our database when the user clicks finish.
Is there anything specific i should be researching/learning to make my job easier, or my finished product more robust/reliable? What would be a good approach to decide which pages to show? Mostly it would be based on something like
Show this form if Customer is X but i'd like to be able to be more complex(extensible?) than that if i need. In the end, each page/form will probably also generate a PDF file of the customer's actual form, filled in. Sounds like a routine thing to have, but i've never personally implemented or used anything that did it, myself, so i'm going in blind. would the hosting window ask the page if they need to be shown? should the pages speak up themselves? should the hosting window pass the entire data object to a bool function
ShouldIShowYou() and let the page sort it out? there has to be some mechanism already in place for me to "register" a page as being for a certain "something," but i'm not sure what it is. I'd like it to be fairly easily updated, but the app is deployed via clickonce and total number of users will be under 100 for the foreseeable future. just adding a new page object + logic to the collection and re-deploying shouldn't cause trouble.
a few other questions i had:
could(should) i implement this as a transaction in .net, where i could start a transaction when the window/object is created, have each individual page in the frame do it's own data work (via a shared wcf proxy), then commit the transaction after everything works out?
should each page just build up an object and the main window pass the object back and have the originating application do the data work? e.g. make the whole segment of the application be data-unaware. not sure this would work out very well, sounds like a maintenance nightmare.
is this the wrong place to put this kind of question? i'm not looking for code, so it didn't feel right in overflow. this is more of a "what are the words to describe what i'm trying to do" question.
i'll re-read this 10 or 12 times over the course of the day and try to clarify if i can. My brain-speak don't always make gud words.