en la pantalla de creación de la dynpro, en la pestaña lista elementos, en la lista que sale, hay una que pone tipo, busca el elemento que tiene valor = OK
y seguramente su nombre está en blanco. en nombre pon = OK_CODE.
el evento lógica de proceso de la dynpro pon:
PROCESS BEFORE OUTPUT.
MODULE STATUS_TuNumeroDeDynpro.
*
PROCESS AFTER INPUT.
MODULE USERCOMMAND_TuNumeroDeDynpro. "aqui llamaremos al PAI.
En el USERCOMMAND, pon:
module USER_COMMAND_TuNumeroDeDynpro input.
OK_CODE = sy-ucomm. "aqui es donde le das valor al ok_code
CASE ok_code. "aquí es donde chequeas el ok_code.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'CANC'.
LEAVE PROGRAM.
WHEN 'CLR'.
perform mirutina_clear.
WHEN 'BACK'.
perform mirutina_back.
WHEN 'NEXT'.
perform mirutina_next.
WHEN 'ONLY'.
perform mirutina_only.
WHEN OTHERS.
perform mirutina_others.
ENDCASE.
endmodule.
fijate que el sy-ucomm, no solo recoge el valor del botón o evento que hayamos ejecutado, SAP también le puede dar o quitar valor.
Si haces esto, antes de salir "fisicamente" de la dynpro, le traspasas el valor del sy-ucomm al ok_code y en función de uno u otro valor, ejecutas un perform u otro, y mientras no borres o cambies el valor de este ok_code, permanecera tal cual.
Espero haberte ayudado!