*&---------------------------------------------------------------------*
*& Report rhstru00 *
*&---------------------------------------------------------------------*
*& From SAP_BASIS Releases 6.20 report RHSTRU00 uses alv tree control. *
*& Old report is available under the name RHSTRU00_OLD. *
*&---------------------------------------------------------------------*
REPORT Y_TEST_HR_01 MESSAGE-ID PP .
TYPE-POOLS: ICON.
TABLES: OBJEC, T77EO, GDSTR, GDSET, PDSTR.
TYPES: BEGIN OF T_NODE ,
ID LIKE STRUC-SEQNR,
PARENT LIKE STRUC-SEQNR,
TREE_ID TYPE LVC_NKEY,
TEXT(25),
TEXT4(40),
SHORT(14),
OTYPE(2),
REALO TYPE REALO,
ISTAT(1),
BEGDA(10),
ENDDA(10),
VISTAT(1),
VBEGDA(10),
VENDDA(10),
PROZT(8),
OBJID LIKE OBJEC-OBJID,
END OF T_NODE.
TYPES: BEGIN OF TYPE_TREC,
KEY TYPE LVC_NKEY,
ID LIKE STRUC-SEQNR,
END OF TYPE_TREC.
TYPES: BEGIN OF PARENT_STACK_LINE,
LEVEL TYPE STRUC-LEVEL,
ID LIKE STRUC-SEQNR,
END OF PARENT_STACK_LINE.
*----------------------------------------------------------------------*
* error handling (for internal errors)
*----------------------------------------------------------------------*
* type for ABAP callstack
TYPES: BEGIN OF T_S_ABAP_CALLSTACK,
MAINPROGRAM LIKE SY-REPID,
INCLUDE LIKE SY-REPID,
LINE TYPE I,
EVENTTYPE LIKE ABDBG-LEVENTTYPE,
EVENT LIKE ABDBG-LEVENT,
FLAG_SYSTEM,
END OF T_S_ABAP_CALLSTACK.
* variable for ABAP callstack
DATA: G_CALLSTACK TYPE STANDARD TABLE OF T_S_ABAP_CALLSTACK,
G_CALLSTACK_WA TYPE T_S_ABAP_CALLSTACK.
* macro should never be called ;-)
DEFINE INTERNAL_ERROR. "&1 action that lead to error
* get callstack
CALL 'ABAP_CALLSTACK' ID 'DEPTH' FIELD 99
ID 'CALLSTACK' FIELD G_CALLSTACK.
* get current form/event
READ TABLE G_CALLSTACK INTO G_CALLSTACK_WA INDEX 1.
MESSAGE I001(AQ_AD_HOC) WITH G_CALLSTACK_WA-EVENT
&1. "action.
END-OF-DEFINITION.
DATA: IT_NODE TYPE STANDARD TABLE OF T_NODE,
IT_TAB TYPE STANDARD TABLE OF T_NODE,
WA_NODE TYPE T_NODE.
DATA: BEGIN OF WAOBJEC,
STEXT LIKE OBJEC-STEXT,
SHORT LIKE OBJEC-SHORT,
REALO LIKE OBJEC-REALO,
PLVAR LIKE OBJEC-PLVAR,
OTYPE LIKE OBJEC-OTYPE,
OBJID LIKE OBJEC-OBJID,
BEGDA LIKE OBJEC-BEGDA,
ENDDA LIKE OBJEC-ENDDA,
ISTAT LIKE OBJEC-ISTAT,
SEQNR LIKE STRUC-SEQNR,
END OF WAOBJEC.
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE SY-UCOMM.
CLASS CL_GUI_OBJECT DEFINITION LOAD.
DATA: CONTROL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
ALV_TREE_CONTROL TYPE REF TO CL_GUI_ALV_TREE,
ALV_HTML_HEADER TYPE REF TO CL_GUI_HTML_VIEWER,
FIELDCATALOG TYPE STANDARD TABLE OF LVC_S_FCAT,
HIERARCHY_HEADER TYPE TREEV_HHDR.
DATA: LT_LIST_COMMENTARY TYPE SLIS_T_LISTHEADER,
GS_VARIANT TYPE DISVARIANT.
DATA: S_NODE TYPE LVC_NKEY.
DATA: OTYPE TYPE OTYPE.
DATA: ANSWER(1).
DATA: IT_TOOLBAR_EXCLUDING TYPE UI_FUNCTIONS.
DATA: EXCL_TAB TYPE TABLE OF SY-UCOMM.
DATA: IT_RECURSIONS TYPE STANDARD TABLE OF TYPE_TREC,
EXIST_REC TYPE FLAG_X.
DATA: REPID LIKE SY-REPID,
SEL_TABLE TYPE TABLE OF RSPARAMS.
DATA: G_OPTIMIZE_FLAG TYPE FLAG VALUE ' ', "note 768405
G_OPTIMIZE_BUTTON TYPE SMP_DYNTXT. "#EC NEEDED
* parent handling
DATA: G_PARENT_STACK TYPE STANDARD TABLE OF PARENT_STACK_LINE,
G_PARENT_STACK_WA TYPE PARENT_STACK_LINE.
DATA: LV_STRING TYPE STRING.
DATA: GX_ACC_MODE_ON TYPE ABAP_BOOL.
* Change On 2011-2-15
TYPES: BEGIN OF T_DATA,
ID TYPE STRUC-SEQNR,
PARENT TYPE STRUC-SEQNR,
ONAME TYPE HRP1000-SHORT,
SNAME TYPE HRP1000-SHORT,
PNAME TYPE HRP1000-SHORT,
ORGID TYPE HRP1000-OBJID,
POSID TYPE HRP1000-OBJID,
PERID TYPE HRP1000-OBJID,
KNAME TYPE HRP1000-SHORT,
KCCID TYPE HRP1000-OBJID,
GRAPH TYPE I,
IMAGEFILE TYPE CHAR40,
END OF T_DATA.
DATA: GT_DATA TYPE STANDARD TABLE OF T_DATA.
DATA: WA_DATA TYPE T_DATA.
DATA: GV_VISIO_PATH TYPE STRING,
GV_VISIO_PARA TYPE STRING.
* Objetos OLE
DATA: GV_APLICACION TYPE OLE2_OBJECT. "Aplicacion Visio
DATA: GV_DOCUMENTOS TYPE OLE2_OBJECT. "Coleccion de Documentos Visio
DATA: GV_DOCUMENTO TYPE OLE2_OBJECT. "Documento Visio
DATA: GV_ADDON TYPE OLE2_OBJECT. "Addon
DATA: GV_ADDONS TYPE OLE2_OBJECT. "Addons
DATA: GV_SISTEMA TYPE OLE2_OBJECT. "Addons
DATA: GV_TEMPLATE_PATH TYPE STRING.
DATA: GV_TEMPLATE_FILE TYPE STRING.
DATA: GV_DATA_FILE TYPE STRING.
DATA: GV_WORKDIR TYPE STRING.
DATA: GV_PARAMETRO_MACRO TYPE STRING,
GV_ORGWIZ TYPE STRING VALUE 'OrgCWIZ'.
*----------------------------------------------------------------------*
* SELECTION SCREEN *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1
WITH FRAME
TITLE TEXT-001.
* technical depth
PARAMETERS : TDEPTH LIKE GDSTR-TDEPTH.
* recursion check
PARAMETERS: RECURS LIKE PPPCH-RECURS DEFAULT ' ' AS CHECKBOX.
* perform rhstru00_old
PARAMETERS: OLD_REP TYPE FLAG_X DEFAULT ' ' AS CHECKBOX.
* Change On 2011-2-15
PARAMETERS: VISIO TYPE FLAG_X DEFAULT ' ' AS CHECKBOX.
PARAMETERS: VISIO_T TYPE FLAG_X DEFAULT ' ' AS CHECKBOX.
PARAMETERS: DEMO_D TYPE FLAG_X DEFAULT ' ' AS CHECKBOX.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_C1 RADIOBUTTON GROUP RA1. "###
SELECTION-SCREEN COMMENT 12(30) TEXT-901.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_C2 RADIOBUTTON GROUP RA1. "#####
SELECTION-SCREEN COMMENT 12(30) TEXT-902.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 10.
PARAMETERS: VISIO_D1 RADIOBUTTON GROUP RA1. "#######
SELECTION-SCREEN COMMENT 12(30) TEXT-903.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK1.
*PARAMETERS: ORG_PATH TYPE STRING DEFAULT 'C:\Program Files\Microsoft Office\Office12\ORGWIZ.EXE'.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
* Structured evaluation
$PCH$-ACCES = $STRUCTURED$.
PCHTIMED = 'D'.
* initialize variables
CLEAR: WAOBJEC,
IT_NODE[].
REPID = SY-REPID.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
* call rhstru00_old
IF NOT OLD_REP IS INITIAL.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
CURR_REPORT = REPID
TABLES
SELECTION_TABLE = SEL_TABLE
EXCEPTIONS
NOT_FOUND = 1
NO_REPORT = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'FUNCTION RS_REFRESH_FROM_SELECTOPTIONS'. "#EC NOTEXT
ENDIF.
SUBMIT RHSTRU00_OLD
WITH SELECTION-TABLE SEL_TABLE
AND RETURN.
EXIT.
ENDIF.
* perform report for all objects?
IF PCHOBJID[] IS INITIAL AND PCHSOBID[] IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Information'(027)
TEXT_QUESTION = 'Programm ausf黨ren f黵 alle Objekte?'(015)
DISPLAY_CANCEL_BUTTON = ' '
IMPORTING
ANSWER = ANSWER
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'FUNCTION POPUP_TO_CONFIRM' . "#EC NOTEXT
ENDIF.
* back to selection screen
IF ANSWER = '2'.
CLEAR SEL_TABLE[].
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
CURR_REPORT = REPID
TABLES
SELECTION_TABLE = SEL_TABLE
EXCEPTIONS
NOT_FOUND = 1
NO_REPORT = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'RS_REFRESH_FROM_SELECTOPTIONS'. "#EC NOTEXT
ENDIF.
SUBMIT RHSTRU00
VIA SELECTION-SCREEN
WITH SELECTION-TABLE SEL_TABLE.
ENDIF.
ENDIF.
* Branchwise authority
$PCH$-STRU_AUTHY = 'A'.
* Check recursions
IF RECURS = 'X'.
$PCH$-RECURS = 'X'.
ENDIF.
* technical depth
$PCH$-TDEPTH = TDEPTH.
$PCH$-REFRE = $OFF$.
*----------------------------------------------------------------------*
* GET OBJEC *
*----------------------------------------------------------------------*
GET OBJEC.
CLEAR WAOBJEC.
MOVE-CORRESPONDING OBJEC TO WAOBJEC.
WAOBJEC-SEQNR = STRUC-SEQNR.
* set the current id of the node
WA_NODE-ID = STRUC-SEQNR.
* determine the correct parent id
IF STRUC-PUP = 0.
* there is no parent as this is the topmost node
CLEAR: G_PARENT_STACK, G_PARENT_STACK_WA.
WA_NODE-PARENT = STRUC-PUP.
* add the current node as parent to the stack
G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
G_PARENT_STACK_WA-ID = STRUC-SEQNR.
INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
INDEX 1.
ELSE.
* there was a parent
READ TABLE G_PARENT_STACK
INDEX 1
INTO G_PARENT_STACK_WA.
IF SY-SUBRC = 0.
*there is a parent in the stack available now check if the levels match
IF G_PARENT_STACK_WA-LEVEL >= STRUC-LEVEL.
* delete the entries that are deeper in the structure
* as they can not be the parents
DELETE G_PARENT_STACK
WHERE LEVEL >= STRUC-LEVEL.
ENDIF.
* read again the topmost entry from the stack
READ TABLE G_PARENT_STACK
INDEX 1
INTO G_PARENT_STACK_WA.
IF SY-SUBRC = 0.
* there is a parent
WA_NODE-PARENT = G_PARENT_STACK_WA-ID.
* add the current node as parent to the stack
G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
G_PARENT_STACK_WA-ID = STRUC-SEQNR.
INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
INDEX 1.
ELSE.
* there is no parent this is the topmost node others where skipped
WA_NODE-PARENT = STRUC-PUP.
* add the current node as parent to the stack
G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
G_PARENT_STACK_WA-ID = STRUC-SEQNR.
INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
INDEX 1.
ENDIF.
ELSE.
* there is no parent this is the topmost node others where skipped
WA_NODE-PARENT = STRUC-PUP.
* add the current node as parent to the stack
G_PARENT_STACK_WA-LEVEL = STRUC-LEVEL.
G_PARENT_STACK_WA-ID = STRUC-SEQNR.
INSERT G_PARENT_STACK_WA INTO G_PARENT_STACK
INDEX 1.
ENDIF.
ENDIF.
* node text
IF NOT WAOBJEC-STEXT IS INITIAL.
WA_NODE-TEXT4 = WAOBJEC-STEXT.
ELSE.
WA_NODE-TEXT4 = WAOBJEC-SHORT.
ENDIF.
WA_NODE-SHORT = WAOBJEC-SHORT.
* Object key
WA_NODE-OTYPE = WAOBJEC-OTYPE.
WA_NODE-REALO = WAOBJEC-REALO.
* Status validity
WA_NODE-ISTAT = WAOBJEC-ISTAT .
WRITE WAOBJEC-BEGDA TO WA_NODE-BEGDA.
WRITE WAOBJEC-ENDDA TO WA_NODE-ENDDA.
* Relation
IF STRUC-VISTAT IS NOT INITIAL.
WA_NODE-VISTAT = STRUC-VISTAT .
WRITE STRUC-VBEGDA TO WA_NODE-VBEGDA.
WRITE STRUC-VENDDA TO WA_NODE-VENDDA.
ENDIF.
* Percentage
IF STRUC-VISTAT IS NOT INITIAL AND STRUC-VPROZT IS NOT INITIAL.
WRITE STRUC-VPROZT TO WA_NODE-PROZT(6) RIGHT-JUSTIFIED .
WRITE ' %' TO WA_NODE-PROZT+6(2).
ENDIF.
WA_NODE-OBJID = WAOBJEC-OBJID.
* Add icon when recursion
IF NOT RECURS IS INITIAL AND
STRUC-RFLAG = 'X'.
WA_NODE-TEXT = TEXT-014.
EXIST_REC = 'X'.
ENDIF.
APPEND WA_NODE TO IT_NODE.
CLEAR WA_NODE.
CLEAR WAOBJEC.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*
*----------------------------------------------------------------------*
END-OF-SELECTION.
IF VISIO = 'X'.
PERFORM SUB_CREATE_DIR.
IF VISIO_C1 = 'X'.
IF DEMO_D = 'X'.
PERFORM SUB_FILL_DEMO_DATA_C1.
ELSE.
PERFORM SUB_FILL_DATA_C1.
ENDIF.
PERFORM SUB_SET_PARAMETRO_MACRO2 USING GV_PARAMETRO_MACRO.
ENDIF.
IF VISIO_C2 = 'X'.
IF DEMO_D = 'X'.
PERFORM SUB_FILL_DEMO_DATA_C2.
ELSE.
PERFORM SUB_FILL_DATA_C2. "to do
ENDIF.
PERFORM SUB_SET_PARAMETRO_MACRO3 USING GV_PARAMETRO_MACRO.
ENDIF.
IF VISIO_D1 = 'X'.
IF DEMO_D = 'X'.
PERFORM SUB_FILL_DEMO_DATA. "to do
ELSE.
PERFORM SUB_FILL_DATA. "to do
ENDIF.
PERFORM SUB_SET_PARAMETRO_MACRO USING GV_PARAMETRO_MACRO.
ENDIF.
* PERFORM SUB_GET_TEMPLATE USING 'ORGCHART'.
IF VISIO_D1 = 'X'.
PERFORM SUB_DOWNLOAD_PHOTO.
ENDIF.
* PERFORM SUB_RUN_TEMPLATE. "delete by david because the photo can't be update automate
PERFORM SUB_DOWNLOAD_DATA.
PERFORM SUB_OPEN_DOCUMENT.
ELSE.
CALL SCREEN 100.
ENDIF.
*---------------------------------------------------------------------*
* MODULE STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
* structural graphic is not available in web gui
CALL FUNCTION 'GET_ACCESSIBILITY_MODE'
IMPORTING
ACCESSIBILITY = GX_ACC_MODE_ON
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0 OR
GX_ACC_MODE_ON = ABAP_TRUE OR
CL_GUI_OBJECT=>WWW_ACTIVE = 'X'.
APPEND 'GSTR' TO EXCL_TAB.
ENDIF.
* show button for recursions ?
IF RECURS NE 'X'.
APPEND 'SHRE' TO EXCL_TAB.
ENDIF.
PERFORM SET_OPTIMIZATION_TEXT.
SET PF-STATUS 'MAIN' EXCLUDING EXCL_TAB.
SET TITLEBAR 'MAINTITLE'.
* CALL METHOD CL_GUI_HTML_VIEWER=>set_accdescription
* EXPORTING
* accdescription = 'Header Data'
** EXCEPTIONS
** CNTL_ERROR = 1
**