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.