‎2008 May 20 8:05 AM
hi experts,
can u tell me the use of function module 'SUPRN_MAINTAIN_VALUES'.i coudn't find any documentation.
‎2008 May 20 8:13 AM
dear friend,
i am seanding you a code
in which u can easily understand the better
use of this FM.
this is extracted from sap-library.
standard code.
pls go through this of just press F1 in any exsisting
se38 program and paste this FM and press the
radio buttom function module and
u can get all the details, like import and export and
table also.
pls reply me if it not works.
rewards are realy expected and appreciated.
vivek
FUNCTION SUPRN_MAINTAIN_VALUES.
*"----
-
""Lokale Schnittstelle:
*" IMPORTING
*" VALUE(OBJECT) LIKE TOBJ-OBJCT
*" VALUE(FIELD) LIKE TOBJ-FIEL1
*" VALUE(SHOW_ONLY) OPTIONAL
*" VALUE(WITH_VARIABLES) OPTIONAL
*" VALUE(CHECK_MODE) OPTIONAL
*" VALUE(AUTHORITY_CHECK_TCODE) LIKE SMENSAPNEW-CUSTOMIZED
*" DEFAULT SPACE
*" VALUE(CONVERT_IF_ALLOWED) LIKE SMENSAPNEW-CUSTOMIZED
*" DEFAULT 'X'
*" VALUE(SHOW_ALL_ACTIVITIES) LIKE SMENSAPNEW-CUSTOMIZED
*" DEFAULT SPACE
*" VALUE(NO_COMPLETE_AUTHORITY) LIKE SMENSAPNEW-CUSTOMIZED
*" DEFAULT SPACE
*" VALUE(AUTH_FOR_S_TABU_LIN) LIKE AGR_1251-AUTH DEFAULT SPACE
*" VALUE(AUTH_CALL_MODE_S_TABU_LIN) LIKE SMENSAPNEW-CUSTOMIZED
*" DEFAULT SPACE
*" VALUE(MODIFIED) LIKE AGR_1251-MODIFIED DEFAULT SPACE
*" EXPORTING
*" VALUE(SAVE)
*" TABLES
*" F_VALUES STRUCTURE TPR01
*" FULL_VALUE_TAB STRUCTURE TPR01 OPTIONAL
*"----
-
Parameter AUTHORITY_CHECK_TCODE specifies if there should be
performed authorization checks of objects S_USER_VAL and S_USER_TCD.
DATA: exit_values TYPE c VALUE space.
DATA: ORG_CRIT LIKE TOBJ-FIEL1.
DATA: LOC_TCD LIKE SY-TCODE.
DATA: F_VALUES_ORIG LIKE TPR01 OCCURS 0 WITH HEADER LINE.
DATA: HIGH_FOUND VALUE ' ',
alle value ' ',
screen LIKE sy-dynnr,
LEN TYPE I,
HLEN TYPE I,
CX TYPE CXTAB_COLUMN,
T_DD07V LIKE DD07V OCCURS 100 WITH HEADER LINE,
CONV_O(30) VALUE 'CONVERSION_EXIT_ _OUTPUT',
CONV_I(30) VALUE 'CONVERSION_EXIT_ _INPUT',
FLAG_EXIT LIKE SY-SUBRC.
DATA: TABSET LIKE USTABSET OCCURS 10 WITH HEADER LINE,
INPUT_ERROR_FLAG TYPE C.
CLEAR: CONVERSION_DONE, AUTHORITY_CHECK_DONE.
NO_CHECK_SUSERVAL = AUTHORITY_CHECK_TCODE. " note 635299
Special maintenance dialog for field CO_ACTION is deactivated.
if FIELD = 'CO_ACTION'.
SELECT SINGLE * FROM USEXIT WHERE FIELD = 'CO_ACTION'.
IF SY-SUBRC = 0 AND USEXIT-EXIT_FB = 'PRGN_CALL_EXIT_FOR_CO_ACTION' .
DELETE USEXIT.
ENDIF.
endif.
Warning if org. field will be changed individually
MODIFIED is only set if called from the PFCG
IF show_only NE x "Change mode
and ( modified = 'S' "Show popup only once when turning
or modified = 'U' ). "'standard' into 'modified'
CALL FUNCTION 'SUPRN_IS_ORG'
EXPORTING
field = field
EXCEPTIONS
field_is_no_org = 1
OTHERS = 2.
IF sy-subrc = 0.
CALL FUNCTION 'PRGN_CALL_INFO_TEXT_POPUP'
EXPORTING
info_text = 'PRGN_INFO_TEXT_ORG_MAINT'
EXCEPTIONS
action_canceled = 1
OTHERS = 2.
IF sy-subrc <> 0.
CLEAR save.
RETURN. "old releases: EXIT.
ENDIF.
ENDIF. "Field is org level
ENDIF. "Status 'Standard'
G_OBJ_NAME_FOR_VALUES = OBJECT.
Falls es bei Objekten vorkommt, daß Aktivitäten nicht korrekt
gepflegt sind (Feld ACTVT vorhanden und keine Einträge in der Tabelle
TACTZ), so wurde bisher vom Popup eine Leere Liste von Checkboxen
angeboten. Sinnvoller ist es, dann alle Aktivitäten korrekt anzubieten
Daher wird dieser Fall hier vorab geprüft:
IF SHOW_ALL_ACTIVITIES = SPACE.
SELECT SINGLE * FROM TOBJ WHERE OBJCT = OBJECT.
IF SY-SUBRC = 0 AND ( TOBJ-FIEL1 = 'ACTVT' OR
TOBJ-FIEL2 = 'ACTVT' OR
TOBJ-FIEL3 = 'ACTVT' OR
TOBJ-FIEL4 = 'ACTVT' OR
TOBJ-FIEL5 = 'ACTVT' OR
TOBJ-FIEL6 = 'ACTVT' OR
TOBJ-FIEL7 = 'ACTVT' OR
TOBJ-FIEL8 = 'ACTVT' OR
TOBJ-FIEL9 = 'ACTVT' OR
TOBJ-FIEL0 = 'ACTVT' ).
SELECT SINGLE * FROM TACTZ WHERE BROBJ = OBJECT.
IF SY-SUBRC <> 0.
SHOW_ALL_ACTIVITIES = 'X'.
ENDIF.
ENDIF.
ENDIF.
NO_BUTTON_COMPLETE_AUTHORITY = NO_COMPLETE_AUTHORITY.
" Für externen Aufruf Tabellen vorbelegen
F_VALUES_ORIG[] = F_VALUES[].
PERFORM INIT_TABS USING SPACE SPACE SPACE.
REFRESH EXC_VALP.
KZ_ALL_ACT = SPACE.
KZ_VAL_SHOW = SHOW_ONLY.
KZ_VARIABLE = WITH_VARIABLES.
IF KZ_VAL_SHOW = X.
"Bestimmte Status excludieren
EXC_VALP = 'SAVA'. APPEND EXC_VALP.
EXC_VALP = 'SAVV'. APPEND EXC_VALP.
EXC_VALP = 'DELV'. APPEND EXC_VALP.
EXC_VALP = 'MRKA'. APPEND EXC_VALP.
EXC_VALP = 'MRKD'. APPEND EXC_VALP.
ENDIF.
IF KZ_VARIABLE = SPACE OR KZ_VAL_SHOW = X.
EXC_VALP = 'VAZW'. APPEND EXC_VALP.
ENDIF.
*--- Dynprotexte
PERFORM READ_OBJ_TEXT USING OBJECT FIELDTEXT. " Dummy
PERFORM READ_FIELD_TEXT USING FIELD FIELDTEXT.
USOBT_C-FIELD = FIELD.
*---- temporäre Tabelle aufbauen
" Felder und Werte in Hilfstabelle übertragen
REFRESH H_FVAL. CLEAR H_FVAL.
" Feldwerte aus DDic suchen
READ TABLE I_DFIES WITH KEY FIELDNAME = FIELD BINARY SEARCH.
MOVE-CORRESPONDING I_DFIES TO H_FVAL.
Kein Konvertierungsexit, Buehler macht auch keinen
if not H_FVAL-CONVEXIT is initial.
CONV_O+16(5) = I_DFIES-CONVEXIT. CONDENSE CONV_O NO-GAPS.
CONV_I+16(5) = I_DFIES-CONVEXIT. CONDENSE CONV_I NO-GAPS.
H_FVAL-CONV_FB_OUTPUT = CONV_O.
H_FVAL-CONV_FB_INPUT = CONV_I.
endif.
H_FVAL-FIELD = FIELD.
H_FVAL-OBJECT = OBJECT.
CURR_OUTPUTLEN = I_DFIES-OUTPUTLEN.
" Variable enthalten ?
CLEAR KZ_VARIABLE_CONT.
READ TABLE F_VALUES INDEX 1.
IF SY-SUBRC = 0.
IF F_VALUES-LOW(1) = VAR_KZ_LEFT. " Variable
KZ_VARIABLE_CONT = X.
PERFORM READ_VAR_TEXT USING F_VALUES-LOW USERVART-TEXT.
ENDIF.
ENDIF.
LOOP AT F_VALUES.
" Jeden Wert übernehmen
MOVE-CORRESPONDING F_VALUES TO H_FVAL.
APPEND H_FVAL.
IF F_VALUES-HIGH <> SPACE.
HIGH_FOUND = X.
ENDIF.
ENDLOOP.
DO 20 TIMES.
CLEAR: H_FVAL-LOW, H_FVAL-HIGH.
H_FVAL-NOFILL = X.
APPEND H_FVAL.
ENDDO.
READ TABLE F_VALUES WITH KEY LOW = '*'.
IF SY-SUBRC = 0.
KZ_ALL_ACT = X.
ELSE.
KZ_ALL_ACT = SPACE.
ENDIF.
Do we have a special maintenance dialog for the current authorization
field?
SELECT SINGLE * FROM USEXIT WHERE FIELD = FIELD.
FLAG_EXIT = SY-SUBRC.
Check if there are fixed values ranges of domain.
If there are such values then a special maintenance
dialog is not used
DATA: dd01v_wa LIKE dd01v.
DATA: dd04v_wa LIKE dd04v.
DATA: dd07v_wa LIKE dd07v.
DATA dd07v_tab LIKE dd07v OCCURS 0 WITH HEADER LINE.
SELECT SINGLE * FROM authx WHERE fieldname = field.
IF sy-subrc = 0.
Read attributes of data element
CALL FUNCTION 'DDIF_DTEL_GET'
EXPORTING
name = authx-rollname
STATE = 'A'
LANGU = ' '
IMPORTING
GOTSTATE =
dd04v_wa = dd04v_wa
tpara_wa = tpara_wa
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
Data element & does not exist
MESSAGE e468(sa) with authx-rollname.
ENDIF.
ENDIF.
IF not dd04v_wa-domname IS INITIAL.
Read attributes of domain
CALL FUNCTION 'DDIF_DOMA_GET'
EXPORTING
name = dd04v_wa-domname
STATE = 'A'
LANGU = sy-langu
IMPORTING
GOTSTATE =
dd01v_wa = dd01v_wa
TABLES
dd07v_tab = dd07v_tab
EXCEPTIONS
illegal_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
Domain & is not in the ABAP/4 Dictionary
MESSAGE e770(sa) with dd04v_wa-domname.
ENDIF.
ENDIF.
Check if there are upper limits.
LOOP AT dd07v_tab.
IF NOT dd07v_tab-domvalue_h IS INITIAL.
high_found = 'X'.
EXIT.
ENDIF.
ENDLOOP.
*--- Für die Aktivitäten anders aufbauen
IF HIGH_FOUND = SPACE AND FIELD = 'ACTVT'.
REFRESH H_FVAL.
LOOP AT O_TACTT.
H_FVAL-LOW = O_TACTT-ACTVT.
H_FVAL-ACT_TEXT = O_TACTT-LTEXT.
READ TABLE F_VALUES WITH KEY LOW = O_TACTT-ACTVT.
IF SY-SUBRC = 0.
H_FVAL-MARK = X.
ELSE.
H_FVAL-MARK = SPACE.
ENDIF.
if alle = space and h_fval-mark = space.
IF SHOW_ALL_ACTIVITIES = SPACE AND H_FVAL-MARK = SPACE.
" Nur die Aktivitäten anbieten, die in TACTZ angegeben sind
READ TABLE O_TACTZ WITH KEY BROBJ = OBJECT
ACTVT = O_TACTT-ACTVT
BINARY SEARCH.
ELSE.
" Alle Werte anbieten
SY-SUBRC = 0.
ENDIF.
IF SY-SUBRC = 0.
READ TABLE H_FVAL WITH KEY LOW = H_FVAL-LOW BINARY SEARCH.
IF SY-SUBRC <> 0.
INSERT H_FVAL INDEX SY-TABIX.
ENDIF.
ENDIF.
ENDLOOP.
screen = '0201'. "Maintenance screen showing fixed values of domain
" Breite der Spalte im Control festlegen
READ TABLE ACT_TC-COLS INTO CX WITH KEY 'H_FVAL-LOW'.
IF SY-SUBRC = 0.
CX-VISLENGTH = 3.
MODIFY ACT_TC-COLS FROM CX INDEX SY-TABIX.
ENDIF.
" Zurückblättern auf erste Zeile
ACT_TC-TOP_LINE = 1.
*--- Falls Domänenfestwerte hinterlegt sind, diese direkt anzeigen
ELSEIF HIGH_FOUND = SPACE AND I_DFIES-VALEXI = X.
" Domäne mit Festwerten hinterlegt
REFRESH H_FVAL.
LEN = 0.
PERFORM DOMVALUE_GET TABLES T_DD07V
USING I_DFIES-DOMNAME.
LOOP AT T_DD07V.
H_FVAL-LOW = T_DD07V-DOMVALUE_L.
H_FVAL-ACT_TEXT = T_DD07V-DDTEXT.
READ TABLE F_VALUES WITH KEY LOW = T_DD07V-DOMVALUE_L.
IF SY-SUBRC = 0.
H_FVAL-MARK = X.
ELSE.
H_FVAL-MARK = SPACE.
ENDIF.
READ TABLE H_FVAL WITH KEY LOW = H_FVAL-LOW BINARY SEARCH.
IF SY-SUBRC <> 0.
INSERT H_FVAL INDEX SY-TABIX.
ENDIF.
" Maximale Länge der Werte festlegen
HLEN = STRLEN( H_FVAL-LOW ) .
IF HLEN > LEN.
LEN = HLEN.
ENDIF.
ENDLOOP.
screen = '0201'. "Maintenance screen showing fixed values of domain
" Breite der Spalte im Control festlegen
LEN = LEN + 1.
READ TABLE ACT_TC-COLS INTO CX WITH KEY 'H_FVAL-LOW'.
IF SY-SUBRC = 0.
CX-VISLENGTH = LEN.
MODIFY ACT_TC-COLS FROM CX INDEX SY-TABIX.
ENDIF.
" Zurückblättern auf erste Zeile
ACT_TC-TOP_LINE = 1.
ELSEIF FLAG_EXIT = 0.
Ausnahmebehandlung: Bei Feld field_with_exit soll nicht das Standard
popup erscheinen, sondern ein EXIT angesprungen werden
Hier muss der Aufruf für den Exit her
CLEAR TABSET.
LOOP AT F_VALUES.
TABSET-SFIELD = FIELD.
TABSET-VON = F_VALUES-LOW.
TABSET-BIS = F_VALUES-HIGH.
APPEND TABSET.
ENDLOOP.
CALL FUNCTION USEXIT-EXIT_FB
EXPORTING
OBJECT = OBJECT
FIELD = FIELD
TABLES
TABSET = TABSET
EXCEPTIONS
OTHERS = 1.
CLEAR F_VALUES. REFRESH F_VALUES.
LOOP AT TABSET.
IF TABSET-VON IS INITIAL AND
NOT TABSET-BIS IS INITIAL.
INPUT_ERROR_FLAG = 'X'.
CONTINUE.
ELSE.
F_VALUES-LOW = TABSET-VON.
F_VALUES-HIGH = TABSET-BIS.
APPEND F_VALUES.
ENDIF.
ENDLOOP.
IF NOT INPUT_ERROR_FLAG IS INITIAL.
MESSAGE I620(S#).
ENDIF.
SCREEN = '9999'.
FIELD_ACT = 'SAVV'.
ELSE.
screen = '0200'. "Default maintenance screen
Zurückblättern auf erste Zeile
VAL_TC-TOP_LINE = 1.
ENDIF.
IF CHECK_MODE = 'X'.
LOOP AT H_FVAL.
FULL_VALUE_TAB-LOW = H_FVAL-LOW.
APPEND FULL_VALUE_TAB.
ENDLOOP.
EXIT.
ENDIF.
IF NOT SCREEN = '9999'.
CALL SCREEN SCREEN STARTING AT 3 3.
CLEAR NO_CHECK_SUSERVAL. " note 635299
ELSE.
CLEAR H_FVAL. REFRESH H_FVAL.
H_FVAL-OBJECT = OBJECT.
H_FVAL-FIELD = TABSET-SFIELD.
LOOP AT F_VALUES.
MOVE-CORRESPONDING F_VALUES TO H_FVAL.
APPEND H_FVAL.
ENDLOOP.
ENDIF.
" Welche Aktion ist zu tun ?
SAVE = SPACE.
CHECK KZ_VAL_SHOW = SPACE.
CASE FIELD_ACT.
WHEN 'SAVV'.
PERFORM FIELD_SAVE_VALUES TABLES F_VALUES.
SAVE = X.
WHEN 'SAVA'.
PERFORM FIELD_SAVE_VALUES_ACT TABLES F_VALUES.
SAVE = X.
WHEN OTHERS. SAVE = SPACE.
ENDCASE.
IF SHOW_ONLY = SPACE AND CONVERT_IF_ALLOWED = 'X'.
IF CONVERSION_DONE IS INITIAL. "Note 599006
IF CANCEL_FLAG IS INITIAL.
CALL FUNCTION 'SUPRN_CONVERT_VALUES'
EXPORTING
OBJECT = OBJECT
FIELD = FIELD
TABLES
F_VALUES = F_VALUES.
ELSE.
CLEAR CANCEL_FLAG.
ENDIF.
ENDIF.
ENDIF.
IF authority_check_tcode = 'X' AND object = 'S_TCODE'
AND field = 'TCD' AND show_only = space.
Flag AUTHORITY_CHECK_DONE is set in the screen 200
IF AUTHORITY_CHECK_DONE IS INITIAL. "Note 599006
CALL FUNCTION 'SUPRN_S_TCODE_AUTHORITY_CHECK'
TABLES
fvalues_old = f_values_orig
fvalues_new = f_values
EXCEPTIONS
no_authority = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
F_VALUES[] = F_VALUES_ORIG[].
ENDIF.
ENDIF.
ENDIF.
IF authority_check_tcode = 'X' AND object <> 'S_TCODE'
AND show_only = space.
IF AUTHORITY_CHECK_DONE IS INITIAL. "Note 599006
For screen 201 FM 'SUPRN_VALUES_AUTHORITY_CHECK' is not
appropriate because this function module generates I-message.
So authority check is done in the special form routine.
IF NOT SCREEN EQ '0201'.
IF FLAG_EXIT NE 0.
CALL FUNCTION 'SUPRN_VALUES_AUTHORITY_CHECK'
EXPORTING
object = object
field = field
TABLES
fvalues_old = f_values_orig
fvalues_new = f_values
EXCEPTIONS
no_authority = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
F_VALUES[] = F_VALUES_ORIG[].
ENDIF.
ELSE.
PERFORM AUTHORITY_CHECK_USEXIT
TABLES f_values_orig f_values USING object field.
Pop-ups with failed results
IF NOT REJECTED_FIELDS_VAL_DEL[] IS INITIAL.
DELETE ADJACENT DUPLICATES FROM REJECTED_FIELDS_VAL_DEL.
POP_UP_KIND = 'X'.
PERFORM POP_UP_WITH_LIST_NEW TABLES REJECTED_FIELDS_VAL_DEL
USING POP_UP_KIND '0200'.
ENDIF.
IF NOT REJECTED_FIELDS_VAL_CHAN[] IS INITIAL.
DELETE ADJACENT DUPLICATES FROM REJECTED_FIELDS_VAL_CHAN.
CLEAR POP_UP_KIND.
PERFORM POP_UP_WITH_LIST_NEW TABLES REJECTED_FIELDS_VAL_CHAN
USING POP_UP_KIND '0200'.
ENDIF.
ENDIF.
ELSE.
PERFORM AUTHORITY_CHECK_0201
TABLES f_values_orig f_values USING object field.
Pop-ups with failed results
IF NOT REJECTED_FIELDS_VAL_DEL[] IS INITIAL.
DELETE ADJACENT DUPLICATES FROM REJECTED_FIELDS_VAL_DEL.
POP_UP_KIND = 'X'.
PERFORM POP_UP_WITH_LIST_NEW TABLES REJECTED_FIELDS_VAL_DEL
USING POP_UP_KIND '0201'.
ENDIF.
IF NOT REJECTED_FIELDS_VAL_CHAN[] IS INITIAL.
DELETE ADJACENT DUPLICATES FROM REJECTED_FIELDS_VAL_CHAN.
CLEAR POP_UP_KIND.
PERFORM POP_UP_WITH_LIST_NEW TABLES REJECTED_FIELDS_VAL_CHAN
USING POP_UP_KIND '0201'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.