PDA

Ver la Versión Completa : Forzar user command


sanvic
17/12/08, 08:52:40
Buenas,
tengo un dypro con un ALV orientado a objetos, el caso es que el programa ya esta hecho y yo tengo que cambiarlo :( ,
tiene control de eventos en el alv asi que cada vez que introduzco un valor o hago cualquier cosa lo capta, el problema es que intentando quitar un registros del alv desde el control de eventos no funciona y entonces queria que pasase por el user command, pork cuando pasa por el si que lo elimina bien,
he encontrado un parametro i_appl_events que precisamente lo que hace es eso pasar por el pbo y el pai

CREATE OBJECT gr_gui_alv_prod
EXPORTING
i_parent = gr_gui_con_prod
i_appl_events = 'X'

pero tambien hace que ya no capture los eventos y todo el alv esta montado para funcionar con eventos.
Alguien sabe si se puede forzar pasar por el user command??
para que desde la gestion de eventos pueda forzar a que pase por la dynpro como si hubiera pulsado un boton??
No se me ocurre otra solucion :_____(

Muchas gracias de antemano.

DavidXD_XD
17/12/08, 14:29:23
Hola, dentro del Status GUI standard existe un boton que elimina registros, normalmente cuando creo un ALV con OO le exluyo muchos botones, entre ellos

ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row. "Insertar fila
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy. "Copiar fila
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row. "Borrar fila
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO gt_exclude.

Seria bueno solo mostrar el standard y excluir los botones que no te sirvan menos el de borrar la fila para que no modifiques mucho codigo

sanvic
17/12/08, 15:52:21
Muchas gracias, el problema es que yo no tengo que borrar la linea dandole a un boton tengo que borrarla con el control de eventos, cuando introducen un valor, compruebo si esta en determinada tabla y lo borro, en la tabla interna no esta y el refresh lo hace bien, pero al no pasar por el user command, creo yo, no me lo actualiza bien del todo.
Si se os ocurre algo.... :(

Muchas gracias de nuevo :)

francesc
18/12/08, 06:56:49
Puedes probar la función :

desde el PBO de la dynpro.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '##PAI##'
EXCEPTIONS
function_not_supported = 1
OTHERS = 2.
IF sy-subrc eq 0.
d_gui = 'X'. <-- Inicializar flag indicativo del proceso
ENDIF.



Luego en el USER-COMMAND del PAI de la dynpro :
IF NOT d_gui IS INITIAL.
CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '='
EXCEPTIONS
function_not_supported = 1
OTHERS = 2.
CLEAR d_gui.
EXIT. <-- para salir del evento y volver a PBO
ENDIF.

En modul-pool funciona ok, para tu ALV estiendo que también. Lo único que deber buscar es el momento en que fuerzas el salto desde el PBO al PAI.

sanvic
18/12/08, 07:39:48
Muchas gracias lo voy a probar ahora mismo :) , pero esk yo tengo que saltar de un metodo de control de eventos al pai o al pbo, el problema es que no llega ha entrar ni en el PBO ni en el PAI, cuando toco cualquier cosa en el alv se ejecuta el metodo que comprueba si ha habido cambios pero por la dynpro no pasa.

sanvic
18/12/08, 08:50:19
GRACIAS GRACIAS MIL GRACIAS POR AYUDARME!!!!!
la verdad ke habia hecho una cosa mu sucia para arreglarlo pork tenia ke corregirlo si o si pero no me gustaba nada y ahora funciona como yo keria y estoy super FELIZ :)

Bueno pues he usado la funcion que me habias comentado, la he puesto asi

CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
EXPORTING
functioncode = '=00'
EXCEPTIONS
function_not_supported = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

en el codigo del metodo que comprobaba los cambios, simula un enter y entonces pasa por el user comman.
GRACIAS GRACIAS GRACIAS, es como kitarse un peso de encima :)