Objective:
Every organization use multiple reports like Sales, Shipping, Billing and Profit & Loss to make good business decision. In this all areas we might have developed and used huge BEx reports, in all reports we might restrict (include/exclude) characteristics(like 0MATERIAL, 0PLANT) values 1001, 2002 for company codes, S01, S02 for Sales organization , Doc Type , Plant to meet business report requirement.
Every organization will expand their business, as part of business growth organization might merge or establish new plant, company codes, sales organizations etc.
Technical Impact due to organization changes.
Due to organization changes we might get into technical challenges/issues for example as part of business expand Company ABC new plant has been acquired (Plant 0567) and now I would like to include this new plant wherever already nearby plants (0545) included to same area manager to analysis inbound/outbound business data, for this I need to search where existing plant 0545 is restricted so that I can include new plant 0567.
Approaches to find 0545.
- Search manually respective reports in BEx designer like Filters Area, Default Area, Restricted Key Figure and Selections, etc....might be restricted anywhere in report like cells, so its very tough job if its complex report's
- Search in table level, however its required skill like BEx tables and relationship between tables
- Search through FM however its gives unstructured data, need to format and also it works one report at a time.
Solution "One Click Away"
So, I had written ABAP program which will give list of reports which are restricted by given Infoprovider/InfoObect and characteristics value.
Here we can search based on Multiprovider/InfoCube/DSO OR Infoset wise, we have to select Radio button based on requirement as like below
Example for Mulitprovider.
Example 1
Now, I am searching based on Mulitprovider/InfoCube and selections as like below
Multi/Cube Tech Name: ALL (Means all Mulitproviders and Infocubes)
Infoobject Tech Name: 0PLANT (For Plant) You can give more infoobjects at a time.
Infoobject Value : ALL (Means for All Plants).
Output:
Provides list of reports restricted by All 0PLANT values
Example 2
Now, I am searching based on Mulitprovider/InfoCube and selections as like below
Multi/Cube Tech Name: ALL (Means all Mulitproviders and Infocubes)
Infoobject Tech Name: 0PLANT (For to Plant) you can give more infoobjects at a time.
Infoobject Value : 1111 (Where Plant equal to 1111).
Output
Provides list of reports where plant restricted by 1111
Example for InfoSet.
Example 1
Now, I am searching based on Infoset and selections as like below
Multi/Cube Tech Name : ALL (Means all Infosets)
Infoobject Tech Name : 0PLANT (For Plant) You can give more infoobjects at a time.
Infoobject Value : ALL (Means for All Plants).
Output:
Provides list of reports restricted by All 0PLANT values
Example 2
Now, I am searching based on Infoset and selections as like below
Multi/Cube Tech Name: ALL (Means all Infosets)
Infoobject Tech Name: 0PLANT (For Plant), You can give more infoobjects at a time.
Infoobject Value : 111 (Where Plant equal to 111).
Output
Provides list of reports where plant restricted by 111
Selection Screen Names
I_CHAR |
InfoObject Value |
I_CHARM |
InfoObject Value |
I_INFSET |
InfoSet Tech Name |
I_MULTI |
Multi/Cube Tech Name |
I_OBJECM |
InfoObject Tech Name |
I_OBJECT |
InfoObject Tech Name |
P_IS |
Infoset |
P_MC |
Multiprovider/InfoCube |
Attached ABAP Code.
REPORT ZBW_ BEX_SEL_TRACK.
TABLES: RSZRANGE,RSZ_X_RANGE. "Comment this line in 7.5 BW version
TYPE-POOLS: SLIS
.
DATA: I_CHAR_D
(80) TYPE C,
I_OBJECT_D
(30) TYPE C,
I_INFOSET_D
TYPE RSQINFOSET
,
I_INFOCUBE
TYPE RSINFOPROV
.
DATA: SYTABIX
LIKE SY
-TABIX
,
W_TXTLG
TYPE RSTXTLG
,
W_FALIAS
TYPE RSQALIAS
,
W_INFOSET
TYPE RSQINFOSET
,
W_DEFTP
TYPE RSZDEFTP
,
W_MAPNAME
TYPE RSZCOMPID
,
W_FNAME
TYPE RSINFOPROV
,
W_IOBJNMR
TYPE RSIOBJNM
,
FLAG_Q
(1) TYPE C,
FLAG_O
(1) TYPE C,
FLAG_S
(1) TYPE C,
LD_COLOR
(1) TYPE C.
DATA: FIELDCATALOG
TYPE SLIS_T_FIELDCAT_ALV
WITH HEADER LINE,
GD_TAB_GROUP
TYPE SLIS_T_SP_GROUP_ALV
,
GD_LAYOUT
TYPE SLIS_LAYOUT_ALV
,
GD_REPID
LIKE SY
-REPID
.
DATA: LD_LENGTH
TYPE I.
DATA: GT_EVENTS
TYPE SLIS_T_EVENT
.
*Types declaration
TYPES: BEGIN OF TY_ODS
,
ODSOBJECT
TYPE RSDODSOBJECT
,
END OF TY_ODS
.
TYPES: BEGIN OF TY_PROVIDER
,
PROVIDER
TYPE RSQINFOSET
,
END OF TY_PROVIDER
.
TYPES: BEGIN OF TY_INFOSET
,
INFOSET
TYPE RSQINFOSET
,
FALIAS
TYPE RSQALIAS
,
TALIAS
TYPE RSQALIAS
,
FNAME
TYPE RSINFOPROV
,
END OF TY_INFOSET
.
TYPES: BEGIN OF TY_NAV
,
ATRNAVNM
TYPE RSATRNAVNM
,
END OF TY_NAV
.
TYPES: BEGIN OF QRY_DET
,
COMPUID
TYPE RSRREPDIR
-COMPUID
,
INFOCUBE
TYPE RSRREPDIR
-INFOCUBE
,
COMPID
TYPE RSRREPDIR
-COMPID
,
LASTUSER
TYPE RSRREPDIR
-LASTUSER
,
END OF QRY_DET
.
TYPES: BEGIN OF QRY_DESC
,
ELTUID
TYPE RSZELTTXT
-ELTUID
,
TXTLG
TYPE RSZELTTXT
-TXTLG
,
END OF QRY_DESC
.
TYPES: C_T_ELTDIR
TYPE RSZ_X_ELTDIR
,
C_T_RANGE
TYPE RSZ_X_RANGE
.
TYPES: BEGIN OF OUTPUT,
COMPID
TYPE RSRREPDIR
-COMPID
,
TXTLG
TYPE RSZELTTXT
-TXTLG
,
INFOCUBE
TYPE RSRREPDIR
-INFOCUBE
,
DEFTP
TYPE RSZELTDIR
-DEFTP
,
MAPNAME
TYPE RSZELTDIR
-MAPNAME
,
SIGN(10) TYPE C,
OPT
TYPE RSZ_OPERATOR
,
LOW
TYPE RSCHAVLEXT
,
HIGH
TYPE RSCHAVLEXT
,
INFOBJ
(40) TYPE C,
INFOBJI
(40) TYPE C,
LASTUSER
TYPE RSRREPDIR
-LASTUSER
,
LINE_COLOR
(4) TYPE C,
END OF OUTPUT.
TYPES: BEGIN OF TY_RSQFOBJ
,
INFOSET
TYPE RSQINFOSET
,
FALIAS
TYPE RSQALIAS
,
FNAME
TYPE RSINFOPROV
,
END OF TY_RSQFOBJ
.
TYPES: BEGIN OF TY_RSZSELECT
,
ELTUID
TYPE SYSUUID_25
,
IOBJNM
TYPE RSIOBJNM
,
END OF TY_RSZSELECT
.
TYPES: BEGIN OF TY_IOBJ
,
IOBJNM
TYPE RSDIOBJNM
,
END OF TY_IOBJ
.
*Table declartion
DATA: T_ODS
TYPE STANDARD TABLE OF TY_ODS
,
T_IOBJ
TYPE STANDARD TABLE OF TY_IOBJ
,
T_INFOSET
TYPE STANDARD TABLE OF TY_INFOSET
,
T_PROVIDER
TYPE STANDARD TABLE OF TY_PROVIDER
,
T_NAV
TYPE STANDARD TABLE OF TY_NAV
,
T_RSZSELECT
TYPE STANDARD TABLE OF TY_RSZSELECT
,
T_QRY_DET
TYPE STANDARD TABLE OF QRY_DET
,
T_QRY_DESC
TYPE STANDARD TABLE OF QRY_DESC
,
T_ELTDIR
TYPE STANDARD TABLE OF C_T_ELTDIR
,
T_RANGE
TYPE STANDARD TABLE OF C_T_RANGE
,
T_OUTPUT
TYPE STANDARD TABLE OF OUTPUT,
T_RSQFOBJ
TYPE STANDARD TABLE OF TY_RSQFOBJ
.
*Workarea declartion:
DATA: WA_ODS
TYPE TY_ODS
,
WA_IOBJ
TYPE TY_IOBJ
,
WA_INFOSET
TYPE TY_INFOSET
,
WA_PROVIDER
TYPE TY_PROVIDER
,
WA_NAV
TYPE TY_NAV
,
WA_RSZSELECT
TYPE TY_RSZSELECT
,
WA_QRY_DET
TYPE QRY_DET
,
WA_QRY_DESC
TYPE QRY_DESC
,
WA_ELTDIR
TYPE RSZ_X_ELTDIR
,
WA_RANGE
TYPE RSZ_X_RANGE
,
WA_OUTPUT
TYPE OUTPUT,
WA_RSQFOBJ
TYPE TY_RSQFOBJ
.
PARAMETERS: P_MC
RADIOBUTTON GROUP SEL
DEFAULT 'X' USER-COMMAND AC
,
P_IS
RADIOBUTTON GROUP SEL
.
SELECTION-SCREEN BEGIN OF BLOCK MULTI
WITH FRAME TITLE TITLE2
.
SELECT-OPTIONS: I_MULTI
FOR I_INFOSET_D
DEFAULT 'ALL' OBLIGATORY MODIF
ID UC2
.
SELECT-OPTIONS: I_OBJECM
FOR I_OBJECT_D
DEFAULT '0PLANT' OBLIGATORY MODIF
ID UC2
.
SELECT-OPTIONS: I_CHARM
FOR I_CHAR_D
DEFAULT 'ALL' OBLIGATORY MODIF
ID UC2
.
SELECTION-SCREEN END OF BLOCK MULTI
.
SELECTION-SCREEN BEGIN OF BLOCK INFOSET
WITH FRAME TITLE TITLE1
.
SELECT-OPTIONS: I_INFSET
FOR I_INFOCUBE
DEFAULT 'ALL' OBLIGATORY MODIF
ID UC1
.
SELECT-OPTIONS: I_OBJECT
FOR I_OBJECT_D
DEFAULT '0PLANT' OBLIGATORY MODIF
ID UC1
.
SELECT-OPTIONS: I_CHAR
FOR I_CHAR_D
DEFAULT 'ALL' OBLIGATORY MODIF
ID UC1
.
SELECTION-SCREEN END OF BLOCK INFOSET
.
***************************** Performs *******************************
CLEAR: T_PROVIDER
,T_NAV
,T_QRY_DET
,T_QRY_DESC
, T_RANGE
,T_ELTDIR
,T_RSQFOBJ
,T_ODS
.
*Error handling
IF I_OBJECT
-LOW
EQ 'ALL'.
MESSAGE E208
(00) WITH '(ALL) is invalid InfoObject,enter Valid InfoObject' .
ENDIF.
IF I_OBJECM
-LOW
EQ 'ALL'.
MESSAGE E208
(00) WITH '(ALL) is invalid InfoObject,enter Valid InfoObject' .
ENDIF.
INITIALIZATION.
TITLE1
= 'Infoset'.
TITLE2
= 'Multiprovider/Infocube/ODS'.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_MC
= 'X'.
IF SCREEN-GROUP1
= 'UC1'.
SCREEN-INPUT = '0'.
ENDIF.
IF SCREEN-GROUP1
= 'UC2'.
SCREEN-INPUT = '1'.
ENDIF.
ELSEIF P_IS
= 'X'.
IF SCREEN-GROUP1
= 'UC2'.
SCREEN-INPUT = '0'.
ENDIF.
IF SCREEN-GROUP1
= 'UC1'.
SCREEN-INPUT = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
START-OF-SELECTION.
PERFORM SELECTION_FILL
.
PERFORM QUERY_DETAILS
.
PERFORM PROCESSDATA
.
PERFORM BUILD_FIELDCATALOG
.
PERFORM BUILD_LAYOUT
.
PERFORM BUILD_EVENTS
.
PERFORM DISPLAY_ALV_REPORT
.
PERFORM CLEAR_TABS
.
***************************** Forms *******************************
FORM SELECTION_FILL
.
IF P_IS
EQ 'X'.
IF I_INFSET
-LOW
EQ 'ALL'.
SELECT INFOSET
FROM RSQISET
INTO TABLE T_PROVIDER
WHERE OBJVERS
= 'A'.
ELSE.
SELECT INFOSET
FROM RSQISET
INTO TABLE T_PROVIDER
FOR ALL ENTRIES
IN I_INFSET
WHERE INFOSET
= I_INFSET
-LOW
.
ENDIF.
IF I_OBJECT
-LOW
IS NOT INITIAL.
SELECT ATRNAVNM
FROM RSDATRNAV
INTO TABLE T_NAV
FOR ALL ENTRIES
IN
I_OBJECT
WHERE ATTRINM
= I_OBJECT
-LOW
AND
OBJVERS
= 'A'.
IF T_NAV
IS NOT INITIAL.
LOOP AT T_NAV
INTO WA_NAV
.
I_OBJECT
-LOW
= WA_NAV
-ATRNAVNM
.
I_OBJECT
-SIGN = 'I'.
I_OBJECT
-OPTION
= 'EQ'.
APPEND I_OBJECT
.
ENDLOOP.
ENDIF.
SORT I_OBJECT
BY LOW
.
DELETE ADJACENT DUPLICATES FROM I_OBJECT
COMPARING LOW
.
SELECT ELTUID IOBJNM
FROM RSZSELECT
INTO TABLE T_RSZSELECT
WHERE IOBJNM
IN I_OBJECM
AND
OBJVERS
= 'A'.
IF SY
-SUBRC
= 0.
SORT T_RSZSELECT
BY ELTUID IOBJNM
.
ENDIF.
ENDIF.
ELSEIF P_MC
EQ 'X'.
IF I_MULTI
-LOW
EQ 'ALL'.
SELECT INFOCUBE
FROM RSDCUBE
INTO TABLE T_PROVIDER
WHERE CUBETYPE
NE 'A' AND
OBJVERS
= 'A'.
SELECT ODSOBJECT
FROM RSDODSO
INTO TABLE T_ODS
WHERE OBJVERS
= 'A'.
IF SY
-SUBRC
= 0.
LOOP AT T_ODS
INTO WA_ODS
.
WA_PROVIDER
-PROVIDER
= WA_ODS
-ODSOBJECT
.
APPEND WA_PROVIDER
TO T_PROVIDER
.
ENDLOOP.
ENDIF.
SELECT IOBJNM
FROM RSDIOBJ
INTO TABLE T_IOBJ
WHERE OBJVERS
= 'A' AND
OBJSTAT
= 'ACT' AND
ATRONLYFL
= '' .
IF SY
-SUBRC
= 0.
LOOP AT T_IOBJ
INTO WA_IOBJ
.
WA_PROVIDER
-PROVIDER
= WA_IOBJ
-IOBJNM
.
APPEND WA_PROVIDER
TO T_PROVIDER
.
ENDLOOP.
ENDIF.
ELSE.
SELECT INFOCUBE
FROM RSDCUBE
INTO TABLE T_PROVIDER
FOR ALL ENTRIES
IN I_MULTI
WHERE INFOCUBE
= I_MULTI
-LOW
AND
OBJVERS
= 'A'.
SELECT ODSOBJECT
FROM RSDODSO
INTO TABLE T_ODS
FOR ALL ENTRIES
IN I_MULTI
WHERE ODSOBJECT
= I_MULTI
-LOW
AND
OBJVERS
= 'A'.
IF SY
-SUBRC
EQ 0.
LOOP AT T_ODS
INTO WA_ODS
.
WA_PROVIDER
-PROVIDER
= WA_ODS
-ODSOBJECT
.
APPEND WA_PROVIDER
TO T_PROVIDER
.
ENDLOOP.
ENDIF.
SELECT IOBJNM
FROM RSDIOBJ
INTO TABLE T_IOBJ
WHERE IOBJNM
IN I_MULTI
AND
OBJVERS
= 'A' AND
OBJSTAT
= 'ACT' AND
ATRONLYFL
= '' .
IF SY
-SUBRC
= 0.
LOOP AT T_IOBJ
INTO WA_IOBJ
.
WA_PROVIDER
-PROVIDER
= WA_IOBJ
-IOBJNM
.
APPEND WA_PROVIDER
TO T_PROVIDER
.
ENDLOOP.
ENDIF.
ENDIF.
IF I_OBJECM
-LOW
IS NOT INITIAL.
SELECT ATRNAVNM
FROM RSDATRNAV
INTO TABLE T_NAV
FOR ALL ENTRIES
IN
I_OBJECM
WHERE ATTRINM
= I_OBJECM
-LOW
AND
OBJVERS
= 'A'.
IF T_NAV
IS NOT INITIAL.
LOOP AT T_NAV
INTO WA_NAV
.
I_OBJECM
-LOW
= WA_NAV
-ATRNAVNM
.
I_OBJECM
-SIGN = 'I'.
I_OBJECM
-OPTION
= 'EQ'.
APPEND I_OBJECM
.
ENDLOOP.
ENDIF.
SORT I_OBJECM
BY LOW
.
DELETE ADJACENT DUPLICATES FROM I_OBJECM
COMPARING LOW
.
SELECT ELTUID IOBJNM
FROM RSZSELECT
INTO TABLE T_RSZSELECT
WHERE IOBJNM
IN I_OBJECM
AND
OBJVERS
= 'A'.
IF SY
-SUBRC
= 0.
SORT T_RSZSELECT
BY ELTUID IOBJNM
.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " SELECTION_FILL
*&---------------------------------------------------------------------*
*& Form query_details
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM QUERY_DETAILS
.
SELECT COMPUID INFOCUBE COMPID LASTUSER
FROM RSRREPDIR
INTO TABLE T_QRY_DET
FOR ALL ENTRIES
IN
T_PROVIDER
WHERE INFOCUBE
= T_PROVIDER
-PROVIDER
AND
OBJVERS
= 'A'.
SORT T_QRY_DET
BY COMPUID
.
SELECT ELTUID TXTLG
FROM RSZELTTXT
INTO CORRESPONDING
FIELDS OF TABLE T_QRY_DESC
FOR ALL ENTRIES
IN T_QRY_DET
WHERE ELTUID
= T_QRY_DET
-COMPUID
AND OBJVERS
= 'A'.
SORT T_QRY_DESC
BY ELTUID
.
IF P_IS
EQ 'X'.
SELECT INFOSET FALIAS FNAME
FROM RSQFOBJ
INTO TABLE T_RSQFOBJ
FOR ALL ENTRIES
IN
T_PROVIDER
WHERE INFOSET
= T_PROVIDER
-PROVIDER
AND
FNAME
IN I_OBJECT
AND
OBJVERS
= 'A'.
SORT T_RSQFOBJ
BY INFOSET FALIAS FNAME
.
ENDIF.
ENDFORM. " QUERY_DETAILS
*&---------------------------------------------------------------------*
*& Form PROCESSDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PROCESSDATA
.
LOOP AT T_QRY_DET
INTO WA_QRY_DET
.
CLEAR: SYTABIX
.
SYTABIX
= SY
-TABIX
.
CALL FUNCTION 'RSZ_X_COMPONENT_GET'
EXPORTING
I_COMPUID
= WA_QRY_DET
-COMPUID
I_OBJVERS
= 'A'
TABLES
C_T_ELTDIR
= T_ELTDIR
C_T_RANGE
= T_RANGE
.
IF P_IS
EQ 'X'.
SORT T_RANGE
BY SELTP
.
DELETE T_RANGE
WHERE SELTP
NE 1.
SORT T_RANGE
BY LOWFLAG
.
DELETE T_RANGE
WHERE LOWFLAG
EQ 2 OR LOWFLAG
EQ 3.
SORT T_RANGE
BY LOW
.
ELSEIF P_MC
EQ 'X'.
SORT T_RANGE
BY SELTP
.
DELETE T_RANGE
WHERE SELTP
NE 1 AND SELTP
NE 2.
SORT T_RANGE
BY LOWFLAG
.
DELETE T_RANGE
WHERE LOWFLAG
EQ 2 OR LOWFLAG
EQ 3.
SORT T_RANGE
BY LOW
.
ENDIF.
IF P_IS
EQ 'X'.
IF I_CHAR
-LOW
EQ 'ALL'.
ELSE.
SORT T_RANGE
BY LOW
.
DELETE T_RANGE
WHERE LOW
NOT IN I_CHAR
.
ENDIF.
ELSEIF P_MC
EQ 'X'.
IF I_CHARM
-LOW
EQ 'ALL'.
ELSE.
SORT T_RANGE
BY LOW
.
DELETE T_RANGE
WHERE LOW
NOT IN I_CHARM
.
ENDIF.
SORT T_RANGE
BY IOBJNM
.
DELETE T_RANGE
WHERE IOBJNM
NOT IN I_OBJECM
.
ENDIF.
SORT T_RANGE
BY ELTUID
.
SORT T_ELTDIR
BY ELTUID
.
LOOP AT T_RANGE
INTO WA_RANGE
.
CLEAR: W_TXTLG
, W_FALIAS
, W_INFOSET
,W_DEFTP
,W_MAPNAME
,W_FNAME
,W_IOBJNMR
,
FLAG_Q
, FLAG_O
, FLAG_S
.
IF P_IS
EQ 'X'.
SPLIT WA_RANGE
-IOBJNM
AT '___' INTO W_INFOSET W_FALIAS
.
READ TABLE T_RSQFOBJ
INTO WA_RSQFOBJ
WITH KEY
INFOSET
= W_INFOSET
FALIAS
= W_FALIAS
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
FLAG_O
= 'X'.
W_FNAME
= WA_RSQFOBJ
-FNAME
.
W_IOBJNMR
= WA_RANGE
-IOBJNM
.
ENDIF.
ELSEIF P_MC
EQ 'X'.
FLAG_O
= 'X'.
W_IOBJNMR
= WA_RANGE
-IOBJNM
.
ENDIF.
READ TABLE T_QRY_DESC
INTO WA_QRY_DESC
WITH KEY ELTUID
= WA_QRY_DET
-COMPUID
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
W_TXTLG
= WA_QRY_DESC
-TXTLG
.
FLAG_Q
= 'X'.
ENDIF.
READ TABLE T_ELTDIR
INTO WA_ELTDIR
WITH KEY ELTUID
= WA_RANGE
-ELTUID
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
W_DEFTP
= WA_ELTDIR
-DEFTP
.
W_MAPNAME
= WA_ELTDIR
-MAPNAME
.
FLAG_S
= 'X'.
ENDIF.
IF FLAG_Q
EQ 'X' AND
FLAG_O
EQ 'X' AND
FLAG_S
EQ 'X'.
CLEAR FLAG_S
.
LD_COLOR
= LD_COLOR +
1.
IF LD_COLOR
= 3.
LD_COLOR
= 1.
ENDIF.
CONCATENATE 'C' LD_COLOR
'10' INTO WA_OUTPUT
-LINE_COLOR
.
WA_OUTPUT
-COMPID
= WA_QRY_DET
-COMPID
.
WA_OUTPUT
-TXTLG
= W_TXTLG
.
WA_OUTPUT
-INFOCUBE
= WA_QRY_DET
-INFOCUBE
.
WA_OUTPUT
-DEFTP
= W_DEFTP
.
WA_OUTPUT
-MAPNAME
= W_MAPNAME
.
IF WA_RANGE
-SIGN EQ 'I'.
WA_OUTPUT
-SIGN = 'Include'.
ELSEIF WA_RANGE
-SIGN EQ 'E'.
WA_OUTPUT
-SIGN = 'Exclude'.
ENDIF.
WA_OUTPUT
-OPT
= WA_RANGE
-OPT
.
WA_OUTPUT
-LOW
= WA_RANGE
-LOW
.
WA_OUTPUT
-HIGH
= WA_RANGE
-HIGH
.
IF P_IS
EQ 'X'.
WA_OUTPUT
-INFOBJ
= W_FNAME
.
ELSEIF P_MC
EQ 'X'.
WA_OUTPUT
-INFOBJ
= W_IOBJNMR
.
ENDIF.
WA_OUTPUT
-INFOBJI
= W_IOBJNMR
.
WA_OUTPUT
-LASTUSER
= WA_QRY_DET
-LASTUSER
.
APPEND WA_OUTPUT
TO T_OUTPUT
.
ENDIF.
ENDLOOP.
CLEAR: T_RANGE
.
IF T_RANGE
IS NOT INITIAL. "07/09/2018
LOOP AT T_RSZSELECT
INTO WA_RSZSELECT
.
IF P_IS
EQ 'X'.
*LD_COLOR = 0.
SPLIT WA_RSZSELECT
-IOBJNM
AT '___' INTO W_INFOSET W_FALIAS
.
READ TABLE T_RSQFOBJ
INTO WA_RSQFOBJ
WITH KEY
INFOSET
= W_INFOSET
FALIAS
= W_FALIAS
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
FLAG_O
= 'X'.
W_FNAME
= WA_RSQFOBJ
-FNAME
.
W_IOBJNMR
= WA_RSZSELECT
-IOBJNM
.
ENDIF.
ELSEIF P_MC
EQ 'X'.
FLAG_O
= 'X'.
W_IOBJNMR
= WA_RSZSELECT
-IOBJNM
.
ENDIF.
READ TABLE T_QRY_DESC
INTO WA_QRY_DESC
WITH KEY ELTUID
= WA_QRY_DET
-COMPUID
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
W_TXTLG
= WA_QRY_DESC
-TXTLG
.
FLAG_Q
= 'X'.
ENDIF.
READ TABLE T_ELTDIR
INTO WA_ELTDIR
WITH KEY ELTUID
= WA_RSZSELECT
-ELTUID
BINARY SEARCH.
IF SY
-SUBRC
EQ 0.
W_DEFTP
= WA_ELTDIR
-DEFTP
.
W_MAPNAME
= WA_ELTDIR
-MAPNAME
.
FLAG_S
= 'X'.
ENDIF.
* LD_COLOR = LD_COLOR + 1.
IF FLAG_Q
EQ 'X' AND
FLAG_O
EQ 'X' AND
FLAG_S
EQ 'X'.
CLEAR FLAG_S
.
* LD_COLOR = LD_COLOR + 1.
* IF LD_COLOR = 1.
* LD_COLOR = 0.
* ENDIF.
* CONCATENATE 'C' LD_COLOR '10' INTO WA_OUTPUT-LINE_COLOR.
* CONCATENATE 'C' '10' INTO WA_OUTPUT-LINE_COLOR.
* LD_COLOR = 1.
WA_OUTPUT
-COMPID
= WA_QRY_DET
-COMPID
.
WA_OUTPUT
-TXTLG
= W_TXTLG
.
WA_OUTPUT
-INFOCUBE
= WA_QRY_DET
-INFOCUBE
.
WA_OUTPUT
-DEFTP
= W_DEFTP
.
WA_OUTPUT
-MAPNAME
= W_MAPNAME
.
IF WA_RANGE
-SIGN EQ 'I'.
WA_OUTPUT
-SIGN = 'Include'.
ELSEIF WA_RANGE
-SIGN EQ 'E'.
WA_OUTPUT
-SIGN = 'Exclude'.
ENDIF.
WA_OUTPUT
-OPT
= ''."WA_RANGE-OPT.
WA_OUTPUT
-LOW
= ''."WA_RANGE-LOW.
WA_OUTPUT
-HIGH
= ''."WA_RANGE-HIGH.
IF P_IS
EQ 'X'.
WA_OUTPUT
-INFOBJ
= W_FNAME
.
ELSEIF P_MC
EQ 'X'.
WA_OUTPUT
-INFOBJ
= W_IOBJNMR
.
ENDIF.
WA_OUTPUT
-INFOBJI
= W_IOBJNMR
.
WA_OUTPUT
-LASTUSER
= WA_QRY_DET
-LASTUSER
.
APPEND WA_OUTPUT
TO T_OUTPUT
.
ENDIF.
ENDLOOP.
REFRESH : T_RANGE
.
DELETE T_QRY_DET
INDEX SYTABIX
.
ENDIF. "07/09/2018 "if given value not exist report then do not add to output.
* IF LD_COLOR = 1.
* LD_COLOR = 0.
* ENDIF.
ENDLOOP.
SORT T_OUTPUT
.
DELETE ADJACENT DUPLICATES FROM T_OUTPUT
COMPARING ALL FIELDS.
ENDFORM. " PROCESSDATA
*&---------------------------------------------------------------------*
*& Form build_fieldcatalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BUILD_FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'COMPID'.
FIELDCATALOG
-SELTEXT_M
= 'Report Tech Name'.
FIELDCATALOG
-OUTPUTLEN
= 10.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 1.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'TXTLG'.
FIELDCATALOG
-SELTEXT_M
= 'Report Name'.
FIELDCATALOG
-OUTPUTLEN
= 60.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 2.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'INFOCUBE'.
FIELDCATALOG
-SELTEXT_M
= 'InfoProvider'.
FIELDCATALOG
-OUTPUTLEN
= 10.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 3.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'DEFTP'.
FIELDCATALOG
-SELTEXT_M
= 'Element Type'.
FIELDCATALOG
-OUTPUTLEN
= 10.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 4.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'MAPNAME'.
FIELDCATALOG
-SELTEXT_M
= 'Element Name'.
FIELDCATALOG
-OUTPUTLEN
= 40.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 5.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'SIGN'.
FIELDCATALOG
-SELTEXT_M
= 'Include/Exclude'.
FIELDCATALOG
-OUTPUTLEN
= 10.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 6.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'OPT'.
FIELDCATALOG
-SELTEXT_M
= 'Option'.
FIELDCATALOG
-OUTPUTLEN
= 20.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 7.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'LOW'.
FIELDCATALOG
-SELTEXT_M
= 'Low'.
FIELDCATALOG
-OUTPUTLEN
= 80.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 8.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'HIGH'.
FIELDCATALOG
-SELTEXT_M
= 'High'.
FIELDCATALOG
-OUTPUTLEN
= 20.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 9.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'INFOBJ'.
FIELDCATALOG
-SELTEXT_M
= 'InfoObject'.
FIELDCATALOG
-OUTPUTLEN
= 40.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 10.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'INFOBJI'.
FIELDCATALOG
-SELTEXT_M
= 'Reference Object'.
FIELDCATALOG
-OUTPUTLEN
= 15.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 11.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
FIELDCATALOG
-FIELDNAME
= 'LASTUSER'.
FIELDCATALOG
-SELTEXT_M
= 'Changed By'.
FIELDCATALOG
-OUTPUTLEN
= 20.
FIELDCATALOG
-EMPHASIZE
= 'X'.
FIELDCATALOG
-COL_POS
= 12.
APPEND FIELDCATALOG
TO FIELDCATALOG
.
CLEAR FIELDCATALOG
.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form build_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BUILD_LAYOUT
.
GD_LAYOUT
-NO_INPUT
= 'X'.
GD_LAYOUT
-COLWIDTH_OPTIMIZE
= 'X'.
GD_LAYOUT
-TOTALS_TEXT
= 'Totals'(201).
GD_LAYOUT
-TOTALS_ONLY
= 'X'.
GD_LAYOUT
-INFO_FIELDNAME
= 'LINE_COLOR'.
* gd_layout-f2code = 'DISP'. "Sets fcode for when double
* "click(press f2)
GD_LAYOUT
-ZEBRA
= 'X'.
* gd_layout-group_change_edit = 'X'.
GD_LAYOUT
-HEADER_TEXT
= 'Report List'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form build_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BUILD_EVENTS
.
DATA: LS_EVENT
TYPE SLIS_ALV_EVENT
.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE
= 0
IMPORTING
ET_EVENTS
= GT_EVENTS[]
.
READ TABLE GT_EVENTS
WITH KEY NAME
= SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT
.
IF SY
-SUBRC
= 0.
MOVE 'TOP-OF-PAGE' TO LS_EVENT
-FORM.
APPEND LS_EVENT
TO GT_EVENTS
.
ENDIF.
READ TABLE GT_EVENTS
WITH KEY NAME
= SLIS_EV_END_OF_LIST
INTO LS_EVENT
.
IF SY
-SUBRC
= 0.
MOVE 'END_OF_LIST' TO LS_EVENT
-FORM.
APPEND LS_EVENT
TO GT_EVENTS
.
ENDIF.
ENDFORM. " BUILD_EVENTS
*&---------------------------------------------------------------------*
*& Form display_alv_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_REPORT
.
GD_REPID
= SY
-REPID
.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM
= GD_REPID
* i_callback_user_command = 'USER_COMMAND'
* i_grid_title = outtext
IS_LAYOUT
= GD_LAYOUT
IT_FIELDCAT
= FIELDCATALOG[]
* it_special_groups = gd_tabgroup
IT_EVENTS
= GT_EVENTS
I_SAVE
= 'X'
* is_variant = z_template
TABLES
T_OUTTAB
= T_OUTPUT
EXCEPTIONS
PROGRAM_ERROR
= 1
OTHERS = 2.
IF SY
-SUBRC <>
0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form CLEAR_TABS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CLEAR_TABS
.
CLEAR:T_INFOSET
,
T_PROVIDER
,
T_NAV
,
T_QRY_DET
,
T_QRY_DESC
,
T_ELTDIR
,
T_RANGE
,
T_OUTPUT
,
T_RSQFOBJ
,
T_RANGE
,
T_ELTDIR
,
T_ODS
.
ENDFORM. " CLEAR_TABS
Note:
- Added code, provided option to search ODS wise also,
- And changed selection screen sequence for more convenient
Thanks for reading Blog.