Para testar melhor esse tutorial sugiro que faça o Web Dynpro ALV Simples.
Tudo pronto? Então, mãos a obra.
1º Passo - Atribuir o uso do componente SELECT-OPTIONS
Duplo-clique no objeto (Z_ABAP_LAB);
Em "Used Components" adicionar os seguintes dados:
Component Use será o nome que você dará ao seu componente (SELECT_OPTIONS);
Component é o nome do componente utilizado da SAP (WDR_SELECT_OPTIONS).
2º Passo - Adicionar novos elementos na View
Iremos adicionar 3 novos elementos - 1 Grupo, 1 ViewContainer e 1 Botão
Duplo-clique na V_MAIN;
Clicar com o botão direito em ROOTUIELEMENTCONTAINER;
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: G_SELECAO
Type: Group
Arrastar o item que gerou para ficar antes do VC_ALV;
Nas propriedades do Caption do Group alterar o Text para "Parâmetros de Seleção".
Clicar com o botão direito em G_SELECAO
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: VC_SEL_OPT
Type: ViewContainerUIElement
Clicar com o botão direito em G_SELECAO
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: B_PESQUISAR
Type: Button
Nas propriedades do B_PESQUISAR, alterar os seguintes dados:
onAction, clicar em novo e no pop-up que abrir preencher:
Action: PESQUISAR
Descrpition: Buscar dados conforme parâmetros de seleção
Text: "Pesquisar" e a tela de propriedades ficará assim:
3º Passo - Embutir o Select-Options no View Container
Duplo-clique em W_MAIN;
Na tela que abrir, expandir sua W_MAIN e a V_MAIN até aparecer o VC_ALV e o VC_SEL_OPT.
Clicar com o botão direito na VC_SEL_OPT e escolher a opção "Embed View";
No pop-up que abrir, clicar no Match-Code da "View to Be Embedded".
Selecionar o SELECT_OPTIONS.
Dar ok no pop-up.
A tela ficará assim:
4º Passo - Adicionar o uso de componentes na View
Duplo-clique em V_MAIN;
Abrir a aba "Properties";
Clicar no botão "Create Controller Usage".
Adicionar os dois componentes do SELECT_OPTIONS.
A tela ficará assim:
1º Passo - Atribuir o uso do componente SELECT-OPTIONS
Duplo-clique no objeto (Z_ABAP_LAB);
Em "Used Components" adicionar os seguintes dados:
Component Use será o nome que você dará ao seu componente (SELECT_OPTIONS);
Component é o nome do componente utilizado da SAP (WDR_SELECT_OPTIONS).
2º Passo - Adicionar novos elementos na View
Iremos adicionar 3 novos elementos - 1 Grupo, 1 ViewContainer e 1 Botão
Duplo-clique na V_MAIN;
Clicar com o botão direito em ROOTUIELEMENTCONTAINER;
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: G_SELECAO
Type: Group
Arrastar o item que gerou para ficar antes do VC_ALV;
Nas propriedades do Caption do Group alterar o Text para "Parâmetros de Seleção".
Clicar com o botão direito em G_SELECAO
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: VC_SEL_OPT
Type: ViewContainerUIElement
Clicar com o botão direito em G_SELECAO
Selecionar "Insert Element";
No pop-up que abrir entrar com os dados:
ID: B_PESQUISAR
Type: Button
Nas propriedades do B_PESQUISAR, alterar os seguintes dados:
onAction, clicar em novo e no pop-up que abrir preencher:
Action: PESQUISAR
Descrpition: Buscar dados conforme parâmetros de seleção
Text: "Pesquisar" e a tela de propriedades ficará assim:
3º Passo - Embutir o Select-Options no View Container
Duplo-clique em W_MAIN;
Na tela que abrir, expandir sua W_MAIN e a V_MAIN até aparecer o VC_ALV e o VC_SEL_OPT.
Clicar com o botão direito na VC_SEL_OPT e escolher a opção "Embed View";
No pop-up que abrir, clicar no Match-Code da "View to Be Embedded".
Selecionar o SELECT_OPTIONS.
Dar ok no pop-up.
A tela ficará assim:
4º Passo - Adicionar o uso de componentes na View
Duplo-clique em V_MAIN;
Abrir a aba "Properties";
Clicar no botão "Create Controller Usage".
Adicionar os dois componentes do SELECT_OPTIONS.
A tela ficará assim:
5º Passo - Criar atributos da View
Na aba "Attiburtes" da V_MAIN, adicionar os seguintes atributos:
M_HANDLER do tipo IF_WD_SELECT_OPTIONS e
M_WD_SEL_OPT do tipo IWCI_WDR_SELECT_OPTIONS
6º Passo - Codificar os métodos
Criar o método INIT_SEL_OPT.
METHOD init_sel_opt .
CONSTANTS: c_yes TYPE abap_bool VALUE 'X',
c_no TYPE abap_bool VALUE ' '.
DATA: lt_range_table TYPE REF TO data,
rt_range_table TYPE REF TO data,
read_only TYPE abap_bool,
type_name TYPE string,
lr_cmp_usage TYPE REF TO if_wd_component_usage.
* Configurar a área de seleção
lr_cmp_usage = wd_this->wd_cpuse_select_options( ).
IF lr_cmp_usage->has_active_component( ) IS INITIAL.
lr_cmp_usage->create_component( ).
ENDIF.
wd_this->m_wd_sel_opt = wd_this->wd_cpifc_select_options( ).
wd_this->m_handler = wd_this->m_wd_sel_opt->init_selection_screen( ).
* Criar tabela dos Ranges
lt_range_table =
wd_this->m_handler->create_range_table( i_typename = 'S_CARRID' ).
wd_this->m_handler->add_selection_field( i_id = 'S_CARRID'
it_result = lt_range_table
i_read_only = abap_false ).
wd_this->m_handler->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 ).
ENDMETHOD.
CONSTANTS: c_yes TYPE abap_bool VALUE 'X',
c_no TYPE abap_bool VALUE ' '.
DATA: lt_range_table TYPE REF TO data,
rt_range_table TYPE REF TO data,
read_only TYPE abap_bool,
type_name TYPE string,
lr_cmp_usage TYPE REF TO if_wd_component_usage.
* Configurar a área de seleção
lr_cmp_usage = wd_this->wd_cpuse_select_options( ).
IF lr_cmp_usage->has_active_component( ) IS INITIAL.
lr_cmp_usage->create_component( ).
ENDIF.
wd_this->m_wd_sel_opt = wd_this->wd_cpifc_select_options( ).
wd_this->m_handler = wd_this->m_wd_sel_opt->init_selection_screen( ).
* Criar tabela dos Ranges
lt_range_table =
wd_this->m_handler->create_range_table( i_typename = 'S_CARRID' ).
wd_this->m_handler->add_selection_field( i_id = 'S_CARRID'
it_result = lt_range_table
i_read_only = abap_false ).
wd_this->m_handler->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 ).
ENDMETHOD.
--Fim código fonte do INIT_SEL_OPT
Dentro do método WDDOINIT.
METHOD wddoinit .
wd_this->init_sel_opt( ).
ENDMETHOD.
wd_this->init_sel_opt( ).
ENDMETHOD.
--Fim código fonte do WDDOINIT
Criar o método FILL_DATA.
METHOD fill_data .
* Criar uma variável para acessar o NODE_ALV
DATA: node_alv TYPE REF TO if_wd_context_node,
* Criar uma tabela do tipo da estrutura do ALV
lt_scarr TYPE STANDARD TABLE OF if_v_main=>element_node_alv,
* Criar um ponteiro para o select-option da tela
rt_carrid TYPE REF TO data.
* Criar um tabela para o select-option da tela
FIELD-SYMBOLS: <fs_carrid> TYPE table.
rt_carrid = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'S_CARRID' ).
ASSIGN rt_carrid->* TO <fs_carrid>.
* Selecionar dados
SELECT *
FROM scarr
INTO TABLE lt_scarr
WHERE carrid IN <fs_carrid>.
* Vincular os dados selecionados ao Nó do ALV
node_alv = wd_context->get_child_node( name = 'NODE_ALV').
node_alv->bind_table( lt_scarr ).
* Tabela de configuração do ALV
DATA: alv_config_table TYPE REF TO cl_salv_wd_config_table,
* Uso dos componentes
wd_table_usage TYPE REF TO if_wd_component_usage,
* Tabela dos componentes
wd_table_comp TYPE REF TO iwci_salv_wd_table,
* Variáveis para guardar os detalhes das colunas
column_settings TYPE REF TO if_salv_wd_column_settings,
column TYPE REF TO cl_salv_wd_column.
* Instanciar o componente ALV_COMP
wd_table_usage = wd_this->wd_cpuse_alv_comp( ).
IF wd_table_usage->has_active_component( ) IS INITIAL.
wd_table_usage->create_component( ).
ENDIF.
* Buscar o componente ALV
wd_table_comp = wd_this->wd_cpifc_alv_comp( ).
alv_config_table = wd_table_comp->get_model( ).
* Detalhes de configuração das colunas
column_settings ?= alv_config_table.
* ESCONDER COLUNAS DO ALV
column = column_settings->get_column( 'MANDT' ).
column->set_visible( if_wdl_core=>visibility_none ).
ENDMETHOD.
* Criar uma variável para acessar o NODE_ALV
DATA: node_alv TYPE REF TO if_wd_context_node,
* Criar uma tabela do tipo da estrutura do ALV
lt_scarr TYPE STANDARD TABLE OF if_v_main=>element_node_alv,
* Criar um ponteiro para o select-option da tela
rt_carrid TYPE REF TO data.
* Criar um tabela para o select-option da tela
FIELD-SYMBOLS: <fs_carrid> TYPE table.
rt_carrid = wd_this->m_handler->get_range_table_of_sel_field( i_id = 'S_CARRID' ).
ASSIGN rt_carrid->* TO <fs_carrid>.
* Selecionar dados
SELECT *
FROM scarr
INTO TABLE lt_scarr
WHERE carrid IN <fs_carrid>.
* Vincular os dados selecionados ao Nó do ALV
node_alv = wd_context->get_child_node( name = 'NODE_ALV').
node_alv->bind_table( lt_scarr ).
* Tabela de configuração do ALV
DATA: alv_config_table TYPE REF TO cl_salv_wd_config_table,
* Uso dos componentes
wd_table_usage TYPE REF TO if_wd_component_usage,
* Tabela dos componentes
wd_table_comp TYPE REF TO iwci_salv_wd_table,
* Variáveis para guardar os detalhes das colunas
column_settings TYPE REF TO if_salv_wd_column_settings,
column TYPE REF TO cl_salv_wd_column.
* Instanciar o componente ALV_COMP
wd_table_usage = wd_this->wd_cpuse_alv_comp( ).
IF wd_table_usage->has_active_component( ) IS INITIAL.
wd_table_usage->create_component( ).
ENDIF.
* Buscar o componente ALV
wd_table_comp = wd_this->wd_cpifc_alv_comp( ).
alv_config_table = wd_table_comp->get_model( ).
* Detalhes de configuração das colunas
column_settings ?= alv_config_table.
* ESCONDER COLUNAS DO ALV
column = column_settings->get_column( 'MANDT' ).
column->set_visible( if_wdl_core=>visibility_none ).
ENDMETHOD.
--Fim código fontde do FILL_DATA
E, finalmente, vamos configurar o método do botão (ONACTIONPESQUISAR).
METHOD onactionpesquisar .
wd_this->fill_data( ).
ENDMETHOD.
wd_this->fill_data( ).
ENDMETHOD.
--Fim código fonte do ONACTIONPESQUISAR
A tela de métodos ficará assim:
Passos adicionais
Esses passos você pode ignorar e já testar sua aplicação, porém para melhor visualização é bom segui-los.
Duplo-clique em V_MAIN;
Aba "Layou", clicar sobre ROOTUIELEMENTCONTAINER;
Modificar a propriedade Layout de FlowLayout para MatrixLayout.
Clicar sobre VC_ALV;
Modificar a propriedade Layout Data para MatrixHeadData
A tela ficará assim:
E após a seleção:
Nenhum comentário:
Postar um comentário