Calling SAP Pushbutton, Statistical and Business Graphics, With Dialog 
The following ABAP program illustrates some of the function module calls discussed in the preceding topics.
PROGRAM G_BMAT_2.
*--------------------------------------------------------*
* *
*--------------------------------------------------------*
* This report calls SAP Pushbutton Graphics. *
* *
* When the user clicks on a push button, a menu first *
* appears in which additional information can be *
* requested. These requests cause SAP Statistics or *
* SAP Business Graphics windows to open. *
* *
* If the user selects a whole row or column (by clicking *
* on a row or column header), a 2D graph or single *
* curve is displayed. Clicking on the button in the *
* upper left corner causes a 3D graph or group *
* of curves to be displayed. *
*--------------------------------------------------------*
DATA: BEGIN OF MATRIX OCCURS 1, "// Data for BMAT
COL1(20),
COL2 TYPE P,
COL3 TYPE P,
COL4 TYPE P,
COL5 TYPE P,
END OF MATRIX.
DATA: BEGIN OF ATTR OCCURS 1, "// ATTR table for BMAT
COL1(20),
COL2 TYPE P,
COL3 TYPE P,
COL4 TYPE P,
COL5 TYPE P,
END OF ATTR.
DATA: BEGIN OF SIZE OCCURS 1, "// SIZE table for BMAT
C(10) TYPE C,
END OF SIZE.
DATA: BEGIN OF MENUE OCCURS 1, "// MENU table for BMAT
TEXT(40),
TEXT2(20),
END OF MENUE.
DATA: BEGIN OF SDATA OCCURS 1, "// Data for STAT
X TYPE P,
Y TYPE P,
END OF SDATA.
DATA: BEGIN OF OPTS OCCURS 1, "// OPTS table for STAT
"// and BUSG
C(80) TYPE C,
END OF OPTS.
DATA: BEGIN OF TCOL OCCURS 1, "// TCOL table for BUSG
C(20) TYPE C,
END OF TCOL.
DATA: RWNID(10), M_TYP(1).
DATA: BUSG_STAT, STAT_STAT, BMAT_STAT.
DATA STAT_ART(3).
DATA IND LIKE SY-INDEX.
DATA: NROW(2), NCOL(2).
DATA: MENROW(2).
DATA: MENCOL(2).
MENUE-TEXT = 'Business Graphics'. "// Fill BMAT popup
MENUE-TEXT2 = 'Business Graphics'.
APPEND MENUE.
MENUE-TEXT = 'Statistics Graphics'.
MENUE-TEXT2 = '(logarithmic)'.
APPEND MENUE.
MATRIX-COL1 = 'Row 1'. "// Fill BMAT Data
MATRIX-COL2 = 11.
MATRIX-COL3 = 12.
MATRIX-COL4 = 13.
MATRIX-COL5 = 14.
APPEND MATRIX.
MOVE-CORRESPONDING MATRIX TO ATTR.
ATTR-COL1 = 0.
APPEND ATTR.
MATRIX-COL1 = 'Row 2'.
MATRIX-COL2 = 21.
MATRIX-COL3 = 22.
MATRIX-COL4 = 23.
MATRIX-COL5 = 24.
APPEND MATRIX.
MOVE-CORRESPONDING MATRIX TO ATTR.
ATTR-COL1 = 0.
APPEND ATTR.
MATRIX-COL1 = 'Sub-total'.
MATRIX-COL2 = 32.
MATRIX-COL3 = 34.
MATRIX-COL4 = 36.
MATRIX-COL5 = 38.
APPEND MATRIX.
MOVE-CORRESPONDING MATRIX TO ATTR.
ATTR-COL1 = 0.
APPEND ATTR.
MATRIX-COL1 = 'Row 4'.
MATRIX-COL2 = 41.
MATRIX-COL3 = 42.
MATRIX-COL4 = 43.
MATRIX-COL5 = 44.
APPEND MATRIX.
MOVE-CORRESPONDING MATRIX TO ATTR.
ATTR-COL1 = 0.
APPEND ATTR.
MATRIX-COL1 = 'T O T A L'.
MATRIX-COL2 = 73.
MATRIX-COL3 = 76.
MATRIX-COL4 = 79.
MATRIX-COL5 = 82.
APPEND MATRIX.
MOVE-CORRESPONDING MATRIX TO ATTR.
ATTR-COL1 = 0.
APPEND ATTR.
WRITE: /,/ 'Label',22 'Column 1',37 'Column 2',
52 'Column 3',67 'Column 4',/.
LOOP AT MATRIX.
WRITE: /(15) MATRIX-COL1, (14) MATRIX-COL2,(14) MATRIX-COL3,
(14) MATRIX-COL4,(14) MATRIX-COL5.
ENDLOOP.
WRITE: /,/,/ 'Function keys:'.
WRITE: /,/ 'F10 starts SAP Pushbutton Graphics'.
WRITE: /,/ 'F3 ends SAP Pushbutton Graphics'.
AT PF10.
TCOL = 'Column 1'. APPEND TCOL. "// fill TCOL for BUSG
TCOL = 'Column 2'. APPEND TCOL.
TCOL = 'Column 3'. APPEND TCOL.
TCOL = 'Column 4'. APPEND TCOL.
SIZE = 'C 1 30'. APPEND SIZE.
SIZE = 'R 1 2 '. APPEND SIZE.
*------------------------------------------------------------*
* Dialog Loop *
*------------------------------------------------------------*
BUSG_STAT = '2'. "// start and do not wait
STAT_STAT = '2'. "// start and do not wait
CLEAR BMAT_STAT. "// start and wait
DO.
CALL FUNCTION 'GRAPH_BUTTON_MENUE'
"// Pushbutton pad with menu
EXPORTING
TTEXT = SY-TITLE "// Title
CTXT1 = 'Label' "// 5 columns
CTXT2 = 'Column 1'
CTXT3 = 'Column 2'
CTXT4 = 'Column 3'
CTXT5 = 'Column 4'
VTXT1 = 'Display Criterion 1'
VALD1 = 1
VAL11 = 10
VAL12 = 30
VAL13 = 40
VAL14 = 50
COL11 = 'CYAN'
COL12 = 'GRAY'
COL13 = 'YELLOW'
COL14 = 'GRAY'
COL15 = 'RED'
MTITL = 'Menu' "// Menu title
STAT = BMAT_STAT "// Dialog parameters
SUPER = 'X' "// Closing 'BMAT' will
"// close all other windows
WINID = 'BMAT' "// Window Id
IMPORTING
ROWNR = NROW "// Selected row
COLNR = NCOL "// Selected column
MROWN = MENROW "// Selected menu-row
MCOLN = MENCOL "// Selected menu-column
M_TYP = M_TYP "// Message-type
RWNID = RWNID "// Id of sending window
TABLES
DATA = MATRIX "// Defines the matrix
MENU = MENUE "// Defines the menu
ATTR = ATTR "// Defines colors etc.
SIZE = SIZE. "// Defines sizes
BMAT_STAT = '4'. "// Next time, just wait
*------------------------------------------------------------*
* Check the message and react properly *
*------------------------------------------------------------*
* *
* M_TYP : 'D' : Last window has been closed (none left open) *
* 'I' : Message from BMAT *
* '0' : Message from some other (non-BMAT) window *
* *
*-----------------------------------------------------------*
CASE M_TYP.
WHEN 'D'. "// BMAT was closed
EXIT.
WHEN ' '.
WHEN '0'. "// Message from non-BMAT
"// window
IF RWNID(4) EQ 'BUSG'. "// If it's a BUSG window,
"// it must be a 'Q'
BUSG_STAT = '2'. "// Restart BUSG next time
ENDIF.
IF RWNID(4) EQ 'STAT'. "// If it's a STAT window,
STAT_STAT = '2'. "// Restart STAT next time
ENDIF.
WHEN 'Q'. "// Should not happen when
"// using SUPER.
WHEN 'I'. "// Message from BMAT
"// Reaction depends on
"// selected item:
CASE MENROW.
WHEN 1. "// Start or reload BUSG
REFRESH OPTS.
IF NROW(1) EQ '1' AND NCOL(1) EQ '0'.
"// Upleft item -> 3D BUSG
CALL FUNCTION 'GRAPH_3D'
EXPORTING
TITL = 'Overview'
DIM1 = 'Columns'
DIM2 = 'Rows'
STAT = BUSG_STAT
TABLES
DATA = MATRIX.
BUSG_STAT = '5'. "// Reload next time
ENDIF.
IF NROW(1) EQ '1' AND NCOL(1) NE '0'.
"// Col-header -> 2D BUSG
READ TABLE TCOL INDEX NCOL.
CALL FUNCTION 'GRAPH_MATRIX_2D'
EXPORTING
TITL = TCOL
NCOL = NCOL
STAT = BUSG_STAT
TABLES
DATA = MATRIX
OPTS = OPTS
TCOL = TCOL.
BUSG_STAT = '5'. "// Reload next time
ENDIF.
IF NROW(1) NE '1' AND NCOL(1) EQ '0'.
"// Row-header -> 2D
"// BUSG
NROW = NROW - 1.
READ TABLE MATRIX INDEX NROW.
CALL FUNCTION 'GRAPH_MATRIX_2D'
EXPORTING
TITL = MATRIX-COL1
NROW = NROW
STAT = BUSG_STAT
TABLES
DATA = MATRIX
OPTS = OPTS
TCOL = TCOL.
BUSG_STAT = '5'. "// Reload next time
ENDIF.
WHEN 2. "// Start or reload STAT
IF MENCOL(1) EQ '1'.
STAT_ART = 'LOG'.
ELSE.
STAT_ART = 'LIN'.
ENDIF.
REFRESH SDATA.
REFRESH OPTS.
IF NROW(1) EQ '1' AND NCOL(1) EQ '0'.
"// Upleft item -> 4
"// curves
DO 4 TIMES.
IND = SY-INDEX.
DO 5 TIMES.
READ TABLE MATRIX INDEX SY-INDEX.
SDATA-X = SY-INDEX.
CASE IND.
WHEN 1.
SDATA-Y = MATRIX-COL2.
WHEN 2.
SDATA-Y = MATRIX-COL3.
WHEN 3.
SDATA-Y = MATRIX-COL4.
WHEN 4.
SDATA-Y = MATRIX-COL5.
ENDCASE.
APPEND SDATA.
ENDDO.
OPTS = '$5'.
APPEND OPTS.
OPTS = 'COLOR=7'.
APPEND OPTS.
OPTS = 'THICK=1'.
APPEND OPTS.
ENDDO.
CALL FUNCTION 'STAT_GRAPH'
EXPORTING
TTEXT = 'Overview'
STAT = STAT_STAT
Y_ART = STAT_ART
NOPOS = 'X'
TABLES
OPTS = OPTS
DATA = SDATA.
STAT_STAT = '5'. "// Reload next time
ENDIF.
IF NROW(1) EQ '1' AND NCOL(1) NE '0'.
"// Col-header -> 1
"// curve
DO 5 TIMES.
READ TABLE MATRIX INDEX SY-INDEX.
SDATA-X = SY-INDEX.
CASE NCOL.
WHEN 1.
SDATA-Y = MATRIX-COL2.
WHEN 2.
SDATA-Y = MATRIX-COL3.
WHEN 3.
SDATA-Y = MATRIX-COL4.
WHEN 4.
SDATA-Y = MATRIX-COL5.
ENDCASE.
APPEND SDATA.
ENDDO.
OPTS = '$5'.
APPEND OPTS.
OPTS = 'COLOR=7'.
APPEND OPTS.
OPTS = 'THICK=1'.
APPEND OPTS.
READ TABLE TCOL INDEX NCOL.
CALL FUNCTION 'STAT_GRAPH'
EXPORTING
TTEXT = TCOL
STAT = STAT_STAT
Y_ART = STAT_ART
NOPOS = 'X'
TABLES
OPTS = OPTS
DATA = SDATA.
STAT_STAT = '5'. "// Reload next time
ENDIF.
IF NROW(1) NE '1' AND NCOL(1) EQ '0'.
"// Row-header -> 1
"// curve
NROW = NROW - 1.
READ TABLE MATRIX INDEX NROW.
SDATA-X = 1.
SDATA-Y = MATRIX-COL2.
APPEND SDATA.
SDATA-X = 2.
SDATA-Y = MATRIX-COL3.
APPEND SDATA.
SDATA-X = 3.
SDATA-Y = MATRIX-COL4.
APPEND SDATA.
SDATA-X = 4.
SDATA-Y = MATRIX-COL5.
APPEND SDATA.
OPTS = '$4'.
APPEND OPTS.
OPTS = 'COLOR=7'.
APPEND OPTS.
OPTS = 'THICK=1'.
APPEND OPTS.
CALL FUNCTION 'STAT_GRAPH'
EXPORTING
TTEXT = MATRIX-COL1
STAT = STAT_STAT
Y_ART = STAT_ART
NOPOS = 'X'
TABLES
OPTS = OPTS
DATA = SDATA.
STAT_STAT = '5'. "// Reload next time
ENDIF.
ENDCASE.
ENDCASE.
ENDDO.