Archivo
SU53 – Obtener del BUFFER errores de autorización
Caso: se solicita obtener los errores de autorización del usuario, tal cual cuando se ejecuta la SU53.
Solución: No encontré una solución perfecta. De lo que pude investigar fue “simular” la SU53, obteniendo desde el BUFFER del usuario los resultados.
La SU53, al ser ejecutada, graba el último error de autorización en la tabla USR07. Pero sólo guarda el último, por lo cual una opción sería ejecutar un JOB (creándolo desde el mismo usuario) para obtener el buffer y así ir guardando cada X tiempo los errores de autorización leyéndolos desde el BUFFER, sin tener que ejecutar la SU53.
- Les paso esta nota que aclara un poco el tema: http://solveissue.com/note?id=1974803
- El programa en cuestión es el siguiente:
REPORT zleer_su53. DATA: BEGIN OF usr07key, objct LIKE usr07-objct, fiel0 LIKE usr07-fiel0, fiel1 LIKE usr07-fiel0, fiel2 LIKE usr07-fiel0, fiel3 LIKE usr07-fiel0, fiel4 LIKE usr07-fiel0, fiel5 LIKE usr07-fiel0, fiel6 LIKE usr07-fiel0, fiel7 LIKE usr07-fiel0, fiel8 LIKE usr07-fiel0, fiel9 LIKE usr07-fiel0, END OF usr07key. DATA: BEGIN OF usr07val1, val01 LIKE usr07-val01, val02 LIKE usr07-val01, val03 LIKE usr07-val01, val04 LIKE usr07-val01, val05 LIKE usr07-val01, val06 LIKE usr07-val01, END OF usr07val1. DATA: BEGIN OF usr07val2, val07 LIKE usr07-val01, val08 LIKE usr07-val01, val09 LIKE usr07-val01, val10 LIKE usr07-val01, END OF usr07val2. DATA: g_buffer_method(10), usr07 TYPE usr07. CALL 'C_SAPGPARAM' ID 'NAME' FIELD 'auth/new_buffering' ID 'VALUE' FIELD g_buffer_method. GET PARAMETER ID 'XU1' FIELD usr07key. "#EC EXISTS GET PARAMETER ID 'XU2' FIELD usr07val1. "#EC EXISTS GET PARAMETER ID 'XU7' FIELD usr07val2. "#EC EXISTS CLEAR usr07. usr07-bname = sy-uname. MOVE-CORRESPONDING usr07key TO usr07. MOVE-CORRESPONDING usr07val1 TO usr07. MOVE-CORRESPONDING usr07val2 TO usr07. MOVE sy-datum TO usr07-cdate. MOVE sy-uzeit TO usr07-ctime. WRITE / : usr07-bname. WRITE / : usr07-objct. WRITE / : usr07-fiel0. WRITE / : usr07-fiel1. WRITE / : usr07-VAL01.
3. También encontré una transacción ZSU53 que puede servirles, lo que hace es generar el error de autorización y muestra qué perfiles necesita el usuario para cumplir con dicha autorización:
https://code.google.com/p/zsu53/
4. También encontré una BAPI que ejecuta en fondo la SU53 para obtener en un texto el resultado: http://searchsap.techtarget.com/tip/BAPI-to-retrieve-Check-Values-like-SU53-result
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.