Archivo
Tabla USR02 – Desbloquear usuario por tabla
Caso: Se desea desbloquear un usuario SAP mediante tabla; es decir no tenemos acceso a la SU01 pero si a modificar tablas (ejemplo: tenemos perfil de programador y no de BASIS).
Solución: En la tabla USR02, cuando por ejemplo un usuario tiene bloqueado el usuario por intentos fallidos, el campo UFLAG aparece con el valor 128. Para desbloquearlo sólo debemos volver el valor a 0 (cero)
Saltar mensaje "Falta autorización para transacción"
Caso: Se desea evitar el mensaje "Falta autorización para transacción"
Solución: Si tenemos acceso a la SE37, podemos ejecutar la función RS_HDSYS_CALL_TC_VARIANT.
Allí, en el parámetro TCODE ponemos la transacción a la cual deseamos ingresar y quitamos la X al parámetro AUTHORITY-CHECK.
Debe usarse con cuidado porque queda en el LOG de accesos y en la transacción (ejemplo en la SU01) puede que no tengas otros accesos
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.
TH_USER_INFO – Información de la sesión de usuario
Caso: se busca conocer la información del usuario logueado
Solución: Se utiliza la función TH_USER_INFO
DATA: hostaddr LIKE msxxlist-hostadr, terminal(255), act_sessions LIKE sm04dic-counter, max_sessions LIKE sm04dic-counter, my_session LIKE sm04dic-counter, my_internal_session LIKE sm04dic-counter, task_state LIKE sm04dic-counter. DATA: dot VALUE '.', ip1 TYPE i, ip2 TYPE i, ip3 TYPE i, ip4 TYPE i, c_ip1(3) TYPE c, c_ip2(3) TYPE c, c_ip3(3) TYPE c, c_ip4(3) TYPE c, v_ipaddr(15). CALL FUNCTION 'TH_USER_INFO' IMPORTING hostaddr = hostaddr terminal = terminal act_sessions = act_sessions max_sessions = max_sessions my_session = my_session my_internal_session = my_internal_session task_state = task_state. * Formato Dirección IP c_ip1 = ip1 = hostaddr(1). c_ip2 = ip2 = hostaddr+1(1). c_ip3 = ip3 = hostaddr+2(1). c_ip4 = ip4 = hostaddr+3(1). CONCATENATE c_ip1 dot c_ip2 dot c_ip3 dot c_ip4 INTO v_ipaddr. CONDENSE v_ipaddr NO-GAPS. WRITE'Información del Usuario:', sy-uname. ULINE. WRITE
'Dirección IP:', 20 v_ipaddr, / 'Terminal:', 20 terminal, / 'Sesiones abiertas:', 20 act_sessions, / 'Máx Sesiones:', 20 max_sessions, / 'Sesión actual:', 20 my_session, / 'Sesión interna:', 20 my_internal_session, / 'Estado de tarea:', 20 task_state.
SE03 – Buscar órdenes de transporte por objeto
Caso: se busca en que orden se encuentra un objeto.
Solución: Por la transacción SE03 se puede buscar objetos en las órdenes de transporte (tanto liberadas con modificables).
Se puede filtrar por el objeto a buscar (programa, clase, tipo tabla, etc.).
Otros objetos que no aparecen por defecto en la pantalla inicial pero que se pueden añadir son:
R3TR TABU – Contenido de tabla
R3TR TDAT – Customizing: Contenido de tablas
R3TR VDAT – Actualización vistas: Datos
R3TR CDAT – Actualización cluster vistas: Datos
Link: https://abapforsap.wordpress.com/2013/07/18/buscar-ordenes-de-transporte/
Crear autorización para leer archivos del servidor
Transacción: PFCG
Escenario: tengo un usuario que en fondo ejecuta una transacción que lee archivos txt del servidor de SAP para actualizar una tabla antes de mostrarle los datos en pantalla. Luego copia esos archivos a una carpeta de procesados y los elimina de la ubicación original. Me sirve para no tener que ejecutar un JOB periódico y así se actualizan los datos de pantalla on-demand.
El problema surge con las autorizaciones que le tengo que dar al usuario para ingresar a dicha transacción. Encontré un link interesante que abajo adjunto en el cual se puede llamar a la función AUTHORITY_CHECK_DATASET en el programa Z para poder verificar que el usuario puede acceder a leer y/o escribir archivos del servidor.
Sino, la otra forma (como verán en el documento adjunto no es recomendable ya que si tienen varias transacciones o archivos que leer deben pasarse agregando manualmente a los perfiles las autorizaciones) es agregar una autorización S_DATASET por la PCCG, agregando el nombre del archivo (en mi caso es *), el nombre del programa y las actividades deseadas, entre las que están:
06 Borrar
33 Leer
34 Escribir
A6 Leer con filtro
A7 Escribir con filtro
Link: http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/11687
Como crear un objeto de autorización
Vamos a ver como hacer un objeto de autorización simple.
Supongamos que queremos verificar que el usuario tiene autorización para acceder a trabajar sobre la sociedad AR01.
Hay distintos tipos de autorización para un objeto; por ejemplo se puede visualizar, modificar, etc. sobre una varable. Vamos a agregar todas las actividades para poder acceder a una sociedad.
Transacciones relacionadas: SU21, SU24, SE38, PFCG.
- Primero hay que ir a la transacción SU21 para crear una clase de objeto. Lo creamos y luego de creado hacemos doble click sobre él.
- Aparecerá la lista de objetos de la clase. Creamos un nuevo objeto
- Presionamos el botón “Actividades permitidas” y elegimos las actividades que corresponden a la autorización. En nuestro caso eligiremos la 01, 02 y 03.
- Guardamos los cambios.
- Ahora vamos a la transacción SU24 para relacionar nuestro programa Z a la autorización que creamos. Indicamos el nombre de nuestra transacción Z y presionamos ejecutar.
- Veremos la lista de transacciones, presionamos en “Ind. Verificación” o hacemos doble click sobre el nombre de la transacción
- Entramos a modificar el indicador de verificación. Presionamos “Obj. Autoriz” para agregar nuestro objeto.
- Indicamos el objeto recién creado:
- Ahora el objeto aparece en la lista. Grabamos.
- Nos queda agregar la autorización en el programa Z. En nuestro caso queremos ver que el usuario tenga permiso de visualización de la sociedad que viene por parámetro:
*—————————————————————————-
at selection-screen.
perform check_autorizacion using pa_bukrs.
*—————————————————————————-
form check_autorizacion using p_bukrs type bukrs.
authority-check object ‘ZFI_AR0001’
id ‘BUKRS’ field p_bukrs
id ‘ACTVT’ field ’03’.
if sy-subrc <> 0.
message e001 with p_bukrs. «No tiene autorización para la sociedad &.
endif.
endform.
*——————————————————————————————-
- Ahora bien, cuando queramos ejecutar el programa, nos va a dar error ya que nosotros mismos no tenemos autorización para acceder al mismo (salvo que tengamos perfil SAP_ALL). Por lo tanto debemos crearnos un perfil. Vamos a la transacción PFCG, ponemos el nombre de un nuevo rol y ponemos el botón “Nuevo Rol”:
- Al crear el nuevo rol, debemos incluir una descripción. La agregamos y vamos a la lengüeta “Autorizaciones” y allí presionamos el botón verde que dice proponer perfil: nos va a crear un nuevo perfil. Presionamos entonces el botón Modificar datos de autorización.
- Si nos pide seleccionar modelo, le ponemos que no y si nos dice guardar el rol le ponemos que si. Aparecerá la siguiente pantalla, en donde apretaremos en “Agregar manualmente”:
- Indicamos el objeto de autorización y presionamos OK.
- Ahora debemos indicar en nuestro perfil que accesos va a tener el mismo sobre el objeto de autorización. Recordemos que el objeto está creado para las actividades 01, 02 y 03.
Pero queremos que este rol tenga solo acceso para la actividad 03. Sería el caso de un perfil de “visualizador”, generalmente la nomenclatura es que se hace un perfil ZSD_VIS_SOCIEDAD por ejemplo para este caso y para las actividades 01 y 02 sería: ZSD_MGT_SOCIEDAD.
Para la sociedad elegimos sólo la AR01.
- Vemos que todo el árbol queda en verde. Apretamos el botón de GENERAR y volvemos a la pantalla anterior, en donde tenemos que ir a la lengüeta de usuarios para agregarnos. Agregamos nuestro usuario y presionamos el botón COMPARAR USUARIOS y luego “Ajuste completo” para ajustar los datos y así se actualiza el maestro de usuarios con los cambios. Finalmente presionamos guardar y volvemos a ejecutar el programa Z.