To create the structures and commands associated with your menu, you submit a source
program that contains PMENU procedure statements. Because the source statements that
are used to create a PMENU entry are not accessible in the PMENU catalog entry, you
should save the statements in your development catalog as a SOURCE entry.
Consider the following
example:
proc pmenu catalog=sasuser.corprpts;
menu main;
item 'File' menu=menuFile mnemonic='F';
item 'View' menu=menuView mnemonic='V';
item 'Help' menu=menuHelp mnemonic='H';
menu menuFile;
item 'Open Report' selection=fileOpen mnemonic='O';
item 'Save Report' selection=fileSave mnemonic='S';
separator;
item 'End';
selection fileOpen 'openrpt';
selection fileSave 'saverpt';
menu menuView;
item 'View Table' selection=viewTbl mnemonic='T';
item 'Options' selection=viewOpts mnemonic='p';
selection viewTbl 'afa c=mylib.mycat.view.frame';
selection viewOpts 'afa c=mylib.mycat.options.frame';
menu menuHelp;
item 'Contents' selection=helpCont mnemonic='C';
item 'About...' selection=helpAbt mnemonic='A';
selection helpCont 'wbrowse "http://myintranet.com/help.htm"';
selection helpAbt 'afa c=mylib.mycat.about.frame';
run;
quit;In this example,
-
The menu is stored in the catalog
named in the PROC PMENU statement.
-
The first menu statement names the PMENU catalog entry that will contain the menu,
which in this example is sasuser.corprpts.main.pmenu.
-
Each ITEM statement specifies an
item in the menu bar. The value of MENU= corresponds to a subsequent
MENU statement.
-
Each MENU= option is defined by
a MENU statement, where each subsequent ITEM statement specifies the
selections that are available under the named menu in the menu bar.
-
A separator line can be added to
menus by using the SEPARATOR statement.
-
ITEM statements with no SELECTION=
option indicate that the menu command is equivalent to the value of
the ITEM. For example, item 'End' in the
menuFile menu is the End command.
-
Each SELECTION= option points to
a corresponding SELECTION statement to define the command that is
issued by the menu.
Note: To issue multiple commands,
separate them with semicolons.
-
Commands in a SELECTION statement that do not correspond to a valid SAS command must
be implemented and trapped in the frame's
SCL program.
The completed menu appears
as follows:
In the PMENU example,
the menuFile menu contains two SELECTION statements that issue the
custom commands
openrpt and
saverpt. Your frame SCL program can process commands that are not valid SAS commands if
-
the command name is not a valid AF window command or SAS
global command
-
your frame SCL includes a CONTROL ALWAYS or CONTROL ENTER option
-
the MAIN section in your frame SCL performs the processing
For example, the SCL program for the frame associated with MAIN.PMENU could include
the following code:
dcl char(8) command;
INIT:
control always;
return;
MAIN:
command=lowcase(word(1));
if command='openrpt' then do;
/* ...SCL to open reports... */
call nextcmd();
end;
else if command='saverpt' then do;
/* ...SCL to save reports... */
call nextcmd();
end;
return;
For complete information
on the PMENU procedure, refer to the SAS Procedures Guide.