quinta-feira, 10 de novembro de 2016

[TUTORIAL] Web Dynpro ABAP - Select-Options

Nesse tutorial irei ensinar como colocar um Select-Options.

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:

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 .
  CONSTANTSc_yes  TYPE abap_bool VALUE 'X',
             c_no   TYPE abap_bool VALUE ' '.

  DATAlt_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_componentIS 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_tablei_typename 'S_CARRID' ).

  wd_this->m_handler->add_selection_fieldi_id         'S_CARRID'
                                           it_result    lt_range_table
                                           i_read_only  abap_false ).

  wd_this->m_handler->set_global_optionsi_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.
--Fim código fonte do WDDOINIT

Criar o método FILL_DATA.
METHOD fill_data .
* Criar uma variável para acessar o NODE_ALV
  DATAnode_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_fieldi_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_nodename 'NODE_ALV').
  node_alv->bind_tablelt_scarr ).

* Tabela de configuração do ALV
  DATAalv_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_componentIS 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_visibleif_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.
--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