The 1000 steps program to MDriven Chapter 5
(Replacing message template with parser tag)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 29: Line 29:
== Chapter 5: Actions and Navigating Between Views ==
== Chapter 5: Actions and Navigating Between Views ==
146. We have seen how to adopt views from being AutoForms to becoming ViewModels you can control. Now, we will take a look at the actions that bring those views up for a user.  
146. We have seen how to adopt views from being AutoForms to becoming ViewModels you can control. Now, we will take a look at the actions that bring those views up for a user.  
* Look at the PersonSeeker from [[The 1000 steps program to MDriven Chapter 4|Chapter 4]] in the ViewModelEditor, fold down the yellow Actions button, and note the blue /PersonSeeker link. Click it
* Look at the '''PersonSeeker''' from [[The 1000 steps program to MDriven Chapter 4|Chapter 4]] in the ViewModelEditor, fold down the yellow Actions button, and note the blue '''/PersonSeeker''' link. Click it
147. See the form that defines this action. Note the ActionName and change it to <code>PersonSeekerIAmInControl</code>.
147. See the form that defines this action. Note the ActionName and change it to <code>PersonSeekerIAmInControl</code>.


148. Note the generated MenuBar above the ActionName is also updated.  
148. Note the generated MenuBar above the ActionName is also updated.  


149. Notice the left-hand list in the form. These are the other GlobalActions currently defined. Click the one named AutoFormCarSeeker.  
149. Notice the left-hand list in the form. These are the other [[Training:Global actions|GlobalActions]] currently defined. Click the one named '''AutoFormCarSeeker'''.  
* Note how the right-hand side now shows its name and definition.
* Note how the right-hand side now shows its name and definition.
150. There are three types of actions; these two actions are of the Global type.  
150. There are three types of actions; these two actions are of the Global type.
  A GlobalAction is called Global since it will be shown in the top-level Global menu.
  A GlobalAction is called Global since it will be shown in the top-level Global menu.
151. Close the yellow GlobalAction form and go back to the model diagram. Click the Cog-wheels-tool-button; note how this brings up the same form again.
151. Close the yellow GlobalAction form and go back to the model diagram. Click the Cog-wheels-tool-button; note how this brings up the same form again.


152. Select the AutoFormCarSeeker action. Observe how it does not show in the rendered MainMenu and that it is defined to be in a MenuGroup called AutoForms.  
152. Select the '''AutoFormCarSeeker''' action. Observe how it does not show in the rendered MainMenu and that it is defined to be in a MenuGroup called '''AutoForms'''.  
* Change the MenuGroup of the action to none/blank/empty.  
* Change the MenuGroup of the action to none/blank/empty.  
* Note that the action now shows next to PersonSeeker.  
* Note that the action now shows next to '''PersonSeeker'''.  
* Change it back by pressing Ctrl+Z (undo) or do it manually.
* Change it back by pressing Ctrl+Z (undo) or do it manually.
153. Select the PersonSeeker action in the list. Press the three-dot button next to the MenuGroup choice - this brings up the EditMenuGroup dialog. Press Add menu group, name it <code>IControlTheMenuGrouping/AtAllLevels</code>, and close the dialog.
153. Select the '''PersonSeeker''' action in the list. Press the three-dot button ('''...''') next to the MenuGroup choice - this brings up the <u>EditMenuGroup</u> dialog. Press <u>Add menu group</u>, name it <code>IControlTheMenuGrouping/AtAllLevels</code>, and close the dialog.


154. Set the MenuGroup on the PersonSeeker action to <code>IControlTheMenuGrouping/AtAllLevels</code>.   
154. Set the '''MenuGroup''' on the '''PersonSeeker''' action to <code>IControlTheMenuGrouping/AtAllLevels</code>.   
* Check the top-rendered menu and find the <code>IControlTheMenuGrouping</code>.   
* Check the top-rendered menu and find the <code>IControlTheMenuGrouping</code>.   
* Click it to open it and note the subLevel AtAllLevels.   
* Click it to open it and note the sublevel <u>AtAllLevels</u>.   
* Click to open; notice the PersonSeeker action under this submenu.  
* Click to open; notice the '''PersonSeeker''' action under this submenu.  
155. Note that the PersonSeeker action is now gone from the top level - the Global action will only be in one place in the top menu.  
155. Note that the '''PersonSeeker''' action is now gone from the top level - the Global action will only be in one place in the top menu.  


156. Note that the PersonSeeker action has a ''Bring Up View Model'' setting under the header '''What the action does'''.
156. Note that the '''PersonSeeker''' action has a <u>Bring Up View Model</u> setting under the header '''What the action does'''.


157. Press the three-dot button next to the ''Bring Up View Model''.   
157. Press the three-dot button next to the <u>Bring Up View Model</u>.   
* Note that the ViewModel editor is brought into focus, showing the ViewModel that was chosen for the action.   
* Note that the ViewModel Editor is brought into focus, showing the ViewModel that was chosen for the action.   
** Go back to the Action dialog (step 146, or just alt-tab).  
** Go back to the Action dialog (step 146, or just alt-tab).  
158. Change the ''Bring Up View Model'' value to Index. Verify that you get the ViewModelEditor showing the Index ViewModel when you press the three-dots button.
158. Change the <u>Bring Up View Model</u> value to Index. Verify that you get the ViewModel Editor showing the Index ViewModel when you press the three-dots button ('''...''').


159. Go back to the Action dialog and undo the change. Now, go into the rendered top menu, find the PersonSeeker action, and note the ViewModel icon next to it. Click on the icon.   
159. Go back to the Action dialog and undo the change. Now, go into the rendered top menu, find the '''PersonSeeker''' action, and note the ViewModel icon next to it. Click on the icon.   
* Note that you get to the ViewModel Editor with the correct form showing.  
* Note that you get to the ViewModel Editor with the correct form showing.  
160. Select the Exit-action in the left list. Now go into the rendered top menu, find the PersonSeeker action, and click - not on the icon, but on the text of the rendered action.  
160. Select the Exit-action in the left list. Now go into the rendered top menu, find the '''PersonSeeker''' action, and click - not on the icon, but on the text of the rendered action.  
* Note that the GlobalAction form has now selected the PersonSeeker action.
* Note that the GlobalAction form has now selected the '''PersonSeeker''' action.
161. Create a new GlobalAction with the top left Add Global Action button. Name it <code>PersonSeekerAgain</code>, set the BringsUpViewModel to PersonSeeker, and set its Menu group to IControlTheMenuGrouping/AtAllLevels.  
161. Create a new GlobalAction with the top left Add Global Action button. Name it <code>PersonSeekerAgain</code>, set the <u>BringsUpViewModel</u> to '''PersonSeeker''', and set its Menu group to '''IControlTheMenuGrouping/AtAllLevels'''.  
* Check the rendered menu - where did it show up?
* Check the rendered menu - where did it show up?
162. Set the BringUpViewModel to PersonSeeker.
162. Set the <u>BringUpViewModel</u> to '''PersonSeeker'''.


163. Save and check in the Browser in your running app.
163. Save and check in the Browser in your running app.


164. Set the DividerGroupWithinMenu to SomeName on PersonSeekerAgain. Save and check the web app.   
164. Set the <u>DividerGroupWithinMenu</u> to '''SomeName''' on '''PersonSeekerAgain'''. Save and check the web app.   


165. Set the DividerGroupWithinMenu to SomeName on PersonSeekerIAmInControl. Save and check the web app.   
165. Set the <u>DividerGroupWithinMenu</u> to '''SomeName''' on '''PersonSeekerIAmInControl'''. Save and check the web app.   


166. DividerGroup introduces sections. To order actions, use Sort order in the group. Set AAA on one and BBB on the other. Save and check the web.  
166. DividerGroup introduces sections. To order actions, use Sort order in the group. Set '''<span class="col-turquoise">AAA</span>''' on one and '''<span class="col-turquoise">BBB</span>''' on the other. Save and check the web.  


167. Switch the AAA and BBB on the actions. Make sure you understand how to control the order.
167. Switch the <span class="col-turquoise">'''AAA'''</span> and <span class="col-turquoise">'''BBB'''</span> on the actions. Make sure you understand how to control the order.


168. As I stated earlier, there are three types of actions. We have looked at one of them - the GlobalAction. GlobalActions only end up in the GlobalMenu. Now, we will look at Class actions.   
168. As I stated earlier, there are three types of actions. We have looked at one of them - the '''GlobalAction'''. GlobalActions only end up in the GlobalMenu. Now, we will look at [[Documentation:Class actions|Class actions]].   
  Class actions are type specific. A Class action belongs to a Class and all objects of that class can see/use this action.
  Class actions are type specific. A Class action belongs to a Class and all objects of that class can see/use this action.
169. Go back to ViewModel PersonSeeker, fold down actions, note the 2 ShowPerson links in Person-Nesting, and click either one.  
169. Go back to ViewModel '''PersonSeeker''', fold down actions, note the 2 <u>ShowPerson</u> links in Person-Nesting, and click either one.  


170. A new but similar action form shows up, listing all class actions for class Person. There are 2 ShowPerson actions. One is one we got from AdoptThisViewModelAndMakeItOurOwn. This function also copies some of the actions associated with the definition we adopted. Rename the one that does NOT bring up autoform to <code>ShowPersonIAmInControl</code>.
170. A new but similar action form shows up, listing all class actions for class '''Person'''. There are 2 <u>ShowPerson</u> actions. One is one we got from '''AdoptThisViewModelAndMakeItOurOwn'''. This function also copies some of the actions associated with the definition we adopted. Rename the one that does NOT bring up autoform to <code>ShowPersonIAmInControl</code>.


171. Back in ViewModelEditor, note that the name is updated and the parenthesis with the class name Person within - this is how you recognise a Class action. These class actions both belong to the Person class.   
171. Back in ViewModelEditor, note that the name is updated and the parenthesis with the class name '''Person''' within - this is how you recognise a Class action. These class actions both belong to the '''Person''' class.   


172. Change the class of the nesting to Car.  
172. Change the class of the nesting to '''Car'''.  
* Ignore the many errors.  
* Ignore the many errors.  
* Notice that Person-actions disappear and ShowCar shows up instead. Class actions are automatically shown depending on the type context.  
* Notice that '''Person'''-actions disappear and '''ShowCar''' shows up instead. Class actions are automatically shown depending on the type context.  
* Change the class of nesting back to Person. Save.
* Change the class of nesting back to '''Person'''. Save.
173. Test web and both actions. They bring up two different forms. In the form called only Person, we see the same Class action again, taking us to the second form and vice versa.  
173. Test the web and both actions. They bring up two different forms. In the form called only '''Person''', we see the same Class action again, taking us to the second form and vice versa.  


174. Class actions show up directly as long as the type information is correct. This is what we often want, but not always. There is a way to opt-out, showing the action in a place where the type rules say it should show.   
174. Class actions show up directly as long as the type information is correct. This is what we often want, but not always. There is a way to opt-out, showing the action in a place where the type rules say it should show.   
* Look at the top of the Action definition - a list of ViewModel-places the type-information matches.   
* Look at the top of the Action definition - a list of ViewModel-places the type-information matches.   
* Notice the checkbox for opt-in. Make sure all levels are checked - on both actions for Person.   
* Notice the checkbox for opt-in. Make sure all levels are checked - on both actions for '''Person'''.   
* Save and check the web.  
* Save and check the web.  
175. You can also opt-in/out actions in a ViewModel by pressing the arrow in front of the class action. Try it out.  
175. You can also opt-in/out actions in a ViewModel by pressing the arrow in front of the class action. Try it out.  
Line 99: Line 99:
176. You can opt back in from the ViewModel tree as well. Try this out.   
176. You can opt back in from the ViewModel tree as well. Try this out.   
  The third type of action is the ViewModelAction (aka ContextAction). These actions are unique to a view.  
  The third type of action is the ViewModelAction (aka ContextAction). These actions are unique to a view.  
177. Go to ViewModel Person, fold down actions, and note the DeleteThis action. Double-click it.  
177. Go to ViewModel '''Person''', fold down actions, and note the '''DeleteThis''' action. Double-click it.  


178. We can now see the third kind of Action form - still similar to the other two types - but the left side in this form resembles the ViewModel tree structure. This form also shows the matched Class actions for the ViewModel levels. You can only see the difference between Class-actions and true-ViewModelActions by the latter missing the class name behind it.
178. We can now see the third kind of Action form - still similar to the other two types - but the left side in this form resembles the ViewModel tree structure. This form also shows the matched Class actions for the ViewModel levels. You can only see the difference between Class-actions and true-ViewModelActions by the latter missing the class name behind it.


179 In the DeleteThis ViewModel action, find the AreYouSure setting and set it to <code>"Wow - wanna delete this person?"</code>. Save.  
179 In the '''DeleteThis''' ViewModel action, find the '''AreYouSure''' setting and set it to <code>"Wow - wanna delete this person?"</code>. Save.  
* Test the action on the web. Say Cancel on the question to delete.
* Test the action on the web. Say <u>Cancel</u> on the question to delete.
180. Since ViewModel actions are not limited by class, they can theoretically show up at any level of the ViewModel tree. We rarely want a ViewModelAction to show up on more than one level in the view. This is controlled in the Action editor - top right side - only on this level.  
180. Since ViewModel actions are not limited by class, they can theoretically show up at any level of the ViewModel tree. We rarely want a ViewModelAction to show up on more than one level in the view. This is controlled in the Action editor - top right side - only on this level.  
* Change it from Person to Car. Save and test the web.  
* Change it from '''Person''' to '''Car'''. Save and test the web.  
* Now, the DeleteThis is only available when a car is selected. This is logically strange so change it back to Person.
* Now, the '''DeleteThis''' is only available when a car is selected. This is logically strange so change it back to '''Person'''.
181. We have looked at the three different types of actions, but there is one more action-like thing: the ViewModel placed Button, ViewModelEditor For Person-view. Add a Button and name the column <code>DeleteMe</code>. Save. Check the web.
181. We have looked at the three different types of actions, but there is one more action-like thing: the ViewModel placed button, ViewModelEditor for '''Person'''-view. Add a button and name the column <code>DeleteMe</code>. Save. Check the web.


182. Nothing happens since it has no expression in action language that does anything. We will connect this ButtonAction to the ViewModelAction DeleteThis by finding the Is action setting, and next to it, a picker where we optionally can make the button execute one of the actions available to us in the view. Choose DeleteThis. Save. Test the web.
182. Nothing happens since it has no expression in action language that does anything. We will connect this ButtonAction to the ViewModelAction '''DeleteThis''' by finding the <u>Is action</u> setting, and next to it, a picker where we optionally can make the button execute one of the actions available to us in the view. Choose '''DeleteThis'''. Save. Test the web.


==== Next Chapter ====
==== Next Chapter ====
[[The_1000_steps_program_to_MDriven_Chapter_6]]
[[The_1000_steps_program_to_MDriven_Chapter_6]]
[[Category:1000 Steps Program]]
[[Category:1000 Steps Program]]

Latest revision as of 06:37, 19 June 2024

This is Chapter 5. You may want to start at the beginning: The 1000 steps program to MDriven Chapter 1, or see Chapter 4 (the previous chapter).

Video 5: Different Types of Actions

To make your experience smooth, we set the main tags mentioned in the video to the right bar menu of this mini-player. Choose an interesting subtitle on the list and immediately get to the exact theme navigation item place in the video. Now you can pick any topic to be instructed on without watching the whole video.

Steps 146 - 182 Introduction Global actions Ways to bring up ViewModels Sorting Class actions ViewModel actions ViewModel placed button

Chapter 5: Actions and Navigating Between Views

146. We have seen how to adopt views from being AutoForms to becoming ViewModels you can control. Now, we will take a look at the actions that bring those views up for a user.

  • Look at the PersonSeeker from Chapter 4 in the ViewModelEditor, fold down the yellow Actions button, and note the blue /PersonSeeker link. Click it

147. See the form that defines this action. Note the ActionName and change it to PersonSeekerIAmInControl.

148. Note the generated MenuBar above the ActionName is also updated.

149. Notice the left-hand list in the form. These are the other GlobalActions currently defined. Click the one named AutoFormCarSeeker.

  • Note how the right-hand side now shows its name and definition.

150. There are three types of actions; these two actions are of the Global type.

A GlobalAction is called Global since it will be shown in the top-level Global menu.

151. Close the yellow GlobalAction form and go back to the model diagram. Click the Cog-wheels-tool-button; note how this brings up the same form again.

152. Select the AutoFormCarSeeker action. Observe how it does not show in the rendered MainMenu and that it is defined to be in a MenuGroup called AutoForms.

  • Change the MenuGroup of the action to none/blank/empty.
  • Note that the action now shows next to PersonSeeker.
  • Change it back by pressing Ctrl+Z (undo) or do it manually.

153. Select the PersonSeeker action in the list. Press the three-dot button (...) next to the MenuGroup choice - this brings up the EditMenuGroup dialog. Press Add menu group, name it IControlTheMenuGrouping/AtAllLevels, and close the dialog.

154. Set the MenuGroup on the PersonSeeker action to IControlTheMenuGrouping/AtAllLevels.

  • Check the top-rendered menu and find the IControlTheMenuGrouping.
  • Click it to open it and note the sublevel AtAllLevels.
  • Click to open; notice the PersonSeeker action under this submenu.

155. Note that the PersonSeeker action is now gone from the top level - the Global action will only be in one place in the top menu.

156. Note that the PersonSeeker action has a Bring Up View Model setting under the header What the action does.

157. Press the three-dot button next to the Bring Up View Model.

  • Note that the ViewModel Editor is brought into focus, showing the ViewModel that was chosen for the action.
    • Go back to the Action dialog (step 146, or just alt-tab).

158. Change the Bring Up View Model value to Index. Verify that you get the ViewModel Editor showing the Index ViewModel when you press the three-dots button (...).

159. Go back to the Action dialog and undo the change. Now, go into the rendered top menu, find the PersonSeeker action, and note the ViewModel icon next to it. Click on the icon.

  • Note that you get to the ViewModel Editor with the correct form showing.

160. Select the Exit-action in the left list. Now go into the rendered top menu, find the PersonSeeker action, and click - not on the icon, but on the text of the rendered action.

  • Note that the GlobalAction form has now selected the PersonSeeker action.

161. Create a new GlobalAction with the top left Add Global Action button. Name it PersonSeekerAgain, set the BringsUpViewModel to PersonSeeker, and set its Menu group to IControlTheMenuGrouping/AtAllLevels.

  • Check the rendered menu - where did it show up?

162. Set the BringUpViewModel to PersonSeeker.

163. Save and check in the Browser in your running app.

164. Set the DividerGroupWithinMenu to SomeName on PersonSeekerAgain. Save and check the web app.

165. Set the DividerGroupWithinMenu to SomeName on PersonSeekerIAmInControl. Save and check the web app.

166. DividerGroup introduces sections. To order actions, use Sort order in the group. Set AAA on one and BBB on the other. Save and check the web.

167. Switch the AAA and BBB on the actions. Make sure you understand how to control the order.

168. As I stated earlier, there are three types of actions. We have looked at one of them - the GlobalAction. GlobalActions only end up in the GlobalMenu. Now, we will look at Class actions.

Class actions are type specific. A Class action belongs to a Class and all objects of that class can see/use this action.

169. Go back to ViewModel PersonSeeker, fold down actions, note the 2 ShowPerson links in Person-Nesting, and click either one.

170. A new but similar action form shows up, listing all class actions for class Person. There are 2 ShowPerson actions. One is one we got from AdoptThisViewModelAndMakeItOurOwn. This function also copies some of the actions associated with the definition we adopted. Rename the one that does NOT bring up autoform to ShowPersonIAmInControl.

171. Back in ViewModelEditor, note that the name is updated and the parenthesis with the class name Person within - this is how you recognise a Class action. These class actions both belong to the Person class.

172. Change the class of the nesting to Car.

  • Ignore the many errors.
  • Notice that Person-actions disappear and ShowCar shows up instead. Class actions are automatically shown depending on the type context.
  • Change the class of nesting back to Person. Save.

173. Test the web and both actions. They bring up two different forms. In the form called only Person, we see the same Class action again, taking us to the second form and vice versa.

174. Class actions show up directly as long as the type information is correct. This is what we often want, but not always. There is a way to opt-out, showing the action in a place where the type rules say it should show.

  • Look at the top of the Action definition - a list of ViewModel-places the type-information matches.
  • Notice the checkbox for opt-in. Make sure all levels are checked - on both actions for Person.
  • Save and check the web.

175. You can also opt-in/out actions in a ViewModel by pressing the arrow in front of the class action. Try it out.

176. You can opt back in from the ViewModel tree as well. Try this out.

The third type of action is the ViewModelAction (aka ContextAction). These actions are unique to a view. 

177. Go to ViewModel Person, fold down actions, and note the DeleteThis action. Double-click it.

178. We can now see the third kind of Action form - still similar to the other two types - but the left side in this form resembles the ViewModel tree structure. This form also shows the matched Class actions for the ViewModel levels. You can only see the difference between Class-actions and true-ViewModelActions by the latter missing the class name behind it.

179 In the DeleteThis ViewModel action, find the AreYouSure setting and set it to "Wow - wanna delete this person?". Save.

  • Test the action on the web. Say Cancel on the question to delete.

180. Since ViewModel actions are not limited by class, they can theoretically show up at any level of the ViewModel tree. We rarely want a ViewModelAction to show up on more than one level in the view. This is controlled in the Action editor - top right side - only on this level.

  • Change it from Person to Car. Save and test the web.
  • Now, the DeleteThis is only available when a car is selected. This is logically strange so change it back to Person.

181. We have looked at the three different types of actions, but there is one more action-like thing: the ViewModel placed button, ViewModelEditor for Person-view. Add a button and name the column DeleteMe. Save. Check the web.

182. Nothing happens since it has no expression in action language that does anything. We will connect this ButtonAction to the ViewModelAction DeleteThis by finding the Is action setting, and next to it, a picker where we optionally can make the button execute one of the actions available to us in the view. Choose DeleteThis. Save. Test the web.

Next Chapter

The_1000_steps_program_to_MDriven_Chapter_6

This page was edited 10 days ago on 06/19/2024. What links here