Hola a todos.
Estoy haciendo una validación en la TX MIRO a través de una BADI, la validación consiste en validar el campo referencia (validar si la referencia ha sido utilizada). La validación he logrado implementarla colocando un mensaje de error informando al usuario. El inconveniente que tengo es que coloqué un Message TYPE E
y me bloquea todos los campos de la dynpro; al tratar de desbloquear con un LOOP AT SCREEN
pasa que no me encuentra el campo referencia para poder desbloquearlo y así el usuario pueda corregir la referencia.
Gracias de antemano.
Jimmy
@jmore21, podes pasar el código en gist, o bien aquí (copiando y pegando), así los abapers ven lo que estás haciendo?
Qué BADI estás usando?
Gracias por responder @SidV, es una BADI Z* que la han creado anteriormente para hacer otro tipo de validaciones en la TX MIRO el código es el siguiente:
IF <fs_rb>-XBLNR = lwa_bk-xblnr.
MESSAGE 'Verifique el nro de referencia' TYPE 'E'.
LOOP AT SCREEN.
*el nombre del campo lo obtuve colocando el cursor en el campo referencia -> F1 -> Icono Informacón Técnica -> Campo Dynpro
IF SCREEN-NAME = 'INVFO-XBLNR'. *Al colocar un breakpoint no me encuentra este nombre.
*Esto encontré para volver activar el campo.
SCREEN-ACTIVE = 1.
SCREEN-INPUT = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
hola,
En vez de ese código, podrías probar lo siguiente
IF <fs_rb>-XBLNR = lwa_bk-xblnr.
MESSAGE 'Verifique el nro de referencia' TYPE 'S' display like 'E'. "Mensaje S que se muestra como E
LEAVE TO CURRENT TRANSACTION. "corta el proceso y te devuelve a la transaccion
ENDIF.
Gracias por tu tiempo en responder @sconoredhot.
Si también probé con el DISPLAY LIKE
, pero con ello no me deshabilita los campos para luego volver a activar sólo el campo referencia como lo necesito .
Yo he hecho algo asi pero en HR…y recuerdo es haber usado algo asi como
message s001(clase mensaje) display like 'E’
leave to screen 0.
y me funcionaba !!
Hola @Salco, aún soy nuevo en esto de BADIs. Estoy utilizando una BADI ya creada por otro usuario, me está mostrando el mensaje cuando yo deseo pero mi consulta va por el como volver a activar ciertos campos luego de mostrar un MESSAGE TYPE 'E'
.
hola, @jmore21, es que la consulta de @Salco tiene mucho sentido debido a que dependiendo donde esté la BADI, podes agregar estas cosas que se pueden apreciar en el link que te paso:
ht_p://aprendeabap.com/module-pool/desbloquear-campo-dynpro-tras-mensaje-error/
Por favor revisalo, entiendo que es lo que buscas, de todas maneras deberás ver si aplica para tu caso.
Saludos.
Gracias por la aclaración @sconoredhot, como esta BADI hace otras validaciones creo que se encuentra en el modulo PAI, seguí tu link pero tengo un inconveniente ¿Cómo obtener los nombres de los campos que quiero que no se desactiven? Utilicé el campo-dynpro al presionar F1, tambíen hice un LOOP AT SCREEN
pero no lo encontre. Tienes alguna idea de como obtenerlos?.
Gracias por tu apoyo.
Pues @jmore21 es necesario que sepas si la BADI está en el PBO o en el PAI, porque si está en el PAI, y la validación la hace sobre un campo, tendrías que ver en el PAI si el module está dentro de un CHAIN END CHAIN, ya que al dar error todos los campos se quedan bloqueados menos los que están dentro del CHAIN END CHAIN.
No se si te he aclarado algo esto o te ha liado mas, ya dirás.
Entonces quizas el problema sea que la BADI no tiene los campos de esa screen / subscreen que tiene los campos que necesitas modificar. No sabria decirte que mas hacer en este punto.
@Salco, gracias por tu interés en ayudar. Al hacer seguimiento del código llegué a ver la sentencia CHAIN
, ¿eso es parte del código estándar? ¿se puede modificar?. Porque traté de colocarlo en el código de la BADI pero me sale error de sintaxis.
Hola, la sentencia CHAIN (y ENDCHAIN) solo pueden ser utilizadas dentro del Screen Flow Logic de una pantalla (Dynpro) preferentemente dentro del bloque PAI (Process After Input) ya que si lo utilizas en el PBO no tendria efecto.
Gracias por tu respuesta @pumatronx, ya que estoy en un programa estandar no puedo modificar codigo que no esté dentro de mi implementación BADI. Alguna idea como hacerlo desde mi BADI?
Gracias de antemano.
@jmore21 ¿has probado lo que comentaba @canuto sobre
Esto en principio, muestra un mensaje de error en toda regla, no sigue adelante con la transacción y deja todos los campos abiertos para modificarlos…
Por otra parte, como ya comentaban las sentencias CHAIN van en su lugar muy concreto, que es en el control de una dynpro nada más.
Lo que podrías es intentar colocar tu badi en un module a los que se llaman dentro de las chain/endchain.
Hola @Salco he probado con esa sentencia pero para este caso no aplica ya que al momento de mostrar el mensaje todas las entradas de la dinpro deben estar desactivadas, excepto el campo referencia. La BADI de la cual hice la implementación es MRM_HEADER_CHECK y se encuentra en el PAI; concerniente a colocar los campos que no quiero que se deshabiliten dentro de la sentencia CHAIN ¿se puede hacer desde la BADI? ya que como es un programa standar no puedo modificar codigo que no esta dentro de mi BADI.
@jmore21 te he contestado aquí:
Creo que estas teniendo dos temas que hablan de lo mismo y es un lío.
Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.