Posted: Sat Jan 26, 2008 5:16 pm Post subject: ALV List and Modify the User's Parameter-IDs
Code:
REPORT z_modify_user_parameter_id.
*---------------------------------------------------------------------*
* This program lists the user's Parameter-IDs, These Parameter-IDs *
* can be modified and saved via Batch-Input *
*---------------------------------------------------------------------*
* Author : Michel PIOUD - Updated 21-Nov-07 *
* HomePage : http://www.geocities.com/mpioud *
*---------------------------------------------------------------------*
CONSTANTS :
c_x VALUE 'X',
c_refresh TYPE syucomm VALUE '&REFRESH'.
*---------------------------------------------------------------------*
TYPE-POOLS: slis. " ALV Global types
TYPES :
BEGIN OF ty_s_user,
bname TYPE usr04-bname, " User name
name_last TYPE addr3_val-name_last," Last name
parid TYPE usr05-parid, " Set/Get parameter ID
partext TYPE tparat-partext, " Memory ID Text
parva TYPE usr05-parva, " Parameter value
END OF ty_s_user.
*---------------------------------------------------------------------*
DATA :
g_bname TYPE usr05-bname,
g_parid TYPE usr05-parid,
gt_user TYPE TABLE OF ty_s_user,
gt_user_old TYPE SORTED TABLE OF ty_s_user
WITH UNIQUE KEY bname parid.
FIELD-SYMBOLS <user> TYPE ty_s_user.
*---------------------------------------------------------------------*
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 10(20) v_1 FOR FIELD s_bname. "#EC NEEDED
SELECT-OPTIONS s_bname FOR g_bname MATCHCODE OBJECT user_addr.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 10(20) v_2 FOR FIELD s_parid. "#EC NEEDED
SELECT-OPTIONS s_parid FOR g_parid.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN :
SKIP, BEGIN OF LINE,COMMENT 10(20) v_3 FOR FIELD p_dsplay."#EC NEEDED
PARAMETERS p_dsplay AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
*---------------------------------------------------------------------*
* Form f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.
TYPES :
BEGIN OF ty_name,
bname TYPE usr21-bname,
name_first TYPE adrp-name_first,
name_last TYPE adrp-name_last,
END OF ty_name,
BEGIN OF ty_tparat,
paramid TYPE tparat-paramid,
partext TYPE tparat-partext,
END OF ty_tparat.
DATA :
ls_name TYPE ty_name,
lt_name TYPE SORTED TABLE OF ty_name
WITH UNIQUE KEY bname,
ls_tparat TYPE ty_tparat,
lt_tparat TYPE SORTED TABLE OF ty_tparat
WITH UNIQUE KEY paramid,
lt_user TYPE TABLE OF ty_s_user.
* Read data
SELECT u~bname parid parva
INTO CORRESPONDING FIELDS OF TABLE gt_user
FROM usr05 AS u
JOIN usr01 AS s
ON u~bname = s~bname
WHERE u~bname IN s_bname
AND parid IN s_parid.
IF gt_user[] IS NOT INITIAL.
lt_user[] = gt_user[].
SORT lt_user BY bname.
DELETE ADJACENT DUPLICATES FROM lt_user COMPARING bname.
* Read user name
SELECT bname name_first name_last
INTO TABLE lt_name
FROM usr21 AS u
JOIN adrp AS a
ON u~persnumber = a~persnumber
FOR ALL ENTRIES IN lt_user
WHERE bname = lt_user-bname.
lt_user[] = gt_user[].
SORT lt_user BY parid.
DELETE ADJACENT DUPLICATES FROM lt_user COMPARING parid.
* Memory ID Texts
SELECT paramid partext
INTO TABLE lt_tparat
FROM tparat
FOR ALL ENTRIES IN lt_user
WHERE paramid = lt_user-parid
AND sprache = sy-langu.
ENDIF.
LOOP AT gt_user ASSIGNING <user>.
* Get the parameter-id texts.
READ TABLE lt_tparat WITH KEY paramid = <user>-parid
INTO ls_tparat.
IF sy-subrc IS INITIAL.
<user>-partext = ls_tparat-partext.
ELSEIF sy-langu <> 'E'.
* Not found, try in English
SELECT SINGLE partext INTO <user>-partext
FROM tparat
WHERE paramid = <user>-parid
AND sprache = 'E'.
IF sy-subrc IS INITIAL.
CLEAR ls_tparat.
ls_tparat-paramid = <user>-parid.
ls_tparat-partext = <user>-partext.
INSERT ls_tparat INTO TABLE lt_tparat.
ELSEIF sy-langu <> 'D'.
* Not found, try in German
SELECT SINGLE partext INTO <user>-partext
FROM tparat
WHERE paramid = <user>-parid
AND sprache = 'D'.
IF sy-subrc IS INITIAL.
CLEAR ls_tparat.
ls_tparat-paramid = <user>-parid.
ls_tparat-partext = <user>-partext.
INSERT ls_tparat INTO TABLE lt_tparat.
ENDIF.
ENDIF.
ENDIF.
* Get user name
READ TABLE lt_name WITH KEY bname = <user>-bname
INTO ls_name.
IF sy-subrc IS INITIAL.
CONCATENATE ls_name-name_last ls_name-name_first
INTO <user>-name_last SEPARATED BY space.
ELSE.
<user>-name_last = <user>-bname.
ENDIF.
ENDLOOP.
* Save data
gt_user_old[] = gt_user[].
ENDFORM. " F_READ_DATA
*---------------------------------------------------------------------*
* Form f_display_data
*---------------------------------------------------------------------*
FORM f_display_data.
DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = c_x.
ls_sort-group = &2.
append ls_sort to lt_sort.
END-OF-DEFINITION.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog
lt_sort TYPE slis_t_sortinfo_alv,
ls_sort TYPE slis_sortinfo_alv,
lt_event_exit TYPE slis_t_event_exit,
ls_event_exit TYPE slis_event_exit,
ls_layout TYPE slis_layout_alv.
* Build field catalog and sort table
m_fieldcat 'BNAME' 'USR05' ''.
m_fieldcat 'NAME_LAST' 'ADDR3_VAL' ''.
m_fieldcat 'PARID' 'USR05' ''.
m_fieldcat 'PARTEXT' 'TPARAT' ''.
IF p_dsplay IS INITIAL.
m_fieldcat 'PARVA' 'USR05' c_x. " Column alterable
ELSE.
m_fieldcat 'PARVA' 'USR05' ''.
ENDIF.
ENDFORM. " F_DISPLAY_DATA
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING u_ucomm TYPE sy-ucomm
us_selfield TYPE slis_selfield. "#EC CALLED
DATA :
l_modif TYPE flag,
ls_user TYPE ty_s_user,
ls_message TYPE bdcmsgcoll,
lt_message TYPE TABLE OF bdcmsgcoll,
ls_bdcdata TYPE bdcdata,
lt_bdcdata TYPE TABLE OF bdcdata.
CASE u_ucomm.
WHEN '&IC1'.
READ TABLE gt_user INDEX us_selfield-tabindex INTO ls_user.
CHECK sy-subrc EQ 0.
m_bdc_dynpro 'SAPLSUU5' '0050' '=SHOW'.
m_bdc_field 'USR02-BNAME' ls_user-bname.
* Show user
CALL TRANSACTION 'SU01' USING lt_bdcdata MODE 'E'
MESSAGES INTO lt_message.
READ TABLE lt_message WITH KEY msgid = '01'
msgnr = '495'
TRANSPORTING NO FIELDS.
CHECK sy-subrc EQ 0.
* You are not authorized to display users
MESSAGE i495(01).
WHEN '&DATA_SAVE'.
* Update User's Parameter-IDs
LOOP AT gt_user INTO ls_user.
READ TABLE gt_user_old ASSIGNING <user>
WITH KEY bname = ls_user-bname
parid = ls_user-parid.
CALL TRANSACTION 'SU01' USING lt_bdcdata MODE 'E'
MESSAGES INTO lt_message.
READ TABLE lt_message WITH KEY msgid = '01'
msgnr = '492'
INTO ls_message.
IF sy-subrc EQ 0.
* You are not authorized to change users in group &
MESSAGE i492(01) WITH ls_message-msgv1.
EXIT.
ENDIF.
REFRESH lt_bdcdata.
ENDLOOP.
IF l_modif IS INITIAL.
MESSAGE i208(00) WITH 'Nothing to do ...'.
ELSE.
gt_user_old[] = gt_user[].
ENDIF.
WHEN '&REFRESH'.
PERFORM f_read_data. " Refresh data
us_selfield-refresh = c_x.
ENDCASE.
ENDFORM. " USER_COMMAND
************ END OF PROGRAM Z_MODIFY_USER_PARAMETER_ID ****************
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.