<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ABAP101 &#187; ALV</title>
	<atom:link href="http://abap101.com/category/alv/feed/" rel="self" type="application/rss+xml" />
	<link>http://abap101.com</link>
	<description>ABAP &#124; Open Source &#124; Agile &#124; Programação</description>
	<lastBuildDate>Wed, 01 Feb 2012 01:27:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Desafio ALV, Difícil ou Trabalhoso?</title>
		<link>http://abap101.com/2011/08/15/desafio-alv-dificil-ou-trabalhoso/</link>
		<comments>http://abap101.com/2011/08/15/desafio-alv-dificil-ou-trabalhoso/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 12:45:44 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ABAP Objects]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[Tecnica de Programação]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=1349</guid>
		<description><![CDATA[É com grande prazer que trago para vocês o post de nossa aluna da Academia ABAP, Claudia Andressa Inacio Estevão. Esse foi um dos exercícios propostos como desafio para a sala e a Claudia conseguiu fazer e fez bonito. Vendo a solução dela propomos que ela escrevesse um post explicando a sua solução. Abaixo o que [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;count=horizontal&amp;text=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;count=horizontal&amp;text=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;linkname=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;linkname=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;linkname=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2011%2F08%2F15%2Fdesafio-alv-dificil-ou-trabalhoso%2F&amp;title=Desafio%20ALV%2C%20Dif%C3%ADcil%20ou%20Trabalhoso%3F" id="wpa2a_2"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><blockquote><p>É com grande prazer que trago para vocês o post de nossa aluna da Academia ABAP, Claudia Andressa Inacio Estevão. Esse foi um dos exercícios propostos como desafio para a sala e a Claudia conseguiu fazer e fez bonito.</p>
<p>Vendo a solução dela propomos que ela escrevesse um post explicando a sua solução. Abaixo o que vocês lerão é o texto enviado por ela. Tenham uma ótima leitura, pois a vale a pena entender como ela resolver o problema.</p>
<p>Aproveito para estender o convite a outros leitores, caso queiram submeter algum texto, entrem em contato conosco.</p>
<p>Parabéns a Claudia que batalhou, sofreu e suou a camisa para conseguir fazer todo esse trabalho.  Tenho certeza que ela aprendeu muito com a experiência, inclusive descrevendo a sua solução para um post do nosso site.</p>
<p>Ainda em tempo, tudo dentro do prazo proposto!</p>
<p>Abraços e bons estudos!</p></blockquote>
<p><span id="more-1349"></span></p>
<p>Quem acompanha este blog e conhece um pouco sobre os autores sabe que ambos são instrutores de uma academia de ABAP. Pois bem, meu nome é Claudia e estou entre seus alunos das aulas aos SÁBADOS (afinal, se queremos conseguir algo na vida, fazer um “sacrifício” é “quase” importante, não é?). E foi durante o curso que recebemos um desafio: Criar um programa que leia os dados das tabelas SCARR, SPFLI, SFLIGHT e SBOOK e mostre seus dados em um ALV na tela inteira.</p>
<p>O programa deve mostrar os dados da tabela escolhida na tela de seleção (SCARR, SPFLI, SFLIGHT e SBOOK).</p>
<p>Os campos da tela devem estar habilitados somente quando fizerem parte da chave da tabela selecionada.</p>
<div id="attachment_1352" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.1.jpg"><img class="size-medium wp-image-1352" title="screenshot.1" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.1-300x216.jpg" alt="" width="300" height="216" /></a><p class="wp-caption-text">Tela de Seleção</p></div>
<p>Parece simples, para você? Não se for um “quase júnior”!</p>
<p>O Flávio e o Fábio me convidaram para explicar a minha solução para este programa, e obviamente aceitei. Desta forma, vou tentar mostrá-lo de modo simples e espero poder ajudar os novatos na área, como eu!</p>
<p>Primeiramente, criei a tela de seleção, conforme o código abaixo:</p>
<p><a href="http://abap101.com/wp-content/uploads/2011/08/selection_screen.jpg"><img class="aligncenter size-medium wp-image-1360" title="selection_screen" src="http://abap101.com/wp-content/uploads/2011/08/selection_screen-300x297.jpg" alt="" width="300" height="297" /></a></p>
<p>No Block “Filter” ao invés de utilizarmos select options com as funções “NO-EXTENSION NO INTERVALS” é mais indicado utilizarmos um parameter (utilizei o select options para entender seu comportamento no debug).</p>
<p>Seguem os valores inseridos nos text-symbols:</p>
<blockquote><p>text-f01: Filter</p>
<p>text-f02: Display data from table</p>
<p>text-c01 (02, 03 e 04) Os nomes das respectivas tabelas.</p></blockquote>
<p>Para alterar os nomes exibidos na tela clique no menu: Goto-&gt;Text Elements-&gt;Selection Texts e insira o texto desejado.</p>
<div id="attachment_1350" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/text_elements.jpg"><img class="size-medium wp-image-1350" title="text_elements" src="http://abap101.com/wp-content/uploads/2011/08/text_elements-300x276.jpg" alt="" width="300" height="276" /></a><p class="wp-caption-text">Como criar os textos para a tela de seleção.</p></div>
<p>Com a tela de seleção finalizada, vamos criar a segunda tela, onde o ALV será exibido.</p>
<p>No Screen Painter da nova tela, insira um objeto Custom Control e atribua um nome. No meu caso ‘CONTAINER1’, conforme figura abaixo:</p>
<div id="attachment_1353" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.2.jpg"><img class="size-medium wp-image-1353" title="screenshot.2" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.2-300x226.jpg" alt="" width="300" height="226" /></a><p class="wp-caption-text">Screen Painter</p></div>
<p>&nbsp;</p>
<p>Não devemos nos esquecer de programar os botões ‘Back’ e ‘Cancel’, que não colocarei os códigos aqui por serem simples e não serem nosso objetivo.</p>
<p>Para gerar o ALV, precisamos criar os objetos: Container (associado ao container que geramos no Screen Painter) e Grid, vide códigos abaixo.</p>
<div id="attachment_1354" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.3.jpg"><img class="size-medium wp-image-1354" title="screenshot.3" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.3-300x72.jpg" alt="" width="300" height="72" /></a><p class="wp-caption-text">Declaração das referências aos objetos.</p></div>
<p>Como aprendemos que devemos usar orientação a objetos sempre que possível (e confesso que preciso estudar isso um “pouco” mais), em um novo include, criei classes para popular o grid do ALV de acordo com as tabelas selecionadas na tela.</p>
<p>Abaixo, a classe que popula o grid quando a tabela SCARR é selecionada.</p>
<div id="attachment_1355" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.4.jpg"><img class="size-medium wp-image-1355" title="screenshot.4" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.4-300x177.jpg" alt="" width="300" height="177" /></a><p class="wp-caption-text">Classe LCL_ALV_SCARR - Definition</p></div>
<p>O Tipo so_car_ty  foi criado porque precisamos receber da tela de seleção o que foi inserido no select options (scarr-carrid). Como sabemos, o select options é uma tabela com header line, e a estrutura acima simula tal tabela.</p>
<p>No método constructor, apenas receberemos a referência ao objeto grid, que criamos no programa principal, e o atribuiremos à variável privada r_grid para utilizarmos na implementação do método popula_alv_scarr.</p>
<p>O método popula_alv_scarr, por sua vez, realizará o select conforme parâmetros recebidos e populará a tabela do objeto grid. Segue implementação:</p>
<div id="attachment_1356" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.5.jpg"><img class="size-medium wp-image-1356" title="screenshot.5" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.5-300x144.jpg" alt="" width="300" height="144" /></a><p class="wp-caption-text">Classe LCL_ALV_SCARR - Implementation</p></div>
<p>Outras três classes devem ser criadas, para cada uma das tabelas.</p>
<p>Todas elas são semelhantes, alterando apenas os parâmetros recebidos. Veja a classe referente à tabela SBOOK, a mais complexa (que recebe parâmetros de todos os select options).</p>
<div id="attachment_1351" class="wp-caption aligncenter" style="width: 249px"><a href="http://abap101.com/wp-content/uploads/2011/08/class_alv_sbook.jpg"><img class="size-medium wp-image-1351 " title="class_alv_sbook" src="http://abap101.com/wp-content/uploads/2011/08/class_alv_sbook-239x300.jpg" alt="" width="239" height="300" /></a><p class="wp-caption-text">Classe LCL_ALV_SBOOK - Definition</p></div>
<div id="attachment_1357" class="wp-caption aligncenter" style="width: 310px"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.6.jpg"><img class="size-medium wp-image-1357 " title="screenshot.6" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.6-300x156.jpg" alt="" width="300" height="156" /></a><p class="wp-caption-text">Classe LCL_ALV_SBOOK - Implementation</p></div>
<p>&nbsp;</p>
<p>De volta ao programa principal, vamos criar os objetos com referência às classes codificadas (no “INITIALIZATION”, assim como os objetos grid e container).</p>
<p style="text-align: center;"><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.7.jpg"><img class="aligncenter size-full wp-image-1358" title="screenshot.7" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.7.jpg" alt="" width="668" height="262" /></a></p>
<p>Observe que passamos a mesma referência do objeto grid para todas as classes codificadas, visto que só temos um objeto container na tela criada.</p>
<p>Agora, precisamos chamar os métodos popula_alv das classes criadas (o que deve ser feito no PAI da tela de seleção, ou seja, em “AT SELECTION-SCREEN”).</p>
<p><a href="http://abap101.com/wp-content/uploads/2011/08/screenshot.8.jpg"><img class="aligncenter size-medium wp-image-1359" title="screenshot.8" src="http://abap101.com/wp-content/uploads/2011/08/screenshot.8-300x144.jpg" alt="" width="300" height="144" /></a></p>
<p>Relembro que os parâmetros exportados são os select-options. Caso não recebam nenhum valor, o select será realizado em toda a tabela.</p>
<p>Para habilitar / desabilitar os campos da tela, utilizei os métodos set_input e commit_screen da classe lcl_dynpro_handler, sujerida <a href="http://abap101.com/2010/07/28/classe-para-tratamento-de-tela-de-selecao-loop-at-screen-nunca-mais/" target="_blank">aqui</a> mesmo no blog:</p>
<h4>Conclusões</h4>
<p>Bom, esta é a minha solução. Espero ter contribuído de alguma forma!</p>
<p>Abaixo, seguem algumas melhorias sugeridas pelo Fábio e Flávio:</p>
<ul>
<li>Da forma como foram implementadas as classes, poderíamos utilizar Interfaces, com os conceitos de herança e polimorfismo;</li>
<li>Poderíamos utilizar “RANGE OF” ou “ rseloption” para importar os valores dos select-options nas classes (ao invés de criar o tipo so_car_ty).</li>
</ul>
<p>Seguem alguns links sobre tratamento de tela:</p>
<p><a href="http://abap101.com/2010/07/28/classe-para-tratamento-de-tela-de-selecao-loop-at-screen-nunca-mais/" target="_blank">Classe Para Tratamento de Tela de Seleção</a></p>
<p><a href="http://abap101.com/2010/08/29/voce-sabe-o-que-e-screenbreaker/" target="_blank">ScreenBreaker</a></p>
<p><a href="https://cw.sdn.sap.com/cw/groups/screen-breaker" target="_blank">ScreenBreaker no Code Exchange</a></p>
<p>Para quem quiser praticar mais, fica a sugestão de estudar as dicas acima e melhorar o código!</p>
<p>Segue o NUGG file com toda a solução: <a href="http://abap101.com/wp-content/uploads/2011/08/NUGG_Z_ALV_BLOG.nugg_.txt">NUGG_Z_ALV_BLOG.nugg</a>. Veja <a href="http://abap101.com/2011/01/22/introducao-ao-saplink/" target="_blank">aqui</a> como abrir esse arquivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2011/08/15/desafio-alv-dificil-ou-trabalhoso/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>CL_SALV_TABLE Editável &#8211; Faça parte desta corrente!</title>
		<link>http://abap101.com/2011/01/31/cl_salv_table-editavel-faca-parte-desta-corrente/</link>
		<comments>http://abap101.com/2011/01/31/cl_salv_table-editavel-faca-parte-desta-corrente/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 12:30:37 +0000</pubDate>
		<dc:creator>Fábio Pagoti</dc:creator>
				<category><![CDATA[ABAP Objects]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[Opinião]]></category>
		<category><![CDATA[ALV editável]]></category>
		<category><![CDATA[cl_salv_table]]></category>
		<category><![CDATA[sdn]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=383</guid>
		<description><![CDATA[Olá caros! No post &#8220;Faça parte da SDN&#8220;, tratamos brevemento sobre o que é a SDN e qual o seu intuito. Outro dia ao necessitar fazer um ALV editável, descobri através do help e da comunidade que esta &#8220;simples&#8221; funcionalidade não é atendida pela classe de ALV mais moderna, a CL_SALV_TABLE. No entanto, achei um [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;count=horizontal&amp;text=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;count=horizontal&amp;text=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;linkname=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;linkname=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;linkname=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2011%2F01%2F31%2Fcl_salv_table-editavel-faca-parte-desta-corrente%2F&amp;title=CL_SALV_TABLE%20Edit%C3%A1vel%20%26%238211%3B%20Fa%C3%A7a%20parte%20desta%20corrente%21" id="wpa2a_4"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p style="text-align: justify;">Olá caros!</p>
<p style="text-align: justify;">No post &#8220;<a href="http://abap101.com/2011/01/07/faca-parte-da-sdn/" target="_blank">Faça parte da SDN</a>&#8220;, tratamos brevemento sobre o que é a SDN e qual o seu intuito.</p>
<p style="text-align: justify;">Outro dia ao necessitar fazer um ALV editável, descobri através do help e da comunidade que esta &#8220;simples&#8221; funcionalidade não é atendida pela classe de ALV mais moderna, a CL_SALV_TABLE.</p>
<p style="text-align: justify;">No entanto, achei um post no fórum nomeado &#8220;<a href="http://forums.sdn.sap.com/thread.jspa?threadID=733872&amp;start=0&amp;tstart=0" target="_blank">cl_salv_table &#8211; needs editable functionality &#8211; SAP please provide this</a>&#8221; que tem a intenção de servir como um abaixo-assinado pedindo que a SAP incorpore essa funcionalidade o mais breve possível nas classes CL_SALV_*.</p>
<p style="text-align: justify;">E essa requisição da comunidade tem fundamento. Ora, quantos programas não possuem ao menos um ALV? Quantos desenvolvedores concordam que as classes CL_SALV_* facilitam o desenvolvimento e ajudam a garantir um programa entregue mais rapidamente? E quais são as chances de um programa com ALV utilizando tais classes precisar ser alterado para incorportar a funcionalidade de edição?</p>
<p style="text-align: justify;">Para todas essas perguntas há uma única resposta: &#8220;O suficiente&#8221;. O suficiente para saber que o retrabalho necessário caso haja uma simples mudança de requisito é considerável.</p>
<p style="text-align: justify;">Por isso, divulgo esse abaixo-assinado para todos aqueles que já precisaram e precisarão criar um ALV com tal característica. Basta responder o <a title="fórum na SDN" href="http://forums.sdn.sap.com/thread.jspa?threadID=733872&amp;start=0&amp;tstart=0" target="_blank">fórum na SDN</a> com um &#8220;agree&#8221;.</p>
<p style="text-align: justify;">Abraços!</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2011/01/31/cl_salv_table-editavel-faca-parte-desta-corrente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ALV com Evento &#8211; Usando a classe CL_SALV_TABLE</title>
		<link>http://abap101.com/2010/02/18/alv-com-evento-usando-a-classe-cl_salv_table/</link>
		<comments>http://abap101.com/2010/02/18/alv-com-evento-usando-a-classe-cl_salv_table/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 11:28:00 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[handler]]></category>
		<category><![CDATA[salv]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=249</guid>
		<description><![CDATA[Problema Criar uma cópia do relatório ZSALV_ALV_FIELDCAT implementado nesse post, para que seja monstrado uma mensagem quando o usuário der um duplo clique. Nessa mensagem, deve ser apresentado &#8220;Você deu duplo clique na coluna &#38; e linha &#38;.&#8221;, onde &#38; deverá ser substituído pelo nome da coluna e linha onde ocorreu o duplo clique. Solução [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F18%2Falv-com-evento-usando-a-classe-cl_salv_table%2F&amp;title=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" id="wpa2a_6"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: #0000ff;">Problema</span></h3>
<p>Criar uma cópia do relatório ZSALV_ALV_FIELDCAT implementado nesse <a href="http://abap101.com/2010/02/16/alv-com-field-catalog-usando-a-classe-cl_salv_table/">post</a>, para que seja monstrado uma mensagem quando o usuário der um duplo clique. Nessa mensagem, deve ser apresentado &#8220;Você deu duplo clique na coluna &amp; e linha &amp;.&#8221;, onde &amp; deverá ser substituído pelo nome da coluna e linha onde ocorreu o duplo clique.</p>
<h3><span style="color: #0000ff;"><span id="more-249"></span></p>
<p>Solução</p>
<p></span></h3>
<p><strong>Passo 1:</strong> Criar um novo include no programa principal. Para isso, colocar a instrução INCLUDE na seguinte posição:</p>
<blockquote><p><span style="font-family: Courier New;">&#8230;<br />
DATA: it_sflight TYPE TABLE OF ty_flight,<br />
wa_sflight LIKE LINE OF it_sflight.</span></p>
<p><span style="font-family: Courier New;"><strong>INCLUDE zsalv_alv_event_incl.</strong></span></p>
<p><span style="font-family: Courier New;">DATA: r_event_handler TYPE REF TO lcl_event_handler.<br />
START-OF-SELECTION.<br />
&#8230;</span></p></blockquote>
<p>Dar um duplo clique no nome do include e confirmar a criação do novo objeto. Garanta que o novo objeto seja do tipo include:</p>
<div><a href="http://wp3.abap101.com/wp-content/uploads/2010/02/event1.jpg"><img class="aligncenter size-full wp-image-251" title="SALV Event include" src="http://wp3.abap101.com/wp-content/uploads/2010/02/event1.jpg" alt="" width="500" height="331" /></a></div>
<p><strong>Passo 2:</strong> Criar uma classe local para receber e manipular o evento double_click do ALV:</p>
<blockquote>
<pre>*----------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS: on_user_command FOR EVENT double_click
             OF cl_salv_events_table
              IMPORTING row column.
ENDCLASS.                    "lcl_event_handler DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
  METHOD on_user_command.
    MESSAGE i001(00) WITH
                'Você deu duplo clique na coluna' column 'e linha ' row.
  ENDMETHOD.                    "on_user_command
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION&lt;/font&gt;</pre>
</blockquote>
<p><strong>Passo 3:</strong> Criar um objeto e registrar o evento:</p>
<blockquote><p><span style="font-family: Courier New;">&#8230;<br />
*  Set event handling<br />
</span><span style="font-family: Courier New;"> r_events = r_table-&gt;get_event( ).<br />
</span><span style="font-family: Courier New;"> CREATE OBJECT r_event_handler.<br />
</span><span style="font-family: Courier New;"> SET HANDLER</span><span style="font-family: Courier New;"> r_event_handler-&gt;on_user_command FOR r_events.<br />
&#8230;</span></p></blockquote>
<p>Agora você pode ativar o seu programa e testar.</p>
<h3><span style="color: #0000ff;">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" width="25" height="27" />:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv6.jpg" alt="" width="699" height="362" /></p>
<div>Dar um duplo clique em qualque linha e aí uma mensagem deverá ser apresentada:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv8.jpg" alt="" width="432" height="130" /></div>
</div>
</div>
<h3><span style="color: #0000ff;"><strong>Discussão</strong></span></h3>
<p><strong><strong></strong><strong></strong></strong>Os eventos para a CL_SALV_TABLE são um puco diferentes da CL_GUI_ALV_GRID. Já comentei que a classe CL_SALV_TABLE encapsula as funcionalidades do CL_GUI_ALV_GRID, incluindo os eventos.</p>
<p>Quando trabalhamos com <a href="http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/">eventos com a técnica &#8220;pura&#8221;</a>, temos que registrar os eventos e implementar os métodos para tratar esses eventos diretamente da CL_GUI_ALV_GRID. Com as classes &#8220;salv&#8221; temos uma classe que encapsula os eventos do grid, chamada CL_SALV_EVENTS_TABLE.</p>
<p>O evento que uso nesse problema é o DOUBLE_CLICK que é disparado da classe CL_SALV_EVENTS_TABLE. Veja que no evento DOUBLE_CLICK temos os parâmetros COLUMN, nome da coluna onde ocorreu o evento e ROW, que é o número da linha onde ocorreu o evento evento. Com esses dois parêmetros conseguimos identificar a coluna e a linha em que o usuário deu o duplo clique (usando o READ TABLE &#8230; index ROW na tabela de dados do ALV).</p>
<h3><span style="color: #0000ff;">Anexos</span></h3>
<p><a href="http://abap101.furlanserver.com/files/ZSALV_ALV_EVENT.txt" class="broken_link">ZSALV_ALV_EVENT.txt</a><br />
<a href="http://abap101.furlanserver.com/files/ZSALV_ALV_EVENT_INCL.txt" class="broken_link">ZSALV_ALV_EVENT_INCL.txt</a></p>
<h3><span style="color: #0000ff;">Veja Também</span></h3>
<p><span><a href="http://abap101.com/2008/10/20/exemplos-alv">ABAP Control Exemples</a></span><br />
<a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV at SAP Help</a><br />
<a href="http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/">Introdução ao ALV &#8211; Série Especial</a><br />
<a href="http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/">ALV com Evento &#8211; Usando a Técnica “Pura”</a><br />
<a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/"></a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=28f57b61-fe33-8f61-8fdb-d7ecc09d244b" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2010/02/18/alv-com-evento-usando-a-classe-cl_salv_table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALV com Field Catalog &#8211; Usando a classe CL_SALV_TABLE</title>
		<link>http://abap101.com/2010/02/16/alv-com-field-catalog-usando-a-classe-cl_salv_table/</link>
		<comments>http://abap101.com/2010/02/16/alv-com-field-catalog-usando-a-classe-cl_salv_table/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 10:00:53 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>
		<category><![CDATA[catalog]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[salv]]></category>
		<category><![CDATA[sap]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=246</guid>
		<description><![CDATA[Problema Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. Também é requerido um novo campo chamado Taxa de Ocupação, onde é mostrado a relação entre capacidade máxima de  passageiros e ocupação atual do vôo. Solução Passo 1: Criar um programa executável, sem TOP include, ZSALV_ALV_FIELDCAT. Passo 2: [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F16%2Falv-com-field-catalog-usando-a-classe-cl_salv_table%2F&amp;title=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" id="wpa2a_8"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: #0000ff;">Problema</span></h3>
<p>Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. Também é requerido um novo campo chamado Taxa de Ocupação, onde é mostrado a relação entre capacidade máxima de  passageiros e ocupação atual do vôo.</p>
<h3><span style="color: #0000ff;"><span id="more-246"></span></p>
<p>Solução</p>
<p></span></h3>
<p><strong>Passo 1:</strong> Criar um programa executável, sem TOP include, ZSALV_ALV_FIELDCAT.</p>
<p><strong>Passo 2:</strong> Criar as referências para os objetos do grid:</p>
<blockquote><p><span style="font-family: 'Courier New';">DATA: r_table     TYPE REF TO cl_salv_table,</span><br />
<span style="font-family: 'Courier New';"> r_columns   TYPE REF TO cl_salv_columns_table,</span><br />
<span style="font-family: 'Courier New';"> r_column    TYPE REF TO cl_salv_column,</span><br />
<span style="font-family: 'Courier New';"> r_functions    TYPE REF TO cl_salv_functions.</span></p></blockquote>
<p><strong>Passo 3:</strong> Criar uma tabela interna sem header line, fazer a seleção de todos os dados da tablea SFLIGHT e fazer o cálculo da taxa de ocupação.</p>
<blockquote><p><span style="font-family: 'Courier New';">TYPES: BEGIN OF ty_flight.</span><br />
<span style="font-family: 'Courier New';"> INCLUDE TYPE sflight.</span><br />
<span style="font-family: 'Courier New';">TYPES: txocc TYPE p DECIMALS 2,</span><br />
<span style="font-family: 'Courier New';"> END OF ty_flight.</span></p>
<p><span style="font-family: 'Courier New';">DATA: r_table     TYPE REF TO cl_salv_table,</span><br />
<span style="font-family: 'Courier New';"> r_columns   TYPE REF TO cl_salv_columns_table,</span><br />
<span style="font-family: 'Courier New';"> r_column    TYPE REF TO cl_salv_column,</span><br />
<span style="font-family: 'Courier New';"> r_functions TYPE REF TO cl_salv_functions.</span></p>
<p><span style="font-family: 'Courier New';">DATA: it_sflight TYPE TABLE OF ty_flight,</span><br />
<span style="font-family: 'Courier New';"> wa_sflight LIKE LINE OF it_sflight.</span></p>
<p>&#8230;.</p>
<p><span style="font-family: 'Courier New';"> SELECT * FROM sflight INTO TABLE it_sflight.</span></p>
<p><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';"> LOOP AT it_sflight INTO wa_sflight.<br />
wa_sflight-txocc =<br />
( wa_sflight-seatsocc / wa_sflight-seatsmax ) * 100.<br />
MODIFY it_sflight FROM wa_sflight.<br />
ENDLOOP.</span></p></blockquote>
<p><strong>Passo 4:</strong> Criar a referência com o método FACTORY para o objeto ALV:</p>
<blockquote><p><span style="font-family: 'Courier New';">TRY.</span><br />
<span style="font-family: 'Courier New';"> cl_salv_table=&gt;factory(</span><br />
<span style="font-family: 'Courier New';"> IMPORTING</span><br />
<span style="font-family: 'Courier New';"> r_salv_table = r_table</span><br />
<span style="font-family: 'Courier New';"> CHANGING</span><br />
<span style="font-family: 'Courier New';"> t_table      = it_sflight ).</span><br />
<span style="font-family: 'Courier New';">CATCH cx_salv_msg .</span><br />
<span style="font-family: 'Courier New';">ENDTRY.</span></p></blockquote>
<p><strong>Passo 5:</strong> Ajustar os dados para a nova coluna:</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_columns = r_table-&gt;get_columns( ).<br />
r_columns-&gt;set_optimize( abap_true ).</span></p>
<p><span style="font-family: 'Courier New';"> </span><span style="font-family: 'Courier New';"> r_column = r_columns-&gt;get_column( &#8216;TXOCC&#8217; ).<br />
r_column-&gt;set_short_text( &#8216;Tx. Occ.&#8217; ).<br />
r_columns-&gt;set_column_position( columnname = &#8216;TXOCC&#8217; position = 10 ).</span></p></blockquote>
<p><strong><br />
Passo 5:</strong> Chamar o método DISPLAY para mostrar os grid:</p>
<blockquote><p><span style="font-family: 'Courier New';">r_table-&gt;display( ).</span></p></blockquote>
<p>Agora você pode ativar o seu programa e testar.</p>
<h3><span style="color: #0000ff;">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" />:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2010/02/zsalv-alv-fieldcat.jpg" alt="" width="699" height="476" /></p>
<h3><span style="color: #0000ff;"><strong>Discussão</strong></span></h3>
<p>Na versão Netweaver 04, a SAP introduziu a família de classes CL_SALV*, que basicamente encapsula as operações que fizemos no post <a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/">ALV Simples &#8211; Usando a Técnica “Pura”</a>. Podemos dizer que essa família de classes veio para substituir as técnicas baseadas nas Function Modules da família REUSE*.</p>
<p>As classes SALV tornam a manipulação do ALV extremamente simples. No exemplo de ALV simples não fica tão claro, mas nesse exemplo vemos claramente que o ALV com as classes SALV ficam muito mais &#8220;orientado a objetos&#8221;.</p>
<p>Quando estiver trabalhando com elas, você deve pensar o ALV como um objeto, mas composto por diversos outros objetos, como por exemplo, colunas.</p>
<div><a href="http://wp3.abap101.com/wp-content/uploads/2010/02/cl_salv_table.jpg"><img class="aligncenter size-full wp-image-250" title="cl_salv_table" src="http://wp3.abap101.com/wp-content/uploads/2010/02/cl_salv_table.jpg" alt="" width="500" height="290" /></a></div>
<p>Ou seja, após criar o objeto CL_SALV_TABLE com o método FACTORY, você só precisa usar métodos GET&#8230; para obter as referências aos objetos agregados, como colunas, coluna individual e funções do grid.</p>
<p><strong>Adicionando Nova Coluna ao Grid</strong></p>
<p>Diferentemente do método &#8220;puro&#8221;, você não precisa criar uma tabela interna para ajustar o field catalog, mas apenas trabalhar com os atributos do objeto CL_SALV_COLUMN. Muito mais simples e intuitivo.</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_columns = r_table-&gt;get_columns( ).</span></p></blockquote>
<p>Com o método get_columns( ), você obtém a referência para o objeto CL_SALV_COLUMNS_TABLE, que são as colunas do grid. Lembre-se que ela não contém os valores das colunas, apenas metadados (informações das colunas em si).</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_columns-&gt;set_optimize( abap_true ).</span></p></blockquote>
<p>O método set_optimize( ) você pode definir que a largura das colunas serão otimizadas de acordo com o contéudo da coluna.</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_column = r_columns-&gt;get_column( &#8216;TXOCC&#8217; ).</span></p></blockquote>
<p>Com o método get_column( ) você retorna a referência a uma data coluna, de acordo com o nome técnico do campo que você passou no parâmetro. No caso acima, o nome do nosso campo que queremos alterar as características é o TXOCC.</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_column-&gt;set_short_text( &#8216;Tx. Occ.&#8217; ).</span></p></blockquote>
<p>Esse método, set_short_text( ) define o texto curto para a coluna.</p>
<blockquote><p><span style="font-family: 'Courier New';"> r_columns-&gt;set_column_position( columnname = &#8216;TXOCC&#8217; position = 10 ).</span></p></blockquote>
<p>Finalmente, com o método set_column_position( ), você define a posição de uma coluna.</p>
<h3><span style="color: #0000ff;">Anexos</span></h3>
<p><a href="http://abap101.furlanserver.com/files/ZSALV_ALV_FIELDCAT.txt" class="broken_link">ZSALV_ALV_FIELDCAT.txt</a></p>
<h3><span style="color: #0000ff;">Veja Também</span></h3>
<p><a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV Output Display</a><a href="http://help.sap.com/saphelp_nw04/helpdata/EN/8d/e994374c9cd355e10000009b38f8cf/frameset.htm"></a><br />
<a href="http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/">Introdução ao ALV &#8211; Série Especial</a><br />
<a href="http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/">ALV com Field Catalog &#8211; Usando a Técnica “Pura”</a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=8458ac7a-81e7-8cdc-beb7-e66e7cb20844" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2010/02/16/alv-com-field-catalog-usando-a-classe-cl_salv_table/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ALV Simples &#8211; Usando a classe CL_SALV_TABLE</title>
		<link>http://abap101.com/2010/02/12/alv-simples-usando-a-classe-cl_salv_table/</link>
		<comments>http://abap101.com/2010/02/12/alv-simples-usando-a-classe-cl_salv_table/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 11:13:32 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ABAP Objects]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>
		<category><![CDATA[salv]]></category>
		<category><![CDATA[sap]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=232</guid>
		<description><![CDATA[Problema Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. Solução Passo 1: Criar um programa executável, sem TOP include, ZSALV_ALV_SIMPLE. Passo 2: Criar as referências para os objetos do grid: DATA: r_table &#160; &#160; TYPE REF TO cl_salv_table, r_functions TYPE REF TO cl_salv_functions. Passo 3: Criar uma [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;count=horizontal&amp;text=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2010%2F02%2F12%2Falv-simples-usando-a-classe-cl_salv_table%2F&amp;title=ALV%20Simples%20%26%238211%3B%20Usando%20a%20classe%20CL_SALV_TABLE" id="wpa2a_10"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: rgb(0, 0, 255);">Problema</span></h3>
<p>Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT.<br />
<h3><span style="color: rgb(0, 0, 255);"><span id="more-232"></span></p>
<p>Solução</p>
<p></span></h3>
<p><strong>Passo 1:</strong> Criar um programa executável, sem TOP include, ZSALV_ALV_SIMPLE.</p>
<p><strong>Passo 2:</strong> Criar as referências para os objetos do grid:<br />
<blockquote><span style="font-family: 'Courier New';">DATA: r_table &nbsp; &nbsp; TYPE REF TO cl_salv_table,</span><br /><span style="font-family: 'Courier New';"> r_functions    TYPE REF TO cl_salv_functions.</span></p></blockquote>
<p><strong>Passo 3:</strong> Criar uma tabela interna sem header line e fazer a seleção de todos os dados da tablea SFLIGHT.<br />
<blockquote>DATA: it_sflight TYPE TABLE OF sflight.</p>
<p>START-OF-SELECTION.</p>
<p>&nbsp; SELECT * FROM sflight INTO TABLE it_sflight.</p></blockquote>
<p><strong>Passo 4:</strong> Criar a referência com o método FACTORY para o objeto ALV:<br />
<blockquote><span style="font-family: 'Courier New';">CALL METHOD cl_salv_table=&gt;factory<br />IMPORTING<br />r_salv_table = r_table<br />CHANGING<br />t_table      = it_sflight.</span></p></blockquote>
<p><strong>Passo 5:</strong> Chamar o método DISPLAY para mostrar os grid:<br />
<blockquote><span style="font-family: 'Courier New';">CALL METHOD r_table-&gt;display.</span></p></blockquote>
<p>Agora você pode ativar o seu programa e testar.<br />
<h3><span style="color: rgb(0, 0, 255);">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" />:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2010/02/zsalv-alv-simple.jpg" alt="" height="350" width="699" /><br />
<h3><span style="color: rgb(0, 0, 255);"><strong>Discussão</strong></span></h3>
<p>Na versão Netweaver 04, a SAP introduziu a família de classes CL_SALV*, que basicamente encapsula as operações que fizemos no post <a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/">ALV Simples &#8211; Usando a Técnica “Pura”</a>. Podemos dizer que essa família de classes veio para substituir as técnicas baseadas nas Function Modules da família REUSE*.</p>
<p>Esse exemplo que usei é muito simples. Apenas criei a referência do grida (classe CL_SALV_TABLE) e chamei o método DISPLAY para mostrar o grid. Hoje, é a maneira mais fácil de se criar um ALV Grid.<br />
<h3><span style="color: rgb(0, 0, 255);">Anexos</span></h3>
<p><a href="http://abap101.furlanserver.com/files/ZSALV_ALV_SIMPLE.txt" class="broken_link">ZSALV_ALV_SIMPLE</a><br />
<h3><span style="color: rgb(0, 0, 255);">Veja Também</span></h3>
<p><a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV Output Display</a><a href="http://help.sap.com/saphelp_nw04/helpdata/EN/8d/e994374c9cd355e10000009b38f8cf/frameset.htm"></a><br /><a href="http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/">Introdução ao ALV &#8211; Série Especial</a></p>
<p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=4a61ed66-e924-8ebc-b744-948e420043ea" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2010/02/12/alv-simples-usando-a-classe-cl_salv_table/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ALV com Evento &#8211; Usando a Técnica &#8220;Pura&#8221;</title>
		<link>http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/</link>
		<comments>http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 11:38:51 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=225</guid>
		<description><![CDATA[Problema Alterar o relatório ZPURE_ALV_FIELDCAT implementado nesse post, para que seja monstrado uma mensagem quando o usuário der um duplo clique. Nessa mensagem, deve ser apresentado &#8220;Você deu duplo clique na coluna &#38; e linha &#38;.&#8221;, onde &#38; deverá ser substituído pelo nome da coluna e linha onde ocorreu o duplo clique. Solução Passo 1: [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;count=horizontal&amp;text=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;count=horizontal&amp;text=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;linkname=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F26%2Falv-com-evento-usando-a-tecnica-pura%2F&amp;title=ALV%20com%20Evento%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" id="wpa2a_12"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: #0000ff;">Problema</span></h3>
<p>Alterar o relatório ZPURE_ALV_FIELDCAT implementado nesse <a href="http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/">post</a>, para que seja monstrado uma mensagem quando o usuário der um duplo clique.</p>
<p>Nessa mensagem, deve ser apresentado &#8220;Você deu duplo clique na coluna &amp; e linha &amp;.&#8221;, onde &amp; deverá ser substituído pelo nome da coluna e linha onde ocorreu o duplo clique.</p>
<h3><span style="color: #0000ff;"><span id="more-225"></span> Solução</span></h3>
<h3><span style="font-size: 13px; color: #000000; font-weight: normal;"><strong>Passo 1: </strong>Criar um novo include no programa principal. Para isso, colocar a instrução INCLUDE na seguinte posição:</span></h3>
<h3><span style="color: #0000ff;">&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p></span></h3>
<p><script src="https://gist.github.com/1052986.js?file=gistfile1.txt"></script> Dar um duplo clique no nome do include e confirmar a criação do novo objeto. Garanta que o novo objeto seja to tipo include:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv7.jpg" alt="" /></div>
<p><strong>Passo 2:</strong> Criar uma classe local para receber e manipular o evento double_click do ALV: <script src="https://gist.github.com/1052990.js?file=ZPURE_ALV_EVENT_HANDLE"></script></p>
<p><strong>Passo 3:</strong> Criar um objeto e registrar o evento no module PBO:</p>
<p><script src="https://gist.github.com/1052998.js?file=gistfile1.txt"></script><br />
Agora você pode ativar o seu programa e testar.</p>
<h3><span style="color: #0000ff;">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" />:</p>
<div>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv6.jpg" alt="" width="699" height="362" /></p>
<div>
<p>Dar um duplo clique em qualque linha e aí uma mensagem deverá ser apresentada:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv8.jpg" alt="" /></div>
</div>
</div>
<p>&nbsp;</p>
<h3><span style="color: #0000ff;"><strong>Discussão</strong></span></h3>
<p><strong>Introdução a Eventos</strong></p>
<p>Para eventos sempre temos dois objetos envolvidos, um <em>sender</em> e outro <em>handler</em>. Ou seja, um objeto que dispara o evento e outro que recebe o evento.</p>
<p><strong><em>A principal característica é que o objeto que envia/dispara o evento não sabe quem é que receberá esse evento</em></strong>. Essa é a grande diferênça entre eventos e chamada de métodos. Quando chamamos um método temos que necessariamente saber de qual objeto estamos invocando aquele método.</p>
<p>Um bom exemplo do conceito de eventos é o caso dos passageiros no avião. No avião temos um botão em nossa poltrona que chama o comissário ou comissária para nos atender em alguma solicitação.</p>
<p>Quando apertamos o botão (disparamos um evento) um aviso é dado na &#8220;sala de comissários&#8221;, e um dos deles virá lhe atender. Repare que você não sabe qual comissário (classe) irá lhe atender, até que o comissário apareça (objeto).</p>
<p><strong>Implementando Eventos</strong></p>
<p>Para implementar um evento, precisamos de 4 passos:</p>
<p>Na classe Sender:</p>
<p>i &#8211; Declarar o nome do evento, usando a declaração EVENTS na DEFINITION da classe sender.<br />
ii &#8211; Disparar o evento no método onde o evento deve ser disparado, usando o comando RAISE EVENT .</p>
<p>Na classe Handler:</p>
<p>iii &#8211; Definir qual método irá responder ao evento, adicionando a cláusula &#8230; FOR EVENT  FOR .<br />
iv &#8211; Registrar o evento, com o comando SET HANDLER.</p>
<p>O registro do evento é responsável por ativar e desativar o evento em tempo de execução (run time).</p>
<p>Voltando ao nosso exemplo do avião, há determinados momentos que os comissários não atenderão a nenhuma solicitação, como por exemplo nas decolagens e aterrisagens. Ou seja, o evento continua sendo disparado (passageiro apertando o botão de chamado) e o sinal continua sendo tocado na &#8220;sala de comissários&#8221;. No entanto, os comissários não lhe atenderão.</p>
<p>O registro de um evento também pode ser seletivo quando a qual objeto o evento será registrado. Por isso temos FOR ALL INSTANCES no comando SET HANDLER. Nesse ponto, podemos definir para qual objeto queremos registrar o evento.</p>
<p>Isso é vital para os casos que temos <a href="http://abap101.com/2009/02/25/como-seria-a-minha-solucao-para-o-desavio-do-alv-duplo/">mais de um grid na tela</a> e queremos responder ao evento de apenas um deles.</p>
<p><strong>Implementando o Evento no ALV</strong></p>
<p>No programa implementado acima, os passos i e ii já foram implementados pela classe standard CL_GUI_ALV_GRID e não precisamos nos preocupar com isso.</p>
<p>Precisamos apenas definir qual classe e método irá responder ao evento. Além disso devemos registrar o evento.</p>
<p>Para isso, devemos identificar o evento e parâmetros que esse evento usará:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv9.jpg" alt="" width="700" height="335" /></div>
<p>Com o evento selecionado, clicar em <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv10.jpg" alt="" /> para acessar os parâmetros do evento:</p>
<div>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv11.jpg" alt="" /></p>
<div>Veja que no evento DOUBLE_CLICK temos alguns parâmetros, dentre eles o campo E_COLUMN, nome da coluna onde ocorreu o evento e a estrutura ES_ROW_NO, que contém o campo ROW_ID que é o número da linha onde ocorreu o evento evento.</div>
</div>
<p>&nbsp;</p>
<h3><span style="color: #0000ff;">Anexos</span></h3>
<p><a href="http://abap101.com/wp-content/uploads/2009/08/NUGG_ZPURE_ALV_EVENT.nugg_1.txt">NUGG_ZPURE_ALV_EVENT.nugg</a></p>
<h3><span style="color: #0000ff;">Veja Também</span></h3>
<p><a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV at SAP Help</a><br />
<a href="http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/">Introdução ao ALV &#8211; Série Especial</a><br />
<a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/">ALV Simples &#8211; Usando a Técnica “Pura”</a><br />
<a href="http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/">ALV com Field Catalog &#8211; Usando a Técnica “Pura”</a></p>
<p>&nbsp;</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=de150699-d5eb-8c5a-ba71-49ee5d02b072" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ALV com Field Catalog &#8211; Usando a Técnica &#8220;Pura&#8221;</title>
		<link>http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/</link>
		<comments>http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 03:28:23 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>

		<guid isPermaLink="false">http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/</guid>
		<description><![CDATA[Problema Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. Também é requerido um novo campo chamado Taxa de Ocupação, onde é mostrado a relação entre capacidade máxima de passageiros e ocupação atual do vôo. Solução Passo 1: Criar um programa executável, sem TOP include, ZPURE_ALV_FIELDCAT. Passo 2: [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;count=horizontal&amp;text=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;count=horizontal&amp;text=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;linkname=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F23%2Falv-com-field-catalog-usando-a-tecnica-pura-2%2F&amp;title=ALV%20com%20Field%20Catalog%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" id="wpa2a_14"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: #0000ff;">Problema</span></h3>
<p>Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. Também é requerido um novo campo chamado Taxa de Ocupação, onde é mostrado a relação entre capacidade máxima de passageiros e ocupação atual do vôo.</p>
<h3><span style="color: #0000ff;"><span id="more-216"></span><br />
Solução</span></h3>
<p><strong>Passo 1:</strong> Criar um programa executável, sem TOP include, ZPURE_ALV_FIELDCAT.<br />
<strong>Passo 2:</strong> Criar as referências para os objetos do grid:</p>
<p><strong>Passo 3:</strong> Criar uma tabela interna com todos os campos da tabela transparente SFLIGHT e mais um campo do tipo package, com 2 casas decimais, para guardar o valor calculado da taxa de ocupação.</p>
<p>Criar um tipo local para a nova estrutura contendo o cálculo da taxa de ocupação.</p>
<p>Com o tipo criado, criar os data objects (tabela interna e work area).</p>
<p>Fazer a seleção dos dados da SFLIGHT, logo no início do evento START-OF-SELECTION:</p>
<p>Após fazer a seleção dos dados é necessário efetuar o cálculo da taxa de ocupação e atualizar a tabela interna com esse valor:</p>
<p><strong>Passo 4:</strong> Criar uma tabela interna e work area para a tabela de field catalog:</p>
<p><strong>Passo 5</strong>: Criar e chamar uma tela onde o ALV será apresentado. Para criar a tela, dar um duplo clique no número da tela, confirmar a criação do objeto e entrar com uma descrição:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-23.jpg" alt="" /></p>
<p>Importante: a tela precisa ser classificada como &#8220;Normal&#8221;</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-1.jpg" alt="" /></div>
<p>Nessa nova tela, é necessário criar um componente chamado &#8220;Custom Control&#8221; <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-3.jpg" alt="" />, pelo screen painter <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-5.jpg" alt="" /> onde ALV será apresentado, ou seja, o ALV ficará limitado a essa área. Além disso, atentar para o nome desse componente, pois será utilizado nos próximos passos.</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv02.jpg" alt="" /></p>
<p>Terminado de desenhar onde o ALV será mostrado, é necessário programar o PBO e PAI da screen. Para isso entre na tab Flow Logic, descomente a linha MODULE STATUS_0100, dê um duplo clique na palavra STATUS_0100 e confirme a criação do novo includ. É importante escolher um bom nome para o include, pois todos os MODULES serão escritos nele:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv.jpg" alt="" /></p>
<p>Confirme a inclusão da instrução INCLUDE no programa princial.</p>
<p>No MODULE STATUS_0100, criar o comando SET PF-STATUS &#8216;PF0100&#8242;.</p>
<p>Dar um duplo clique no &#8216;PF0100&#8242; para criar o GUI STATUS. Definir a descrição para o STATUS GUI como Normal Screen:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-8.jpg" alt="" /></div>
<p>Na criação do Status Gui, definir uma Function Key para o botão BACK:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv3.jpg" alt="" /></p>
<p>Também precisamos programar o PAI para o botão BACK. Para isso, descomentar  MODULE USER_COMMAND_0100 no flow logic da screen. Dar um duplo clique nesse comando, confirmar a criação de um novo MODULE no mesmo include criado para o module PBO:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv4.jpg" alt="" /></p>
<p>Inserir o seguinte código no MODULE USER_COMMAND_0100.</p>
<p>Ao final do passo 5, já podemos fazer a primeira ativação do nosso programa para verificar se tudo está correto.</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv5.jpg" alt="" /></div>
<p><strong>Passo 6:</strong> Criar os objetos para o ALV:</p>
<p>No PBO, criar a linha MODULE CREATE_ALV e dar um duplo clique para criar o MODULE. Escolher o mesmo include que já estamos usando para colocar os outros modules:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv.jpg" alt="" /></p>
<p>Nesse module, será colocado os comandos para criação dos objetos para o grid.</p>
<p>Também precisamos montar a tabela interna com o field catalog.</p>
<p>Por último, chamar o método para mostrar o grid:</p>
<p>Agora você pode ativar o seu programa e testar.</p>
<h3><span style="color: #0000ff;">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" />:</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv6.jpg" alt="" /></div>
<h3><span style="color: #0000ff;"><strong>Discussão</strong></span></h3>
<p>Esse programa é muito parecido com o desse <a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/">post</a>. Mas para esse programa precisamo criar um field catalog para definir as características do novo campo.</p>
<p><strong>Conceituando o Field Catalog do ALV</strong></p>
<p>De uma maneira bem sumarizada podemos dizer que o field catalog é o que define as características das colunas do ALV. Para cada campo do ALV, temos uma linha no field catalog. O field catalog é uma tabela interna, do tipo LVC_T_FCAT (ou também LVC_S_FCAT para estruturas), onde definimos uma séria de características para cada coluna.</p>
<p>Nesse tipo LVC_T_FCAT, temos um campo chamado FIELDNAME, onde é feito o link com a it_outtab, veja novamente como a tabela it_fcat foi preenchida:</p>
<blockquote><p><span style="font-family: 'Courier New';">CLEAR wa_fcat.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-fieldname = &#8216;TXOCC&#8217;.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-col_pos = 10.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-coltext = &#8216;Tx. Occ.&#8217;.</span><br />
<span style="font-family: 'Courier New';"> APPEND wa_fcat TO it_fcat.</span></p></blockquote>
<p>Ou seja, o campo FIELDNAME precisa ser o mesmo nome técnico que está na it_outtab. Veja o detalhe que está em maísculo &#8216;TXOCC&#8217;, caso contrário a classe grid não reconhecerá o campo.</p>
<p><strong>Campos de Referência no Field Catalog</strong></p>
<p>Quando chamamos o método SET_TABLE_FOR_FIRST_DISPLAY passamos o parâmetro I_STRUCTURE_NAME = &#8216;SFLIGHT&#8217;, onde usamos as informações semânticas (labels, documentação etc.) que estão no dicionário. Mas se o campo extra não está presente na SFLIGHT, mas está em outra tabela do dicionário (não é o caso da taxa de ocupação)?</p>
<p>Temos dois campos no field catalog que podemos indicar referência a outro campo e tabela do dicionário, REF_FIELD e REF_TABLE. Se o nosso campo tem a mesma referência técnia e semântica de algúm campo de outra tabela, podemos usar REF_FIELD para indicar o campo e REF_TABLE para indicar a tabela.</p>
<p>Lembrando que podemos sobrescrever qualquer característica usando os outros campos da tabela do field catalog.</p>
<p>Vamos supor que queremos incluir um campo para o telefone no nosso field catalog. O campo da it_outtab é TELEPHONE, e o campo PHONE da tabela SCUSTOM possui as mesmas características e queremos usá-la. A entrada na IT_FCAT ficaria assim:</p>
<blockquote><p><span style="font-family: 'Courier New';">CLEAR wa_fcat.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-fieldname = &#8216;TELEPHONE&#8217;.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-ref_table = &#8216;SCUSTOM&#8217;.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-ref_field = &#8216;PHONE&#8217;.</span><br />
<span style="font-family: 'Courier New';"> APPEND wa_fcat TO it_fcat.</span></p></blockquote>
<p>Outro detalhe interessante seria se no exemplo acima o campo na it_outtab fosse PHONE ao invés de TELEPHONE, como na tabela SCUSTOM, eu não precisaria preencher o campo REF_FIELD no field catalog. Veja como ficaria:</p>
<blockquote><p><span style="font-family: 'Courier New';">CLEAR wa_fcat.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-fieldname = &#8216;PHONE&#8217;.</span><br />
<span style="font-family: 'Courier New';"> wa_fcat-ref_table = &#8216;SCUSTOM&#8217;.</span><br />
<span style="font-family: 'Courier New';"> APPEND wa_fcat TO it_fcat.</span></p></blockquote>
<p><strong>Detalhes na Chamada do Método SET_TABLE_FOR_FIRST_DISPLAY</strong></p>
<p>Preenchido o field catalog, precisamos passá-lo na chamada do método SET_TABLE_FOR_FIRST_DISPLAY:</p>
<blockquote><p><span style="font-family: 'Courier New';">CALL METHOD r_grid-&gt;set_table_for_first_display</span><br />
<span style="font-family: 'Courier New';"> EXPORTING</span><br />
<span style="font-family: 'Courier New';"> i_structure_name              = &#8216;SFLIGHT&#8217;</span><br />
<span style="font-family: 'Courier New';"> CHANGING</span><br />
<span style="font-family: 'Courier New';"> it_outtab                     = it_sflight</span><br />
<span style="font-family: 'Courier New';"> it_fieldcatalog               = it_fcat.</span></p></blockquote>
<p>Repare que foi usado tanto o it_outtab quanto o i_structure_name. Isso porque parte das refências vêm da definição da tabela transparente SFLIGHT e parte da tabela interna do field catalog.</p>
<p>Ou seja, não precisamos preencher todos os campos do field catalog, mas somente os novos campos e os campos que queremos sobre escrever as características que foram referenciadas do dicionário (i_structure_name).</p>
<h3><span style="color: #0000ff;">Anexos</span></h3>
<p><a href="http://abap101.com/wp-content/uploads/2009/08/NUGG_ZPURE_ALV_FIELDCAT.nugg_.txt">NUGG_ZPURE_ALV_FIELDCAT.nugg</a></p>
<h3><span style="color: #0000ff;">Veja Também</span></h3>
<p><span><a href="http://abap101.com/2008/10/20/exemplos-alv">ABAP Control Exemples</a></span></p>
<p><a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV at SAP Help</a></p>
<p>&nbsp;</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=3de1eb6c-0c2b-8d36-82fe-6c48dbcd050a" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALV Simples &#8211; Usando a Técnica &#8220;Pura&#8221;</title>
		<link>http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/</link>
		<comments>http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 05:17:37 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=198</guid>
		<description><![CDATA[Problema Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT. &#160; Solução Passo 1: Criar um programa executável, sem TOP include, ZPURE_ALV_SIMPLE. &#160; Passo 2: Criar as referências para os objetos do grid. Passo 3: Criar uma tabela interna sem header line e fazer a seleção de todos [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;count=horizontal&amp;text=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;count=horizontal&amp;text=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;linkname=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F21%2Falv-simples-usando-a-tecnica-pura%2F&amp;title=ALV%20Simples%20%26%238211%3B%20Usando%20a%20T%C3%A9cnica%20%26%238220%3BPura%26%238221%3B" id="wpa2a_16"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><h3><span style="color: #0000ff;">Problema</span></h3>
<p>Implementar um relatório ALV, para mostrar todos os dados e todos os campos da tabela SFLIGHT.</p>
<h3><span style="color: #0000ff;"><span id="more-198"></span>&nbsp;</p>
<p>Solução</p>
<p><span style="font-size: 13px; color: #000000; font-weight: normal;"><strong>Passo 1:</strong> Criar um programa executável, sem TOP include, ZPURE_ALV_SIMPLE.</span></p>
<p>&nbsp;</p>
<p></span></h3>
<p><strong>Passo 2:</strong> Criar as referências para os objetos do grid.</p>
<p><strong>Passo 3:</strong> Criar uma tabela interna sem header line e fazer a seleção de todos os dados da tablea SFLIGHT.</p>

<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;"><span style="color: #800080;">&lt;</span>span <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">style</span><span style="color: #800080;">=</span><span style="color: #808080; font-style: italic;">&quot;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;&quot;&gt;&lt;strong&gt;Passo 4&lt;/strong&gt;: Criar e chamar uma tela onde o ALV será apresentado. Para criar a tela, dar um duplo clique no número da tela, confirmar a criação do objeto e entrar com uma descrição. Importante: a tela precisa ser classificada como &quot;Normal&quot;:&lt;/span&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;"><span style="color: #800080;">&lt;</span>span <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">style</span><span style="color: #800080;">=</span><span style="color: #808080; font-style: italic;">&quot;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;&quot;&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://wp3.abap101.com/wp-content/uploads/2009/08/screen-23.jpg&quot; alt=&quot;&quot; /&gt;&lt;/span&gt;</span></pre></div></div>

<p>&nbsp;</p>
<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-1.jpg" alt="" /></div>
<p>Nessa nova tela, é necessário criar um componente chamado &#8220;Custom Control&#8221; <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-3.jpg" alt="" />, pelo screen painter <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-5.jpg" alt="" /> onde ALV será apresentado, ou seja, o ALV ficará limitado a essa área. Além disso, atentar para o nome desse componente, pois será utilizado nos próximos passos.</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-4.jpg" alt="" width="665" height="608" /></p>
<p>Terminado de desenhar onde o ALV será mostrado, é necessário programar o PBO e PAI da screen. Para isso entre na tab Flow Logic, descomente a linha MODULE STATUS_0100, dê um duplo clique na palavra STATUS_0100 e confirme a criação do novo includ. É importante escolher um bom nome para o include, pois todos os MODULES serão escritos nele.</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-6.jpg" alt="" /></p>
<p>Confirme a inclusão da instrução INCLUDE no programa princial:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-7.jpg" alt="" /></p>
<p>No MODULE STATUS_0100, criar o comando SET PF-STATUS &#8216;PF0100&#8242;.</p>

<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;"><span style="color: #800080;">&lt;</span>span <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">style</span><span style="color: #800080;">=</span><span style="color: #808080; font-style: italic;">&quot;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;&quot;&gt;Dar um duplo clique no 'PF0100' para criar o GUI STATUS. Definir a descrição para o STATUS GUI como Normal Screen:&lt;/span&gt;</span></pre></div></div>

<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-8.jpg" alt="" /></div>
<p>Na criação do Status Gui, definir uma Function Key para o botão BACK:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-9.jpg" alt="" /></p>
<p>Também precisamo programas o PAI para o botão BACK. Para isso, descomentar  MODULE USER_COMMAND_0100 no flow logic da screen. Dar um duplo clique nesse comando, confirmar a criação de um novo MODULE no mesmo include criado para o module PBO:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-10.jpg" alt="" /></p>
<p>Inserir o seguinte código no MODULE USER_COMMAND_0100.</p>

<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;"><span style="color: #800080;">&lt;</span>span <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">style</span><span style="color: #800080;">=</span><span style="color: #808080; font-style: italic;">&quot;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;&quot;&gt;Ao final do passo 4, já podemos fazer a primeira ativação do nosso programa para verificar se tudo está correto.&lt;/span&gt;</span></pre></div></div>

<div><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/screen-11.jpg" alt="" /></div>
<p><strong>Passo 5:</strong> Criar os objetos para o ALV:</p>
<p>No PBO, criar a linha MODULE CREATE_ALV e dar um duplo clique para criar o MODULE. Escolher o mesmo include que já estamos usando para colocar os outros modules:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv1.jpg" alt="" /></p>
<p>Nesse module, será colocado os comandos para criação dos objetos para o grid:</p>

<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;"><span style="color: #800080;">&lt;</span>span <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">style</span><span style="color: #800080;">=</span><span style="color: #808080; font-style: italic;">&quot;font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;&quot;&gt;Agora você pode ativar o seu programa e testar.&lt;/span&gt;</span></pre></div></div>

<h3><span style="color: #0000ff;">Execução e Teste</span></h3>
<p>Para executar e testar o programa, apenas pressione F8 ou <img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv2.jpg" alt="" />:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2009/08/alv-grid1.jpg" alt="" /></p>
<h3><span style="color: #0000ff;"><strong>Discussão</strong></span></h3>
<p>A vantagem de se usar as classes dos Controls diretamente é que é possível total liberdade para contruir o seu programa da forma que você desejar. Certo que você também precisa se preocupar com todos os detalhes das telas, respostas do usuário etc., mas para atender a solicitações complexas dos usuários é sempre uma boa idéia saber &#8220;escovar um pouco de bits&#8221;.</p>
<p><strong>Control Frameworks</strong></p>
<p>As classes CL_GUI_CUSTOM_CONTAINER e CL_GUI_ALV_GRID fazem parte do Controls Frameworks. Esse framework fornece um conjunto de classes que são utilizados para mostrar dados para o usuário. Temos vários outros Controls, como Tree, HTML, Text Edit etc.</p>
<p>Todos esses controles possuem comportamentos e interações comuns, daí a classe CL_GUI_CUSTOM_CONTAINER. Essa classe fornece a base dos principais recursos para duplo clique, drag-drop etc.</p>
<p>Então temos uma tela e nessa tela definimo o tamanho do nosso grid, usando o screen painter. Nesse espaço será onde o grid será renderizado. Para isso, devemos criar o objeto container e associá-lo a essa área. É esse o papel do parâmetro &#8220;container_name&#8221;, onde associamos o nome &#8220;CONTAINER1&#8243;, definido no screen painter.</p>
<p>Após isso, associamos o objeto grid ao container, usando o parâmetro &#8220;i_parent&#8221; passando a referência do objeto grid. Com isso, temos toda a estrutura montada para o nosso ALV.</p>
<p><strong>Mostrando o ALV </strong></p>
<p>Após toda a estrutura montada, precisamos chamar o método responsável<br />
por apresentar o ALV na tela, SET_TABLE_FOR_FIRST_DISPLAY. É nesse<br />
método que passamos os principais componentes que impactarão a<br />
renderização do grid na tela.</p>
<p>Nesse exemplo muito simples, somente utilizamos o básico, &#8220;i_structure_name&#8221;, para passar a estrutura do grid e &#8220;it_outtab&#8221; que contém os dados do grid.</p>
<p>Em exemplos futuros vou mostrar os outros parâmetros e como eles impactam no grid.</p>
<h3><span style="color: #0000ff;">Anexos</span></h3>
<p><a href="http://abap101.com/wp-content/uploads/2009/08/NUGG_ZPURE_ALV_SIMPLE.nugg_.txt">NUGG_ZPURE_ALV_SIMPLE.nugg</a></p>
<h3><span style="color: #0000ff;">Veja Também</span></h3>
<p><span><a href="http://abap101.com/2008/10/20/exemplos-alv">ABAP Control Exemples</a></span><br />
<a href="http://help.sap.com/saphelp_nw2004s/helpdata/en/bf/3bd1369f2d280ee10000009b38f889/frameset.htm">ALV at SAP Help</a><br />
<a href="http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/">Introdução ao ALV &#8211; Série Especial</a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=fb47bac6-1e5a-88a0-8f8e-a13c06401a4d" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao ALV &#8211; Série Especial</title>
		<link>http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/</link>
		<comments>http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 01:53:00 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ALV]]></category>
		<category><![CDATA[Receita ABAP]]></category>
		<category><![CDATA[cl_gui_alv_grid]]></category>
		<category><![CDATA[cl_salv_table]]></category>
		<category><![CDATA[reuse]]></category>
		<category><![CDATA[salv]]></category>

		<guid isPermaLink="false">http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/</guid>
		<description><![CDATA[No decorrer dos anos a SAP vem evoluindo em vários sentidos. Vem aumentando a sua experiência na área de negócios, application server e também na parte visual. Nesse sentido, ela evoluiu da tela verde dos terminais mainframe do R/2 para as listas (usando comandos WRITE), passando pelo ALV e agora pelo WebDynpro (WD). O WebDynpro [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;count=horizontal&amp;text=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;count=horizontal&amp;text=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;linkname=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;linkname=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;linkname=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F08%2F19%2Fintroducao-ao-alv-serie-especial-2%2F&amp;title=Introdu%C3%A7%C3%A3o%20ao%20ALV%20%26%238211%3B%20S%C3%A9rie%20Especial" id="wpa2a_18"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>No decorrer dos anos a SAP vem evoluindo em vários sentidos. Vem aumentando a sua experiência na área de negócios, application server e também na parte visual.</p>
<p>Nesse sentido, ela evoluiu da tela verde dos terminais mainframe do R/2 para as listas (usando comandos WRITE), passando pelo ALV e agora pelo WebDynpro (WD).</p>
<p>O WebDynpro é a evolução natural para os browsers, levando a camada de apresentação para os browsers, saindo de cena o famoso Sapgui.</p>
<p>No entando, WD ainda tem muito chão para substituir por completo o Sapgui. Ainda há uma infinidade de programas que precisam ser migrados e isso levará muito tempo.</p>
<p>Enquanto isso, os programas baseados em dynpros (telas) tradicionais ainda ocuparão boa parte do seu tempo programando em ABAP. Por isso, apresento uma série de posts sobre ALV e como programar usando essa tecnologia.<br /><span id="more-244"></span></p>
<p>ALV significa ABAP List Viewer. Como o próprio nome diz, é um gerado de listas, onde os dados são apresentados na seguinte forma:</p>
<p><img style="max-width: 800px;" src="http://wp3.abap101.com/wp-content/uploads/2010/02/zsalv-alv-simple.jpg" height="350" width="699" /></p>
<p>Os dados são apresentados de forma tabular, como uma planilha Excel.</p>
<p>O ALV faz parte de um framework da SAP chamado Control Framework. Nele encontramos uma série de elementos visuais que podemos usar em nossos programas. A idéia aqui é ter uma clara separação da parte visual da parte de negócio. Ou seja, o programador precisa se preocupar com as regras de negócio, como seleção de dados, tratamento de dados etc., e o Control Framework é responsável pela apresentação dos dados.</p>
<p>Perceba que nesse ALV acima temos uma série de botões que já vieram pré-definidos. Nesses botões encontramos funções como ordenação, sumarização, busca, exportação etc. Tudo já está pronto, testado e aprovado. É só saber usar.</p>
<p>A mesma coisa para as colunas com os dados. Somente precisamos informar o conteúdo. O ALV faz o resto, como controlar layout, largura de colunas, ordem das colunas etc. É realmente muito interessante, tanto do ponto de vista de programação quanto para o usuário, que recebe um produto final com ótima usabilidade (já que seu funcionamento é muito parecido com o Excel) e muito bonito.</p>
<p>Podemos encontrar vários outros tipos de Controls. Para uma boa lista, você pode acessar vários exemplos da própria SE80 (ABAP Workbench).</p>
<p><b>Formas de Implementar ALV</b></p>
<p>O ALV é entregue pela SAP através de uma classe global, chamada CL_GUI_ALV_GRID e basicamente temos 3 formas de se implementar essa classe.</p>
<p>A primeira e mais conhecida é usando a function module REUSE_ALV_LIST_DISPLAY e seus vários outros serviços do package SLIS. A SAP encapsulou a implementação da classe CL_GUI_ALV_GRID nessa FM, tornando o trabalho do programador muito simples.</p>
<p>Atualmente, a SAP entrega uma série de outras classes, que fazem parte do pacote SALV, que fazem um serviço similar ao feito pela FM, mas usando chamadas de métodos.</p>
<p>E por último, vem a forma que eu chamo de “pura”, pois não usamos nenhuma classe ou FM para chamar a classe do ALV, mas sim a chamamos diretamente. A princípio dá mais trabalho, mas isso nos dá total controle sobre a nossa aplicação.</p>
<p><b>Quando Usar Cada Implementação</b></p>
<p>Depende. Se for necessário fazer uma aplicação com varios controles na tela, interagindo entre si, com drag-drop, eventos etc., sugiro usar a forma pura.</p>
<p>Agora, se a intenção é apenas um relatório simples a FM e principalmente as classes SALV são as mais aconselhadas, pois você não precisa se preocupar com uma série de coisas que a forma pura precisa fazer.<br /><b><br />Próximos Capítulos</b></p>
<p>Nos próximos posts, vou mostrar várias formas de implementar programas usando ALV. Vou começar pela forma pura, depois passo para o uso das classes SALV e por último exemplos usando as FM REUSE.</p>
<p>Usarei o formato de receita de Receita ABAP, onde mostrarei 3 tipos de problemas, usando as 3 diferentes técnias.</p>
<p>Após essa série de posts, posso afirmar que teremos um conjunto de receitas ABAP, que cubrirão cerca de 70-80% dos problemas de ALV.</p>
<p><b>Progresso</b></p>
<p>Você pode seguir o progresso dos posts, acompanhando os links abaixo, onde eu coloquei as técnicas e os três tipos de problemas.</p>
<p><b>ALV Puro:</b></p>
<ul>
<li><a href="http://abap101.com/2009/08/21/alv-simples-usando-a-tecnica-pura/">Programa simples usando ALV</a></li>
<li><a href="http://abap101.com/2009/08/23/alv-com-field-catalog-usando-a-tecnica-pura-2/">Uso do field catalog</a></li>
<li><a href="http://abap101.com/2009/08/26/alv-com-evento-usando-a-tecnica-pura/">Uso de eventos</a></li>
</ul>
<p><b>SALV</b></p>
<ul>
<li><a href="http://abap101.com/2010/02/12/alv-simples-usando-a-classe-cl_salv_table/">Programa simples usando SALV</a></li>
<li>Uso do field catalog</li>
<li>Uso de eventos</li>
</ul>
<p><b>REUSE</b></p>
<ul>
<li>Programa simples usando ALV</li>
<li>Uso do field catalog</li>
<li>Uso de eventos</li>
</ul>
<p><i><br />UPDATE: Por alguma razão, eu apaguei esse post e perdi os comentários. Esse texto foi recuperado do cache do Google.</i></p>
<p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=8b9e91df-791e-8069-ab17-fe23ab589769" /></div>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/08/19/introducao-ao-alv-serie-especial-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como seria a minha solução para o desavio do ALV Duplo</title>
		<link>http://abap101.com/2009/02/25/como-seria-a-minha-solucao-para-o-desavio-do-alv-duplo/</link>
		<comments>http://abap101.com/2009/02/25/como-seria-a-minha-solucao-para-o-desavio-do-alv-duplo/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 12:45:49 +0000</pubDate>
		<dc:creator>Flávio Furlan</dc:creator>
				<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ABAP Objects]]></category>
		<category><![CDATA[ALV]]></category>

		<guid isPermaLink="false">http://abap101.com/?p=124</guid>
		<description><![CDATA[Nesse post eu mostrei como um dos meus alunos resolveu o desafio do ALV Duplo. Atendendo a pedidos, eis a minha solução. zbc401_00_alv2 zbc401_00_alv2_inc zbc401_00_alv2_event   ABAP101 &#8211; ALV Duplo &#8211; Solução Flávio Furlan from Flavio Furlan on Vimeo.]]></description>
			<content:encoded><![CDATA[<p><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service facebook_like" src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;layout=button_count&amp;show_faces=false&amp;width=75&amp;action=like&amp;colorscheme=light&amp;height=20&amp;ref=addtoany" scrolling="no" style="border:none;overflow:hidden;width:90px;height:21px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;count=horizontal&amp;text=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service twitter_tweet" src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;counturl=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;count=horizontal&amp;text=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" scrolling="no" style="border:none;overflow:hidden;width:130px;height:20px"></iframe><!--<![endif]--><!--[if IE]><iframe frameborder="0" allowTransparency="true" class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><![endif]--><!--[if !IE]><!--><iframe class="addtoany_special_service google_plusone" src="https://plusone.google.com/u/0/_/%2B1/fastbutton?url=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;size=medium&amp;count=true" scrolling="no" style="border:none;overflow:hidden;width:90px;height:20px"></iframe><!--<![endif]--><a class="a2a_button_google_gmail" href="http://www.addtoany.com/add_to/google_gmail?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;linkname=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" title="Google Gmail" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/gmail.png" width="16" height="16" alt="Google Gmail"/></a><a class="a2a_button_wordpress" href="http://www.addtoany.com/add_to/wordpress?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;linkname=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" title="WordPress" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/wordpress.png" width="16" height="16" alt="WordPress"/></a><a class="a2a_button_blogger_post" href="http://www.addtoany.com/add_to/blogger_post?linkurl=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;linkname=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" title="Blogger Post" rel="nofollow" target="_blank"><img src="http://abap101.com/wp-content/plugins/add-to-any/icons/blogger.png" width="16" height="16" alt="Blogger Post"/></a><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fabap101.com%2F2009%2F02%2F25%2Fcomo-seria-a-minha-solucao-para-o-desavio-do-alv-duplo%2F&amp;title=Como%20seria%20a%20minha%20solu%C3%A7%C3%A3o%20para%20o%20desavio%20do%20ALV%20Duplo" id="wpa2a_20"><img src="http://abap101.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share"/></a></p><p>Nesse post eu mostrei como um dos meus alunos resolveu o desafio do ALV Duplo. Atendendo a pedidos, eis a minha solução.</p>
<p><a href="http://wp3.abap101.com/wp-content/uploads/2009/02/zbc401_00_alv2.txt"><span id="more-124"></span>zbc401_00_alv2</a></p>
<p><a href="http://wp3.abap101.com/wp-content/uploads/2009/02/zbc401_00_alv2.txt"></a><a href="http://wp3.abap101.com/wp-content/uploads/2009/02/zbc401_00_alv2_inc.txt">zbc401_00_alv2_inc</a></p>
<p><a href="http://wp3.abap101.com/wp-content/uploads/2009/02/zbc401_00_alv2_event.txt">zbc401_00_alv2_event</a></p>
<p> <br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="283" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=3349246&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="500" height="283" src="http://vimeo.com/moogaloop.swf?clip_id=3349246&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://vimeo.com/3349246">ABAP101 &#8211; ALV Duplo &#8211; Solução Flávio Furlan</a> from <a href="http://vimeo.com/user790822">Flavio Furlan</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://abap101.com/2009/02/25/como-seria-a-minha-solucao-para-o-desavio-do-alv-duplo/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

