Archivo

Posts Tagged ‘SM04’

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
Anuncio publicitario
Categorías: BASIS Etiquetas: , ,

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.

Screenshot_2

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. 

Categorías: BASIS Etiquetas: , , ,

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.

Fuente: http://www.mundosap.com/foro/showthread.php?t=5154