Oh ListSelection Step, thou art a heartless bit**!
One day, I would like to see the client code behind the list selection step. I imagine, there is some comment along the lines of “//I hate myself and I want to die”.
Sounds a bit harsh? True, but what would life be without some complaining every now and then. Now, let me explain, why I think this line of comment might be in there somewhere…
The ListSelection step is pretty straight forward. You define the Screen Set, Screen, List Control (a field on the Screen) and what line to be selected within that List Control. This should be all you need for the list selection step to work, right? With that information, there is no way you (the client) could miss the UI control. Also, the ListSelection step definitely knows about the Screen Set and thus the Object displayed by that Screen Set. Why do I emphasize that fact? Because for some reason that totally escapes me, the displayed object of the Screen Set seems to be important. You might think that if that object is really so important, the ListSelection step could just pass the information on the displayed Object to the List Control, but no… we are forced to provide the Screen Sets object as target in the Action containing the ListSelection step! Why on god’s green earth?!?
Okay, enough trolling for now… to make this a bit more productive, let me give you (and my future self) an example on how to make the list selection step work in a non-trivial situation. (Just copy the following lines and replace the definition names with your definition names to better understand what might be going wrong in your case.)
Assuming objects on the client look like this
- MainObject
- ScreenSetObjects
- ScreenSetObject 1
- ScreenSetObject 2
- ListObjects
- ListObject 1
- ListObject 2
- ScreenSetObjects
and our Screen (Set) definitions look like this
- ScreenSet “ListScreenSet” displays Object “ScreenSetObject”
- Detail Screen “ListScreen”
- Field “ListControl” of type “List Tile View” on collection “:>Main Object>”ListObjects” Property” where “ListObjects” contains Objects of type “ListObject”
- Action Button “NextRowButton” with Action “NextRowAction” and Target “???“
- Detail Screen “ListScreen”
and the Action looks like this
- Action “NextRowAction” for object “???“
- List Selection Step “ListSelection”
- Screen Set “ListScreenSet”
- Screen “ListScreen”
- List Control “ListControl”
- Select Rows “Next Row”
- List Selection Step “ListSelection”
what would we have to put in the gaps (???) to make it work?
- the target of the “NextRowButton” has to be the exact object that is being displayed in the “ListScreenSet” (here it is one of the “ScreenSetObject” objects)
- and consequently, the “for object” of the “NextRowAction” has to be set to “ScreenSetObject”
And that is how to use List Selection steps…
Daniel
(Based on SMP 3.0 SP7 PL1, WPF Client)