Archivo
TH_LONG_USR_INFO – Validar que un usuario no se encuentra ya logueado en la transacción
Caso: se busca generar un mensaje de error si el usuario ya se encuentra logueado en la transacción
Solución: utilizamos TH_LONG_USR_INFO
FORM validar_doble_ingreso USING p_mandt TYPE sy-mandt p_uname TYPE sy-uname p_tcode TYPE sy-tcode CHANGING p_error TYPE c. DATA: wterminal LIKE usr41-terminal, wfdpos TYPE sy-fdpos, wmode TYPE sy-modno, user_info TYPE TABLE OF uinfo2, lw_user_info LIKE LINE OF user_info. wmode = sy-modno + 1. CALL FUNCTION 'TERMINAL_ID_GET' EXPORTING username = sy-uname IMPORTING terminal = wterminal EXCEPTIONS multiple_terminal_id = 1 no_terminal_found = 2 OTHERS = 3. SEARCH wterminal FOR '-'. CHECK sy-subrc = 0. wfdpos = sy-fdpos + 1. wterminal = wterminal+wfdpos. REFRESH user_info. CALL FUNCTION 'TH_LONG_USR_INFO' EXPORTING user = '*' TABLES user_info = user_info. * Busco si el usuario tiene una sesión abierta en SISCON READ TABLE user_info INTO lw_user_info WITH KEY client = p_mandt user = p_uname tcode = p_tcode terminal = wterminal. IF sy-subrc EQ 0. p_error = 'X'. ENDIF. ENDFORM. " VALIDAR_DOBLE_INGRESO
SM04 – Obtener lista de Usuarios y Transacciones logueados
Caso: se busca ver los usuarios logueados en el mandante y en que transacción se encuentran.
Solución: el código es obtenido del programa RSM04000_ALV (el de la SM04), en versión simplificada.
TABLES: msxxlist, uinfo. * old (deprecated) UINFO structure DATA: BEGIN OF COMMON PART usr. DATA: BEGIN OF usr_tabl OCCURS 10. INCLUDE STRUCTURE usrinfo. DATA: END OF usr_tabl. DATA: END OF COMMON PART usr. DATA: th_opcode(1) TYPE x. CONSTANTS: opcode_list LIKE th_opcode VALUE 2. REFRESH usr_tabl[]. CALL 'ThUsrInfo' ID 'OPCODE' FIELD opcode_list ID 'TABUSR' FIELD usr_tabl-*sys* . SORT usr_tabl BY mandt bname. LOOP AT usr_tabl. WRITE: / usr_tabl-MANDT, usr_tabl-BNAME, usr_tabl-tcode . ENDLOOP. Nota: para ver todas las transacciones de los usuarios, usar: DATA: user_info TYPE TABLE OF uinfo2 CALL FUNCTION 'TH_LONG_USR_INFO' EXPORTING user = '*' TABLES user_info = user_info.
Debug de Proceso de Fondo / JOB
Caso: Se desea ejecutar un reporte como proceso de fondo (JOB) y luego debuggearlo.
Solución: Previamente necesitamos permisos para el debug de jobs activos , más precisamente el objeto S_ADMI_FCD (PADM – Process administration para las transacciones SM04 y SM50).
Si tenemos los permisos, entonces:
1. Si el JOB está corriendo, vamos a la transacción SM50 y marcamos el checkbox del proceso que corre nuestro JOB y vamos a la opción del menú Program/Mode->Program->Debugging.
Allí comenzará el debug.
2.- Si el job ya finalizo podemos debugearlo desde la SM37 seleccionando el job y escribiendo la transacción JDBG.
Si el job es demasiado rápido para poder pillarlo por la SM50 un truco es programar el job por SM36 usando dos pasos y siendo el primer paso el report de bucle standard BTCLOOP, al comenzar el debug solo tendremos que salir del bucle de este report.