*&---------------------------------------------------------------------*
*& 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
** CNTL_SYSTEM_ERROR = 2
** others = 3
* .
* IF sy-subrc <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*
ENDMODULE. "STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
* MODULE init_tree OUTPUT
*---------------------------------------------------------------------*
MODULE INIT_TREE OUTPUT.
* create container for alv_tree_control
IF CONTROL_CONTAINER IS INITIAL.
CREATE OBJECT CONTROL_CONTAINER
EXPORTING
CONTAINER_NAME = 'CUSTOM_CONTROL'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'CREATE OBJECT control_container' . "#EC NOTEXT
ENDIF.
IF ALV_TREE_CONTROL IS INITIAL.
* initialization-fieldcatalog
PERFORM BUILD_FIELDCATALOG
CHANGING FIELDCATALOG.
* create info-table for html-header
PERFORM BUILD_COMMENT
USING LT_LIST_COMMENTARY.
* create alv_tree control
CREATE OBJECT ALV_TREE_CONTROL
EXPORTING
PARENT = CONTROL_CONTAINER
NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
ITEM_SELECTION = 'X'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
ILLEGAL_NODE_SELECTION_MODE = 5
FAILED = 6
ILLEGAL_COLUMN_NAME = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'CREATE OBJECT alv_tree_control' . "#EC NOTEXT
ENDIF.
* define hierarchy header
PERFORM DEFINE_HIERARCHY_HEADER
CHANGING HIERARCHY_HEADER.
* excluding function from toolbar
APPEND CL_ALV_TREE_BASE=>MC_FC_CALCULATE
TO IT_TOOLBAR_EXCLUDING.
GS_VARIANT-REPORT = SY-REPID.
CALL METHOD ALV_TREE_CONTROL->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_VARIANT = GS_VARIANT
I_SAVE = 'A'
I_DEFAULT = 'X'
IS_HIERARCHY_HEADER = HIERARCHY_HEADER
IT_LIST_COMMENTARY = LT_LIST_COMMENTARY
IT_TOOLBAR_EXCLUDING = IT_TOOLBAR_EXCLUDING
CHANGING
IT_OUTTAB = IT_TAB
IT_FIELDCATALOG = FIELDCATALOG.
* create hierarchy
PERFORM FILL_COL_TREE .
* Get Header Object
CALL METHOD ALV_TREE_CONTROL->GET_HTML_HEADER_OBJECT
CHANGING
ER_HTML_HEADER = ALV_HTML_HEADER.
* Set description
IF ALV_HTML_HEADER IS BOUND.
LV_STRING = 'Kopfdaten'(026).
CALL METHOD ALV_HTML_HEADER->SET_ACCDESCRIPTION
EXPORTING
ACCDESCRIPTION = LV_STRING
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'SET_ACCDESCRIPTION alv_html_header' . "#EC NOTEXT
ENDIF.
ELSE.
INTERNAL_ERROR 'GET_HTML_HEADER_OBJECT alv_tree_control' . "#EC NOTEXT
ENDIF.
CALL METHOD ALV_TREE_CONTROL->FRONTEND_UPDATE.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDIF.
ENDIF.
ENDMODULE. "init_tree
*---------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CALL METHOD CL_GUI_CFW=>DISPATCH.
PERFORM GET_SEL_ITEM CHANGING S_NODE.
CASE SAVE_OK.
WHEN 'DESC'.
PERFORM SHOW_OBJECT USING S_NODE.
WHEN 'MAIN'.
PERFORM MAINTENANCE_OBJECT USING S_NODE.
WHEN 'SHRE'.
PERFORM SHOW_RECURSION.
WHEN 'STRU'. "New evaluation path
PERFORM NEW_PATH USING S_NODE.
WHEN 'TICK'. "New with same depth
PERFORM NEW_LIST USING S_NODE.
WHEN 'GSTR'. "Structural graphic
PERFORM SHOW_GRAPHICHS USING S_NODE.
WHEN 'OPTI'.
PERFORM OPTIMIZATION_COLUMNS.
WHEN 'OPTIHEAD'.
PERFORM OPTIMIZATION_WITH_HEADER.
WHEN 'OPTICONT'.
PERFORM OPTIMIZATION_WITH_CONTENT.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'RW'.
LEAVE PROGRAM.
WHEN OTHERS.
OK_CODE = SAVE_OK.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* build table for FIELDCATALOG
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG
CHANGING FIELDCATALOG TYPE LVC_T_FCAT.
DATA: LS_FIELDCATALOG TYPE LVC_S_FCAT.
CLEAR FIELDCATALOG[].
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'SHORT'.
LS_FIELDCATALOG-REF_FIELD = 'SHORT'.
LS_FIELDCATALOG-REF_TABLE = 'OBJEC'.
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 1.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'OTYPE'.
LS_FIELDCATALOG-REF_FIELD = 'OTYPE'.
LS_FIELDCATALOG-REF_TABLE = 'OBJEC'.
LS_FIELDCATALOG-COLDDICTXT = 'L'.
LS_FIELDCATALOG-COL_POS = 2.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'REALO'.
LS_FIELDCATALOG-REF_FIELD = 'REALO'.
LS_FIELDCATALOG-REF_TABLE = 'OBJEC'.
LS_FIELDCATALOG-COLDDICTXT = 'L'.
LS_FIELDCATALOG-COL_POS = 3.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'ISTAT'.
LS_FIELDCATALOG-REPTEXT = 'Status (Objekt)'(002).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-TOOLTIP = 'Status des Objekts'(023).
LS_FIELDCATALOG-COL_POS = 4.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'BEGDA'.
LS_FIELDCATALOG-REPTEXT = 'Beginndatum (Objekt)'(003).
LS_FIELDCATALOG-TOOLTIP = 'Beginndatum des Objekts'(022).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 5.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'ENDDA'.
LS_FIELDCATALOG-REPTEXT = 'Endedatum (Objekt)'(006).
LS_FIELDCATALOG-TOOLTIP = 'Endedatum des Objekts'(017).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 6.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'VISTAT'.
LS_FIELDCATALOG-REPTEXT = 'Status (Verkn黳fung)'(005).
LS_FIELDCATALOG-TOOLTIP = 'Status der Verkn黳fung'(004).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 7.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'VBEGDA'.
LS_FIELDCATALOG-REPTEXT = 'Beginndatum (Verkn黳fung)'(018).
LS_FIELDCATALOG-TOOLTIP = 'Beginndatum der Verkn黳fung'(019).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 8.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'VENDDA'.
LS_FIELDCATALOG-REPTEXT = 'Endedatum (Verkn黳fung)'(020).
LS_FIELDCATALOG-TOOLTIP = 'Endedatum der Verkn黳fung'(021).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 9.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'PROZT'.
LS_FIELDCATALOG-REF_FIELD = 'VPROZT'.
LS_FIELDCATALOG-REF_TABLE = 'STRUC'.
LS_FIELDCATALOG-COLDDICTXT = 'L'.
LS_FIELDCATALOG-COL_POS = 10.
LS_FIELDCATALOG-JUST = 'R'.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
* append column recurs only if recursion exist
IF NOT RECURS IS INITIAL.
IF EXIST_REC = 'X'.
CLEAR LS_FIELDCATALOG.
LS_FIELDCATALOG-FIELDNAME = 'TEXT'.
LS_FIELDCATALOG-REPTEXT = 'Rekursion'(007).
LS_FIELDCATALOG-COLDDICTXT = 'R'.
LS_FIELDCATALOG-COL_POS = 11.
LS_FIELDCATALOG-OUTPUTLEN = 30.
APPEND LS_FIELDCATALOG TO FIELDCATALOG.
CLEAR EXIST_REC.
ENDIF.
ENDIF.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form define_hierarchy_header
*&---------------------------------------------------------------------*
* define hierarchy-header-information
*----------------------------------------------------------------------*
* -->P_L_HIERARCHY_HEADER structure for hierarchy-header
*----------------------------------------------------------------------*
FORM DEFINE_HIERARCHY_HEADER CHANGING
P_HIERARCHY_HEADER TYPE TREEV_HHDR.
P_HIERARCHY_HEADER-HEADING = 'Objektbezeichner'(300).
P_HIERARCHY_HEADER-TOOLTIP = 'Objektbezeichner'(300).
P_HIERARCHY_HEADER-WIDTH = 48.
P_HIERARCHY_HEADER-WIDTH_PIX = ' '.
ENDFORM. " define_hierarchy_header
*&---------------------------------------------------------------------*
*& Form build_header
*&---------------------------------------------------------------------*
* define header
*----------------------------------------------------------------------*
FORM BUILD_COMMENT USING PT_LIST_COMMENTARY TYPE SLIS_T_LISTHEADER.
DATA: LS_LINE TYPE SLIS_LISTHEADER,
L_OBEG(24),
WEGIDTX(50).
* planversion
LS_LINE-TYP = 'S'.
LS_LINE-KEY = 'Planvariante:'(008).
LS_LINE-INFO = PCHPLVAR.
APPEND LS_LINE TO PT_LIST_COMMENTARY.
* evaluation path
LS_LINE-KEY = 'Auswertungsweg:'(009).
SELECT SINGLE WTEXT INTO WEGIDTX FROM T77AT
WHERE LANGU = SY-LANGU AND
WEGID = PCHWEGID.
CONCATENATE PCHWEGID ' (' WEGIDTX ')' INTO LS_LINE-INFO.
APPEND LS_LINE TO PT_LIST_COMMENTARY.
* evaluation depth
LS_LINE-KEY = 'Tiefe:'(010).
LS_LINE-INFO = GDSTR-DEPTH.
APPEND LS_LINE TO PT_LIST_COMMENTARY.
* status
LS_LINE-KEY = 'Statusvektor:'(011).
LS_LINE-INFO = PC-SVECT.
APPEND LS_LINE TO PT_LIST_COMMENTARY.
* evaluation period
IF PCHOBEG = PCHOEND.
LS_LINE-KEY = 'Stichtag'(012).
WRITE PCHOBEG TO L_OBEG.
LS_LINE-INFO = L_OBEG.
ELSE.
LS_LINE-KEY = 'Auswertungszeitraum:'(013).
WRITE PCHOBEG TO L_OBEG.
WRITE '-' TO L_OBEG+12(1).
WRITE PCHOEND TO L_OBEG+14(10).
LS_LINE-INFO = L_OBEG.
ENDIF.
APPEND LS_LINE TO PT_LIST_COMMENTARY.
ENDFORM. "build_comment
*&---------------------------------------------------------------------*
*& Form Fill_col_Tree
*&---------------------------------------------------------------------*
FORM FILL_COL_TREE.
TYPES: BEGIN OF T_ICON,
ICON TYPE TV_IMAGE,
OTYPE TYPE OTYPE,
END OF T_ICON.
DATA: WA_PARENT TYPE T_NODE,
WA_NODE TYPE T_NODE,
PARENT_ID TYPE LVC_NKEY,
HTABIX LIKE SY-TABIX,
L_NODE_TEXT TYPE LVC_VALUE,
L_NEW_KEY TYPE LVC_NKEY.
DATA: LT_LAYOUT_ITEM TYPE LVC_T_LAYI,
LS_LAYOUT_ITEM TYPE LVC_S_LAYI,
ICON_STRING TYPE TV_IMAGE,
LS_NODE_LAYOUT TYPE LVC_S_LAYN .
DATA: L_NODE_KEY TYPE TV_NODEKEY,
L_OTYPE TYPE OTYPE.
DATA: LT_ICON TYPE STANDARD TABLE OF T_ICON,
LS_ICON TYPE T_ICON,
WA_REC TYPE TYPE_TREC.
* create the recursion icon
CALL FUNCTION 'ICON_CREATE'
EXPORTING
NAME = 'ICON_FAILURE'
IMPORTING
RESULT = ICON_STRING
EXCEPTIONS
ICON_NOT_FOUND = 1
OUTPUTFIELD_TOO_SHORT = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'FUNCTION ICON_CREATE' . "#EC NOTEXT
ENDIF.
LOOP AT IT_NODE INTO WA_NODE.
HTABIX = SY-TABIX.
MOVE WA_NODE-OTYPE TO L_OTYPE.
* read parent node
READ TABLE IT_NODE
INTO WA_PARENT
WITH KEY ID = WA_NODE-PARENT.
IF SY-SUBRC <> 0.
PARENT_ID = ' '.
ELSE.
PARENT_ID = WA_PARENT-TREE_ID.
ENDIF.
L_NODE_TEXT = WA_NODE-TEXT4.
IF NOT WA_NODE-TEXT IS INITIAL.
LS_NODE_LAYOUT-N_IMAGE = ICON_STRING.
LS_NODE_LAYOUT-STYLE = '5'.
CLEAR LS_LAYOUT_ITEM.
LS_LAYOUT_ITEM-FIELDNAME = 'TEXT4'.
LS_LAYOUT_ITEM-T_IMAGE = ICON_STRING.
APPEND LS_LAYOUT_ITEM TO LT_LAYOUT_ITEM.
ELSE.
* read icon from it_table
CLEAR LS_ICON.
READ TABLE LT_ICON INTO LS_ICON WITH KEY OTYPE = L_OTYPE .
IF LS_ICON-ICON IS INITIAL.
CALL FUNCTION 'OM_GET_ICON_OF_OTYPE'
EXPORTING
OTYPE = L_OTYPE
IMPORTING
ICON = LS_ICON-ICON
EXCEPTIONS
NO_ICON_FOUND = 1
OTYPE_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC > 1.
INTERNAL_ERROR 'FUNCTION OM_GET_ICON_OF_OTYPE' . "#EC NOTEXT
ENDIF.
LS_ICON-OTYPE = L_OTYPE.
APPEND LS_ICON TO LT_ICON.
ENDIF.
LS_NODE_LAYOUT-N_IMAGE = LS_ICON-ICON.
LS_NODE_LAYOUT-EXP_IMAGE = LS_ICON-ICON.
CLEAR LS_LAYOUT_ITEM.
LS_LAYOUT_ITEM-FIELDNAME = 'TEXT4'.
LS_LAYOUT_ITEM-T_IMAGE = LS_ICON-ICON.
APPEND LS_LAYOUT_ITEM TO LT_LAYOUT_ITEM.
ENDIF.
* add new node
CALL METHOD ALV_TREE_CONTROL->ADD_NODE
EXPORTING
I_RELAT_NODE_KEY = PARENT_ID
I_RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
I_NODE_TEXT = L_NODE_TEXT
IS_OUTTAB_LINE = WA_NODE
IT_ITEM_LAYOUT = LT_LAYOUT_ITEM
IS_NODE_LAYOUT = LS_NODE_LAYOUT
IMPORTING
E_NEW_NODE_KEY = L_NEW_KEY
EXCEPTIONS
RELAT_NODE_NOT_FOUND = 1
NODE_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->add_node' . "#EC NOTEXT
ENDIF.
WA_NODE-TREE_ID = L_NEW_KEY.
MODIFY IT_NODE FROM WA_NODE INDEX HTABIX.
* collect all nodes with a recursion
IF NOT WA_NODE-TEXT IS INITIAL.
WA_REC-KEY = WA_NODE-TREE_ID.
WA_REC-ID = WA_NODE-ID.
APPEND WA_REC TO IT_RECURSIONS.
CLEAR WA_REC.
ENDIF.
CLEAR WA_NODE.
CLEAR LS_LAYOUT_ITEM.
CLEAR LS_NODE_LAYOUT.
ENDLOOP.
READ TABLE IT_NODE INTO WA_NODE
INDEX 1.
L_NODE_KEY = WA_NODE-TREE_ID .
* check if the id has a child
READ TABLE IT_NODE
WITH KEY PARENT = WA_NODE-ID
TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
* expand node if there is a child
CALL METHOD ALV_TREE_CONTROL->EXPAND_NODE
EXPORTING
I_NODE_KEY = L_NODE_KEY
I_EXPAND_SUBTREE = 'X'
EXCEPTIONS
FAILED = 1
ILLEGAL_LEVEL_COUNT = 2
CNTL_SYSTEM_ERROR = 3
NODE_NOT_FOUND = 4
CANNOT_EXPAND_LEAF = 5
OTHERS = 6.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->expand_node' . "#EC NOTEXT
ENDIF.
ENDIF.
* optimize column-width
CALL METHOD ALV_TREE_CONTROL->COLUMN_OPTIMIZE
EXPORTING
I_INCLUDE_HEADING = 'X'
EXCEPTIONS
START_COLUMN_NOT_FOUND = 1
END_COLUMN_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->column_optimize'. "#EC NOTEXT
ENDIF.
G_OPTIMIZE_FLAG = ' '. "note 768405
ENDFORM. "Fill_col_Tree
*&---------------------------------------------------------------------*
*& Form get_sel_item
*&---------------------------------------------------------------------*
* form get selected item
*----------------------------------------------------------------------*
FORM GET_SEL_ITEM CHANGING SELECTED_NODE TYPE LVC_NKEY .
DATA: SELECTED_NODES TYPE LVC_T_NKEY.
CLEAR SELECTED_NODE.
* get all selected items, should only be one at all
CALL METHOD ALV_TREE_CONTROL->GET_SELECTED_NODES
CHANGING
CT_SELECTED_NODES = SELECTED_NODES
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
DP_ERROR = 2
FAILED = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
INTERNAL_ERROR
'METHOD alv_tree_control->get_selected_nodes'. "#EC NOTEXT
ENDIF.
* get the first entry
READ TABLE SELECTED_NODES INTO SELECTED_NODE
INDEX 1.
ENDFORM. " get_sel_item
*&---------------------------------------------------------------------*
*& Form show_object
*&---------------------------------------------------------------------*
* call transaction show object
*----------------------------------------------------------------------*
* -->P_S_NODE
*----------------------------------------------------------------------*
FORM SHOW_OBJECT USING P_S_NODE TYPE LVC_NKEY.
DATA: L_OTYPE TYPE OTYPE,
LS_NODE TYPE T_NODE.
READ TABLE IT_NODE INTO LS_NODE
WITH KEY TREE_ID = P_S_NODE.
MOVE LS_NODE-OTYPE TO L_OTYPE.
* nothing is selected
IF L_OTYPE IS INITIAL.
MESSAGE S085(5A).
EXIT.
ENDIF.
* look for external object
SELECT SINGLE * FROM T77EO
WHERE OTYPE = L_OTYPE.
IF SY-SUBRC EQ 0.
PERFORM SET_TRANSACTION IN PROGRAM (T77EO-PROG)
USING 'DISP' LS_NODE-REALO IF FOUND.
ELSE.
PERFORM CTL(RHCLUC00) USING PCHPLVAR 'ORGP'
L_OTYPE LS_NODE-OBJID 'DESC'.
ENDIF.
ENDFORM. " show_object
*&---------------------------------------------------------------------*
*& Form maintenance_object
*&---------------------------------------------------------------------*
* call transaction maintenance_object
*----------------------------------------------------------------------*
* -->P_S_NODE
*----------------------------------------------------------------------*
FORM MAINTENANCE_OBJECT USING P_S_NODE TYPE LVC_NKEY.
DATA: L_OTYPE TYPE OTYPE,
LS_NODE TYPE T_NODE.
READ TABLE IT_NODE INTO LS_NODE
WITH KEY TREE_ID = P_S_NODE.
MOVE LS_NODE-OTYPE TO L_OTYPE.
IF L_OTYPE IS INITIAL.
MESSAGE S085(5A).
EXIT.
ENDIF.
* look for external object
SELECT SINGLE * FROM T77EO
WHERE OTYPE = L_OTYPE.
IF SY-SUBRC EQ 0.
PERFORM SET_TRANSACTION IN PROGRAM (T77EO-PROG)
USING 'AEND' LS_NODE-REALO IF FOUND.
ELSE.
PERFORM CTL(RHCLUC00) USING PCHPLVAR 'ORGP'
L_OTYPE LS_NODE-OBJID 'MAIN'.
ENDIF.
ENDFORM. " maintenance_object
*&---------------------------------------------------------------------*
*& Form show_recursion
*&---------------------------------------------------------------------*
* if recursion exist show it on the top of page
*----------------------------------------------------------------------*
FORM SHOW_RECURSION .
DATA: REC_NR TYPE SY-TABIX,
WA_REC TYPE TYPE_TREC.
STATICS: REC_INDEX TYPE I.
REC_INDEX = REC_INDEX + 1.
DESCRIBE TABLE IT_RECURSIONS LINES REC_NR.
* recursion does not exist
IF REC_NR = 0.
MESSAGE I899(5A) WITH 'Es sind keine Rekursione vorhanden.'(016).
ELSE.
* show first recursion again
IF REC_INDEX > REC_NR.
REC_INDEX = 1.
ENDIF.
CLEAR WA_REC.
READ TABLE IT_RECURSIONS INTO WA_REC INDEX REC_INDEX.
CALL METHOD ALV_TREE_CONTROL->SET_TOP_NODE
EXPORTING
I_NODE_KEY = WA_REC-KEY
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
NODE_NOT_FOUND = 2
FAILED = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->set_top_node'. "#EC NOTEXT
ENDIF.
ENDIF.
ENDFORM. " show_recursion
*&---------------------------------------------------------------------*
*& Form show_graphichs
*&---------------------------------------------------------------------*
* graphics mainteince for object
*----------------------------------------------------------------------*
* -->P_S_NODE
*----------------------------------------------------------------------*
FORM SHOW_GRAPHICHS USING P_S_NODE TYPE LVC_NKEY.
DATA: LS_NODE TYPE T_NODE.
READ TABLE IT_NODE INTO LS_NODE
WITH KEY TREE_ID = P_S_NODE.
IF LS_NODE-ID NE 0.
CALL FUNCTION 'PD_STRUCTURAL_GRAPHICS'
EXPORTING
CONTEXT_ID = 'GENERAL'
INDEX = LS_NODE-ID
LOAD_PD_TOOLBOX = 'X'
LOAD_PD_PROFILES = 'X'
EXCEPTIONS
NO_OBJECTS_AVAILABLE = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'FUNCTION PD_STRUCTURAL_GRAPHICS'.
ENDIF.
ELSE.
MESSAGE S085(5A).
ENDIF.
ENDFORM. " show_graphichs
*&---------------------------------------------------------------------*
*& Form new_path
*&---------------------------------------------------------------------*
* show structur with a new path
*----------------------------------------------------------------------*
* -->P_S_NODE
*----------------------------------------------------------------------*
FORM NEW_PATH USING P_S_NODE TYPE LVC_NKEY.
DATA: LS_NODE TYPE T_NODE.
* nothing is selected
IF P_S_NODE IS INITIAL.
MESSAGE S085(5A).
EXIT.
ENDIF.
READ TABLE IT_NODE INTO LS_NODE
WITH KEY TREE_ID = P_S_NODE.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'READ TABLE it_node'. "#EC NOTEXT
ELSE.
CLEAR: PDSTR.
PDSTR-SVECT = PC-SVECT.
PDSTR-ACTIV = PC-ACTIV.
PDSTR-RSTEXT = LS_NODE-TEXT4.
CALL SCREEN 5000 STARTING AT 20 7.
ENDIF.
ENDFORM. " new_path
*&---------------------------------------------------------------------*
*& Module STATUS_5000 OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_5000 OUTPUT.
CLEAR OK_CODE.
SET PF-STATUS 'NWAY'.
ENDMODULE. " STATUS_5000 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
MODULE EXIT INPUT.
CASE OK_CODE.
WHEN 'EBBR'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Module CHECK_SVECT INPUT
*&--------------------------------------------------------------------*
* Check status vector *
*---------------------------------------------------------------------*
MODULE CHECK_SVECT INPUT.
IF PDSTR-SVECT CN '12345 '.
MESSAGE E182(5A)
* 'Statusvektor'(STV) PDSTR-SVECT 'nicht erlaubt'(NEL).
WITH PDSTR-SVECT.
ENDIF.
ENDMODULE. " CHECK_SVECT INPUT
*&---------------------------------------------------------------------*
*& Module user_command_5000 INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_5000 INPUT.
CASE OK_CODE.
WHEN 'STAR'.
CLEAR WA_NODE.
READ TABLE IT_NODE INTO WA_NODE WITH KEY TREE_ID = S_NODE.
MOVE WA_NODE-OTYPE TO OTYPE.
SUBMIT RHSTRU00 AND RETURN
WITH PCHPLVAR EQ PCHPLVAR
WITH PCHOTYPE EQ OTYPE
WITH PCHSOBID EQ WA_NODE-OBJID
WITH PCHOBEG EQ PCHOBEG
WITH PCHOEND EQ PCHOEND
WITH PCHOSTAT EQ PCHOSTAT
WITH PCHBEGDA EQ PCHBEGDA
WITH PCHENDDA EQ PCHENDDA
WITH PCHISTAT EQ PCHISTAT
WITH PCHWEGID EQ PDSTR-WEGID
WITH PCHACTIV EQ PDSTR-ACTIV
WITH PCHDEPTH EQ PDSTR-DEPTH
WITH PCHSVECT EQ PDSTR-SVECT
WITH PCHSETGD IN PCHSETGD
WITH TDEPTH EQ PDSTR-TDEPTH
WITH RECURS EQ RECURS.
LEAVE TO SCREEN 0.
WHEN 'EBBR'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " user_command_5000 INPUT
*&---------------------------------------------------------------------*
*& Form new_list
*&---------------------------------------------------------------------*
* show structur with the same depth
*----------------------------------------------------------------------*
* -->P_S_NODE
*----------------------------------------------------------------------*
FORM NEW_LIST USING P_S_NODE TYPE LVC_NKEY.
DATA: OTYPE TYPE OTYPE,
L_OTYPE(50),
L_PCHWEGID(50),
LS_NODE TYPE T_NODE.
READ TABLE IT_NODE INTO LS_NODE WITH KEY TREE_ID = P_S_NODE.
MOVE LS_NODE-OTYPE TO OTYPE.
* nothing is selected
IF LS_NODE-ID IS INITIAL.
MESSAGE S085(5A).
ELSE.
* evaluation path does not contain selected object type
IF OTYPE NE PCHOTYPE.
WRITE OTYPE TO L_OTYPE.
WRITE PCHWEGID TO L_PCHWEGID.
CALL FUNCTION 'POPUP_DISPLAY_MESSAGE'
EXPORTING
MSGID = 'PP'
MSGTY = 'S'
MSGNO = '011'
MSGV1 = L_OTYPE
MSGV2 = L_PCHWEGID.
ELSE.
SUBMIT RHSTRU00 AND RETURN
WITH PCHPLVAR EQ PCHPLVAR
WITH PCHOTYPE EQ OTYPE
WITH PCHSOBID EQ LS_NODE-OBJID
WITH PCHOBEG EQ PCHOBEG
WITH PCHOEND EQ PCHOEND
WITH PCHOSTAT EQ PCHOSTAT
WITH PCHBEGDA EQ PCHBEGDA
WITH PCHENDDA EQ PCHENDDA
WITH PCHISTAT EQ PCHISTAT
WITH PCHWEGID EQ PCHWEGID
WITH PCHACTIV EQ PCHACTIV
WITH PCHDEPTH EQ PCHDEPTH
WITH PCHSVECT EQ PCHSVECT
WITH PCHSETGD IN PCHSETGD
WITH TDEPTH EQ TDEPTH
WITH RECURS EQ RECURS.
ENDIF.
ENDIF.
ENDFORM. " new_list
*&---------------------------------------------------------------------*
*& Form optimization_columns
*&---------------------------------------------------------------------*
* optimization columns width
*----------------------------------------------------------------------*
FORM OPTIMIZATION_COLUMNS .
DATA L_INCLUDE_HEADING TYPE FLAG.
CASE G_OPTIMIZE_FLAG.
WHEN 'X'.
G_OPTIMIZE_FLAG = ' '.
L_INCLUDE_HEADING = 'X'.
WHEN ' '.
G_OPTIMIZE_FLAG = 'X'.
L_INCLUDE_HEADING = ' '.
ENDCASE.
CALL METHOD ALV_TREE_CONTROL->COLUMN_OPTIMIZE
EXPORTING
I_INCLUDE_HEADING = L_INCLUDE_HEADING
EXCEPTIONS
START_COLUMN_NOT_FOUND = 1
END_COLUMN_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->column_optimize'. "#EC NOTEXT
ENDIF.
ENDFORM. " optimization_columns
*&---------------------------------------------------------------------*
*& Form set_optimization_text
*&---------------------------------------------------------------------*
FORM SET_OPTIMIZATION_TEXT.
G_OPTIMIZE_BUTTON-ICON_ID = ICON_TABLE_SETTINGS.
IF G_OPTIMIZE_FLAG = 'X'.
G_OPTIMIZE_BUTTON-QUICKINFO = 'Spalten optimieren mit Titel'(024).
G_OPTIMIZE_BUTTON-TEXT = 'Spalten optimieren mit Titel'(024).
ELSE.
G_OPTIMIZE_BUTTON-QUICKINFO = 'Spalten optimieren ohne Titel'(025).
G_OPTIMIZE_BUTTON-TEXT = 'Spalten optimieren ohne Titel'(025).
ENDIF.
ENDFORM. " set_optimization_text
*&---------------------------------------------------------------------*
*& Form optimization_with_header
*&---------------------------------------------------------------------*
FORM OPTIMIZATION_WITH_HEADER .
CALL METHOD ALV_TREE_CONTROL->COLUMN_OPTIMIZE
EXPORTING
I_INCLUDE_HEADING = 'X'
EXCEPTIONS
START_COLUMN_NOT_FOUND = 1
END_COLUMN_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->column_optimize'. "#EC NOTEXT
ENDIF.
G_OPTIMIZE_FLAG = 'X'. "note 768405
ENDFORM. " optimization_with_header
*&---------------------------------------------------------------------*
*& Form optimization_with_content
*&---------------------------------------------------------------------*
FORM OPTIMIZATION_WITH_CONTENT .
CALL METHOD ALV_TREE_CONTROL->COLUMN_OPTIMIZE
EXPORTING
I_INCLUDE_HEADING = ' '
EXCEPTIONS
START_COLUMN_NOT_FOUND = 1
END_COLUMN_NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
INTERNAL_ERROR 'METHOD alv_tree_control->column_optimize'. "#EC NOTEXT
ENDIF.
G_OPTIMIZE_FLAG = ' '. "note 768405
ENDFORM. " optimization_with_content
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DATA .
DATA: LV_IS_MAN TYPE BOOLEAN.
DATA: PA_NODE TYPE T_NODE.
LOOP AT IT_NODE INTO WA_NODE.
IF WA_NODE-OTYPE = 'O'.
WA_DATA-ID = WA_NODE-ID.
WA_DATA-PARENT = WA_NODE-PARENT.
WA_DATA-ONAME = WA_NODE-SHORT.
WA_DATA-ORGID = WA_NODE-OBJID.
IF SY-TABIX = 1.
WA_DATA-GRAPH = 0. "top manager
ENDIF.
APPEND WA_DATA TO GT_DATA.
CLEAR WA_DATA.
ENDIF.
IF WA_NODE-OTYPE = 'S'.
PERFORM SUB_CHECK_MAN USING WA_NODE-OBJID CHANGING LV_IS_MAN.
IF LV_IS_MAN = 'X'.
LOOP AT GT_DATA INTO WA_DATA WHERE ID = WA_NODE-PARENT.
WA_DATA-SNAME = WA_NODE-SHORT.
WA_DATA-POSID = WA_NODE-OBJID.
WA_DATA-GRAPH = 1. "manager
MODIFY GT_DATA FROM WA_DATA.
CLEAR WA_DATA.
EXIT.
ENDLOOP.
ELSE.
WA_DATA-ID = WA_NODE-ID.
WA_DATA-PARENT = WA_NODE-PARENT.
WA_DATA-SNAME = WA_NODE-SHORT.
WA_DATA-POSID = WA_NODE-OBJID.
WA_DATA-GRAPH = 2. "employee
APPEND WA_DATA TO GT_DATA.
CLEAR WA_DATA.
ENDIF.
ENDIF.
IF WA_NODE-OTYPE = 'P'.
READ TABLE IT_NODE INTO PA_NODE WITH KEY ID = WA_NODE-PARENT.
PERFORM SUB_CHECK_MAN USING PA_NODE-OBJID CHANGING LV_IS_MAN.
IF LV_IS_MAN = 'X'.
LOOP AT GT_DATA INTO WA_DATA WHERE ID = PA_NODE-PARENT.
WA_DATA-PNAME = WA_NODE-SHORT.
WA_DATA-PERID = WA_NODE-OBJID.
MODIFY GT_DATA FROM WA_DATA.
CLEAR WA_DATA.
EXIT.
ENDLOOP.
ELSE.
LOOP AT GT_DATA INTO WA_DATA WHERE ID = PA_NODE-ID.
WA_DATA-PNAME = WA_NODE-SHORT.
WA_DATA-PERID = WA_NODE-OBJID.
MODIFY GT_DATA FROM WA_DATA.
CLEAR WA_DATA.
EXIT.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT GT_DATA INTO WA_DATA.
CONCATENATE WA_DATA-PERID '.jpg' INTO WA_DATA-IMAGEFILE.
IF WA_DATA-PERID IS INITIAL.
WA_DATA-GRAPH = '4'. "vanacy
ENDIF.
MODIFY GT_DATA FROM WA_DATA.
ENDLOOP.
ENDFORM. " SUB_FILL_DATA
*&---------------------------------------------------------------------*
*& Form SUB_CHECK_MAN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_NODE_OBJID text
* <--P_LV_IS_MAN text
*----------------------------------------------------------------------*
FORM SUB_CHECK_MAN USING P_WA_NODE_OBJID
CHANGING P_LV_IS_MAN.
DATA: I1001 TYPE HRP1001.
SELECT SINGLE * FROM HRP1001 INTO I1001 WHERE PLVAR = '01'
AND OTYPE = 'S'
AND OBJID = P_WA_NODE_OBJID
AND RSIGN = 'A'
AND RELAT = '012'
AND ENDDA >= SY-DATUM.
IF I1001 IS NOT INITIAL.
P_LV_IS_MAN = 'X'.
ELSE.
CLEAR P_LV_IS_MAN.
ENDIF.
ENDFORM. " SUB_CHECK_MAN
*&---------------------------------------------------------------------*
*& Form SUB_DOWNLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_DOWNLOAD_DATA .
DATA: BEGIN OF GT_FIELDNAMES OCCURS 0,
FIELDNAME(12),
END OF GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'ID'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'PARENT'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'ONAME'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'SNAME'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'PNAME'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'ORGID'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'POSID'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'PERID'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'KNAME'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'KCCID'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'GRAPH'.
APPEND GT_FIELDNAMES.
GT_FIELDNAMES-FIELDNAME = 'IMAGEFILE'.
APPEND GT_FIELDNAMES.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = GV_DATA_FILE
FILETYPE = 'ASC'
WRITE_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = GT_DATA
FIELDNAMES = GT_FIELDNAMES
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21.
ENDFORM. " SUB_DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*& Form SUB_GET_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_GET_TEMPLATE USING P_TEMPLATE_FILENAME.
* DATA EXT(10).
* DATA L_FILENAME TYPE STRING.
* DATA LIN TYPE I.
* DATA LENGTH TYPE I.
*
* TYPES: BEGIN OF TESTLINE,
* LINE(256) TYPE X,
* END OF TESTLINE.
* DATA: DATA_CONTAINER TYPE TABLE OF TESTLINE WITH HEADER LINE.
* DATA: F(128),F1(10).
*
* CLEAR DATA_CONTAINER.
* REFRESH DATA_CONTAINER.
* IMPORT DATA_CONTAINER FROM DATABASE ZHR_OFFICE(CN) ID P_TEMPLATE_FILENAME.
* DESCRIBE TABLE DATA_CONTAINER LINES LIN.
* SPLIT ZHR_OFFICE-FILENAME AT '.' INTO F F1.
* EXT = F1.
* TRANSLATE EXT TO UPPER CASE.
*
* IF LIN = 0.
* CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
* EXPORTING
* TITEL = 'Download'
* TEXTLINE1 = 'Database error!No template,please upload template!'
* EXCEPTIONS
* OTHERS = 1.
* EXIT.
* ENDIF.
*
* READ TABLE DATA_CONTAINER INDEX LIN.
* LENGTH = DATA_CONTAINER-LINE.
*
* CONCATENATE GV_TEMPLATE_PATH '\' ZHR_OFFICE-FILENAME INTO GV_TEMPLATE_FILE.
*
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* BIN_FILESIZE = LENGTH
* FILENAME = GV_TEMPLATE_FILE
* FILETYPE = 'BIN'
* IMPORTING
* FILELENGTH = LENGTH
* TABLES
* DATA_TAB = DATA_CONTAINER
** FIELDNAMES =
* EXCEPTIONS
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10
* DP_ERROR_CREATE = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
* OTHERS = 22
* .
* IF SY-SUBRC NE 0.
* CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'
* EXPORTING
* TITEL = 'Download'
* TEXTLINE1 = 'Download failed!'
* EXCEPTIONS
* OTHERS = 1.
* EXIT.
* ENDIF.
ENDFORM. " SUB_GET_TEMPLATE
*&---------------------------------------------------------------------*
*& Form SUB_OPEN_DOCUMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_OPEN_DOCUMENT .
CREATE OBJECT GV_APLICACION 'Visio.Application'.
SET PROPERTY OF GV_APLICACION 'Visible' = 1.
CALL METHOD OF GV_APLICACION 'Addons' = GV_ADDON
EXPORTING #1 = GV_ORGWIZ.
CALL METHOD OF GV_ADDON 'Run'
EXPORTING #1 = '/S-INIT'.
CONCATENATE '/S-ARGSTR' GV_PARAMETRO_MACRO INTO GV_PARAMETRO_MACRO SEPARATED BY SPACE.
CALL METHOD OF GV_ADDON 'Run'
EXPORTING #1 = GV_PARAMETRO_MACRO.
CALL METHOD OF GV_ADDON 'Run'
EXPORTING #1 = '/S-RUN'.
IF VISIO_D1 = 'X'.
CALL METHOD OF GV_APLICACION 'Run'
EXPORTING #1 = 'RefreshOrgChartImages'.
ENDIF.
FREE OBJECT GV_APLICACION.
FREE OBJECT GV_ADDON.
* CL_GUI_FRONTEND_SERVICES=>EXECUTE(
* EXPORTING
* APPLICATION = GV_VISIO_PATH
* PARAMETER = GV_VISIO_PARA
* EXCEPTIONS
* CNTL_ERROR = 1
* ERROR_NO_GUI = 2
* BAD_PARAMETER = 3
* FILE_NOT_FOUND = 4
* PATH_NOT_FOUND = 5
* FILE_EXTENSION_UNKNOWN = 6
* ERROR_EXECUTE_FAILED = 7
* SYNCHRONOUS_FAILED = 8
* NOT_SUPPORTED_BY_GUI = 9
* ).
ENDFORM. " SUB_OPEN_DOCUMENT
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DATA_C1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DATA_C1 .
DATA: LV_IS_STAFF TYPE FLAG.
LOOP AT IT_NODE INTO WA_NODE.
IF WA_NODE-OTYPE = 'O' OR WA_NODE-OTYPE = 'S'.
WA_DATA-ID = WA_NODE-ID.
WA_DATA-PARENT = WA_NODE-PARENT.
WA_DATA-ONAME = WA_NODE-SHORT.
WA_DATA-ORGID = WA_NODE-OBJID.
IF SY-TABIX = 1.
WA_DATA-GRAPH = 0. "top manager
ELSE.
IF WA_NODE-OTYPE = 'S'.
WA_DATA-GRAPH = 2.
ELSE.
WA_DATA-GRAPH = 1.
ENDIF.
ENDIF.
APPEND WA_DATA TO GT_DATA.
CLEAR WA_DATA.
ENDIF.
ENDLOOP.
LOOP AT GT_DATA INTO WA_DATA. "skip staff
LOOP AT IT_NODE INTO WA_NODE WHERE ID = WA_DATA-PARENT.
PERFORM SUB_CHECK_STAFF USING WA_NODE-OBJID CHANGING LV_IS_STAFF.
IF LV_IS_STAFF = 'X'.
WA_DATA-PARENT = WA_NODE-PARENT.
CONTINUE.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
MODIFY GT_DATA FROM WA_DATA.
ENDLOOP.
LOOP AT GT_DATA INTO WA_DATA.
PERFORM SUB_CHECK_STAFF USING WA_DATA-ORGID CHANGING LV_IS_STAFF.
IF LV_IS_STAFF = 'X'.
DELETE GT_DATA.
ENDIF.
ENDLOOP.
ENDFORM. " SUB_FILL_DATA_C1
*&---------------------------------------------------------------------*
*& Form SUB_CHECK_STAFF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LV_IS_STAFF text
*----------------------------------------------------------------------*
FORM SUB_CHECK_STAFF USING P_OBJID TYPE HRP1000-OBJID
CHANGING P_IS_STAFF.
DATA: I1003 TYPE P1003 OCCURS 0,
WA_1003 TYPE P1003.
CLEAR: P_IS_STAFF.
CALL FUNCTION 'RH_READ_INFTY'
EXPORTING
AUTHORITY = 'DISP'
WITH_STRU_AUTH = 'X'
PLVAR = '01'
OTYPE = 'O'
OBJID = P_OBJID
INFTY = '1003'
ISTAT = '1'
BEGDA = PC-OBEG
ENDDA = PC-OEND
TABLES
INNNN = I1003
EXCEPTIONS
ALL_INFTY_WITH_SUBTY = 1
NOTHING_FOUND = 2
NO_OBJECTS = 3
WRONG_CONDITION = 4
WRONG_PARAMETERS = 5.
READ TABLE I1003 INTO WA_1003 INDEX 1.
IF SY-SUBRC = 0 AND WA_1003-STABS = 'X'.
P_IS_STAFF = 'X'.
ENDIF.
ENDFORM. " SUB_CHECK_STAFF
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DEMO_DATA_C1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DEMO_DATA_C1 .
WA_DATA-ID = 1.
WA_DATA-PARENT = 0.
WA_DATA-ONAME = 'SPD##'.
WA_DATA-ORGID = '50000001'.
WA_DATA-GRAPH = 0.
WA_DATA-KNAME = 'SPD##'.
WA_DATA-KCCID = '99990001'.
WA_DATA-PNAME = '###'.
WA_DATA-PERID = '00000001'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 2.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = '###'.
WA_DATA-ORGID = '50000002'.
WA_DATA-GRAPH = 1.
WA_DATA-KNAME = '###'.
WA_DATA-KCCID = '99990002'.
WA_DATA-PNAME = 'L##'.
WA_DATA-PERID = '00000002'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 3.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = '###'.
WA_DATA-ORGID = '50000003'.
WA_DATA-GRAPH = 1.
WA_DATA-KNAME = '###'.
WA_DATA-KCCID = '99990003'.
WA_DATA-PNAME = 'W##'.
WA_DATA-PERID = '00000003'.
APPEND WA_DATA TO GT_DATA.
ENDFORM. " SUB_FILL_DEMO_DATA_C1
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DEMO_DATA_C2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DEMO_DATA_C2 .
WA_DATA-ID = 1.
WA_DATA-PARENT = 0.
WA_DATA-ONAME = 'SPD Consulting'.
WA_DATA-ORGID = '50000001'.
WA_DATA-GRAPH = 0.
WA_DATA-KNAME = 'CC 0001'.
WA_DATA-KCCID = 'CC 0001'.
WA_DATA-PNAME = 'Jack'.
WA_DATA-PERID = '00000001'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 2.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = 'Beijing Office'.
WA_DATA-ORGID = '50000002'.
WA_DATA-GRAPH = 1.
WA_DATA-KNAME = 'CC 0002'.
WA_DATA-KCCID = 'CC 0002'.
WA_DATA-PNAME = 'Michael'.
WA_DATA-PERID = '00000002'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 3.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = 'Shanghai Office'.
WA_DATA-ORGID = '50000003'.
WA_DATA-GRAPH = 1.
WA_DATA-KNAME = 'CC 0003'.
WA_DATA-KCCID = 'CC 0003'.
WA_DATA-PNAME = 'Tom'.
WA_DATA-PERID = '00000003'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 4.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = 'Financial'.
WA_DATA-ORGID = '50000002'.
WA_DATA-GRAPH = 5.
WA_DATA-KNAME = 'CC 0001'.
WA_DATA-KCCID = 'CC 0001'.
WA_DATA-PNAME = 'Lily'.
WA_DATA-PERID = '00000002'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 5.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = 'Human Resource'.
WA_DATA-ORGID = '50000003'.
WA_DATA-GRAPH = 5.
WA_DATA-KNAME = 'CC 0001'.
WA_DATA-KCCID = 'CC 0001'.
WA_DATA-PNAME = 'Grace'.
WA_DATA-PERID = '00000003'.
APPEND WA_DATA TO GT_DATA.
WA_DATA-ID = 6.
WA_DATA-PARENT = 1.
WA_DATA-ONAME = 'Guangzhou Office'.
WA_DATA-ORGID = '50000002'.
WA_DATA-GRAPH = 1.
WA_DATA-KNAME = 'CC 0004'.
WA_DATA-KCCID = 'CC 0004'.
WA_DATA-PNAME = 'Jones'.
WA_DATA-PERID = '00000002'.
APPEND WA_DATA TO GT_DATA.
ENDFORM. " SUB_FILL_DEMO_DATA_C2
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DATA_C2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DATA_C2 .
ENDFORM. " SUB_FILL_DATA_C2
*&---------------------------------------------------------------------*
*& Form SUB_FILL_DEMO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_FILL_DEMO_DATA .
ENDFORM. " SUB_FILL_DEMO_DATA
*&---------------------------------------------------------------------*
*& Form sub_download_photo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_DOWNLOAD_PHOTO .
LOOP AT GT_DATA INTO WA_DATA WHERE PERID IS NOT INITIAL.
PERFORM SUB_DOWNLOAD_PERNR_PHOTO USING WA_DATA-PERID.
ENDLOOP.
ENDFORM. " sub_download_photo
*&---------------------------------------------------------------------*
*& Form sub_download_pernr_photo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_DATA_PERID text
*----------------------------------------------------------------------*
FORM SUB_DOWNLOAD_PERNR_PHOTO USING P_PERNR TYPE PERNR-PERNR.
DATA : ZEXISTS.
DATA : ZCONNECT_INFO LIKE TOAV0 .
DATA : ZEX_DOCUMENT LIKE TBL1024 OCCURS 0 .
DATA FILENAME TYPE STRING.
DATA : PICFILE LIKE RLGRAP-FILENAME.
CONCATENATE GV_TEMPLATE_PATH '\' P_PERNR '.JPG' INTO PICFILE.
CALL FUNCTION 'GUI_DELETE_FILE'
EXPORTING
FILE_NAME = PICFILE
EXCEPTIONS
FAILED = 1
OTHERS = 2.
CALL FUNCTION 'HR_IMAGE_EXISTS'
EXPORTING
P_PERNR = P_PERNR
P_TCLAS = 'A'
P_BEGDA = PC-OBEG
P_ENDDA = PC-OEND
IMPORTING
P_EXISTS = ZEXISTS
P_CONNECT_INFO = ZCONNECT_INFO
EXCEPTIONS
ERROR_CONNECTIONTABLE = 1
OTHERS = 2.
IF SY-SUBRC = 0.
CLEAR: ZEX_DOCUMENT , ZEX_DOCUMENT[].
CALL FUNCTION 'ALINK_RFC_TABLE_GET'
EXPORTING
IM_DOCID = ZCONNECT_INFO-ARC_DOC_ID
IM_CREPID = ZCONNECT_INFO-ARCHIV_ID
* IM_COMPID =
* IMPORTING
* EX_LENGTH =
* EX_MESSAGE =
TABLES
EX_DOCUMENT = ZEX_DOCUMENT.
* CONCATENATE g_workdir '\' pernr-pernr '.JPG' INTO filename.
FILENAME = PICFILE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
FILENAME = FILENAME
FILETYPE = 'BIN'
* APPEND = ' '
* WRITE_FIELD_SEPARATOR = ' '
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_EOL = ABAP_TRUE
* IMPORTING
* FILELENGTH =
TABLES
DATA_TAB = ZEX_DOCUMENT[]
* FIELDNAMES =
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
ENDIF.
ENDFORM. " sub_download_pernr_photo
*&---------------------------------------------------------------------*
*& Form SUB_SET_PARAMETRO_MACRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_PARAMETRO_MACRO text
*----------------------------------------------------------------------*
FORM SUB_SET_PARAMETRO_MACRO USING P_MACRO.
CLEAR P_MACRO.
CONCATENATE '/FILENAME=' GV_DATA_FILE
* ' /PAGES=' lv_raiz
' /NAME-FIELD=' 'pname'
' /MANAGER-FIELD=' 'parent'
' /UNIQUEID-FIELD=' 'id'
' /DISPLAY-FIELDS=' 'sname' ',' 'pname'
' /SHAPE-FIELD=' 'graph'
' /CUSTOM-PROPERTY-FIELDS=' 'imagefile'
* text-t01 ',' text-t04 ',' text-t05',' text-t06 ','
* text-t09 ',' text-t10 ',' text-t11 ',' text-t12
' /SHOW-DIVIDER-LINE'
INTO P_MACRO.
ENDFORM. " SUB_SET_PARAMETRO_MACRO
*&---------------------------------------------------------------------*
*& Form SUB_CREATE_DIR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_CREATE_DIR .
DATA: LV_RESULT TYPE ABAP_BOOL.
DATA: LV_RC TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_SAPGUI_WORKDIR
CHANGING
SAPWORKDIR = GV_WORKDIR.
CONCATENATE GV_WORKDIR '\' PCHOBJID-LOW INTO GV_TEMPLATE_PATH.
CONCATENATE GV_TEMPLATE_PATH '\' 'org_data.xls' INTO GV_DATA_FILE.
CL_GUI_FRONTEND_SERVICES=>DIRECTORY_EXIST(
EXPORTING
DIRECTORY = GV_TEMPLATE_PATH
RECEIVING
RESULT = LV_RESULT
).
IF LV_RESULT IS INITIAL.
CL_GUI_FRONTEND_SERVICES=>DIRECTORY_CREATE(
EXPORTING
DIRECTORY = GV_TEMPLATE_PATH
CHANGING
RC = LV_RC
).
ENDIF.
ENDFORM. " SUB_CREATE_DIR
*&---------------------------------------------------------------------*
*& Form SUB_SET_PARAMETRO_MACRO2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_PARAMETRO_MACRO text
*----------------------------------------------------------------------*
FORM SUB_SET_PARAMETRO_MACRO2 USING P_MACRO.
CLEAR P_MACRO.
CONCATENATE '/FILENAME=' GV_DATA_FILE
'/NAME-FIELD=oname /MANAGER-FIELD=parent /UNIQUEID-FIELD=id /SHAPE-FIELD=graph /DISPLAY-FIELDS=oname,pname /SHOW-DIVIDER-LINE /CUSTOM-PROPERTY-FIELDS=kname HIDDEN,'
* ' /PAGES=' lv_raiz
* ' /NAME-FIELD=' 'pname'
* ' /MANAGER-FIELD=' 'parent'
* ' /UNIQUEID-FIELD=' 'id'
* ' /DISPLAY-FIELDS=' 'sname' ',' 'pname'
* ' /SHAPE-FIELD=' 'graph'
* ' /CUSTOM-PROPERTY-FIELDS=' 'imagefile'
* text-t01 ',' text-t04 ',' text-t05',' text-t06 ','
* text-t09 ',' text-t10 ',' text-t11 ',' text-t12
* ' /SHOW-DIVIDER-LINE'
INTO P_MACRO.
ENDFORM. " SUB_SET_PARAMETRO_MACRO2
*&---------------------------------------------------------------------*
*& Form SUB_SET_PARAMETRO_MACRO3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_PARAMETRO_MACRO text
*----------------------------------------------------------------------*
FORM SUB_SET_PARAMETRO_MACRO3 USING P_MACRO.
CLEAR P_MACRO.
CONCATENATE '/FILENAME=' GV_DATA_FILE
'/NAME-FIELD=oname /MANAGER-FIELD=parent /UNIQUEID-FIELD=id /SHAPE-FIELD=graph /DISPLAY-FIELDS=oname,pname /SHOW-DIVIDER-LINE /CUSTOM-PROPERTY-FIELDS=kname HIDDEN,'
* ' /PAGES=' lv_raiz
* ' /NAME-FIELD=' 'pname'
* ' /MANAGER-FIELD=' 'parent'
* ' /UNIQUEID-FIELD=' 'id'
* ' /DISPLAY-FIELDS=' 'sname' ',' 'pname'
* ' /SHAPE-FIELD=' 'graph'
* ' /CUSTOM-PROPERTY-FIELDS=' 'imagefile'
* text-t01 ',' text-t04 ',' text-t05',' text-t06 ','
* text-t09 ',' text-t10 ',' text-t11 ',' text-t12
* ' /SHOW-DIVIDER-LINE'
INTO P_MACRO.
ENDFORM. " SUB_SET_PARAMETRO_MACRO3
这个博客讲述了如何利用SAP_BASIS报告RHSTRU00以及Visio来创建和展现HR组织架构。通过ABAP代码,实现了从SAP系统中获取数据并生成Visio图表,包括错误处理、数据结构和用户交互选项。此外,还提供了选择Visio导出的选项。

703

被折叠的 条评论
为什么被折叠?



