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

Password Reset function

Former Member
0 Likes
559

Hi experts,

We are planning to implement Password reset function to a system, need to copy the existing code from another system...and the BSP code as well from another system for the UI..

Have any advice on how to do this...

Thanks,

Harini

2 REPLIES 2
Read only

Former Member
0 Likes
439

See the below program and which we will use reset the password...

----


  • SAP table Declaration

----


tables: usr02, " Logon data

ush02. " Change history for logon data

----


  • Internal Table Declaration

----


data: int_ush02 like ush02 occurs 0 with header line,

int_ush02_update like ush02 occurs 0 with header line.

data: begin of int_output occurs 0.

data: flag type c.

include structure ush02.

data: end of int_output.

----


  • Structures Declaration

----


data: lastchange like uschange.

----


  • Date Field Declaration

----


data: mode(1) type c,

ok_code(1) type n,

user_name like sy-uname.

data: uflag like ush02-uflag.

----


  • Selection Screen *

----


selection-screen begin of block b00 with frame title text-b00.

selection-screen begin of block b01 with frame title text-b01.

select-options: s_user for usr02-bname no intervals

no-extension,

s_class for usr02-class no intervals

no-extension.

selection-screen skip.

parameter: p_dept as checkbox,

p_rf as checkbox.

selection-screen end of block b01.

selection-screen begin of block b02 with frame title text-b02.

parameter: lock radiobutton group rad1,

unlock radiobutton group rad1.

selection-screen skip.

selection-screen begin of block b03 with frame title text-b03.

selection-screen skip.

select-options: s_luser for usr02-bname no intervals

no-extension

default sy-uname,

s_ldate for sy-datum no intervals

no-extension

default sy-datum.

selection-screen skip.

selection-screen end of block b03.

selection-screen end of block b02.

selection-screen end of block b00.

----


  • Events

----


initialization.

ok_code = 0.

loop at screen.

  • gray out radio button for unlock

if screen-name(11) = 'S_LUSER-LOW'.

screen-input = '0'.

endif.

if screen-name(11) = 'S_LDATE-LOW'.

screen-input = '0'.

endif.

modify screen.

endloop.

at selection-screen.

loop at screen.

if unlock = 'X'.

  • gray out radio button for unlock

if screen-name(11) = 'S_LUSER-LOW'.

screen-input = '0'.

endif.

if screen-name(11) = 'S_LDATE-LOW'.

screen-input = '0'.

endif.

modify screen.

endif.

endloop.

case s_class-low.

when 'SYSTEM'.

perform error_message using '1' 'SYSTEM'.

stop.

when 'SUPER'.

perform error_message using '1' 'SUPER'.

stop.

when 'SERVICE'.

perform error_message using '1' 'SERVICE'.

stop.

when 'COMMUNICATIO'.

perform error_message using '1' 'COMMUNICATIO'.

stop.

when 'FD_ERP'.

perform error_message using '1' 'FD_ERP'.

stop.

endcase.

  • if unblock mode, user who blcoked the user and the date

  • should be the same

if unlock = 'X'.

read table s_ldate index 1.

if s_ldate-low = space.

perform error_message using '2' 'Date when lock was done'.

stop..

endif.

read table s_luser index 1.

if s_luser-low = space.

perform error_message using '2' 'User who locked'.

stop..

endif.

endif.

  • either special user or department user has to be used

if s_user[] is initial and ( p_dept = space and p_rf = space ).

perform error_message using '3'

'Use at least Single User or Checkbox - All Deptartment User'.

stop.

endif.

  • only special user or department user has to be used

if not s_user[] is initial and

not ( p_dept = space and p_rf = space ).

perform error_message using '3'

'Use only Single User or Checkbox - All Deptartment User'.

ok_code = '1'.

endif.

----


  • program control

----


start-of-selection.

check ok_code = 0.

  • Status of user

  • 0 User not locked

  • 32 (Hex 20) Locked by central administrator of CUA

  • 64 (Hex 40) Locked by administrator

  • 128 (Hex 80) Locked due to incorrect messages

  • set lock/unlock mode

if lock = 'X'.

mode = 'L'.

uflag = '64 '.

else.

mode = 'U'.

uflag = ' 0 '.

endif.

  • select all department user when box is checked

if p_dept = 'X'.

select bname from usr02

into s_user-low

where class = 'FD_DEP_USER'.

append s_user.

endselect.

elseif p_rf = 'X'.

select bname from usr02

into s_user-low

where class = 'FD_RF_USER'.

append s_user.

endselect.

else.

read table s_user index 1.

if s_class-low = space.

s_class-low = 'FD_DEP_USER'.

endif.

select single * from usr02

where bname = s_user-low

and class = s_class-low.

if sy-subrc = 0.

else.

message i000(zwave) with 'Not allowed to block this user'.

stop.

endif.

endif.

sort s_user by low.

loop at s_user.

  • change to SAP standart (CHAR -> CHAR12)

user_name = s_user-low.

  • check last change to unblock only user which are blocked by same user

  • check status to change only user whioch have to be changed.

clear ush02.

perform check_last_user_change using user_name

changing ush02

usr02.

  • user not in the system

if ush02 is initial.

int_output-bname = user_name.

int_output-flag = 'U'.

append int_output.

continue.

endif.

int_output-bname = ush02-bname.

  • user last change and current status not in sink

if usr02-uflag ne ush02-uflag.

int_output-flag = 'S'.

append int_output.

continue.

endif.

  • lock mode

case mode.

when 'L'.

  • user allready locked

if ush02-uflag ne ' 0 '.

int_output+1 = ush02.

int_output-flag = 'L'.

append int_output.

continue.

endif.

  • user for lock in internal table

int_ush02 = ush02.

append int_ush02.

int_output+1 = ush02.

int_output-flag = space.

append int_output.

when 'U'.

  • user locked by other instance

if ush02-uflag > '128' .

int_output+1 = ush02.

int_output-flag = 'I'.

append int_output.

continue.

endif.

  • user was locked by different user

read table s_luser index 1.

if ush02-modbe ne s_luser-low and

ush02-modbe ne ush02-MODBE.

int_output+1 = ush02.

int_output-flag = 'N'.

append int_output.

continue.

endif.

  • user was locked on different date

read table s_ldate index 1.

if ush02-modda ne s_ldate-low.

int_output+1 = ush02.

int_output-flag = 'D'.

append int_output.

continue.

endif.

  • user for unlock in internal table

int_ush02 = ush02.

append int_ush02.

int_output+1 = ush02.

int_output-flag = space.

append int_output.

endcase.

endloop.

loop at int_ush02.

  • lock / unlock

call function '/RTC/AS_LOCK_UNLOCK_USER'

exporting

mandt = sy-mandt

user = int_ush02-bname

mode = mode

forced = 'X'

exceptions

no_authorization = 1

wrong_mode = 2

mandt_not_found = 3

user_not_found = 4

lock_user_not_allowed = 5

others = 6.

if sy-subrc = 0.

perform create_change_entry using int_ush02-bname uflag.

else.

message e000(zwave) with

'Lock/Unlock failed with reason ' sy-subrc.

endif.

endloop.

  • change history

if not int_ush02_update[] is initial.

insert ush02 from table int_ush02_update.

if sy-subrc = 0.

else.

message e000(zwave)

with 'Table update USH02 for change data failed'.

endif.

endif.

commit work.

loop at int_output.

write:/ int_output-bname,

int_output-flag.

case mode.

when 'L'.

case int_output-flag.

when space.

write: 'locked'.

when 'S'.

write: 'Lockstatus and Change history Lockstatus different'.

when 'L'.

write: 'User allready locked'.

endcase.

when 'U'.

case int_output-flag.

when space.

write: 'unlocked'.

when 'S'.

write: 'Lockstatus and Change history Lockstatus different'.

when 'N'.

write: 'User locked by different administrator ',

ush02-modbe.

write: 'To unlock use the field - User who locked',

'on the selection screen'.

when 'D'.

write: 'User locked on different day - locked'.

when 'I'.

write: 'Locked due unknown event'.

when space.

  • Status of user

if ush02-uflag = '0'.

write: 'User not locked'.

elseif ush02-uflag = '32'.

write: 'Locked by central administrator of CUA'.

elseif ush02-uflag = '64'.

write: 'Locked by administrator'.

elseif ush02-uflag = '128'.

write: 'Locked due to incorrect messages'.

endif.

endcase.

endcase.

endloop.

end-of-selection.

&----


*& Form error_message

&----


  • text

----


  • -->P_CLASS text

----


form error_message using value(p_number) value(p_class).

data: titel(40) type c,

txt1(40) type c,

txt2(40) type c,

txt3(40) type c,

txt4(40) type c.

case p_number.

when '1'.

titel = 'Attention - wrong value selected'.

txt1 = ' The selected user group '.

txt2 = p_class.

txt3 = ' cannot be blocked'.

txt4 = ' '.

when '2'.

titel = 'Attention - value needed'.

txt1 = ' The Input Field '.

txt2 = p_class.

txt3 = ' has to be maitained'.

txt4 = ' '.

when '3'.

titel = 'Attention - value needed'.

txt1 = p_class(12).

txt2 = p_class+14(15).

txt3 = p_class+29(31).

txt4 = ' '.

endcase.

call function 'POPUP_TO_INFORM'

exporting

titel = titel

txt1 = txt1

txt2 = txt2

txt3 = txt3

txt4 = txt4.

endform. " error_message

&----


*& Form check_last_user_change

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form check_last_user_change using p1_user_name

changing p_ush02

p_usr02.

call function 'SUSR_USER_LASTCHANGE_GET'

exporting

user_name = p1_user_name

importing

user_lastchange = lastchange

exceptions

user_name_not_exist = 1

others = 2.

if sy-subrc <> 0.

exit.

endif.

  • read last change

select single * from ush02

into p_ush02

where bname = p1_user_name

and modda = lastchange-modda

and modti = lastchange-modti

and modbe = lastchange-modbe.

if sy-subrc <> 0.

exit.

endif.

  • read current status

select single * from usr02

into p_usr02

where bname = p1_user_name.

if sy-subrc <> 0.

exit.

endif.

endform. " check_last_user_change

&----


*& Form check_last_user_change

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form create_change_entry using p2_user_name p_uflag.

  • User flag

*

  • Status of user

*

  • 0 User not locked

  • 32 (Hex 20) Locked by central administrator of CUA

  • 64 (Hex 40) Locked by administrator

  • 128 (Hex 80) Locked due to incorrect messages

*

  • More than one lock can occur at the same time.

  • In this case the field

  • contains the sum of the values

*

read table int_ush02 with key bname = p2_user_name.

int_ush02_update = int_ush02.

  • update the data with current date time user

int_ush02_update-modda = sy-datum.

int_ush02_update-modti = sy-uzeit.

int_ush02_update-modbe = sy-uname.

  • fake here SU01 because Z transaction name is to long

int_ush02_update-tcode = 'SU01'.

int_ush02_update-repid = sy-repid.

  • lock / unlock status

int_ush02_update-uflag = p_uflag.

append int_ush02_update.

if sy-subrc = 0.

else.

message e000(zwave) with

'Internal table insert for change data failed'.

endif.

endform.

Reward Points if it is helpful

Thanks

Seshu

Message was edited by:

Seshu Maramreddy

Read only

Former Member
0 Likes
439

Text elements :

LOCK Lock

P_DEPT All Department User

P_RF All RF User

S_CLASS User group

S_LDATE Date when lock was done

S_LUSER User who locked

S_USER Special User

UNLOCK Unlock

________ ______________________________