Application Development and Automation 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: 
Read only

regarding function module

Former Member
0 Likes
585

hi experts,

can u tell me the use of function module 'SUPRN_MAINTAIN_VALUES'.i coudn't find any documentation.

1 REPLY 1
Read only

Former Member
0 Likes
446

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.