Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Save a Variant on a Subscreen

Former Member
0 Kudos

Hi Folks,

I am facing an issue with saving variants on a subscreen. I initiall solved the issue by creating parameters on the subscreen, passing the values back into global variables. Using the values in those global variables to create a variant (code below).

It worked satisfactorily, however I now have an issue. The user needs to store a value longer than 45 characters but the vari_contents table in function module RS_CREATE_VARIANT only stores a maximum of 45 characters as it is using the SAP standard RSPARAMS table.

However if I have a standard selection screen on a report I can store the 60 characters I need to. I am trying to use the function module 'RS_VARIANT_SAVE_FROM_SELSCREEN' but it keeps returning that I don't have a selection screen (I do but the selection screen is screen 1000 and my variant is being saved on screen 9040).

Apart from that, any other FMs I see to save variants all use the RSPARMS table and therefore are restricted to 45 characters.

Does anyone have any idea how I can achieve my requirement: Save a variant from a subscreen with values of more than 45 characters.

Thanks for any help,

Colm

How I save my variant currently:

  PERFORM build_sel_tab TABLES li_int_tab
                        USING 'P_CONTEX'
                              v_contex.

  PERFORM build_sel_tab TABLES li_int_tab
                      USING 'P_SAGENC'
                            v_sagenc.

  PERFORM build_sel_tab TABLES li_int_tab
                      USING 'P_SSCHEM'
                            v_sschem.

  PERFORM build_sel_tab TABLES li_int_tab
                    USING 'P_SVALUE'
                          v_svalue.

  PERFORM build_sel_tab TABLES li_int_tab
                    USING 'P_RAGENC'
                          v_ragenc.

  PERFORM build_sel_tab TABLES li_int_tab
                    USING 'P_RSCHEM'
                          v_rschem.

  CALL FUNCTION 'POPUP_TO_MODIFY_TEXT'
    EXPORTING
     titel                = 'Save Variant'
   IMPORTING
     answer               = answer
     value1               = lv_value1
   EXCEPTIONS
     titel_too_long       = 1
     OTHERS               = 2.

  variant_name = lv_value1 .
  lv_strlen = STRLEN( variant_name ).

  lv_variant_fail = 'N'.
  IF sy-subrc <> 0.
    lv_variant_fail = 'Y'.
  ELSEIF answer = 'N'.
    lv_variant_fail = 'Y'.
  ELSEIF variant_name IS INITIAL.
    lv_variant_fail = 'Y'.
  ELSEIF lv_strlen > 14.
    lv_variant_fail = 'Y'.
  ENDIF.

  CLEAR lv_value1.
  CALL FUNCTION 'POPUP_TO_MODIFY_TEXT'
    EXPORTING
     textline3            = 'Variant Description'
     titel                = 'Save Variant'
   IMPORTING
     answer               = answer
     value1               = lv_value1
   EXCEPTIONS
     titel_too_long       = 1
     OTHERS               = 2.

  lv_variant_des = lv_value1 .
  lv_strlen = STRLEN( lv_variant_des ).

  IF sy-subrc <> 0.
    lv_variant_fail = 'Y'.
  ELSEIF answer = 'N'.
    lv_variant_fail = 'Y'.
  ELSEIF variant_name IS INITIAL.
    lv_variant_fail = 'Y'.
  ELSEIF lv_strlen > 30.
    lv_variant_fail = 'Y'.
  ENDIF.

  DATA lv_uzeit TYPE sy-uzeit.
  lv_uzeit = sy-uzeit.
  REFRESH lt_varianttext.
  CLEAR lt_varianttext.
  TRANSLATE variant_name TO UPPER CASE.
  lt_varianttext-mandt    = sy-mandt.                       " gr 46A
  lt_varianttext-langu    = sy-langu.
  lt_varianttext-report   = sy-repid.
  lt_varianttext-variant  = variant_name.
  lt_varianttext-vtext    =  lv_variant_des.
  APPEND lt_varianttext.

  CLEAR ls_variantdesc.
  ls_variantdesc-mandt   = sy-mandt.                        " gr 46A
  ls_variantdesc-report  = sy-repid.
  ls_variantdesc-variant =  variant_name.
  ls_variantdesc-environmnt = 'A'.          " Online & Batch
  ls_variantdesc-ename   = sy-uname.
  ls_variantdesc-edat    = sy-datum.
  ls_variantdesc-etime   = sy-uzeit.

  curr_report = sy-repid.
  curr_variant =  variant_name.

  ls_vscreens-dynnr = '9040'.
  APPEND ls_vscreens TO lt_vscreens.

  IF lv_variant_fail = 'Y'.
    MESSAGE 'Variant did not save' TYPE 'W'.
  ELSE.
    CALL FUNCTION 'RS_CREATE_VARIANT'
      EXPORTING
        curr_report               = curr_report
        curr_variant              = curr_variant
        vari_desc                 = ls_variantdesc
      TABLES
        vari_contents             = li_int_tab
        vari_text                 = lt_varianttext
        vscreens                  = lt_vscreens
      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.
    IF sy-subrc = 0.
      MESSAGE 'Variant Saved' TYPE 'S'.
    ENDIF.
  ENDIF.

1 REPLY 1

Former Member
0 Kudos

I got around this issue by spliting my string into the low and high values when saving and then concatenating them when I read the variant back.