Calling SAP Structural Graphics 
The following ABAP program illustrates some of the function module calls discussed in the preceding topics.
REPORT BCGRSU01.
* parameters
* object parameters
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS OBJ_LOAD DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) TEXT-LOB.
SELECTION-SCREEN POSITION 24.
PARAMETERS OBJ_NO LIKE SY-INDEX DEFAULT 10.
SELECTION-SCREEN END OF LINE.
* graphics data options
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS MEN_LOAD DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) TEXT-LME.
SELECTION-SCREEN POSITION 24.
PARAMETERS MEN_OPEN AS CHECKBOX.
SELECTION-SCREEN COMMENT 26(20) TEXT-MOP.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 24.
PARAMETERS MEN_EXTD AS CHECKBOX.
SELECTION-SCREEN COMMENT 26(20) TEXT-MEX.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS PRF_LOAD DEFAULT 'X' AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) TEXT-LPR.
SELECTION-SCREEN POSITION 24.
PARAMETERS FMT_R2 AS CHECKBOX.
SELECTION-SCREEN COMMENT 26(20) TEXT-FR2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS OPT_LOAD DEFAULT ' ' AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) TEXT-LOP.
SELECTION-SCREEN POSITION 24.
PARAMETERS OPT_FORC AS CHECKBOX.
SELECTION-SCREEN COMMENT 26(20) TEXT-OFO.
SELECTION-SCREEN END OF LINE.
PARAMETERS TXT_LOAD DEFAULT ' ' NO-DISPLAY.
* so options
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS SOF_FLAG DEFAULT ' ' AS CHECKBOX.
SELECTION-SCREEN COMMENT 3(20) TEXT-SEN.
SELECTION-SCREEN POSITION 24.
PARAMETERS SOF_RECV LIKE SOS04-L_RECNAM DEFAULT SPACE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
* test options
PARAMETERS TRC_MODE DEFAULT ' ' NO-DISPLAY.
PARAMETERS BRK_MODE DEFAULT ' ' NO-DISPLAY.
* table statements
TABLES:
GSUOBJC,
GSUMENU,
GSUPROF,
GSUDISP.
* data declarations
* define tables for data blocks
DATA BEGIN OF OBJECTS OCCURS 10.
INCLUDE STRUCTURE GSUOBJC.
DATA END OF OBJECTS.
DATA BEGIN OF MENU OCCURS 10.
INCLUDE STRUCTURE GSUMENU.
DATA END OF MENU.
DATA BEGIN OF PROFILES OCCURS 10.
INCLUDE STRUCTURE GSUPROF.
DATA END OF PROFILES.
DATA BEGIN OF TEXTS OCCURS 10.
INCLUDE STRUCTURE GSUDISP.
DATA END OF TEXTS.
* define tables for transferring data
DATA BEGIN OF TRF_OBJECTS OCCURS 10.
INCLUDE STRUCTURE GSUOBJC.
DATA END OF TRF_OBJECTS.
DATA BEGIN OF TRF_TOOLBOX OCCURS 10.
INCLUDE STRUCTURE GSUMENU.
DATA END OF TRF_TOOLBOX.
DATA BEGIN OF TRF_PROFILES OCCURS 10.
INCLUDE STRUCTURE GSUPROF.
DATA END OF TRF_PROFILES.
* several data definitions
DATA:
DLG_STAT,
FMT_R3 VALUE 'X',
* parameters for return session
RET_RWNID LIKE GSUX-APPLID,
RET_MTYP LIKE GSUX-TYPE,
RET_CTYP LIKE GSUX-TYPE,
RET_ITEM LIKE GSUMENU-MENUEID.
DATA BEGIN OF RET_OBJECTS OCCURS 1.
INCLUDE STRUCTURE GSUOBJC.
DATA END OF RET_OBJECTS.
* data for trace session
DATA:
TAB_ENTRIES LIKE SY-TABIX,
TRC_INDEX LIKE SY-TABIX,
TRC_SUBRC LIKE SY-SUBRC,
OK_CODE(4).
DATA:
TRC_MOMENT VALUE '0',
MOM_START VALUE '0',
MOM_INSERT VALUE '1'.
* initialization
* set pf-status
SET PF-STATUS 'STANDARD'.
* set break flag
IF BRK_MODE NE SPACE.
PERFORM BREAKLEVEL_SET(SAPLGRAP)
USING '2'.
ENDIF.
* set format
IF FMT_R2 NE SPACE.
FMT_R3 = SPACE.
ELSE.
FMT_R3 = 'X'.
ENDIF.
* fill table of objects if required
IF OBJ_LOAD NE SPACE.
PERFORM BUILD_OBJECTS
TABLES OBJECTS
USING OBJ_NO.
ENDIF.
* fill table of menu items if required
IF MEN_LOAD NE SPACE.
PERFORM BUILD_MENU
TABLES MENU.
ENDIF.
* fill table of profiles if required
IF PRF_LOAD NE SPACE.
PERFORM BUILD_PROFILES
TABLES PROFILES.
ENDIF.
* fill table of texts if required
PERFORM BUILD_TEXTS
TABLES TEXTS.
* BREAK-POINT if required
IF BRK_MODE NE SPACE.
BREAK-POINT 'start graphics...'.
ENDIF.
* start graphics session
DLG_STAT = '1'.
* copy data tables into transfer tables
LOOP AT OBJECTS.
MOVE OBJECTS TO TRF_OBJECTS.
APPEND TRF_OBJECTS.
ENDLOOP.
LOOP AT MENU.
MOVE MENU TO TRF_TOOLBOX.
APPEND TRF_TOOLBOX.
ENDLOOP.
LOOP AT PROFILES.
MOVE PROFILES TO TRF_PROFILES.
APPEND TRF_PROFILES.
ENDLOOP.
* set toolbox
IF MEN_LOAD NE SPACE.
CALL FUNCTION 'GRAPH_STRU_SET_TOOLBOX'
TABLES TOOLBOX = TRF_TOOLBOX.
ENDIF.
* set profiles
IF PRF_LOAD NE SPACE.
CALL FUNCTION 'GRAPH_STRU_SET_PROFILES'
TABLES PROFILES = TRF_PROFILES.
ENDIF.
* set display
IF TXT_LOAD NE SPACE.
CALL FUNCTION 'GRAPH_STRU_SET_DISPLAY'
TABLES DISPLAY = TEXTS.
ENDIF.
* set message
CALL FUNCTION 'GRAPH_STRU_SET_MESSAGE'
EXPORTING MESSAGE = 'Testing SAP Structural Graphics (SAP).
* set options
IF OPT_LOAD NE SPACE.
DATA:
COLBACK LIKE TGSUX-COLBACK VALUE '09',
COLSHADOW LIKE TGSUX-COLSHADOW VALUE '07'.
CALL FUNCTION 'GRAPH_STRU_SET_OPTIONS'
EXPORTING FORCE = OPT_FORC
COLBACK = COLBACK
COLSHADOW = COLSHADOW
PROFILE = 'TY'.
ENDIF.
* standard graphX loop
DO.
* call graphX
CALL FUNCTION 'GRAPH_STRUCTURAL'
EXPORTING ADDSHAPES = 'X'
EDITABLE = 'X'
EXTACTBAR = MEN_EXTD
FOCUS = 'X'
NEWFORMAT = FMT_R3
PATTERN = ' '
PWDID = ' '
REFRESH = ' '
SO_CONTENTS = TEXT-BSP
SO_RECEIVER = SOF_RECV
SO_SEND = SOF_FLAG
SO_TITLE = 'TEST'(TES)
STATUS = DLG_STAT
SUPER = ' '
TBOXOPEN = MEN_OPEN
* TBOXPOSX = 'L'
* TBOXPOSY = 'T'
* TBOXSIZEX = '20'
* TBOXSIZEY = '40'
TBOXTITLE = 'Tools'(TOL)
THELPTEXT = 'Documentation'(THX)
APPLTITLE = 'Generated model structure'(BSP)
TOOLSTITLE = 'Functions'(TOT)
TSETSTITLE = 'Subareas'(TST)
VERSION30A = FMT_R3
VIEWTITLE = 'Complete Structure'(GST)
WINID = ' '
* WINPOSX = 'C'
* WINPOSY = 'C'
* WINSIZEX = '80'
* WINSIZEY = '80'
IMPORTING M_TYP = RET_MTYP
RWNID = RET_RWNID
TABLES OBJECTS = TRF_OBJECTS
EXCEPTIONS OTHERS = 3.
* refresh transfer table
REFRESH:
TRF_OBJECTS,
TRF_TOOLBOX,
TRF_PROFILES.
* exit in sap office mode
IF SOF_FLAG EQ 'X'.
EXIT.
ENDIF.
* return session
IF RET_MTYP = 'D'.
EXIT.
ELSE.
DLG_STAT = '4'.
ENDIF.
IF RET_MTYP = 'I'.
IF BRK_MODE NE SPACE.
BREAK-POINT 'message received'.
ENDIF.
CALL FUNCTION 'GET_STRU_PARAM'
IMPORTING C_TYP = RET_CTYP
ITEM = RET_ITEM
TABLES OBJECTS = RET_OBJECTS
EXCEPTIONS OTHERS = 1.
IF SY-SUBRC NE 0.
DLG_STAT = '3'.
CALL FUNCTION 'GRAPH_STRU_SET_MESSAGE'
EXPORTING MESSAGE = 'Error while enqueuing'(ENQ).
CONTINUE.
ENDIF.
IF BRK_MODE NE SPACE.
BREAK-POINT 'parameters evaluated'.
ENDIF.
CASE RET_CTYP.
WHEN 'C'.
CASE RET_ITEM.
WHEN '02'.
DLG_STAT = '3'.
TEXTS-GTEXT = 'Again'(NOM).
APPEND TEXTS.
CALL FUNCTION 'GRAPH_STRU_SET_DISPLAY'
TABLES DISPLAY = TEXTS.
* insert object
WHEN 'AD'.
ADD 1 TO OBJ_NO.
CLEAR TRF_OBJECTS.
* propose any values
MOVE OBJ_NO TO TRF_OBJECTS-OBJECT.
CONDENSE TRF_OBJECTS-OBJECT NO-GAPS.
TRF_OBJECTS-MASTER = RET_OBJECTS-OBJECT.
TRF_OBJECTS-EMPHASIZED = 'X'.
TRF_OBJECTS-OTYPE = 'AA'.
TRF_OBJECTS-OSTATUS = '9'.
TRF_OBJECTS-AUTFTEXT = 'New object'(NOB).
TRF_OBJECTS-AUTFTEXT+20 = '&%'.
MOVE OBJ_NO TO TRF_OBJECTS-AUTFTEXT+25.
CONDENSE TRF_OBJECTS-AUTFTEXT NO-GAPS.
TRF_OBJECTS-DISPTEXT = 'Typ'(TYP).
TRF_OBJECTS-DISPTEXT+10 = TRF_OBJECTS-OTYPE.
TRF_OBJECTS-DISPTEXT+12 = '&%'.
TRF_OBJECTS-DISPTEXT+15 = 'Status'(STA).
TRF_OBJECTS-DISPTEXT+25 = TRF_OBJECTS-OSTATUS.
TRF_OBJECTS-DISPTEXT+30 = '&%'.
TRF_OBJECTS-DISPTEXT+35 = TEXT-NOB.
TRF_OBJECTS-DISPTEXT+60 = '&%'.
MOVE SY-INDEX TO TRF_OBJECTS-DISPTEXT+65.
CONDENSE TRF_OBJECTS-DISPTEXT NO-GAPS.
TRF_OBJECTS-RELATION = 'ZZZ'.
TRF_OBJECTS-RELATEXT = 'Priority'(PRI).
TRF_OBJECTS-RELATEXT+15 = TRF_OBJECTS-PRIORITY.
TRF_OBJECTS-RELATEXT+20 = '&%'.
TRF_OBJECTS-RELATEXT+25 = TRF_OBJECTS-RELATION.
TRF_OBJECTS-RELATEXT+30 = '&%'.
TRF_OBJECTS-RELATEXT+32 = 'Relation'(REL).
CONDENSE TRF_OBJECTS-RELATEXT NO-GAPS.
TRF_OBJECTS-RSTATUS = TRF_OBJECTS-OSTATUS.
APPEND TRF_OBJECTS.
* trace object before inserting it
IF TRC_MODE NE SPACE.
TRC_MOMENT = MOM_INSERT.
CALL SCREEN 2000
STARTING AT 2 1.
IF TRC_SUBRC NE 0.
CLEAR TRF_OBJECTS.
REFRESH TRF_OBJECTS.
ENDIF.
ENDIF.
IF TRF_OBJECTS NE SPACE.
MOVE TRF_OBJECTS TO OBJECTS.
APPEND OBJECTS.
ELSE.
SUBTRACT 1 FROM OBJ_NO.
ENDIF.
* set new dialog status
DLG_STAT = '3'.
CALL FUNCTION 'GRAPH_STRU_SET_MESSAGE'
EXPORTING MESSAGE = 'Object inserted'(ADD).
* otherwise do nothing
WHEN OTHERS.
CALL SCREEN 6000
STARTING AT 3 2
ENDING AT 37 16.
ENDCASE.
* otherwise do nothing
WHEN OTHERS.
* set new dialog status
DLG_STAT = '3'.
CALL FUNCTION 'GRAPH_STRU_SET_MESSAGE'
EXPORTING MESSAGE = 'Task completed'(AAG).
ENDCASE.
ENDIF.
ENDDO.
*----------------------------------------------------------------*
* FORM BUILD_OBJECTS *
*----------------------------------------------------------------*
* creates table with objects *
*----------------------------------------------------------------*
* TABLES OBJECTS *
*----------------------------------------------------------------*
FORM BUILD_OBJECTS
TABLES OBJECTS STRUCTURE GSUOBJC
USING OBJ_NO.
DATA:
OBJ_MASTER LIKE GSUOBJC-MASTER VALUE ' ',
OBJ_ORIGINALTYPESET(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
OBJ_TYPESET(26) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
OBJ_ORIGINALSTATUSSET(26) VALUE '12345',
OBJ_STATUSSET(26) VALUE '12345',
OBJ_ORIGINALRELATIONSET(30) VALUE 'A0A1A2A3A4B0B1B2B3B4C0C1C2C3C4',
OBJ_RELATIONSET(30) VALUE 'A0A1A2A3A4B0B1B2B3B4C0C1C2C3C4',
OBJ_ORIGINALPRIORITYSET(10) VALUE '0945621387',
OBJ_PRIORITYSET(10) VALUE '0945621387',
MST_INDEX LIKE SY-INDEX VALUE 1,
TYP_CURRENT LIKE SY-INDEX VALUE 1,
STA_CURRENT LIKE SY-INDEX VALUE 1,
REL_CURRENT LIKE SY-INDEX VALUE 1,
PRI_CURRENT LIKE SY-INDEX VALUE 1.
* BREAK-POINT if required
IF BRK_MODE NE SPACE.
BREAK-POINT 'build objects...'.
ENDIF.
DO OBJ_NO TIMES.
* object key
MOVE SY-INDEX TO OBJECTS-OBJECT.
CONDENSE OBJECTS-OBJECT NO-GAPS.
* master object
OBJECTS-MASTER = OBJ_MASTER.
IF MST_INDEX EQ SY-INDEX.
* different ways to define the new master object
* MOVE SY-INDEX TO OBJ_MASTER.
ADD 1 TO OBJ_MASTER.
CONDENSE OBJ_MASTER NO-GAPS.
* ADD 1 TO OBJ_MASTER.
* set distance to the next master
ADD 3 TO MST_INDEX.
ENDIF.
* emphasized flag - used later on
OBJECTS-EMPHASIZED = SPACE.
* object type
OBJECTS-OTYPE = OBJ_TYPESET(1).
SHIFT OBJ_TYPESET.
ADD 1 TO TYP_CURRENT.
IF TYP_CURRENT GT 26.
TYP_CURRENT = 1.
OBJ_TYPESET = OBJ_ORIGINALTYPESET.
ENDIF.
* object status
OBJECTS-OSTATUS = OBJ_STATUSSET(1).
SHIFT OBJ_STATUSSET.
ADD 1 TO STA_CURRENT.
IF STA_CURRENT GT 5.
STA_CURRENT = 1.
OBJ_STATUSSET = OBJ_ORIGINALSTATUSSET.
ENDIF.
* object text in overview mode
OBJECTS-AUTFTEXT = 'Objekt'(OBJ).
OBJECTS-AUTFTEXT+20 = '&%'.
MOVE SY-INDEX TO OBJECTS-AUTFTEXT+25.
CONDENSE OBJECTS-AUTFTEXT NO-GAPS.
* object text in detail mode
OBJECTS-DISPTEXT = 'Typ'(TYP).
OBJECTS-DISPTEXT+10 = OBJECTS-OTYPE.
OBJECTS-DISPTEXT+12 = '&%'.
OBJECTS-DISPTEXT+15 = 'Status'(STA).
OBJECTS-DISPTEXT+25 = OBJECTS-OSTATUS.
OBJECTS-DISPTEXT+30 = '&%'.
OBJECTS-DISPTEXT+35 = TEXT-OBJ.
OBJECTS-DISPTEXT+60 = '&%'.
MOVE SY-INDEX TO OBJECTS-DISPTEXT+65.
CONDENSE OBJECTS-DISPTEXT NO-GAPS.
* validility - not yet used
OBJECTS-OBEGDATE = SPACE.
OBJECTS-OENDDATE = SPACE.
* staff mode
IF SY-INDEX = 3
OR SY-INDEX = 7
OR SY-INDEX = 9
OR SY-INDEX = 13.
OBJECTS-STAFF = 'X'.
ELSE.
OBJECTS-STAFF = SPACE.
ENDIF.
* dummy flag - not used
OBJECTS-DUMMY = SPACE.
* relation data only if master object is defined
IF OBJECTS-MASTER NE SPACE.
* relation type from current to master object
OBJECTS-RELATION = OBJ_RELATIONSET(2).
SHIFT OBJ_RELATIONSET BY 2 PLACES.
ADD 1 TO REL_CURRENT.
IF REL_CURRENT GT 15.
REL_CURRENT = 1.
OBJ_RELATIONSET = OBJ_ORIGINALRELATIONSET.
ENDIF.
* priority of relation
OBJECTS-PRIORITY = OBJ_PRIORITYSET(1).
SHIFT OBJ_PRIORITYSET.
ADD 1 TO PRI_CURRENT.
IF PRI_CURRENT GT 10.
PRI_CURRENT = 1.
OBJ_PRIORITYSET = OBJ_ORIGINALPRIORITYSET.
ENDIF.
* relation text
OBJECTS-RELATEXT = 'Prio'(PRI).
OBJECTS-RELATEXT+15 = OBJECTS-PRIORITY.
OBJECTS-RELATEXT+20 = '&%'.
OBJECTS-RELATEXT+25 = OBJECTS-RELATION.
OBJECTS-RELATEXT+30 = '&%'.
OBJECTS-RELATEXT+32 = 'Verkn.'(REL).
CONDENSE OBJECTS-RELATEXT NO-GAPS.
* status of relation - in this case same as object status
OBJECTS-RSTATUS = OBJECTS-OSTATUS.
* validility - not yet used
OBJECTS-RBEGDATE = SPACE.
OBJECTS-RENDDATE = SPACE.
ENDIF.
* insert object into table and print it out
APPEND OBJECTS.
CLEAR OBJECTS.
ENDDO.
* show object list if trace mode is on
IF TRC_MODE NE SPACE.
DESCRIBE TABLE OBJECTS
LINES TAB_ENTRIES.
TRC_INDEX = 1.
CALL SCREEN 2000
STARTING AT 2 1.
IF TRC_SUBRC NE 0.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------*
* FORM BUILD_MENU *
*----------------------------------------------------------------*
* creates table with menu items *
*----------------------------------------------------------------*
* TABLES MENU *
*----------------------------------------------------------------*
FORM BUILD_MENU
TABLES MENU STRUCTURE GSUMENU.
* BREAK-POINT if required
IF BRK_MODE NE SPACE.
BREAK-POINT 'build menu...'.
ENDIF.
* new action bar menu for structure items
IF FMT_R3 NE SPACE.
MENU-MENUTITLE = 'Structure processed'(STB).
ENDIF.
* item RE for refreshing structure
MENU-MENUEID = 'RE'.
MENU-MENUETEXT = 'Updating' (REF).
MENU-ACTIVATED = '0'.
APPEND MENU.
CLEAR MENU.
* other action bar menu for object items
IF FMT_R3 NE SPACE.
MENU-MENUTITLE = 'Object processed'(OBB).
ENDIF.
* item AD for inserting objects
MENU-MENUEID = 'AD'.
MENU-MENUETEXT = 'Inserting object'(INS).
MENU-ACTIVATED = '1'.
MENU-OBJFIELDS = 'X '.
APPEND MENU.
CLEAR MENU.
* reserved item 01 for moving objects
MENU-MENUEID = '01'.
MENU-MENUETEXT = 'Moving object'(MOV).
MENU-ACTIVATED = '2'.
MENU-OBJFIELDS = 'X X X '.
APPEND MENU.
CLEAR MENU.
* reserved item 02 for displaying object data
MENU-MENUEID = '02'.
MENU-MENUETEXT = 'Displaying object data'(DAT).
MENU-ACTIVATED = '1'.
MENU-OBJFIELDS = 'X '.
APPEND MENU.
CLEAR MENU.
* show toolbox items if trace mode is on
IF TRC_MODE NE SPACE.
DESCRIBE TABLE MENU
LINES TAB_ENTRIES.
TRC_INDEX = 1.
CALL SCREEN 3000
STARTING AT 2 1.
IF TRC_SUBRC NE 0.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------*
* FORM BUILD_PROFILES *
*----------------------------------------------------------------*
* creates table with profiles and rules *
*----------------------------------------------------------------*
* TABLES PROFILES *
*----------------------------------------------------------------*
FORM BUILD_PROFILES
TABLES PROFILES STRUCTURE GSUPROF.
* BREAK-POINT if required
IF BRK_MODE NE SPACE.
BREAK-POINT 'build profiles...'.
ENDIF.
* types profile
PROFILES-PROFILEID = 'TY'.
PROFILES-PROFILETXT = 'Type-oriented'(PTY).
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '01'.
ENDIF.
PROFILES-OBJFIELD = 'OTYPE'.
PROFILES-CONTENTS = 'A'.
PROFILES-LINECOLOUR = '01'.
PROFILES-LINESTYLE = '00'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '12'.
PROFILES-SHAPE = '00'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'TY'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '02'.
ENDIF.
PROFILES-OBJFIELD = 'OTYPE'.
PROFILES-CONTENTS = 'B'.
PROFILES-LINECOLOUR = '02'.
PROFILES-LINESTYLE = '01'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '13'.
PROFILES-SHAPE = '01'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'TY'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '03'.
ENDIF.
PROFILES-OBJFIELD = 'OTYPE'.
PROFILES-CONTENTS = 'C'.
PROFILES-LINECOLOUR = '03'.
PROFILES-LINESTYLE = '02'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '14'.
PROFILES-SHAPE = '02'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'TY'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '04'.
ENDIF.
PROFILES-OBJFIELD = 'RELATION'.
PROFILES-CONTENTS = 'A0'.
PROFILES-LINECOLOUR = '04'.
PROFILES-LINESTYLE = '03'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '09'.
PROFILES-SHAPE = '03'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'TY'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '05'.
ENDIF.
PROFILES-OBJFIELD = 'RELATION'.
PROFILES-CONTENTS = 'B0'.
PROFILES-LINECOLOUR = '05'.
PROFILES-LINESTYLE = '04'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '10'.
PROFILES-SHAPE = '04'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'TY'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '06'.
ENDIF.
PROFILES-OBJFIELD = 'RELATION'.
PROFILES-CONTENTS = 'C0'.
PROFILES-LINECOLOUR = '06'.
PROFILES-LINESTYLE = '05'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '11'.
PROFILES-SHAPE = '05'.
APPEND PROFILES.
CLEAR PROFILES.
* status profile
PROFILES-PROFILEID = 'ST'.
PROFILES-PROFILETXT = 'Status-oriented'(PST).
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '01'.
ENDIF.
PROFILES-OBJFIELD = 'OSTATUS'.
PROFILES-CONTENTS = '1'.
PROFILES-LINECOLOUR = '01'.
PROFILES-LINESTYLE = '06'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '12'.
PROFILES-SHAPE = '06'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'ST'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '02'.
ENDIF.
PROFILES-OBJFIELD = 'OSTATUS'.
PROFILES-CONTENTS = '2'.
PROFILES-LINECOLOUR = '02'.
PROFILES-LINESTYLE = '07'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '13'.
PROFILES-SHAPE = '07'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'ST'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '03'.
ENDIF.
PROFILES-OBJFIELD = 'OSTATUS'.
PROFILES-CONTENTS = '3'.
PROFILES-LINECOLOUR = '03'.
PROFILES-LINESTYLE = '08'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '14'.
PROFILES-SHAPE = '08'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'ST'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '04'.
ENDIF.
PROFILES-OBJFIELD = 'RSTATUS'.
PROFILES-CONTENTS = '3'.
PROFILES-LINECOLOUR = '04'.
PROFILES-LINESTYLE = '09'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '15'.
PROFILES-SHAPE = '09'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'ST'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '05'.
ENDIF.
PROFILES-OBJFIELD = 'RSTATUS'.
PROFILES-CONTENTS = '4'.
PROFILES-LINECOLOUR = '05'.
PROFILES-LINESTYLE = '01'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '09'.
PROFILES-SHAPE = '10'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'ST'.
IF FMT_R3 NE SPACE.
PROFILES-RULEID = '06'.
ENDIF.
PROFILES-OBJFIELD = 'RSTATUS'.
PROFILES-CONTENTS = '5'.
PROFILES-LINECOLOUR = '06'.
PROFILES-LINESTYLE = '02'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '10'.
PROFILES-SHAPE = '11'.
APPEND PROFILES.
CLEAR PROFILES.
* priority profile
IF FMT_R3 NE SPACE.
PROFILES-PROFILEID = 'PR'.
PROFILES-PROFILETXT = 'Priority'(PPR).
PROFILES-RULEID = '01'.
PROFILES-OBJFIELD = 'PRIORITY'.
PROFILES-CONTENTS = '0'.
PROFILES-LINECOLOUR = '01'.
PROFILES-LINESTYLE = '03'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '11'.
PROFILES-SHAPE = '12'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'PR'.
PROFILES-RULEID = '02'.
PROFILES-OBJFIELD = 'PRIORITY'.
PROFILES-CONTENTS = '2'.
PROFILES-LINECOLOUR = '02'.
PROFILES-LINESTYLE = '04'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '12'.
PROFILES-SHAPE = '00'.
APPEND PROFILES.
CLEAR PROFILES.
PROFILES-PROFILEID = 'PR'.
PROFILES-RULEID = '03'.
PROFILES-OBJFIELD = 'PRIORITY'.
PROFILES-CONTENTS = '4'.
PROFILES-LINECOLOUR = '03'.
PROFILES-LINESTYLE = '05'.
PROFILES-TEXTCOLOUR = '00'.
PROFILES-BOXCOLOUR = '13'.
PROFILES-SHAPE = '01'.
APPEND PROFILES.
CLEAR PROFILES.
ENDIF.
* show menu items if trace mode is on
IF TRC_MODE NE SPACE.
DESCRIBE TABLE PROFILES
LINES TAB_ENTRIES.
TRC_INDEX = 1.
CALL SCREEN 4000
STARTING AT 2 1.
IF TRC_SUBRC NE 0.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------*
* FORM BUILD_TEXTS *
*----------------------------------------------------------------*
* creates table with texts *
*----------------------------------------------------------------*
* TABLES TEXTS *
*----------------------------------------------------------------*
FORM BUILD_TEXTS
TABLES TEXTS STRUCTURE GSUDISP.
DATA TXT_COUNT(3) VALUE '0'.
* BREAK-POINT if required
IF BRK_MODE NE SPACE.
BREAK-POINT 'build texts...'.
ENDIF.
* fill text lines in table
TEXTS-GTEXT = 'Version:'(T00).
TEXTS-GTEXT+20 = TXT_COUNT.
CONDENSE TEXTS-GTEXT.
ADD 1 TO TXT_COUNT.
TEXTS-GTEXT = 'This is a '(T01).
APPEND TEXTS.
TEXTS-GTEXT = 'a sample'(T02).
APPEND TEXTS.
TEXTS-GTEXT = 'text,'(T03).
APPEND TEXTS.
TEXTS-GTEXT = 'that is to show'(T04).
APPEND TEXTS.
TEXTS-GTEXT = 'that this window'(T05).
APPEND TEXTS.
TEXTS-GTEXT = 'can be called.'(T06).
APPEND TEXTS.
* show texts if trace mode is on
IF TRC_MODE NE SPACE.
DESCRIBE TABLE TEXTS
LINES TAB_ENTRIES.
TRC_INDEX = 1.
CALL SCREEN 5000
STARTING AT 3 2
ENDING AT 70 16.
IF TRC_SUBRC NE 0.
STOP.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------*
* MODULE PBO_2000 *
*----------------------------------------------------------------*
* PBO module dynpro 2000 - object list *
*----------------------------------------------------------------*
MODULE PBO_2000 OUTPUT.
CASE TRC_MOMENT.
* at the beginning
WHEN MOM_START.
SET PF-STATUS 'STANDARD'.
READ TABLE OBJECTS
INDEX TRC_INDEX.
MOVE OBJECTS TO GSUOBJC.
* when objects should be inserted
WHEN MOM_INSERT.
SET PF-STATUS 'INSERT'.
MOVE TRF_OBJECTS TO GSUOBJC.
* stop when no moment is set
WHEN OTHERS.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE.
*----------------------------------------------------------------*
* MODULE PBO_3000 *
*----------------------------------------------------------------*
* PBO module dynpro 3000 - menu items *
*----------------------------------------------------------------*
MODULE PBO_3000 OUTPUT.
SET PF-STATUS 'STANDARD'.
READ TABLE MENU
INDEX TRC_INDEX.
MOVE MENU TO GSUMENU.
ENDMODULE.
*----------------------------------------------------------------*
* MODULE PBO_4000 *
*----------------------------------------------------------------*
* PBO module dynpro 4000 - profiles *
*----------------------------------------------------------------*
MODULE PBO_4000 OUTPUT.
SET PF-STATUS 'STANDARD'.
READ TABLE PROFILES
INDEX TRC_INDEX.
MOVE PROFILES TO GSUPROF.
ENDMODULE.
*---------------------------------------------------------------*
* MODULE PBO_5000 *
*---------------------------------------------------------------*
* PBO module dynpro 5000 - texts *
*---------------------------------------------------------------*
MODULE PBO_5000 OUTPUT.
SET PF-STATUS 'STANDARD'.
ENDMODULE.
*---------------------------------------------------------------*
* MODULE PBO_6000 *
*---------------------------------------------------------------*
* PBO module dynpro 6000 - texts *
*---------------------------------------------------------------*
MODULE PBO_6000 OUTPUT.
SET PF-STATUS 'STANDARD'.
ENDMODULE.
*---------------------------------------------------------------*
* MODULE READ_TABLE_5000 *
*---------------------------------------------------------------*
* read texts for dynpro 5000 *
*---------------------------------------------------------------*
MODULE READ_TABLE_5000 OUTPUT.
DATA PBO_STARTINDEX LIKE SY-INDEX.
PBO_STARTINDEX = SY-STEPL + TRC_INDEX - 1.
READ TABLE TEXTS
INDEX PBO_STARTINDEX.
IF SY-SUBRC EQ 0.
MOVE TEXTS TO GSUDISP.
ENDIF.
ENDMODULE.
*---------------------------------------------------------------*
* MODULE READ_TABLE_6000 *
*---------------------------------------------------------------*
* read texts for dynpro 6000 *
*---------------------------------------------------------------*
MODULE READ_TABLE_6000 OUTPUT.
DATA PBO_STARTINDEX2 LIKE SY-INDEX.
PBO_STARTINDEX2 = SY-STEPL + TRC_INDEX - 1.
READ TABLE RET_OBJECTS
INDEX PBO_STARTINDEX2.
ENDMODULE.
*--------------------------------------------------------------*
* MODULE ok_code *
*--------------------------------------------------------------*
* process ok_code for all dynpros *
*--------------------------------------------------------------*
MODULE OK_CODE INPUT.
TRC_SUBRC = 4.
CASE OK_CODE.
* WHEN 'TRAC'.
* IF TRC_MODE NE SPACE.
* TRC_MODE = ' '.
* ELSE.
* TRC_MODE = 'X'.
* ENDIF.
WHEN 'SAVE'.
CASE TRC_MOMENT.
WHEN MOM_INSERT.
MOVE GSUOBJC TO TRF_OBJECTS.
MODIFY TRF_OBJECTS INDEX 1.
WHEN OTHERS.
ENDCASE.
WHEN 'GO '.
TRC_SUBRC = 0.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'STOP'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'END '.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'P++ '.
TRC_INDEX = TAB_ENTRIES.
WHEN 'P+ '.
IF TRC_INDEX < TAB_ENTRIES.
ADD 1 TO TRC_INDEX.
ENDIF.
WHEN 'P- '.
IF TRC_INDEX > 1.
SUBTRACT 1 FROM TRC_INDEX.
ENDIF.
WHEN 'P-- '.
TRC_INDEX = 1.
WHEN OTHERS.
ENDCASE.
ENDMODULE.