*&---------------------------------------------------------------------*
*& Report ZCL_SALV_TABLE_2
*&
*&---------------------------------------------------------------------*
*&Manejo de ALV con la clase cl_salv_table
*&Mas Funciones de la clase para editar y colorear celdas
*&---------------------------------------------------------------------*
REPORT ZCL_SALV_TABLE_2.
DATA: alv_table type REF TO cl_salv_table, "referencia a la clase table del alv
it_sflight TYPE TABLE OF sflight, "Tabla Interna para el query
g_color TYPE lvc_s_colo. "Estructura para agregar color a las columnas
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_sflight
FROM sflight WHERE carrid = 'AA'.
*TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
LIST_DISPLAY = abap_true "Modo Lista
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = alv_table "importo el alv creado por la clase
CHANGING
T_TABLE = it_sflight. "tabla interna de datos
.
* CATCH CX_SALV_MSG .
*ENDTRY.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table. "Referencia para editar columnas
* edit ALV columns
lr_columns = alv_table->get_columns( ).
*----------------------------------------------------------------------*
* Doy datos a la cabecera de las columnas
*----------------------------------------------------------------------*
TRY.
lr_column ?= lr_columns->get_column( 'CARRID' ).
lr_column->set_long_text( 'Vuelos' ).
lr_column->set_medium_text( 'Vuelos' ).
lr_column->set_short_text( 'Vuelos' ).
lr_column ?= lr_columns->get_column( 'MANDT' ).
lr_column->set_long_text( 'Cliente' ).
lr_column->set_medium_text( 'Cliente' ).
lr_column->set_short_text( 'Cliente' ).
"Para poner color a una columna
lr_column ?= lr_columns->get_column( 'CONNID' ).
g_color-col = '6'.
g_color-int = '1'.
g_color-inv = '0'.
lr_column->set_color( g_color ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
* optimize output
lr_columns->set_optimize( 'X' ). "quito espacios en las celdas q muestran los datos
*----------------------------------------------------------------------*
* Establezco los botones default de un alv standart
*----------------------------------------------------------------------*
data: gr_functions type ref to cl_salv_functions_list.
gr_functions = alv_table->get_functions( ).
gr_functions->set_default( ).
* gr_functions->set_all( ).
CALL METHOD alv_table->DISPLAY( ). "Muestro ALV
lunes, 13 de septiembre de 2010
la clase cl_salv_table
*&---------------------------------------------------------------------*
*& Report ZCL_SALV_TABLE_1
*&
*&---------------------------------------------------------------------*
*&Manejo de ALV con la clase cl_salv_table
*&Uso simple
*&---------------------------------------------------------------------*
REPORT ZCL_SALV_TABLE_1.
DATA: alv_table type REF TO cl_salv_table, "referencia a la clase table del alv
it_sflight TYPE TABLE OF sflight. "Tabla Interna para el query
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_sflight
FROM sflight WHERE carrid = 'AA'.
*TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
LIST_DISPLAY = abap_true "Modo Lista
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = alv_table "importo el alv creado por la clase
CHANGING
T_TABLE = it_sflight. "tabla interna de datos
.
* CATCH CX_SALV_MSG .
*ENDTRY.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
* edit ALV columns
lr_columns = alv_table->get_columns( ).
* optimize output
lr_columns->set_optimize( 'X' ).
*----------------------------------------------------------------------*
* Doy datos a la cabecera de las columnas
*----------------------------------------------------------------------*
TRY.
lr_column = lr_columns->get_column( 'CARRID' ).
lr_column->set_long_text( 'Vuelos' ).
lr_column->set_medium_text( 'Vuelos' ).
lr_column->set_short_text( 'Vuelos' ).
lr_column = lr_columns->get_column( 'MANDT' ).
lr_column->set_long_text( 'Cliente' ).
lr_column->set_medium_text( 'Cliente' ).
lr_column->set_short_text( 'Cliente' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*----------------------------------------------------------------------*
* Establezco los botones default de un alv standart
*----------------------------------------------------------------------*
data: gr_functions type ref to cl_salv_functions_list.
gr_functions = alv_table->get_functions( ).
gr_functions->set_default( ).
* gr_functions->set_all( ).
CALL METHOD alv_table->DISPLAY( ). "Muestro ALV
*& Report ZCL_SALV_TABLE_1
*&
*&---------------------------------------------------------------------*
*&Manejo de ALV con la clase cl_salv_table
*&Uso simple
*&---------------------------------------------------------------------*
REPORT ZCL_SALV_TABLE_1.
DATA: alv_table type REF TO cl_salv_table, "referencia a la clase table del alv
it_sflight TYPE TABLE OF sflight. "Tabla Interna para el query
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_sflight
FROM sflight WHERE carrid = 'AA'.
*TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
LIST_DISPLAY = abap_true "Modo Lista
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = alv_table "importo el alv creado por la clase
CHANGING
T_TABLE = it_sflight. "tabla interna de datos
.
* CATCH CX_SALV_MSG .
*ENDTRY.
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column.
* edit ALV columns
lr_columns = alv_table->get_columns( ).
* optimize output
lr_columns->set_optimize( 'X' ).
*----------------------------------------------------------------------*
* Doy datos a la cabecera de las columnas
*----------------------------------------------------------------------*
TRY.
lr_column = lr_columns->get_column( 'CARRID' ).
lr_column->set_long_text( 'Vuelos' ).
lr_column->set_medium_text( 'Vuelos' ).
lr_column->set_short_text( 'Vuelos' ).
lr_column = lr_columns->get_column( 'MANDT' ).
lr_column->set_long_text( 'Cliente' ).
lr_column->set_medium_text( 'Cliente' ).
lr_column->set_short_text( 'Cliente' ).
CATCH cx_salv_not_found.
CATCH cx_salv_existing.
CATCH cx_salv_data_error.
ENDTRY.
*----------------------------------------------------------------------*
* Establezco los botones default de un alv standart
*----------------------------------------------------------------------*
data: gr_functions type ref to cl_salv_functions_list.
gr_functions = alv_table->get_functions( ).
gr_functions->set_default( ).
* gr_functions->set_all( ).
CALL METHOD alv_table->DISPLAY( ). "Muestro ALV
miércoles, 8 de septiembre de 2010
Crear Select Option con alv usando Web Dynpro.
Crear Select Option con alv usando Web Dynpro.
Agrego los componentes para el Alv y el Select Options.
En el contexto del component controller creo dos nodos uno para scarr que servira para los datos del select option y uno tipo tabla caridnalidad 0-n para la tabla sflight que se relacionara con el componente del ALV.
En el layout de la vista principal creo dos ViewContainer para embeber los componentes usados. Uno para el select options y otro para el ALV.
Vista de los viewcontainer en el layout.
En las propiedades del componet controller agrego los componentes que vamos a utilizar.
Usando el Wizard Instantisio el componente de select option.
ç
Este es el codigo que genera el Wizard.
"Instancio usage component Select Options
data lo_cmp_usage type ref to if_wd_component_usage.
lo_cmp_usage = wd_this->wd_cpuse_my_select_option( ).
if lo_cmp_usage->has_active_component( ) is initial.
lo_cmp_usage->create_component( ).
endif.
Otra vez mediante el Wizard inicializo el selec option llamando al método INI_SELECTION_SCREEN
Código que genera el Wizard.
"inicializo el componente llamando al metodo del componente usado
DATA lo_INTERFACECONTROLLER TYPE REF TO IWCI_WDR_SELECT_OPTIONS .
lo_INTERFACECONTROLLER = wd_this->wd_cpifc_my_select_option( ).
DATA lv_r_helper_class TYPE ref to if_wd_select_options.
lv_r_helper_class = lo_interfacecontroller->init_selection_screen( ).
CODIGO COMPLETO PARA EL METODO WDDOINIT DEL COMPONET CONTROLLER
method WDDOINIT .
"Instancio usage component Select Options
data lo_cmp_usage type ref to if_wd_component_usage.
lo_cmp_usage = wd_this->wd_cpuse_my_select_option( ).
if lo_cmp_usage->has_active_component( ) is initial.
lo_cmp_usage->create_component( ).
endif.
"inicializo el componente llamando al metodo del componente usado
DATA lo_INTERFACECONTROLLER TYPE REF TO IWCI_WDR_SELECT_OPTIONS .
lo_INTERFACECONTROLLER = wd_this->wd_cpifc_my_select_option( ).
DATA lv_r_helper_class TYPE ref to if_wd_select_options.
lv_r_helper_class = lo_interfacecontroller->init_selection_screen( ).
"Rango del Select Option declaro la variable y creo el rango pasando el tipo de la variable.
DATA: lt_range_idemp TYPE REF TO data.
lt_range_idemp = lv_r_helper_class->create_range_table(
i_typename = 'SCARR-CARRID' ).
*&---------------------------------------------------------------------*
*&Activar o desactivar los valores globlales de la WD
*&---------------------------------------------------------------------*
lv_r_helper_class->set_global_options(
i_display_btn_cancel = abap_false
i_display_btn_check = abap_false
i_display_btn_reset = abap_false
i_display_btn_execute = abap_false ).
*
*&---------------------------------------------------------------------*
*&Este metodo mostrara los campos en la WD
*&---------------------------------------------------------------------*
lv_r_helper_class->add_selection_field( i_id = 'SCARR'
it_result = lt_range_idemp
i_no_extension = abap_true
* i_no_complex_restrictions = abap_true
* I_READ_ONLY = abap_true
).
endmethod.
1. Para hacer la búsqueda por el select option he creado un método que será llamado luego de ingresar los valores de selección. Este método de igual manera esta en componet controller y será llamado desde un botón en la pantalla principal.
method FILL_ALV_SCARR .
"creo tabla tipo slfight y tabla interna donde almaceno el select option
data: it_sflight TYPE TABLE OF sflight,
it_select_op TYPE REF TO data.
FIELD-SYMBOLS: <FS_CARRID> TYPE TABLE.
"Vuelvo a inicializar el componente llamando al metodo initializacion para el select options
DATA lo_INTERFACECONTROLLER TYPE REF TO IWCI_WDR_SELECT_OPTIONS .
lo_INTERFACECONTROLLER = wd_this->wd_cpifc_my_select_option( ).
DATA lv_r_helper_class TYPE ref to if_wd_select_options.
lv_r_helper_class = lo_interfacecontroller->init_selection_screen(
).
"Obtengo la tabla de rango del Select Option y lo asigno al FS para hacer la busqueda
it_select_op = lv_r_helper_class->GET_RANGE_TABLE_OF_SEL_FIELD( I_ID = 'SCARR' ).
* Assign it to a field symbol
ASSIGN it_select_op->* TO <FS_CARRID>.
SELECT * into CORRESPONDING FIELDS OF TABLE it_sflight from sflight WHERE carrid IN <fs_carrid>.
2. Luego de copiar el código de arriba mediante el wizard hacemos el binding a la tabla del contexto que esta mapeada con la table del ALV.
"bind a la tabla sflight que tengo en contexto.
DATA lo_nd_sflight TYPE REF TO if_wd_context_node.
DATA ls_sflight TYPE wd_this->Element_sflight.
DATA lt_sflight TYPE wd_this->Elements_sflight.
* navigate from <CONTEXT> to <SFLIGHT> via lead selection
lo_nd_sflight = wd_context->get_child_node( name = wd_this->wdctx_sflight ).
IF lo_nd_sflight IS NOT INITIAL.
lo_nd_sflight->bind_table( new_items = it_sflight set_initial_elements = abap_false ).
ENDIF.
endmethod.
1 Creo botón en el layout para una vez seleccionado los datos hacer las búsquedas. Lo creo con una action SEARCH la cual estará el código que llama a mi método y muestra los datos en el ALV.
Dentro de la action del botón y mediante el wizard llamo al método FILL_ALV_SCARR
Suscribirse a:
Comentarios (Atom)

















