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: 

Delete another useru00B4s mode

Alexis_Sanz
Explorer
0 Kudos

I believe I´ve readed all the posts related to this, and this was never solved.

I´m able to delete my own modes, but when I try with another user. I cannot do it.

The only thing I can is to logoff him ( completely ).

Debugging SM04 at the exact point where it deletes the mode is imposible, so I can´t see how the trans does it.

If anyone knows the answer I would be very thankful.

1 ACCEPTED SOLUTION

former_member583013
Active Contributor
0 Kudos

I've looking for the answer for the last past year....and I can say....There's no way to do it....It seems that is an encapsulated functionallity written in C inside R/3 core.....

Greetings,

Blag.

5 REPLIES 5

former_member583013
Active Contributor
0 Kudos

I've looking for the answer for the last past year....and I can say....There's no way to do it....It seems that is an encapsulated functionallity written in C inside R/3 core.....

Greetings,

Blag.

Alexis_Sanz
Explorer
0 Kudos

It really seems to be difficult, but any kind of solution, using for example MSDOS commands, may be could get it???

Thank you very much anyway.

0 Kudos

I hate to say this....But I have tried all possible ways -:( Actually I was going to blog it using PHP/SAP Integration....But never been able to make it run.....For some reason, SAP doesn't want to let us delete user modes....

And as you have read in all the posts....A lot of people has tried with no luck....

I'm not trying to say that we need to stop looking for a way to achieve it....But it's really time consuming.....and most of the time you get really frustated -:(

Greetings,

Blag.

0 Kudos

Hi guys,

I was trying to do the same thing, and I found a way to do it! The only backdraw in this solution: it needs User-interaction, the user needs to pick the mode to be deleted in a popup, just like in SM04.

I just copied the relevant code out of the SM04 report RSM04000_ALV form MODUS_LISTE:


DATA: opcode_mode_count        TYPE x VALUE 3.
DATA: opcode_detailed_blk_info TYPE x VALUE 76.

DATA: tid        TYPE utid.
DATA: modes      TYPE sy-index.
DATA: strtid(10) TYPE c.

* Set TID to the terminal-id of the desired user, get it like here out of itab gt_all_screens:
*
* CALL 'ThUsrInfo'
*       ID 'OPCODE' FIELD opcode_detailed_blk_info
*       ID 'TAB'    FIELD gt_all_screens.

WRITE tid TO strtid LEFT-JUSTIFIED NO-GROUPING.

SET PARAMETER ID 'TID' FIELD strtid.

CALL 'ThUsrInfo'
      ID 'OPCODE' FIELD opcode_mode_count
      ID 'TID'    FIELD tid
      ID 'MODES'  FIELD modes.


modes = modes + 7.
CALL SCREEN 2000 STARTING AT 4 4 ENDING AT 62 modes.

I also just copied the dynpro 2000 out of the RSM04000_ALV. This dynpro is kind of strange, for example the screen-loop with modules SYST-OKOPO and SYST-OKOPI? Anybody knows what that means?

Hope this helps, at least You can use it for reports with user-interaction.

Regards

Jan Hempel

0 Kudos

This seems to work for deleting ndividual sessions and will only work in the foreground.  You only have to tell it what transaction(s) to delete.  It might have been written more efficiently, but does work.

Mike 

REPORT ZAB_DELETE_SESSIONS.

DATA : USR_TABL_1 TYPE USRINFO OCCURS 1 WITH HEADER LINE,

USR_BLKSD_TABL TYPE UBLKSD OCCURS 1 WITH HEADER LINE.

DATA: LV_HOLD_ROW_NUMBER like SY-TABIX.

DATA: LV_HOLD_USER like USRINFO-BNAME.

DATA: LV_HOLD_TCODE like USRINFO-TCODE.

DATA: LV_HOLD_SESSION_NUMBER type I.

DATA: LV_COUNT TYPE I VALUE 0.

DATA: LV_SESSION_ROW_COUNT TYPE I.

DATA: LV_LINE(2) TYPE c value '06'.

DATA: TH_OPCODE(1) TYPE X.

DATA: LV_FOUND(3) type c.

DATA: LV_FOUND_A_ROW(3) TYPE c.

DATA: BEGIN OF BDCDATA OCCURS 100.

INCLUDE STRUCTURE BDCDATA.

DATA: END OF BDCDATA.

DATA: BEGIN OF MESSTAB OCCURS 10.

INCLUDE STRUCTURE BDCMSGCOLL.

DATA: END OF MESSTAB.

DATA: X80 TYPE X VALUE '80',

X40 TYPE X VALUE '40',

X20 TYPE X VALUE '20',

X10 TYPE X VALUE '10',

X08 TYPE X VALUE '08',

X04 TYPE X VALUE '04',

X02 TYPE X VALUE '02',

X01 TYPE X VALUE '01'.

CONSTANTS: OPCODE_LIST LIKE TH_OPCODE VALUE 2,

OPCODE_DETAILED_BLK_INFO LIKE TH_OPCODE VALUE 76.

 

* Created my own selection screen so that the program will exit

* after deleting transaction codes.

 

SELECTION-SCREEN BEGIN OF SCREEN 100.

SELECT-OPTIONS P_TCODE for SY-TCODE NO INTERVALS OBLIGATORY.

SELECTION-SCREEN END OF SCREEN 100.

 

 

******************************************************************************

*

* Do the routine 60 times looking for the transaction and a user session to delete

* Assumption here is that for 1 transaction there won't be more than 60 users

*

*******************************************************************************

 

START-OF-SELECTION.

CALL SELECTION-SCREEN 100.

IF sy-subrc <> 0.

EXIT.

ENDIF.

 

DO 60 TIMES.

CLEAR USR_BLKSD_TABL.

REFRESH USR_BLKSD_TABL.

CLEAR USR_BLKSD_TABL.

REFRESH USR_BLKSD_TABL.

CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE_DETAILED_BLK_INFO

ID 'TAB' FIELD USR_BLKSD_TABL-*SYS*.

LV_FOUND = 'no '.

LV_COUNT = 0.

LOOP AT USR_BLKSD_TABL.

 

* IF P_TCODE EQ USR_BLKSD_TABL-TCODE. Use this if coding for 1 parameter only

 

IF USR_BLKSD_TABL-TCODE IN P_TCODE.

LV_HOLD_USER = USR_BLKSD_TABL-BNAME.

LV_HOLD_TCODE = USR_BLKSD_TABL-TCODE.

LV_FOUND = 'yes'.

EXIT.

ELSE.

CONTINUE.

ENDIF.

ENDLOOP.

IF LV_FOUND = 'no '.

LEAVE PROGRAM.

ENDIF.

 

*Determine the session row number

 

LOOP AT USR_BLKSD_TABL.

IF USR_BLKSD_TABL-BNAME EQ LV_HOLD_USER.

LV_COUNT = LV_COUNT + 1.

IF USR_BLKSD_TABL-TCODE = LV_HOLD_TCODE.

EXIT.

ELSE.

CONTINUE.

ENDIF.

ENDIF.

ENDLOOP.

PERFORM FIND_THE_ROW_FIRST_SCREEN.

PERFORM BUILDBDC.

ENDDO.

 

 

* Determine the row in SM04 for 1st selection.

 

FORM FIND_THE_ROW_FIRST_SCREEN.

CLEAR USR_TABL_1.

REFRESH USR_TABL_1.

CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE_LIST

ID 'TABUSR' FIELD USR_TABL_1-*SYS*.

sort usr_tabl_1 by mandt bname.

LOOP AT USR_TABL_1.

IF USR_TABL_1-BNAME EQ LV_HOLD_USER.

LV_HOLD_ROW_NUMBER = SY-TABIX.

ENDIF.

ENDLOOP.

ENDFORM.

 

FORM BUILDBDC.

REFRESH BDCDATA.

BDCDATA-PROGRAM = 'SAPMSSY0'.

BDCDATA-DYNPRO = '0120'.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_CURSOR'.

CASE LV_HOLD_ROW_NUMBER. "Row number for 1st screen in SM04

WHEN 1.

BDCDATA-FVAL = '04/03'.

WHEN 2.

BDCDATA-FVAL = '05/03'.

WHEN 3.

BDCDATA-FVAL = '06/03'.

WHEN 4.

BDCDATA-FVAL = '07/03'.

WHEN 5.

BDCDATA-FVAL = '08/03'.

WHEN 6.

BDCDATA-FVAL = '09/03'.

WHEN 7.

BDCDATA-FVAL = '10/03'.

WHEN 8.

BDCDATA-FVAL = '11/03'.

WHEN 9.

BDCDATA-FVAL = '12/03'.

WHEN 10.

BDCDATA-FVAL = '13/03'.

WHEN 11.

BDCDATA-FVAL = '14/03'.

WHEN 12.

BDCDATA-FVAL = '15/03'.

WHEN 13.

BDCDATA-FVAL = '16/03'.

WHEN 14.

BDCDATA-FVAL = '17/03'.

WHEN 15.

BDCDATA-FVAL = '18/03'.

WHEN 16.

BDCDATA-FVAL = '19/03'.

WHEN 17.

BDCDATA-FVAL = '20/03'.

WHEN 18.

BDCDATA-FVAL = '21/03'.

WHEN 19.

BDCDATA-FVAL = '22/03'.

WHEN 20.

BDCDATA-FVAL = '23/03'.

WHEN 21.

BDCDATA-FVAL = '24/03'.

WHEN 22.

BDCDATA-FVAL = '25/03'.

WHEN 23.

BDCDATA-FVAL = '26/03'.

WHEN 24.

BDCDATA-FVAL = '27/03'.

WHEN 25.

BDCDATA-FVAL = '28/03'.

WHEN 26.

BDCDATA-FVAL = '29/03'.

WHEN 27.

BDCDATA-FVAL = '30/03'.

WHEN 28.

BDCDATA-FVAL = '31/03'.

WHEN 29.

BDCDATA-FVAL = '32/03'.

WHEN 30.

BDCDATA-FVAL = '33/03'.

WHEN 31.

BDCDATA-FVAL = '34/03'.

WHEN 32.

BDCDATA-FVAL = '35/03'.

WHEN 33.

BDCDATA-FVAL = '36/03'.

WHEN 34.

BDCDATA-FVAL = '37/03'.

WHEN 35.

BDCDATA-FVAL = '38/03'.

WHEN 36.

BDCDATA-FVAL = '39/03'.

WHEN 37.

BDCDATA-FVAL = '40/03'.

WHEN 38.

BDCDATA-FVAL = '41/03'.

WHEN 39.

BDCDATA-FVAL = '42/03'.

WHEN 40.

BDCDATA-FVAL = '43/03'.

WHEN 41.

BDCDATA-FVAL = '44/03'.

WHEN 42.

BDCDATA-FVAL = '45/03'.

WHEN 43.

BDCDATA-FVAL = '46/03'.

WHEN 44.

BDCDATA-FVAL = '47/03'.

WHEN 45.

BDCDATA-FVAL = '48/03'.

WHEN 46.

BDCDATA-FVAL = '49/03'.

WHEN 47.

BDCDATA-FVAL = '50/03'.

WHEN 48.

BDCDATA-FVAL = '51/03'.

WHEN 49.

BDCDATA-FVAL = '52/03'.

WHEN 50.

BDCDATA-FVAL = '53/03'.

WHEN 51.

BDCDATA-FVAL = '54/03'.

WHEN 52.

BDCDATA-FVAL = '55/03'.

WHEN 53.

BDCDATA-FVAL = '56/03'.

WHEN 54.

BDCDATA-FVAL = '57/03'.

WHEN 55.

BDCDATA-FVAL = '58/03'.

WHEN 56.

BDCDATA-FVAL = '59/03'.

WHEN 57.

BDCDATA-FVAL = '60/03'.

WHEN 58.

BDCDATA-FVAL = '61/03'.

WHEN 59.

BDCDATA-FVAL = '62/03'.

WHEN 60.

BDCDATA-FVAL = '63/03'.

WHEN 61.

BDCDATA-FVAL = '64/03'.

WHEN 62.

BDCDATA-FVAL = '65/03'.

WHEN 63.

BDCDATA-FVAL = '66/03'.

WHEN 64.

BDCDATA-FVAL = '67/03'.

WHEN 65.

BDCDATA-FVAL = '68/03'.

WHEN 66.

BDCDATA-FVAL = '69/03'.

WHEN 67.

BDCDATA-FVAL = '70/03'.

WHEN 68.

BDCDATA-FVAL = '71/03'.

WHEN 69.

BDCDATA-FVAL = '72/03'.

WHEN 70.

BDCDATA-FVAL = '73/03'.

WHEN 71.

BDCDATA-FVAL = '74/03'.

WHEN 72.

BDCDATA-FVAL = '75/03'.

WHEN 73.

BDCDATA-FVAL = '76/03'.

WHEN 74.

BDCDATA-FVAL = '77/03'.

WHEN 75.

BDCDATA-FVAL = '78/03'.

WHEN 76.

BDCDATA-FVAL = '79/03'.

WHEN 77.

BDCDATA-FVAL = '80/03'.

WHEN 78.

BDCDATA-FVAL = '81/03'.

WHEN 79.

BDCDATA-FVAL = '82/03'.

WHEN 80.

BDCDATA-FVAL = '83/03'.

WHEN 81.

BDCDATA-FVAL = '84/03'.

WHEN 82.

BDCDATA-FVAL = '85/03'.

WHEN 83.

BDCDATA-FVAL = '86/03'.

WHEN 84.

BDCDATA-FVAL = '87/03'.

WHEN 85.

BDCDATA-FVAL = '88/03'.

WHEN 86.

BDCDATA-FVAL = '89/03'.

WHEN 87.

BDCDATA-FVAL = '90/03'.

WHEN 88.

BDCDATA-FVAL = '91/03'.

WHEN 89.

BDCDATA-FVAL = '92/03'.

WHEN 90.

BDCDATA-FVAL = '93/03'.

WHEN 91.

BDCDATA-FVAL = '94/03'.

WHEN 92.

BDCDATA-FVAL = '95/03'.

WHEN 93.

BDCDATA-FVAL = '96/03'.

WHEN 94.

BDCDATA-FVAL = '97/03'.

WHEN 95.

BDCDATA-FVAL = '98/03'.

WHEN 96.

BDCDATA-FVAL = '99/03'.

WHEN 97.

BDCDATA-FVAL = '100/03'.

WHEN 98.

BDCDATA-FVAL = '101/03'.

WHEN 99.

BDCDATA-FVAL = '102/03'.

WHEN 100.

BDCDATA-FVAL = '103/03'.

ENDCASE.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_OKCODE'.

BDCDATA-FVAL = '=PMOD'.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-PROGRAM = 'RSM04000_ALV'.

BDCDATA-DYNPRO = '2000'.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_CURSOR'.

CASE LV_COUNT.

WHEN 1.

BDCDATA-FVAL = 'MODUS-MODUS(01)'. "Session number

WHEN 2.

BDCDATA-FVAL = 'MODUS-MODUS(02)'. "Session number

WHEN 3.

BDCDATA-FVAL = 'MODUS-MODUS(03)'. "Session number

WHEN 4.

BDCDATA-FVAL = 'MODUS-MODUS(04)'. "Session number

WHEN 5.

BDCDATA-FVAL = 'MODUS-MODUS(05)'. "Session number

WHEN 6.

BDCDATA-FVAL = 'MODUS-MODUS(06)'. "Session number

WHEN 7.

BDCDATA-FVAL = 'MODUS-MODUS(07)'. "Session number

ENDCASE.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_OKCODE'.

BDCDATA-FVAL = '=DEL'.

APPEND BDCDATA.

CLEAR BDCDATA.

 

BDCDATA-PROGRAM = 'SAPMSSY0'.

BDCDATA-DYNPRO = '0120'.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_CURSOR'.

BDCDATA-FVAL = '06/03'.

APPEND BDCDATA.

CLEAR BDCDATA.

BDCDATA-FNAM = 'BDC_OKCODE'.

BDCDATA-FVAL = '=&F03'.

APPEND BDCDATA.

CLEAR BDCDATA.

CALL TRANSACTION 'SM04' USING BDCDATA MODE 'N' UPDATE 'A' MESSAGES INTO MESSTAB.

 

* IF SY-SUBRC EQ 0.

* WRITE: / '**** DELETED ', LV_HOLD_TCODE, ' FOR USER ', LV_HOLD_USER.

* ELSE.

* WRITE: / '**** FAILED FOR DELETE OF ', LV_HOLD_TCODE, ' FOR USER ', LV_HOLD_USER.

*LEAVE PROGRAM.

* ENDIF.

 

ENDFORM.