PDA

Ver la Versión Completa : Como se añaden botones al status de una alv??


tniaboc
13/06/06, 14:41:00
He probado copiandome el status standard y modificandolo y añadiendo esto
, pero no me visualiza los nuevos botones que me creo en el status nuevo
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = 'X'
I_CALLBACK_PROGRAM = g_repid
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
* I_STRUCTURE_NAME =
IS_LAYOUT = gs_layout
IT_FIELDCAT = gt_fieldcat[]




FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: li_count TYPE I.
IF r_ucomm EQ '%ADD'.
* LOOP AT %g00 WHERE mark EQ 'X'.
* ADD 1 TO li_count.
* ENDLOOP.
* IF li_count GT 0.
* gc_delete_flag = 'X'.
* r_ucomm = '&F03'. "Back arraow
* ELSE.
* MESSAGE W000 WITH 'Please highlight the rows to be deleted!'.
* ENDIF.
ENDIF.
ENDFORM. "User_command

*****************************************
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTANDARD' excluding rt_extab.
ENDFORM. "Set_pf_status

mbonilla
14/06/06, 07:20:52
Buenas,

Te debería de ir si tienes el status creado,activo, etc y la llamada a la función alv tal como dices.

De todas formas, te mando aquí un programa de prueba que tuve que hacer,
y si que sale, ya me dices,

* Pasos esenciales (Buscar el simbolo '§')
* ----------------
* 1. Definición estructuras y tablas necesarias
* 2. Definimos la tabla con los datos de salida
* 3. Toma de datos
* 4. Definición estructura y formato de salida
* 5. Mostrar listado


*<-- § Paso 1. Definicion estructuras y tablas necesarias

* Type Pool donde vienen definidas todas las estructuras y tablas
TYPE-POOLS: slis.
* Catálogo de campos: contiene la descripción de los campos de salida
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
* Especificaciones de la disposición de la lista: descripción de la
* estructura de salida
gs_layout TYPE slis_layout_alv,
* Nombre del programa
g_repid LIKE sy-repid.
*<-- § Paso 2. Definimos la tabla con los datos de salida
TYPES: BEGIN OF st_output,
* marca(1) type c.
xmark(1) TYPE c.
INCLUDE STRUCTURE /bic/pfm_munici.
TYPES: END OF st_output.
DATA: gt_slis_t_fieldcat_alv TYPE slis_t_fieldcat_alv.
DATA: gt_line TYPE STANDARD TABLE OF st_output WITH HEADER LINE.
DATA: BEGIN OF i_muni OCCURS 0.
* mark type c.
INCLUDE STRUCTURE /bic/pfm_munici.
DATA: END OF i_muni.

INITIALIZATION.
g_repid = sy-repid.

START-OF-SELECTION.
*<-- § Paso 3. Toma de datos
PERFORM toma_datos.
*<-- § Paso 4. Estructura y formato de salida
PERFORM init_fieldcat.
PERFORM init_layout.
*<-- § Paso 5. Mostrar listado
* set pf-status 'ZNUEVO'.
PERFORM listado.
loop at gt_line.
write: 'Actualizado'.
write: /.
endloop.

*&&-----------------------------------------------------------------&&*
* SUBRUTINAS DEL PROGRAMA *
*&&-----------------------------------------------------------------&&*
*---------------------------------------------------------------------*
* FORM INIT_FIELDCAT *
*---------------------------------------------------------------------*
FORM init_fieldcat.
* Mediante esta tabla vamos a definir los campos que queremos mostrar
* en el listado de salida.
gt_fieldcat-fieldname = '/BIC/FM_MUNICI'.
gt_fieldcat-ref_tabname = '/BIC/PFM_MUNICI'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = '/BIC/FM_COMARC'.
gt_fieldcat-ref_tabname = '/BIC/PFM_MUNICI'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'COUNTRY'.
gt_fieldcat-ref_tabname = '/BIC/PFM_MUNICI'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'REGION'.
gt_fieldcat-ref_tabname = '/BIC/PFM_MUNICI'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
* gt_fieldcat-fieldname = 'MENGE'.
* gt_fieldcat-ref_tabname = 'EKPO'.
* APPEND gt_fieldcat. CLEAR gt_fieldcat.
* gt_fieldcat-fieldname = 'MEINS'.
* gt_fieldcat-ref_tabname = 'EKPO'.
* APPEND gt_fieldcat. CLEAR gt_fieldcat.
ENDFORM. "init_fieldcat
*---------------------------------------------------------------------*
* FORM INIT_LAYOUT *
*---------------------------------------------------------------------*
FORM init_layout.
* Mediante esta estructura podemos definir el formato de salida
gs_layout-zebra = 'X'.
* Queremos que aparezca con marcador, para poder seleccionar las líneas
gs_layout-box_tabname = 'GT_LINE'.
gs_layout-box_fieldname = 'XMARK'.
gs_layout-f2code = '&amp;ETA'.
gs_layout-detail_popup = 'X'.
ENDFORM. "init_layout
*---------------------------------------------------------------------*
* FORM TOMA_DATOS *
*---------------------------------------------------------------------*
FORM toma_datos.
* Los datos deben guardarse en la tabla interna de salida
SELECT * FROM /bic/pfm_munici
UP TO 100 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_line.

ENDFORM. " TOMA_DATOS
*---------------------------------------------------------------------*
* FORM LISTADO *
*---------------------------------------------------------------------*
FORM listado.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = g_repid
i_callback_pf_status_set = 'STATUS_SET'
i_callback_user_command = 'USER_COMMAND '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_line
EXCEPTIONS
program_error = 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.



ENDFORM. " LISTADO


*--------------------------------------------------------------------- *
* FORM F_USER_COMMAND *
*--------------------------------------------------------------------- *
* Podemos controlar todos los user_command activados por el usuario *
*--------------------------------------------------------------------- *
* --> L_UCOMM *
* --> L_SELFIELD *
*--------------------------------------------------------------------- *
FORM user_command USING l_ucomm LIKE sy-ucomm
l_selfield TYPE slis_selfield.

READ TABLE gt_line INDEX l_selfield-tabindex.

CASE l_ucomm.
WHEN 'TEST'.
write: 'Municipio-----'.
write: /.

when 'LOG'.
leave to list-processing.
loop at gt_line.
if gt_line-xmark ne space.
write: 'Actualizado'.
write: /.
endif.
endloop.
* PERFORM listado.

ENDCASE.


.
ENDFORM. "user_command

*--------------------------------------------------------------------- *
* FORM status_set *
*--------------------------------------------------------------------- *
* Podemos definir nuestro PF-STATUS. Incluso podemos aprovechar el
* que nos da el ALV y añadir los que nos interese, o eliminar aquellos
* del ALV que no nos interesen
*--------------------------------------------------------------------- *
* --> RT_EXTAB *
*--------------------------------------------------------------------- *
FORM status_set USING rt_extab TYPE slis_t_extab.
DATA: l_status(20) TYPE c.

SET PF-STATUS 'ZNUEVO'.
ENDFORM. "status_set