
En este blog, veremos otra forma de depurar y encontrar un lugar para mejorar el mensaje de error personalizado. Además, voy a explicar el problema al que nos enfrentamos y la solución.
PD Puedes leer mi blog anterior sobre la mejora de Fiori.
Problema: el cliente quiere recibir el mensaje de error cuando el usuario intenta modificar algún componente del pedido.
Aclarando el problema: en SAP GUI ejecute t-code IW32 -> ingrese orden de prueba -> y haga clic en Componentes
Entonces, si el usuario no está en el conjunto ZUSUARIOS y el tipo de orden es ‘PM01’en este caso, el usuario no debe modificar los componentes y obtener el mensaje de error con el texto “¡No está autorizado a cambiar los componentes del pedido! Para más información contactar con el personal autorizado.”
Para solucionar este problema, primero vamos a encontrar un punto de mejora para esta pantalla. Empezamos con la búsqueda BADIs.
Método para encontrar BADI:
Ejecute t-code SE24 y muestre la clase CL_EXITHANDLER -> establecer un punto de interrupción en el método get_class_name_by_interface en el método de clase OBTENER INSTANCIA – debido a este punto de interrupción, seremos redirigidos a la pantalla del depurador cuando hagamos clic/ejecutemos cualquier botón/código T. Simplemente presione F8 para continuar.
-> Regrese y ejecute t-code IW32 -> Ingrese el orden de prueba y abra Componentes -> En la línea de elementos, agregue un nuevo componente -> En la pantalla de depuración, abra exit_name valor: esta es una pantalla BADI para componentes. (IWO1_ORDER_BADI) Si continuamos con F8 exit_name se cambiará a W_RETAILSYSTEM_IDENT. Significa que podemos implementar ambos BADI para controlar componentes.
Para asegurarnos de que uno de estos BADI sea relevante para nuestro problema, debemos examinar los métodos de BADI y los parámetros de importación/exportación de los métodos.
Por ejemplo, en este BADI (IWO1_ORDER_BADI) hay AUTORIDAD_CHECK_AUART_ACTIVIT que parece relevante según su parámetros de importación/exportación. Pero cuando implementamos este BADI, el resultado de esta implementación es que si el usuario no está en ZUSERS, entonces el usuario ni siquiera podrá abrir el pedido. Es por eso que nuestra implementación no tendrá éxito. Y tenemos la misma situación en W_RETAILSYSTEM_IDENT BADI. Es por eso que no podemos escribir el mensaje de error en este BADI también.
Otro método para encontrar BADI es buscar BADI usando LLAMAR BADI declaración en el depurador. Después de establecer un punto de interrupción en la declaración ‘CALL BADI’, llegamos a los otros dos BADI, pero de acuerdo con sus parámetros, no podemos implementar estos BADI para nuestro problema.
Debido a la implementación fallida en BADI, vamos a buscar Salidas de usuario para mejorar la pantalla Componentes.
Una de las formas de encontrar salidas de usuario es buscando salidas según su paquete. Primero, busque el paquete de la pantalla Componentes: en la pantalla Componentes, haga clic en Sistema -> Estado -> doble clic en Programa (Subdynpro) nombre: puede encontrar el nombre del paquete en el programa Atributos.
Ir a SE84 y abre: Mejora -> Salidas de clientes -> Mejora – ejecutar el paquete de la pantalla Componentes. Se mostrará la lista de salidas de usuario y su descripción.
A través del paquete, llegamos a salidas de usuario limitadas y ninguna de ellas es relevante para nuestro problema. Es por eso que explicamos a continuación otro método para encontrar salidas de usuario.
En la pantalla Componentes, encienda el depurador con /h y agregue cualquier componente. En la pantalla del depurador, establezca un punto de interrupción en la declaración LLAMADA CLIENTE-FUNCIÓN.
Luego continúa con F8 y verás los códigos a continuación:
Mientras continúas con F8 verás un módulo de funciones con diferentes parámetros e identificación. Para elegir la salida de usuario correcta para nuestra solución, nuevamente, debemos centrarnos en el usuario parámetros de salida. Por ejemplo, esta salida que se muestra en la imagen de arriba no tiene parámetros para el mensaje de error o la excepción. Entonces, seguimos con F8 hasta encontrar la salida con los parámetros relevantes.
Durante la depuración, encontré estas dos salidas de usuario (mencionadas a continuación en las imágenes) que parecen relevantes según sus parámetros. Después de encontrar el lugar de salida del usuario, nuestro próximo paso será encontrar su nombre y proyecto.
Sugerencias: durante la depuración de salidas de usuario, si hacemos clic en F5 para ver qué código hay dentro de la salida de usuario. Si está redirigiendo para incluir de salida, significa esta salida ya ha sido implementado y ha sido asignado a cualquier proyecto, y si no está redirigiendo a la inclusión, significa no esta implementado.
En nuestro sistema, ninguna de estas salidas de usuario ha sido implementada y vamos a buscar un nombre de salida para asignarlo al proyecto.
en código t SE80 abra, incluya la imagen que se muestra y busque el ID de salida del usuario (011 o 014). Continuaremos con la salida del usuario con id 011. Ingrese al módulo de función con id ‘011’ para ver el código que contiene.
Tome el nombre del módulo de función y ejecute la tabla ‘MODSAP’ en t-code se16. ‘MODSAP’ es una tabla estándar que contiene nombres y miembros de salidas de usuario. En la pantalla de selección, pegue el nombre del módulo de funciones en el campo Miembro y ejecútelo.
Este es el nombre de salida de usuario que vamos a implementar. Mediante el uso MODACTO tabla podemos saber si esta salida de usuario ha sido asignada a algún proyecto.
Entonces, en código t COMODIDAD podemos crear un proyecto y asignarle una salida de usuario. La salida de usuario se activará cuando se asigne al proyecto. Después de asignar, podemos escribir un mensaje de error personalizado en el incluir ZXCN2U13. El código está abajo:
Entonces, usamos los parámetros de importación/exportación de la salida y el módulo de función estándar POPUP_FOR_INTERACTION para obtener la ventana emergente.
Después de activar la inclusión, el módulo de función y el proyecto, podemos probarlo ahora.
¡Todo está hecho!
Conclusión: usando estos métodos podemos encontrar BADI y Salidas de usuario en cualquier pantalla estándar e implementarlos. Al elegir BADI o Salidas de usuario, solo concéntrese en su parámetros de importación/exportación y cuando desencadena. Porque si implementamos el BADI o las salidas de usuario incorrectas, no funcionará e incluso si escribimos el código correctamente.
Espero que esto ayude a resolver el problema que enfrentaste. Puedes compartir tus pensamientos sobre el tema en los comentarios.
PD Todas las imágenes de este blog las tomé de nuestro sistema de demostración.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073