Você está na página 1de 10

BNUS MTODOS ADICIONAIS

PARA SEU REPOSITRIO.


Seja referncia ao criar ALVs.

Resumo
Utilizando a classe CL_SALV_TABLE e um pouco de organizao voc ir produzir ALVs em
minutos investindo seu tempo onde realmente importa, criando solues.

Leandro Amancio Nunes


openABAP.com
Sumrio

Introduo. ....................................................................................................................................................2
O resultado. ...................................................................................................................................................3
Alterando nosso repositrio de funcionalidades passo-a-passo. .................................................................4
Utilizando nossas novas funcionalidades. .....................................................................................................6
Consideraes finais. .....................................................................................................................................9

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Introduo.

Faaaalaaa ABAPer, blz??

Espero que esteja tudo OK contigo e que tenha apreciado a leitura do e-book introdutrio a
criao de ALVs usando a classe CL_SALV_TABLE.

No esquea de me contar o que achou blz?!?! ;)

Penso que no necessrio apresentar-me novamente, nem falar sobre o quanto a classe
CL_SALV_TABLE ir facilitar a sua vida, voc j leu tudo no outro e-book ento, bora pra
action!!!

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


O resultado.

Bem, se voc est lendo esse e-book suponho que j tenha criado seu primeiro ALV, ou ao
menos tenha uma ideia de como essa maravilhosa classe disponibilizada pela SAP vai tornar
seu dia-a-dia mais feliz.

Para tornar isso ainda melhor vou te contar como acrescentar mais dois mtodos no seu
repositrio pessoal, ou como eu gosto de chamar, caixa de ferramentas.

Ao final desse e-book voc ser capaz de alterar as propriedades para uma coluna inteira ou
de uma clula especifica, utilizando as seguintes linhas de cdigo:

*Alterar toda a coluna de uma vez

PERFORM zf_mudar_tipo_coluna USING 'NOME_COLUNA'

CONSTANTE_TIPO_DAS_CELULAS.

ou

*Alterar clula especifica

PERFORM zf_define_tipo_celula USING 'NOME_COLUNA'


CONSTANTE_TIPO_DAS_CELULAS
CHANGING ESTRUTURA_COM_CARACTERISTICA_CELULA.

PERFORM zf_add_tipo_celula USING 'NOME_COLUNA_COM_CARACTERISTICA_CELULA'.

Imagine que deseja acrescentar um link que ir acionar um pop-up com detalhes em todos os
registros de uma coluna ou apenas nas clulas que possuam um determinado valor, isso
tornar seu ALV muito mais profissional aos olhos do usurio. E vo te fala, e muito, muito
fcil de implementar.

Vem ver...

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Alterando nosso repositrio de funcionalidades
passo-a-passo.

Voc j criou um include onde ir armazenar suas rotinas e deu-lhe um nome, correto? O
meu chama-se Z_REPOSITORIO_OPENABAP_COM e nesse cara que trabalharemos, e
relembrando, somente uma vez.

Abaixo descreverei a utilizao de cada um dos 2 mtodos para que compreenda o


funcionamento e os incluiremos na nossa caixa de ferramentas para que voc tenha mais
munio na sua arma secreta da alta performance.

Voc dever incluir trs forms no seu include:

1 Para alterar caractersticas de uma coluna inteira;


Voc informa qual a coluna e o tipo que ela deve ter, feito isso, a classe determina
essa caracterstica para todas as clulas dessa coluna.
*&---------------------------------------------------------------------*
*& Form ZF_MUDAR_TIPO_COLUNA
*&---------------------------------------------------------------------*
* Atribui tipos especificos para a coluna, HOTSPOT, BUTTON e etc.
*----------------------------------------------------------------------*
* -->p_nome_coluna --> Nome da coluna que iremos alterar
* -->p_tipo_coluna --> Tipo que iremos atribuir e poder ser...
* TEXT Type SALV_DE_CELLTYPE 0
* CHECKBOX Type SALV_DE_CELLTYPE 1
* BUTTON Type SALV_DE_CELLTYPE 2
* DROPDOWN Type SALV_DE_CELLTYPE 3
* LINK Type SALV_DE_CELLTYPE 4
* HOTSPOT Type SALV_DE_CELLTYPE 5
* CHECKBOX_HOTSPOT Type SALV_DE_CELLTYPE 6
*----------------------------------------------------------------------*
FORM zf_mudar_tipo_coluna USING p_nome_coluna TYPE lvc_fname
p_tipo_coluna TYPE salv_de_celltype.
DATA r_column_tab TYPE REF TO cl_salv_column_table.
FREE: r_columns, r_column_tab.
r_columns = r_salv->get_columns( ).
r_column_tab ?= r_columns->get_column( p_nome_coluna ).
r_column_tab->set_cell_type( p_tipo_coluna ).

ENDFORM. " ZF_MUDAR_TIPO_COLUNA

2 Para alterar caractersticas de uma clula especifica;


Voc informa em cada registro qual coluna e qual tipo ela deve ter e a classe se
encarrega de somente alterar o tipo da clula para aquele registro informado.

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


*&---------------------------------------------------------------------*
*& Form ZF_ADD_TIPO_CELULA
*&---------------------------------------------------------------------*
* Indica qual a coluna que contm informaes dos tipos
*----------------------------------------------------------------------*
* -->p_nome_coluna_tipo --> Nome da coluna NO ALV que contm a

* configurao do tipo da clula.


*----------------------------------------------------------------------*
FORM zf_add_tipo_celula USING p_nome_coluna_tipo.
DATA r_tipo_celula TYPE REF TO cl_salv_columns_table.
r_tipo_celula = r_salv->get_columns( ).
r_tipo_celula->set_cell_type_column( p_nome_coluna_tipo ).
ENDFORM. " ZF_ADD_TIPO_CELULA

*&---------------------------------------------------------------------*
*& Form ZF_DEFINE_TIPO_CELULA
*&---------------------------------------------------------------------*
* Usado para o preenchimento de dados e alterar o tipo da celula
*----------------------------------------------------------------------*
* -->p_nome_coluna "Nome da coluna
* -->p_tipo "Tipo desejado que poder ser

* IF_SALV_C_CELL_TYPE=>TEXT "Text 0
* IF_SALV_C_CELL_TYPE=>CHECKBOX "Checkbox 1
* IF_SALV_C_CELL_TYPE=>BUTTON "Pushbutton 2
* IF_SALV_C_CELL_TYPE=>DROPDOWN "Dropdown 3
* IF_SALV_C_CELL_TYPE=>LINK "Link 4
* IF_SALV_C_CELL_TYPE=>HOTSPOT "Hotspot 5
* IF_SALV_C_CELL_TYPE=>CHECKBOX_HOTSPOT "Hotspot 6
* <--p_estrutura "Coluna/Estrutura do SALV que armazena informaes

* de tipo de celula
*----------------------------------------------------------------------*
FORM zf_define_tipo_celula USING p_nome_coluna TYPE lvc_fname
p_tipo TYPE salv_de_celltype
CHANGING p_estrutura TYPE salv_t_int4_column.
DATA wa_tipo TYPE salv_s_int4_column.
CLEAR wa_tipo.
MOVE: p_nome_coluna TO wa_tipo-columnname,
p_tipo TO wa_tipo-value.
APPEND wa_tipo TO p_estrutura.
ENDFORM. " ZF_DEFINE_TIPO_CELULA

Baixe agora o Repositrio de solues e produtividade openABAP.com completo com mais


essas duas funcionalidades.

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Utilizando nossas novas funcionalidades.
Ns finalizamos o primeiro e-book com o seguinte cdigo para criar um ALV simples:

1. REPORT ztg.

2. TYPES: BEGIN OF ty_mara.


3. INCLUDE STRUCTURE mara.
4. TYPES: cor TYPE lvc_t_scol.
5. TYPES: END OF ty_mara.

6. DATA ti_mara TYPE TABLE OF ty_mara.

7. FIELD-SYMBOLS <fs_mara> LIKE LINE OF ti_mara.

8. REFRESH ti_mara.
9. SELECT * UP TO 10 ROWS
10. INTO CORRESPONDING FIELDS OF TABLE ti_mara
11. FROM mara.

12. UNASSIGN <fs_mara>.


13. LOOP AT ti_mara ASSIGNING <fs_mara> WHERE laeda EQ '20140712'.
14. PERFORM zf_pinta_celula: USING 'LAEDA' 6 CHANGING <fs_mara>-cor.
15. ENDLOOP.

16. PERFORM: zf_criar_alv USING 'TI_MARA',


17. zf_mostrar_salv_em_popup USING 02 "p_linha_ini
18. 10 "p_coluna_ini
19. 12 "p_linha_fim
20. 120, "p_coluna_fim.
21. zf_atribuir_desc_colunas USING 'MATNR' "p_nome_coluna
22. 'Prd.' "p_desc_curta
23. 'Prod.' "p_desc_media
24. 'Produto', "p_desc_longa
25. zf_add_cor USING 'COR',
26. zf_mostrar_salv USING abap_true
27. abap_true.

28. INCLUDE: z_repositorio_openabap_com.

Para utilizar as novas funcionalidades faa o seguinte:

1 Como alterar caractersticas de uma coluna inteira;


Acrescente as linhas abaixo antes do perform ZF_MOSTRAR_SALV para ter o
seguinte resultado.
zf_mudar_tipo_celula USING 'MATNR'
if_salv_c_cell_type=>hotspot, "HOTSPOT

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Note que todos registros possuem um link na coluna Produto(MATNR).

2 Como alterar caractersticas de uma clula especifica;


Acrescente as linhas abaixo dentro do LOOP para modificar somente os materiais X,
Y e Z.
IF <fs_mara>-matnr EQ 'MATERIAL_X' OR
<fs_mara>-matnr EQ 'MATERIAL_Y' OR
<fs_mara>-matnr EQ 'MATERIAL_Z'.
PERFORM zf_define_tipo_celula USING 'MATNR'
if_salv_c_cell_type=>hotspot "5
CHANGING <fs_mara>-tipo_celula.
ENDIF.

E as linhas a seguir antes do perform ZF_MOSTRAR_SALV para ter o seguinte


resultado.
PERFORM zf_add_tipo_celula USING 'TIPO_CELULA'.

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Note que somente os materiais em que informamos a alterao possuem um link na
coluna Produto (MATNR). Isso til para o caso de somente esses materiais possurem
determinada informao, assim voc evita que o usurio entre em todos para verificar
qual necessita de alguma ao.

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com


Consideraes finais.

Somente para ficar claro, utilizamos nos exemplos um cdigo simples, sem tratamento de
excees (famoso TRY, CATCH) e declaraes locais, tudo para facilitar a compreenso mas
sugiro que faa a declarao agrupada no incio do include e que utilize sempre o
tratamento de excees.

A ideia desse e-book mostrar-lhe que essa classe foi criada para realmente facilitar o seu
dia-a-dia e que voc deve explorar os demais mtodos disponveis, no tem por que no
utiliza-los, pense nas possibilidades, pense fora da caixa!

Usamos muito hardcode nos exemplos e quero deixar claro que eu penso, que voc deve
sempre utilizar parametrizao, ou se no for necessrio utilizar constantes.

No momento em que escrevo esse e-book estou desenvolvendo uma srie de posts para
esclarecer como utilizar cada mtodo da classe CL_SALV_TABLE e dependendo em que
momento do tempo na linha da vida voc est, o trabalho j deve estar concludo. D uma
olhada aqui, um post novo toda semana.

De agora em diante, tente colocar em prtica o que vimos e quando estiver confortvel,
compartilhe seu progresso, facilite o dia de algum, compartilhe. Acredito que quando voc
ensina algo novo a reciproca verdadeira. Seja um replicador e envie suas descobertas para
o Blog.

Como j disse antes no sou escritor e gostaria muito de ouvir sua opinio sobre o
contedo, a maneira que passei a mensagem, organizao da ideia e sugestes, envie suas
descobertas, duvidas ou crticas para lnunes@openABAP.com. S assim eu posso melhorar
a qualidade deste e dos prximos materiais que esto por vir, fique ligado no blog e
confira as novidades.

Obrigado pela confiana, nos vemos no blog.

Ps. Siga o instagram do blog @openABAP.

Ctrl+F3. .

LNUNES

Economize tempo e esforo utilizando esses 3 passos simples openABAP.com