Searching Variants by Value
So, this is my code for searching for variant values. I started this when I learned that others had been writing hard coded paths into variants. When we copied Production to Development, the paths on Development pointed to Production directories and mayhem resulted. I wrote this to find them.
*&---------------------------------------------------------------------*
*& Report Z_FIND_VARI_CONTENT
*&
*&---------------------------------------------------------------------*
REPORT z_find_vari_content
NO STANDARD PAGE HEADING
MESSAGE-ID zsd
LINE-SIZE 200
LINE-COUNT 65.
TABLES: varid,
varit,
tvarvc,
rsparams.
SELECT-OPTIONS:
s_rpt FOR vari-report,
s_varnt FOR vari-variant.
PARAMETERS:
p_value LIKE rsparams-low.
DATA:
t_report1 LIKE trdir-name.
TYPES: BEGIN OF ty_parms.
INCLUDE STRUCTURE rsparams.
TYPES END OF ty_parms.
TYPES: BEGIN OF ty_vari_drop,
report LIKE vari-report,
variant LIKE vari-variant,
END OF ty_vari_drop.
TYPES: BEGIN OF ty_vari_data,
report LIKE vari-report,
variant LIKE vari-variant,
value LIKE rsparams-low,
END OF ty_vari_data.
TYPES: BEGIN OF ty_vari_sel,
report LIKE varid-report,
variant LIKE varid-variant,
ename LIKE varid-ename,
aedat LIKE varid-aedat,
END OF ty_vari_sel.
TYPES:
tt_vari_drop TYPE STANDARD TABLE OF ty_vari_drop,
tt_vari_data TYPE STANDARD TABLE OF ty_vari_data,
tt_vari_sel TYPE STANDARD TABLE OF ty_vari_sel,
tt_parms TYPE STANDARD TABLE OF ty_parms.
DATA:
i_vari_drop TYPE tt_vari_drop,
i_vari_data TYPE tt_vari_data,
i_vari_sel TYPE tt_vari_sel,
i_valu_tab TYPE tt_parms.
DATA:
wa_tvarvc TYPE tvarvc,
wa_vari_drop TYPE ty_vari_drop,
wa_vari_data TYPE ty_vari_data,
wa_vari_sel TYPE ty_vari_sel,
wa_valu_tab TYPE ty_parms.
************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF wa_tvarvc FROM tvarvc
WHERE name = 'Z_FIND_VARI_CONTENT'
AND type = 'P'
AND numb = '0000'.
SELECT report variant ename edat
INTO CORRESPONDING FIELDS OF TABLE i_vari_sel
FROM varid
WHERE report IN s_rpt
AND variant IN s_varnt.
SORT i_vari_sel BY report variant.
LOOP AT i_vari_sel INTO wa_vari_sel.
MOVE wa_vari_sel-report TO wa_tvarvc-low.
UPDATE tvarvc FROM wa_tvarvc.
COMMIT WORK AND WAIT.
if wa_tvarvc-low = 'NIL'.
* break nwilhite.
endif.
SELECT SINGLE name INTO (t_report1) FROM trdir
WHERE name = wa_vari_sel-report
AND uccheck = 'X'.
IF sy-subrc IS INITIAL.
SELECT SINGLE * FROM vari
WHERE relid = 'VB'
AND report = wa_vari_sel-report
AND variant = wa_vari_sel-variant.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
report = wa_vari_sel-report
variant = wa_vari_sel-variant
* MOVE_OR_WRITE = 'W'
* NO_IMPORT = ' '
* EXECUTE_DIRECT = ' '
* IMPORTING
* SP =
TABLES
* L_PARAMS =
* L_PARAMS_NONV =
* L_SELOP =
* L_SELOP_NONV =
valutab = i_valu_tab
* OBJECTS =
* FREE_SELECTIONS_DESC =
* FREE_SELECTIONS_VALUE =
EXCEPTIONS
variant_non_existent = 1
variant_obsolete = 2
OTHERS = 3.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN '1'.
MESSAGE ID 'Z1' TYPE 'S' NUMBER '0000'
WITH 'non-exestient for:' wa_vari_sel-report wa_vari_sel-variant.
WHEN '2'.
MESSAGE ID 'Z1' TYPE 'S' NUMBER '0000'
WITH 'obsolete for:' wa_vari_sel-report wa_vari_sel-variant.
WHEN OTHERS.
MESSAGE ID 'Z1' TYPE 'S' NUMBER '0000'
WITH 'other error for:' wa_vari_sel-report wa_vari_sel-variant.
ENDCASE.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
LOOP AT i_valu_tab INTO wa_valu_tab.
MOVE wa_vari_sel-report TO wa_vari_data-report.
MOVE wa_vari_sel-variant TO wa_vari_data-variant.
MOVE wa_valu_tab-low TO wa_vari_data-value.
IF wa_vari_data-value IS INITIAL.
ELSE.
APPEND wa_vari_data TO i_vari_data.
ENDIF.
MOVE wa_valu_tab-high TO wa_vari_data-value.
IF wa_vari_data-value IS INITIAL.
ELSE.
APPEND wa_vari_data TO i_vari_data.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR wa_valu_tab.
REFRESH i_valu_tab.
ENDLOOP.
MOVE 'NIL' TO wa_tvarvc-low.
UPDATE tvarvc FROM wa_tvarvc.
* break nwilhite.
LOOP AT i_vari_data INTO wa_vari_data.
IF wa_vari_data-value CS p_value.
WRITE: /001 wa_vari_data-report, wa_vari_data-variant, wa_vari_data-value.
ENDIF.
ENDLOOP.
Now, with some tweaks, we should be also able to search for accesses to TVARVC for variant values.
More to follow:
Neal
Hi Neil,
how to do the code formagtting (OK, off topic but not documented anywhere).
Thanks and regards, Clemens