Hiding and showing default action views

If needed, default action views can be hidden or shown.

When an action is rendered with a default action view (for example, by a button on the action frame of a destop front-end, or in the top action panel on a mobile front-end), it is sometimes required to hide the action button when the operation is not possible and there is not much space on the screen.

Important: Hiding an action will only make the default action view invisible, if there is a keyboard accelerator associated to the action, it can still fire the action. Consider disabling the action completely with setActionActive().
During a dialog instruction, shown or hide an action with the setActionHidden() method of the ui.Dialog built-in class. This method takes the name of the action (in lowercase letters) and a boolean expression (FALSE or TRUE) as arguments:
  BEFORE INPUT
    CALL DIALOG.setActionHidden( "zoom", TRUE )
Consider centralizing action visibility control in a setup function specific to the dialog, passing the DIALOG object as the parameter. Centralizing the action activation defines the rules in a single location:
FUNCTION cust_dialog_setup(d)
  DEFINE d ui.Dialog
  DEFINE can_modify BOOLEAN
  LET can_modify = (cust_rec.is_new OR user_info.is_admin)
  CALL d.setActionActive("update", can_modify)
  CALL d.setActionHidden("update", IIF(can_modify,0,1))
  CALL d.setActionActive("delete", can_modify)
  CALL d.setActionHidden("delete", IIF(can_modify,0,1))
  ...
END FUNCTION
Pay attention to multi-level action definitions inside a DIALOG block: Inside a DIALOG block, actions must be hidden/shown with the ui.Dialog.setActionHidden() method by specifying a simple action name:
DIALOG ATTRIBUTES(UNBUFFERED)
     ...
   BEFORE DIALOG
     CALL DIALOG.setActionHidden( "print", TRUE )
     ...
   ON ACTION query 
     -- query the database and fill the record
     ...
     CALL DIALOG.setActionHidden( "print", (cust_id IS NULL) )
     ...
END DIALOG