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.