class ZCL_VARIANTS DEFINITION.
PUBLIC SECTION.
data: G_program type RSVAR-REPORT,
g_variant type RSVAR-VARIANT,
g_params type RSPARAMS_TT,
g_varitext type DIWPS_VARIT_T,
g_varid type VARID,
g_vardesc type RVART_VTXT.
METHOds: VARIANT_CHECK returning value(p_result) type sy-subrc,
variant_delete returning value(p_result) type sy-subrc,
variant_create returning value(p_result) type sy-subrc,
variant_read returning value(p_result) type sy-subrc.
ENDCLASS.
class ZCL_VARIANTS IMPLEMENTATION.
method variant_read.
if me->G_program is INITIAL or
me->g_variant is INITIAL.
p_result = 4.
else.
CALL FUNCTION 'RS_VARIANT_CONTENTS'
EXPORTING
report = me->g_program
variant = me->g_variant
* MOVE_OR_WRITE = 'W'
* NO_IMPORT = ' '
* EXECUTE_DIRECT = ' '
* GET_P_XML_TAB =
* IMPORTING
* SP =
* P_XML_TAB =
TABLES
* L_PARAMS =
* L_PARAMS_NONV =
* L_SELOP =
* L_SELOP_NONV =
valutab = me->g_params
* VALUTABL =
* OBJECTS =
* VARIVDATS =
* FREE_SELECTIONS_DESC =
* FREE_SELECTIONS_VALUE =
* FREE_SELECTIONS_OBJ =
EXCEPTIONS
VARIANT_NON_EXISTENT = 1
VARIANT_OBSOLETE = 2
OTHERS = 3.
IF sy-subrc <> 0.
p_result = sy-subrc.
ENDIF.
endif.
ENDMETHOD.
method variant_create.
data: l_varitxt like LINE OF g_varitext.
if me->G_program is INITIAL or
me->g_variant is INITIAL.
p_result = 4.
else.
me->g_varid-report = me->G_program.
me->g_varid-variant = me->g_variant.
me->g_varid-environmnt = 'A'.
me->g_varid-aedat = sy-datum.
me->g_varid-aetime = sy-uzeit.
l_varitxt-langu = sy-langu.
l_varitxt-report = me->g_program.
l_varitxt-variant = me->g_variant.
l_varitxt-vtext = me->g_vardesc.
if me->g_vardesc is INITIAL.
CONCATENATE l_varitxt-report
l_varitxt-variant
sy-uname sy-uzeit
into l_varitxt-vtext SEPARATED BY ' '.
endif.
APPEND l_varitxt TO g_varitext.
CALL FUNCTION 'RS_CREATE_VARIANT'
EXPORTING
curr_report = me->g_program
curr_variant = me->g_variant
vari_desc = me->g_varid
TABLES
vari_contents = me->g_params
vari_text = me->g_varitext
EXCEPTIONS
illegal_report_or_variant = 1
illegal_variantname = 2
not_authorized = 3
not_executed = 4
report_not_existent = 5
report_not_supplied = 6
variant_exists = 7
variant_locked = 8
OTHERS = 9.
p_result = sy-subrc.
endif.
endmethod.
METHOD variant_delete.
if me->G_program is INITIAL or
me->g_variant is INITIAL.
p_result = 4.
else.
CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
report = me->G_program
variant = me->g_variant
flag_confirmscreen = 'X'
flag_delallclient = 'X'
IMPORTING
variant = me->g_variant
EXCEPTIONS
not_authorized = 1
not_executed = 2
no_report = 3
report_not_existent = 4
report_not_supplied = 5
variant_locked = 6
variant_not_existent = 7
no_corr_insert = 8
variant_protected = 9
OTHERS = 10.
p_result = sy-subrc.
endif.
endmethod.
method VARIANT_CHECK.
if me->G_program is INITIAL or
me->g_variant is INITIAL.
p_result = 4.
else.
CALL FUNCTION 'RS_VARIANT_EXISTS'
EXPORTING
report = me->G_program
variant = me->g_variant
IMPORTING
r_c = p_result
EXCEPTIONS
not_authorized = 1
no_report = 2
report_not_existent = 3
report_not_supplied = 4
OTHERS = 5.
if sy-subrc ne 0.
p_result = sy-subrc.
endif.
endif.
ENDMETHOD.
ENDCLASS.
end-of-SELECTION.
data: oo type REF TO ZCL_VARIANTS.
create OBJECT oo.
oo->G_program = 'ZZZZ'.
oo->g_variant = 'PRUEBA22'.
if oo->VARIANT_CHECK( ) is INITIAL.
if oo->variant_read( ) is INITIAL.
clear sy-subrc.
oo->g_variant = 'Z0101'.
if oo->variant_create( ) is INITIAL.
clear sy-subrc.
endif.
endif.
endif.