The declarative DIALOG block defines an interactive instruction that can be used by a parent DIALOG, or as parallel dialog.
[ PRIVATE | PUBLIC ] DIALOG dialog-name ()
   [ define-block ]
   { menu-block
   | record-input-block
   | construct-block
   | display-array-block
   | input-array-block
   }
END DIALOG
                                where define-block is a local variable declaration block.
MENU
   [ BEFORE MENU
       menu-statement
     [...]
   ]
   menu-option
   [...]
END MENU
{ COMMAND option-name
      [option-comment] [ HELP help-number ]
    menu-statement
    [...]
| COMMAND KEY ( key-name ) option-name
      [option-comment] [ HELP help-number ]
    menu-statement
    [...]
| COMMAND KEY ( key-name )
    menu-statement
    [...]
| ON ACTION action-name 
             [ ATTRIBUTES ( action-attributes-menu ) ]
    menu-statement
    [...]
}
{ TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| CONTEXTMENU = { YES | NO | AUTO }
| DISCLOSUREINDICATOR
    [,...] }
where menu-statement is:
{ statement
|  NEXT OPTION option 
|  SHOW OPTION { ALL | option [,...] } 
|  HIDE OPTION { ALL | option [,...] } 
}
                                INPUT { BY NAME { variable | record.* } [,...]
      | variable | record.* } [,...] FROM field-list
      }
   [ ATTRIBUTES ( input-control-attribute [,...] ) ] 
   [ input-control-block 
       [...]
   ]
END INPUT
where
                input-control-attribute
                is:{ HELP = help-number
| NAME = "sub-dialog-name"
| WITHOUT DEFAULTS [ = boolean ]
}
where
                input-control-block is one of:{ BEFORE INPUT
| BEFORE FIELD field-spec [,...]
| ON CHANGE field-spec [,...]
| AFTER FIELD field-spec [,...]
| AFTER INPUT
| ON ACTION action-name
             [ INFIELD field-spec ]
             [ ATTRIBUTES ( action-attributes-input ) ]
| ON KEY ( key-name [,...] )}
    dialog-statement
    [...]
            { TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| VALIDATE = NO
| CONTEXTMENU = { YES | NO | AUTO }
    [,...] }
CONSTRUCT { BY NAME variable ON column-list
          | variable ON column-list FROM field-list
          }
   [ ATTRIBUTES ( construct-control-attribute [,...] ) ] 
   [ construct-control-block
       [...]
   ]
END CONSTRUCT
{ HELP = help-number
| NAME = "sub-dialog-name"
}
where
                construct-control-block is one of:{ BEFORE CONSTRUCT
| BEFORE FIELD field-spec [,...]
| AFTER FIELD field-spec [,...]
| AFTER CONSTRUCT
| ON ACTION action-name
             [INFIELD field-spec]
             [ ATTRIBUTES ( action-attributes-construct ) ]
| ON KEY ( key-name [,...] )}
    dialog-statement
    [...]
            { TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| CONTEXTMENU = { YES | NO | AUTO }
    [,...] }
DISPLAY ARRAY array TO screen-array.*
   [ ATTRIBUTES ( display-array-control-attribute [,...] ) ]
   [ display-array-control-block 
       [...]
   ]
END DISPLAY
{ HELP = help-number
| COUNT = row-count
| KEEP CURRENT ROW = [ = boolean ]
| DETAILACTION = action-name
| DOUBLECLICK = action-name
| ACCESSORYTYPE = { DETAIBUTTON | DISCLOSUREINDICATOR | CHECKMARK }
}
{ BEFORE DISPLAY
| BEFORE ROW
| AFTER ROW
| AFTER DISPLAY
| ON ACTION action-name
             [ ATTRIBUTES ( action-attributes-display-array ) ]
| ON KEY ( key-name [,...] )
| ON FILL BUFFER
| ON SELECTION CHANGE
| ON SORT
| ON APPEND [ ATTRIBUTES ( action-attributes-listmod-triggers ) ]
| ON INSERT [ ATTRIBUTES ( action-attributes-listmod-triggers ) ]
| ON UPDATE [ ATTRIBUTES ( action-attributes-listmod-triggers ) ]
| ON DELETE [ ATTRIBUTES ( action-attributes-listmod-triggers ) ]
| ON EXPAND ( row-index )
| ON COLLAPSE ( row-index )
| ON DRAG_START ( dnd-object )
| ON DRAG_FINISH ( dnd-object )
| ON DRAG_ENTER( dnd-object )
| ON DRAG_OVER ( dnd-object )
| ON DROP ( dnd-object ) }
    dialog-statement
    [...]
{ TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| CONTEXTMENU = { YES | NO | AUTO }
| ROWBOUND
    [,...] }
{ TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| CONTEXTMENU = { YES | NO | AUTO }
    [,...] }
INPUT ARRAY array FROM screen-array.*
   [ ATTRIBUTES ( input-array-control-attribute [,...] ) ]
   [ input-array-control-block 
       [...]
   ]
END INPUT
{ APPEND ROW [ = boolean ]
| AUTO APPEND [ = boolean ]
| COUNT = row-count
| DELETE ROW [ = boolean ]
| HELP = help-number
| INSERT ROW [ = boolean ]
| KEEP CURRENT ROW [ = boolean ]
| MAXCOUNT = max-row-count
| WITHOUT DEFAULTS [ = boolean ]
}
where
                input-array-control-block is one
                of:{ BEFORE INPUT
| BEFORE ROW
| BEFORE FIELD [,...] 
| ON CHANGE field-spec [,...] 
| AFTER FIELD field-spec [,...] 
| ON ROW CHANGE
| ON SORT
| AFTER ROW
| BEFORE DELETE
| AFTER DELETE
| BEFORE INSERT
| AFTER INSERT
| AFTER INPUT
| ON ACTION action-name
             [INFIELD field-spec]
             [ ATTRIBUTES ( action-attributes-input-array ) ]
| ON KEY ( key-name [,...] ) }
    dialog-statement
    [...]
{ TEXT = string
| COMMENT = string
| IMAGE = string
| ACCELERATOR = string
| DEFAULTVIEW = { YES | NO | AUTO }
| VALIDATE = NO
| CONTEXTMENU = { YES | NO | AUTO }
| ROWBOUND
    [,...] }
{ statement
| ACCEPT DIALOG
| CONTINUE DIALOG
| EXIT DIALOG
| NEXT FIELD
   { CURRENT
   | NEXT
   | PREVIOUS
   | field-spec
   }
}
{ field-name
| table-name.* 
| table-name.field-name 
| screen-array[line].* 
| screen-array[line].field-name
| screen-record.*
| screen-record.field-name
} [,...]
{ field-name 
| table-name.field-name 
| screen-array.field-name
| screen-record.field-name
}
{ column-name
| table-name.*
| table-name.column-name
} [,...]