<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4957148266609676762</id><updated>2012-02-16T07:31:46.112-08:00</updated><category term='naming conventions'/><category term='ALV'/><category term='tests'/><category term='best blogs'/><category term='golden rules'/><category term='troubleshoots'/><category term='ABAP Objects'/><title type='text'>My ABAP life</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-5225976976528426791</id><published>2009-12-12T06:51:00.001-08:00</published><updated>2009-12-12T06:51:53.698-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best blogs'/><title type='text'>Blag's best blogs picks from 2009</title><content type='html'>&lt;table border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="65"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg" alt="Alvaro Tejada Galindo" height="85" width="65" /&gt;  &lt;/td&gt; &lt;td align="left" valign="top" width="100%"&gt; &lt;h3&gt;Blag's best blogs picks from 2009&lt;br /&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;Biz Partner&lt;br /&gt;Posted on Dec. 11, 2009 12:12 PM in &lt;!-- Category: 29 --&gt;&lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 59 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/59"&gt;Perl&lt;/a&gt;&lt;!-- Category: 58 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/58"&gt;PHP&lt;/a&gt;&lt;!-- Category: 60 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/60"&gt;Python&lt;/a&gt;&lt;!-- Category: 67 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/67"&gt;Ranting&lt;/a&gt;&lt;!-- Category: 57 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/57"&gt;Ruby&lt;/a&gt;&lt;!-- Category: 19 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/19"&gt;SAP Developer Network&lt;/a&gt;&lt;!-- Category: 9 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/9"&gt;SAP NetWeaver Platform&lt;/a&gt;&lt;!-- Category: 27 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/27"&gt;SAP TechEd&lt;/a&gt;&lt;!-- Category: 47 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/47"&gt;Scripting Languages&lt;/a&gt;&lt;!-- Category: 52 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/52"&gt;Standards&lt;/a&gt;&lt;!-- Category: 84 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/84"&gt;Virtual Worlds and 3D Web&lt;/a&gt;&lt;!-- Category: 48 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/48"&gt;Visual Composer&lt;/a&gt;&lt;!-- Category: 43 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/43"&gt;Web Dynpro&lt;/a&gt;&lt;!-- Category: 102 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/102"&gt;Open Source&lt;/a&gt;&lt;!-- Category: 15 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/15"&gt;Mobile&lt;/a&gt;&lt;!-- Category: 35 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/35"&gt;Java Programming&lt;/a&gt;&lt;!-- Category: 12 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/12"&gt;Application Server&lt;/a&gt;&lt;!-- Category: 46 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/46"&gt;Beginner&lt;/a&gt;&lt;!-- Category: 30 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/30"&gt;Beyond SAP&lt;/a&gt;&lt;!-- Category: 11 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/11"&gt;Business Intelligence (BI)&lt;/a&gt;&lt;!-- Category: 91 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/91"&gt;Business Objects&lt;/a&gt;&lt;!-- Category: 49 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/49"&gt;Business Process Expert&lt;/a&gt;&lt;!-- Category: 24 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/24"&gt;Business Server Pages&lt;/a&gt;&lt;!-- Category: 127 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/127"&gt;Code Exchange&lt;/a&gt;&lt;!-- Category: 55 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/55"&gt;Community Day&lt;/a&gt;&lt;!-- Category: 101 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/101"&gt;Community Projects&lt;/a&gt;&lt;!-- Category: 41 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/41"&gt;Composition Environment (CE)&lt;/a&gt;&lt;!-- Category: 21 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/21"&gt;Emerging Technologies&lt;/a&gt;&lt;!-- Category: 22 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/22"&gt;Enterprise Portal (EP)&lt;/a&gt;&lt;!-- Category: 63 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/63"&gt;Widgets&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/17095" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/17095';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/17095" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/17095';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;       &lt;p&gt;First...please keep in mind that choosing the best from the whole 2009 year was a very consuming and hard job...so if I pass any great blog, please bear with me -:)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;ABAP:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/13121" target="_blank"&gt;Another way to create Excel output&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VqbhN9wVRJ4%3D" target="_blank"&gt;Michael Nicholls&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/13088" target="_blank"&gt;ABAP Join Wizard is here!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=V7pqcTeyjZeoanY8pMsM0A%3D%3D" target="_blank"&gt;Leonardo De Araujo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15408" target="_blank"&gt;Basic ABAP OO eLearnings&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ranting:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/12930" target="_blank"&gt;Don't tell me I am OBSOLETE - it hurts!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12837" target="_blank"&gt;Tale of an SAP addict...&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/10415" target="_blank"&gt;Just a developer?!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=XOb%2FeDcTiAVNbm8mmAl4Aw%3D%3D" target="_blank"&gt;Michelle Crapo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15556" target="_blank"&gt;Don't You Step On My...&lt;/a&gt; -  &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14227" target="_blank"&gt;The Fine Art of Balance&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=zcC6OJVd7Gk%3D" target="_blank"&gt;Graham Robinson&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;WebDynpro:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/13014" target="_blank"&gt;A story about Twitter, XML and WD4A&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=gscfhmFbB2Y%3D" target="_blank"&gt;Uwe Fetzer&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/13069" target="_blank"&gt;SAP Flash Island and Google Maps&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Np1FdJM%2FyjQ%3D" target="_blank"&gt;Mogens Enevoldsen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14258" target="_blank"&gt;Navigating in Web Dynpro in a smart way&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0c0DlQ86TYjDtO%2BYiRUgxw%3D%3D" target="_blank"&gt;Stefan Bungert&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16399" target="_blank"&gt;Wave, Web Dynpro, and the Magic Glue: Google Wave and Web Dynpro Integration Part 1&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12935" target="_blank"&gt;Make phone calls from SAP applications with Flash Islands and Ribbit&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=qw5hr%2FNPHhE%3D" target="_blank"&gt;Mrinal Wadhwa&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Day: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/5237" target="_blank"&gt;SAP Inside Track London 2009&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=92Lv8G2jFRU%3D" target="_blank"&gt;Nigel James&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/13514" target="_blank"&gt;The Community Day Brazil 2009 in a nutshell&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14965" target="_blank"&gt;SAP Inside Track Lima 2009 - The Recap&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15557" target="_blank"&gt;SAP Inside Track Sao Paulo - An amazing experience!!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=V7pqcTeyjZeoanY8pMsM0A%3D%3D" target="_blank"&gt;Leonardo De Araujo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13862" target="_blank"&gt;SAPInsideTrack London: My notes&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=9FtsUT%2FHq%2F0%3D" target="_blank"&gt;Somnath Manna&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Composition Environment:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14029" target="_blank"&gt;ABAPers, Should You Jump the CE train?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13006" target="_blank"&gt;SOAP with Attachments made easy with CE&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=JRv%2F%2Fd7VAXw%3D" target="_blank"&gt;Werner Steyn&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13707" target="_blank"&gt;Using Amazon EC2 for testing CE Trial Part 1&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J%2BrvmxDK7BA%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14928" target="_blank"&gt;an ABAPer's journey to Netweaver CE&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=QjDxmFvlVUpIloK2RBI2FQ%3D%3D" target="_blank"&gt;Michael Koch&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ruby:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14222" target="_blank"&gt;Tasting the mix of Blue Ruby&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14247" target="_blank"&gt;How to build a SE16 Emulator in Blue Ruby&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=x7O%2BjqTGVuQ%3D" target="_blank"&gt;Juergen Schmerder&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beyond SAP:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/wlg/14973" target="_blank"&gt;Agile SAP: Mission Impossible?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=8NpV7m4g7rc%3D" target="_blank"&gt;tbroek&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16166" target="_blank"&gt;Twitter + SAP Community + TechEd + Folks to Follow&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13380" target="_blank"&gt;SAP Mentor Monday: Anne Katherine Petterøe stopped Facebook TOS change&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13678" target="_blank"&gt;Ada Lovelace Day and the SAP Community Network&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15968" target="_blank"&gt;Think like an SAP Mentor: 3 Exercises how to become an SAP Top Technical Specialist in 7 Days&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=a2W5xJKKHuWj6dlF7kmDbg%3D%3D" target="_blank"&gt;Tobias Trapp&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16837" target="_blank"&gt;Yowie surfing the Wave&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=wG1x8v65E18%3D" target="_blank"&gt;Dr. Marek Kowalkiewicz&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Standards:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304" target="_blank"&gt;Nomen est Omen - ABAP Naming Conventions&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=fqZQPJtHazdyRQuvGSiXOQ%3D%3D" target="_blank"&gt;Uwe Schieferstein&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16380" target="_blank"&gt;Official ABAP Programming Guidelines&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=rA9X6D5Vcqw%3D" target="_blank"&gt;Horst Keller&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP TechEd:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16347" target="_blank"&gt;SAP TechEd Phoenix 2009 - My blogging review&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16339" target="_blank"&gt;Closing the Loop for BPXSlam09 Phoenix&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=mu%2FG7SiLO7c%3D" target="_blank"&gt;Greg Chase&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16333" target="_blank"&gt;#sapteched09 Phoenix - my personal highlights selection&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=x7O%2BjqTGVuQ%3D" target="_blank"&gt;Juergen Schmerder&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16330" target="_blank"&gt;My #sapteched09 in Phoenix&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J%2BrvmxDK7BA%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16525" target="_blank"&gt;Comparing Teched 09 in Phoenix with Vienna&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J%2BrvmxDK7BA%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16474" target="_blank"&gt;The BPX Process Design Slam 2009&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=8NpV7m4g7rc%3D" target="_blank"&gt;tbroek&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Application Server:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13916" target="_blank"&gt;Indexes lose weight, but is that the answer?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14095" target="_blank"&gt;Cloud Computing at SAP&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=SIg8JC5HlxI%3D" target="_blank"&gt;Frank Stienhans&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16014" target="_blank"&gt;REST-orientation: Controlling access to resources&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=tdVWxfol2mk%3D" target="_blank"&gt;DJ Adams&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14988" target="_blank"&gt;Python and SAP Adventures&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VIc05mpiG9p14NdajQAuFw%3D%3D" target="_blank"&gt;David Hull&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beginner:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12771" target="_blank"&gt;A Freshers Guide to ABAP and SDN&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=IsE5FU7hURg%3D" target="_blank"&gt;kartik tarla&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14755" target="_blank"&gt;Blogging in the SAP Community Network 101&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=b87H5EOXZ38%3D" target="_blank"&gt;Natascha Schuberth&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15063" target="_blank"&gt;Getting Started on Twitter&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Ij3Jnvr4JMs%3D" target="_blank"&gt;Chip Rodgers&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Process Expert:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13236" target="_blank"&gt;Why twitter is not (yet?) all that valuable for BPXers ( and others)&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=b6mSBPi8QdI%3D" target="_blank"&gt;Marco ten Vaanholt&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12958" target="_blank"&gt;So What Does it Take to Become an SAP Business Process Expert?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=xTZZ1C9w5T4%3D" target="_blank"&gt;Jon Reed&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16528" target="_blank"&gt;BPM in Ten Years? My Best Shot&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Sustainability:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13718" target="_blank"&gt;An hour a month, an hour a week, etc.&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13352" target="_blank"&gt;Sustainability @ SAP&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ylEWesbe7EA%3D" target="_blank"&gt;Peter Graf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15440" target="_blank"&gt;Green the Hard Way&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=zt%2FqfCTKR0en0dE7KVO3og%3D%3D" target="_blank"&gt;Christine Puccio&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP Developer Network:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14351" target="_blank"&gt;Assemble Your Tribe - Community Building in the 21st Century&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15583" target="_blank"&gt;Stop Thief - It's #blogtheft!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12995" target="_blank"&gt;SAP Mentor Highlights 2008&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15824" target="_blank"&gt;SAP Community Bio: Your Connection Between SCN and LinkedIn&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=n8kUbIDmCKo%3D" target="_blank"&gt;Scott Lawley&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Enterprise Service Community:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15521" target="_blank"&gt;SAP Enterprise Service and Google Wave&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J%2BrvmxDK7BA%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Emerging Technologies:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15547" target="_blank"&gt;Composition in the Cloud: Run your own SAP NetWeaver CE 7.1 EHP 1 in the cloud (Part 1 of 3)&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FqRXbQSPhnDWyeaOV5QEDA%3D%3D" target="_blank"&gt;Thorsten Franz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15371" target="_blank"&gt;Introducing SAP Suggest &lt;/a&gt;- &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=N0vnq8wC9Xw%3D" target="_blank"&gt;Sergio Cipolla&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16527" target="_blank"&gt;Agile Is A Journey&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=QjDxmFvlVUpIloK2RBI2FQ%3D%3D" target="_blank"&gt;Michael Koch&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Intelligence:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14359" target="_blank"&gt;SAP BW Indexing Scheme (ORACLE)&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=zC8hTy1QqOW8RNMx1M0%2B6A%3D%3D" target="_blank"&gt;Debanshu Mukherjee&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14644" target="_blank"&gt;Xcelsius and SAP BI - How to pass variable value using Web Service Connection&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=81ANsR%2BEq1k%3D" target="_blank"&gt;Anil Bavaraju &lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Objects:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13262" target="_blank"&gt;Get a peek at the hottest product at SAP BusinessObjects&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=pMLSchUPF6I%3D" target="_blank"&gt;Robert Horne&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13428" target="_blank"&gt;Maps in Business Objects Polestar&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=saM3xuUVT58%3D" target="_blank"&gt;Oliver Mainka&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Service-Oriented Architecture:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13096" target="_blank"&gt;The Future of SOA&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ZBlwTSOjQXU%3D" target="_blank"&gt;Vishal Sikka&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13278" target="_blank"&gt;8 SOA mistakes architects should avoid&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=qC1DAdrArhg%3D" target="_blank"&gt;Bernhard Escherich&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15618" target="_blank"&gt;Gravity – Collaborative Business Process Modelling within Google Wave&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=mIsRzW3d%2F8s%3D" target="_blank"&gt;Alexander Dreiling&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Virtual Worlds and 3D Web:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14079" target="_blank"&gt;SAP Education Virtual Learning Symposium 2009 - My thoughts&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Server Pages:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13419" target="_blank"&gt;Ajax in BSP&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=%2Fld3Q01v1xGI31RMGSW22g%3D%3D" target="_blank"&gt;Shashank Kapoor&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13129" target="_blank"&gt;Parameter handling with a HTMLB Link&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=EItyarcUEx3PfOejRJQNVg%3D%3D" target="_blank"&gt;Denis Schrodt&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Projects:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14819" target="_blank"&gt;Rate this!&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=IxQ4wBE1MZM%3D" target="_blank"&gt;Maya Bahar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15251" target="_blank"&gt;SDN Homepage for Mobile Devices (Beta)&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=9rhRkQO03ZMQfY%2BMPH65%2BQ%3D%3D" target="_blank"&gt;Jason Lax&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15460" target="_blank"&gt;SCNotties&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15037" target="_blank"&gt;We are open for OpenID! &lt;/a&gt;- &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=IxQ4wBE1MZM%3D" target="_blank"&gt;Maya Bahar&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Enterprise Portal:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15108" target="_blank"&gt;Using YubiKey OTP to secure your Portal&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=X9DIo70DyvdCAAskwtWrgQ%3D%3D" target="_blank"&gt;Simon Kemp&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15379" target="_blank"&gt;Tool to simplify PCD object creation&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VqbhN9wVRJ4%3D" target="_blank"&gt;Michael Nicholls&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Java Programming:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12786" target="_blank"&gt;Using Apache XSL:FO with WebDynpro to generate PDF Documents&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=GrUq8ZsVx0gjp2vrbjVsxQ%3D%3D" target="_blank"&gt;Santosh Raghavan&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14156" target="_blank"&gt;And what's the direction with Java NOW?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=bRb0XMnyebg%3D" target="_blank"&gt;Benny Schaich-Lebek&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14752" target="_blank"&gt;Do-it-yourself ALV: Customizable tables in Web Dynpro for Java&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=v%2FERSUNsMEu6y46QFS8dzw%3D%3D" target="_blank"&gt;Dimitri Lubenski&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16648" target="_blank"&gt;Freedom for Java&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ZBlwTSOjQXU%3D" target="_blank"&gt;Vishal Sikka&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mobile:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12729" target="_blank"&gt;Online Purchase request (PR) Approval Application Using Blackberry&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ft3tTAGwwUk%3D" target="_blank"&gt;Sunil Manjunath&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13039" target="_blank"&gt;SAP CRM on iPhone with “Ajax weaver”&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5MbW%2BDBWNRY%3D" target="_blank"&gt;Pakdi Decnud&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16320" target="_blank"&gt;SAP Mentors : Now on your Windows Mobile&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Open Source: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14775" target="_blank"&gt;Why Solaris for SAP?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=zt%2FqfCTKR0en0dE7KVO3og%3D%3D" target="_blank"&gt;Christine Puccio&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16291" target="_blank"&gt;Making Web Dynpro Open Source? What features of Open Source?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=tor7TyjRhk0%3D" target="_blank"&gt;Puru Govind&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Scripting Languages:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14926" target="_blank"&gt;SAP PI XML Mappings using groovy&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J%2BrvmxDK7BA%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Visual Composer:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15771" target="_blank"&gt;Flash Components for Visual Composer 7.0 - Flexibility is the name of the game&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=U3JgcwRR6Gc%3D" target="_blank"&gt;Amir Mimran&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Widgets:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16324" target="_blank"&gt;Bring the Business Suite to your Desktop -- Try XBCML Widgets Today&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FflFVsNfXLQ%3D" target="_blank"&gt;Moya Watson&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Code Exchange:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16677" target="_blank"&gt;New developer licenses for NetWeaver on the horizon&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=y%2FlnOF0w%2FiY%3D" target="_blank"&gt;Mario Herger&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Careers:&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/13888" target="_blank"&gt;What is your title?&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Sfunl3f3bfnC3cCuBDKVoA%3D%3D" target="_blank"&gt;Vijay Vijayasankar&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12361" target="_blank"&gt;The importance of being trained...&lt;/a&gt; - &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=rLYzvvZsvVE%3D" target="_blank"&gt;Julius Bussche&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;      &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt; is an Project Manager, Senior ABAP Consultant, Scripting Languages Geek, Programming books author, Geek Comics author and SAP Mentor.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-5225976976528426791?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/5225976976528426791/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=5225976976528426791' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/5225976976528426791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/5225976976528426791'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/12/blags-best-blogs-picks-from-2009_12.html' title='Blag&apos;s best blogs picks from 2009'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-1289315307948555556</id><published>2009-12-12T06:50:00.002-08:00</published><updated>2009-12-12T06:51:15.067-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best blogs'/><title type='text'>Blag's best blogs picks from 2008</title><content type='html'>&lt;table border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="65"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg" alt="Alvaro Tejada Galindo" height="85" width="65" /&gt;  &lt;/td&gt; &lt;td align="left" valign="top" width="100%"&gt; &lt;h3&gt;Blag's best blogs picks from 2008&lt;br /&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;Biz Partner&lt;br /&gt;Posted on Dec. 16, 2008 02:41 PM in &lt;!-- Category: 29 --&gt;&lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 102 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/102"&gt;Open Source&lt;/a&gt;&lt;!-- Category: 58 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/58"&gt;PHP&lt;/a&gt;&lt;!-- Category: 67 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/67"&gt;Ranting&lt;/a&gt;&lt;!-- Category: 57 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/57"&gt;Ruby&lt;/a&gt;&lt;!-- Category: 19 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/19"&gt;SAP Developer Network&lt;/a&gt;&lt;!-- Category: 9 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/9"&gt;SAP NetWeaver Platform&lt;/a&gt;&lt;!-- Category: 27 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/27"&gt;SAP TechEd&lt;/a&gt;&lt;!-- Category: 47 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/47"&gt;Scripting Languages&lt;/a&gt;&lt;!-- Category: 84 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/84"&gt;Virtual Worlds and 3D Web&lt;/a&gt;&lt;!-- Category: 48 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/48"&gt;Visual Composer&lt;/a&gt;&lt;!-- Category: 43 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/43"&gt;Web Dynpro&lt;/a&gt;&lt;!-- Category: 15 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/15"&gt;Mobile&lt;/a&gt;&lt;!-- Category: 35 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/35"&gt;Java Programming&lt;/a&gt;&lt;!-- Category: 12 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/12"&gt;Application Server&lt;/a&gt;&lt;!-- Category: 46 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/46"&gt;Beginner&lt;/a&gt;&lt;!-- Category: 30 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/30"&gt;Beyond SAP&lt;/a&gt;&lt;!-- Category: 11 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/11"&gt;Business Intelligence (BI)&lt;/a&gt;&lt;!-- Category: 49 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/49"&gt;Business Process Expert&lt;/a&gt;&lt;!-- Category: 24 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/24"&gt;Business Server Pages&lt;/a&gt;&lt;!-- Category: 55 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/55"&gt;Community Day&lt;/a&gt;&lt;!-- Category: 101 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/101"&gt;Community Projects&lt;/a&gt;&lt;!-- Category: 41 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/41"&gt;Composition Environment (CE)&lt;/a&gt;&lt;!-- Category: 21 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/21"&gt;Emerging Technologies&lt;/a&gt;&lt;!-- Category: 22 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/22"&gt;Enterprise Portal (EP)&lt;/a&gt;&lt;!-- Category: 63 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/63"&gt;Widgets&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12475" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12475';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12475" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12475';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;       &lt;p&gt;Just like last year &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090" target="_blank"&gt;Blag's best blogs picks from 2007&lt;/a&gt;, this year I want to put the list of my favorite blogs of 2008.&lt;/p&gt;&lt;p&gt;To my hapiness, this years list is amazinly big...A lot of nice blog had been writen, so I want to say "Congratulations SCN...Great year!" -:)&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;ABAP&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8676" target="_blank"&gt;SDN Blog Browser&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro "Blag" Tejada Galindo &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9511" target="_blank"&gt;ABAP Interpreter / Translator to Java – Open Source ABAP Parser&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=jTpG1p9%2BS1e7gaH1FDgcVw%3D%3D" target="_blank"&gt;Felix Jeyareuben&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10053" target="_blank"&gt;Web Dynpro: Running Web Dynpro Applications over SAPGUI&lt;/a&gt; by &lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8277" target="_blank"&gt;David Fernandes Pietroniro&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8277" target="_blank"&gt;A Tool to Compare Runtime Measurements: Z_SE30_COMPARE&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=GYc4g43yG2I%3D" target="_blank"&gt;Siegfried Boes&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10862" target="_blank"&gt;ABAP Objects Wiki pages +10k Page Visits&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12187" target="_blank"&gt;Power of ABAP Objects: Overcome the Restrictions of SALV Model&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f3JitnSd%2BmQ%3D" target="_blank"&gt;Naimesh Patel&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;WebDynpro&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8681" target="_blank"&gt;Web Dynpro ABAP exercises from TechEd 2007&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=bVrtyDzwDpM%3D" target="_blank"&gt;Manfred Lutz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10552" target="_blank"&gt;Web Dynpro ABAP: How Fast Can You Consume 1 Million Rows?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8402" target="_blank"&gt;Practical tips for developing with ABAP WebDynpro&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=ghc9xSbZOpo%3D" target="_blank"&gt;Roger Sainsbury&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11569" target="_blank"&gt;Using Flex in SAP Web applications (without Adobe Flash Islands)&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=OlaeOfOs6Bw%3D" target="_blank"&gt;Guillaume Garcia&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mobile&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8797" target="_blank"&gt;Mobile Webdynpro(Accessing Webdynpro Applications in Mobile Devices)&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=U0KObOv8J8A%3D" target="_blank"&gt;Sathishkumar GS&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9140" target="_blank"&gt;First steps with NW Mobile 7.1 Trial Version&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=jgncwgKcMDw%3D" target="_blank"&gt;Jan Fetzer&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9556" target="_blank"&gt;Native integration of SAP CRM on BlackBerry Devices&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=fb3kGorrIyAxIKfPH75wbg%3D%3D" target="_blank"&gt;Gregor Wolf&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9597" target="_blank"&gt;Mobile Influence update - sneak peak of Ajax app&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Server Pages&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8959" target="_blank"&gt;ABAP Freak Show - jQuery for BSP&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10408" target="_blank"&gt;CHAT Application using BSP and AJAX&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=HJPgN6ot87A%3D" target="_blank"&gt;Salil Patel&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10503" target="_blank"&gt;Display Hierarchy Report in BSP using TableView and Tableview Iterator&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=RLKDRfFwGBI%3D" target="_blank"&gt;Vijay Babu Dudla &lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Emerging Technologies&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8510" target="_blank"&gt;Twitter and the Enterprise&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8616" target="_blank"&gt;SAP, ANDROIDS and HEALTHCARE&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=g9JT96GEyuI%3D" target="_blank"&gt;Paolo Romano&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP NetWeaver Platform&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9507" target="_blank"&gt;Subscription program - From naysayer to yea-sayer&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f9nAYzX3pnM%3D" target="_blank"&gt;Harald Reiter&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8883" target="_blank"&gt;Poor performance: detective story for this week&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9361" target="_blank"&gt;[Oracle] Index key compression&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=FJ50jA%2BDWc0019pg9RHRnQ%3D%3D" target="_blank"&gt;Stefan Koehler&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9838" target="_blank"&gt;Downtime Manager&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=j5lSfQ0PvGk%3D" target="_blank"&gt;Sapna Subramaniam&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9129" target="_blank"&gt;PHP Connector? A New Hope&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=92Lv8G2jFRU%3D" target="_blank"&gt;Nigel James&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9204" target="_blank"&gt;Blag's Flex 3 Compiler&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro "Blag" Tejada Galindo&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Scripting Languages&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10436" target="_blank"&gt;Singleton Classes in Actionscript 3.0&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Virtual Worlds and 3D Web&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8519" target="_blank"&gt;BPX in Action Cartoon available&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=PCUWdFESp%2BElgnBu4p6e9A%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9953" target="_blank"&gt;Community Clubhouse on SmallWorlds&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro "Blag" Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10202" target="_blank"&gt;New Approaches to Virtual Worlds&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VhphsvhftQo%3D" target="_blank"&gt;Alexander Bachmann&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10200" target="_blank"&gt;Second Life and SAP Public Sector&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=VhphsvhftQo%3D" target="_blank"&gt;Alexander Bachmann&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Application Server&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9399" target="_blank"&gt;SAPmvc, a new MVC for Classical ABAP Dynpro&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8750" target="_blank"&gt;Yes, you should floss your indices regularly&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=UoX1prteXsEbNcWtF6UJ3A%3D%3D" target="_blank"&gt;Jim Spath&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beginner&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8555" target="_blank"&gt;Little tool for performance&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro "Blag" Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8415" target="_blank"&gt;How to use Workflow wizards?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=T6XNDe6ghrbnsP4v14vedw%3D%3D" target="_blank"&gt;Sunil Ojha&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/5432" target="_blank"&gt;Beginning Blogging &amp;amp; the WYSIWYG Editor&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=6v4SGATYtPg%3D" target="_blank"&gt;Gali Kling Schneider&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9496" target="_blank"&gt;Building a Wiki and your reputation&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=y%2FlnOF0w%2FiY%3D" target="_blank"&gt;Mario Herger&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beyond SAP&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9510" target="_blank"&gt;Marbles Game in ABAP&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f3JitnSd%2BmQ%3D" target="_blank"&gt;Naimesh Patel&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9668" target="_blank"&gt;Show us what you can do, Create your own open source project and share with SDN!&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9472" target="_blank"&gt;From The Grumpy Old Man: SAP employees confuse SCN with Twitter&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=hx194InQjj9I3UIPeJinQQ%3D%3D" target="_blank"&gt;Eddy De Clercq&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9766" target="_blank"&gt;BI BI Baby, BI BI&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=hx194InQjj9I3UIPeJinQQ%3D%3D" target="_blank"&gt;Eddy De Clercq&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11204" target="_blank"&gt;Easy search on SAP sites with Ubiquity&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=m1UL99iF00s8XVIopc8hjA%3D%3D" target="_blank"&gt;Daniel Graversen&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/11294" target="_blank"&gt;Why Social Networks Matter Now&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Intelligence (BI)&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8134" target="_blank"&gt;One stage stop to know all about BW Extractors-Part1&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=IhRifZZhczA%3D" target="_blank"&gt;swapna gollakota&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9688" target="_blank"&gt;BI Process Chains with Dynamic System Command&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G6mcoSfA5xCoanY8pMsM0A%3D%3D" target="_blank"&gt;Ryan Quackenboss&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Widgets&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10467" target="_blank"&gt;SAP TechEd 2008 Countdown&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8691" target="_blank"&gt;Working with SAP Widget Development Tools&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=HIrybQJXDP4%3D" target="_blank"&gt;Sumangala Byali&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9543" target="_blank"&gt;Actionscript Libraries for SAP Widget Foundation : Available now !&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Day&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9948" target="_blank"&gt;Community Day Lima 2008 - The Recap&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D" target="_blank"&gt;Alvaro "Blag" Tejada Galindo&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10372" target="_blank"&gt;SDN Community Day Mentor Hands-On Workshop&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D" target="_blank"&gt;Thomas Jung&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10281" target="_blank"&gt;Nanomonk - Adobe and SAP&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9266" target="_blank"&gt;Community Day Buenos Aires, el día después.&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=4%2BGGHgInkeg%3D" target="_blank"&gt;Ignacio Hernández&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9487" target="_blank"&gt;SDN community day in London - my experiences&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=f9nAYzX3pnM%3D" target="_blank"&gt;Harald Reiter&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9480" target="_blank"&gt;SAP Community Day London 2008&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10119" target="_blank"&gt;Community Day Magic&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/11149" target="_blank"&gt;Community Day Changed My Life&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Community Projects&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10080" target="_blank"&gt;The ESME Collaboration and what it tells us about Web 2.0&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=PCUWdFESp%2BElgnBu4p6e9A%3D%3D" target="_blank"&gt;Richard Hirsch&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10214" target="_blank"&gt;ESME - The Demo&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/11529" target="_blank"&gt;GuidEd - TechEd Information Aggregator for the iPhone&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Y%2BI6hLyjY7ryHiwIHenWYg%3D%3D" target="_blank"&gt;Oliver Kohl&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Java Programming  &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9708" target="_blank"&gt;An introduction to Scala, part 1&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=vTDGIcG1kBILHjeMbiImZg%3D%3D" target="_blank"&gt;Darren Hague&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8226" target="_blank"&gt;Isn't it Groovy - extending the Development Component build with Groovy?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=xIFhXh3RpxY%3D" target="_blank"&gt;Marion Schlotte&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP Developer Network&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8238" target="_blank"&gt;Eddy was here...&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8232" target="_blank"&gt;Signal versus Noise&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=G9g0PZYnHCA%3D" target="_blank"&gt;Mark Finnern&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9429" target="_blank"&gt;What’s thy color? – v2.0&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=J2yy601wOXE%3D" target="_blank"&gt;Wenceslaus Gnana&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9996" target="_blank"&gt;SDN - long time ago&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Kf0q9%2Fx4ND8%3D" target="_blank"&gt;Santosh V&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Process Expert&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9055" target="_blank"&gt;Some of the BPX Stars Have Aligned&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8270" target="_blank"&gt;Getting the Most Out of the BPX Community&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=b6mSBPi8QdI%3D" target="_blank"&gt;Marco ten Vaanholt&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9940" target="_blank"&gt;The reputation problem&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=AfPsNmJJyu0%3D" target="_blank"&gt;Dennis Howlett&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9986" target="_blank"&gt;The Geek Gap: Do Suits Care?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=YrkNXuMPzDg%3D" target="_blank"&gt;Bill Pfleging and Minda Zetlin&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10798" target="_blank"&gt;The BPX Community Book Finally here !...BPX Education and Certification #2&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marco ten Vaanholt&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP TechEd&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8380" target="_blank"&gt;Video: Behind the Scenes at SAP TechEd '07&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Ij3Jnvr4JMs%3D" target="_blank"&gt;Chip Rodgers&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9047" target="_blank"&gt;SAP Forum in Brazil: Sao Paolo Hosted ~5000 including SDN Top Contributors&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0j5zMfhYI3E%3D" target="_blank"&gt;Mark Yolton&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9630" target="_blank"&gt;The people of SAP TechEd 2005-2007&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10544" target="_blank"&gt;SAP TechED Countdown Widgets Redux !&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=CsXelP5HzPI%3D" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/10336" target="_blank"&gt;Social Networking - Beta Release&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=Vi4aCAMmuX4%3D" target="_blank"&gt;Craig Cmehil&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ranting&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9206" target="_blank"&gt;How to Lower Your Status in The SAP Community&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9315" target="_blank"&gt;How to Further Damage Your SAP Community Reputation&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=aEYYjpyVTLA%3D" target="_blank"&gt;Marilyn Pratt&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/9733" target="_blank"&gt;Why Do Companies Release Software with Bugs?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=YrkNXuMPzDg%3D" target="_blank"&gt;Bill Pfleging and Minda Zetlin&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Composition Environment (CE)&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8198" target="_blank"&gt;Music Composition Environment&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=4%2BGGHgInkeg%3D" target="_blank"&gt;Ignacio Hernández&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Enterprise Portal (EP) &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8633" target="_blank"&gt;Creating Search Webpage Process in CAF-GP&lt;/a&gt; by&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=j%2BHPshaaaNk%3D" target="_blank"&gt; rakesh verma&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Visual Composer&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8897" target="_blank"&gt;Visual Composer demo - Customer and Google API&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=B8fzbYZW1fmJMJGg%2FupFAQ%3D%3D" target="_blank"&gt;Jakob Diness&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8364" target="_blank"&gt;How to create Portal content with the Visual Composer for Composition Environment?&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=XNpA%2FILKE2U%3D" target="_blank"&gt;Dafna Yanay&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8832" target="_blank"&gt;Visual Composer7.1 and Yahoo Maps - Part I&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=KYQW3I2sMZeLES5BH5yTWQ%3D%3D" target="_blank"&gt;Vivek Kumar Mishra&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/10732" target="_blank"&gt;SAPmvc Framework Release 0.1.0&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=P%2FyR4%2FTd9OA%3D" target="_blank"&gt;Marcelo Ramos&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Enjoy! -:D &lt;/p&gt;&lt;p&gt; &lt;/p&gt;      &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt; is an Project Manager, Senior ABAP Consultant, Scripting Languages Geek, Programming books author, Geek Comics author and SAP Mentor.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-1289315307948555556?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/1289315307948555556/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=1289315307948555556' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/1289315307948555556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/1289315307948555556'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/12/blags-best-blogs-picks-from-2008.html' title='Blag&apos;s best blogs picks from 2008'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-8874976749328564614</id><published>2009-12-12T06:50:00.001-08:00</published><updated>2009-12-12T06:50:49.045-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best blogs'/><title type='text'></title><content type='html'>&lt;table border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="65"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/people/alvaro_tajeda.jpg" alt="Alvaro Tejada Galindo" height="85" width="65" /&gt;  &lt;/td&gt; &lt;td align="left" valign="top" width="100%"&gt; &lt;h3&gt;Blag's best blogs picks from 2007&lt;br /&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=nkxEgTFlWZE%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;Biz Partner&lt;br /&gt;Posted on Dec. 17, 2007 10:48 AM in &lt;!-- Category: 29 --&gt;&lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 58 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/58"&gt;PHP&lt;/a&gt;&lt;!-- Category: 60 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/60"&gt;Python&lt;/a&gt;&lt;!-- Category: 57 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/57"&gt;Ruby&lt;/a&gt;&lt;!-- Category: 19 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/19"&gt;SAP Developer Network&lt;/a&gt;&lt;!-- Category: 9 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/9"&gt;SAP NetWeaver Platform&lt;/a&gt;&lt;!-- Category: 27 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/27"&gt;SAP TechEd&lt;/a&gt;&lt;!-- Category: 47 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/47"&gt;Scripting Languages&lt;/a&gt;&lt;!-- Category: 43 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/43"&gt;Web Dynpro&lt;/a&gt;&lt;!-- Category: 59 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/59"&gt;Perl&lt;/a&gt;&lt;!-- Category: 56 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/56"&gt;JavaScript&lt;/a&gt;&lt;!-- Category: 35 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/35"&gt;Java Programming&lt;/a&gt;&lt;!-- Category: 12 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/12"&gt;Application Server&lt;/a&gt;&lt;!-- Category: 46 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/46"&gt;Beginner&lt;/a&gt;&lt;!-- Category: 30 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/30"&gt;Beyond SAP&lt;/a&gt;&lt;!-- Category: 11 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/11"&gt;Business Intelligence (BI)&lt;/a&gt;&lt;!-- Category: 49 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/49"&gt;Business Process Expert&lt;/a&gt;&lt;!-- Category: 24 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/24"&gt;Business Server Pages&lt;/a&gt;&lt;!-- Category: 55 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/55"&gt;Community Day&lt;/a&gt;&lt;!-- Category: 21 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/21"&gt;Emerging Technologies&lt;/a&gt;&lt;!-- Category: 63 --&gt;, &lt;a href="http://weblogs.sdn.sap.com/weblogs/topic/63"&gt;Widgets&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090" target="_top" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/8090';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;       &lt;p&gt;This year is endind...We're soon going to start 2008 with a lot of nice news and surprises. I wanted to end this wonderful year with my humble list of best blogs...Not all categories are included, because I'm not an expert in every area...But I think it's still a nice list.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;ABAP&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7869" target="_blank"&gt;SAPChess&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Marcelo+Ramos" target="_blank"&gt;Marcelo Ramos&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7249" target="_blank"&gt;ABAP Bitmap Image Processing Class&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Thomas+Jung" target="_blank"&gt;Thomas Jung&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7136" target="_blank"&gt;Tool for ABAP Developers: Easy ABAP Open SQL Joins!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Dushyant+Shetty" target="_blank"&gt;Dushyant Shetty&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;WebDynpro&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7882" target="_blank"&gt;Yet another webdynpro (ABAP) se16 clone&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=mwQcWjOmVH0%3D" target="_blank"&gt;Marcello Urbani&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7252" target="_blank"&gt;SAP Elegant Finder was born - it is the Open Source that makes a pleasure to search on Web Dynpro for ABAP&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Sergio+Ferrari" target="_blank"&gt;Sergio Ferrari&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/5522" target="_blank"&gt;Integrating ALV in the Web Dynpro for ABAP(WDA ) application&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=XF%2F%2BW1R2PDc%3D" target="_blank"&gt;Kamal Kumar&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Business Server Pages&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7792" target="_blank"&gt;An Introduction to FLOB (Flex on BSP)&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Thomas+Jung" target="_blank"&gt;Thomas Jung&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7640" target="_blank"&gt;Not a how to, but a what is: MVC – Model View Controller Pattern&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=wh3ySQgjo409RgZTEEuh%2FA%3D%3D" target="_blank"&gt;Benjamin J Deaver&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7140" target="_blank"&gt;Using YouTube API inside a BSP application&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=20037" target="_blank"&gt;Ignacio Hernández&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Emerging Technologies&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7719" target="_blank"&gt;SAP MP3 - plug Business and play Music&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Sergio+Ferrari" target="_blank"&gt;Sergio Ferrari&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7130" target="_blank"&gt;Engaging User Interfaces with Adobe Flex&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Matthias+Zeller" target="_blank"&gt;Matthias Zeller&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP NetWeaver Platform&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7630" target="_blank"&gt;Developer's Journey through the SDN Subscription Program - Ch.1 Getting the Goods&lt;/a&gt; by&lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Ed+Herrmann" target="_blank"&gt; Ed Herrmann&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ruby&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6654" target="_blank"&gt;Tasting the mix of Ruby and SAP - Volume 4&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Alvaro+Tejada+Galindo" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;PHP&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6299" target="_blank"&gt;Tasting the mix of PHP and SAP - Volume 12&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Alvaro+Tejada+Galindo" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/6983" target="_blank"&gt;PHP in Netweaver Platform&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Abdulbasit+Gulsen" target="_blank"&gt;Abdulbasit Gulsen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/6629" target="_blank"&gt;Developing composite applications with PHP - Google Maps&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=10lbkQVjYLA%3D" target="_blank"&gt;Frederic-Pascal Ahring&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/6071" target="_blank"&gt;BSP Meet your AJAX Framework: AJS&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Daniel+McWeeney" target="_blank"&gt;Daniel McWeeney&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6532" target="_blank"&gt;sapnwrfc for Python - To complete a hat trick&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Piers+Harding" target="_blank"&gt;Piers Harding&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Scripting Languages&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6519" target="_blank"&gt;SAP NW RFCSDK - it's here!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Piers+Harding" target="_blank"&gt;Piers Harding&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Application Server&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7588" target="_blank"&gt;Purely Offline Adobe Scenario for BAPI call&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=0aU6P1L1tJ8%3D" target="_blank"&gt;Lisha Peter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/5940" target="_blank"&gt;Wii Goes Enterprise&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Ed+Herrmann" target="_blank"&gt;Ed Herrmann&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Beginner&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7769" target="_blank"&gt;The ABAP Runtime Trace (SE30) - Quick and Easy&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=GYc4g43yG2I%3D" target="_blank"&gt;Siegfried Boes&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/5487" target="_blank"&gt;SCRIPT DEBUGGING&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=tOApulwLnF0%3D" target="_blank"&gt;Sudheer Junnuthula&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Beyond SAP&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7528" target="_blank"&gt;majority desk - get your wiihands on!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Ed+Herrmann" target="_blank"&gt;Ed Herrmann&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6848" target="_blank"&gt;Psychopathology of Software Development&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Tobias+Trapp" target="_blank"&gt;Tobias Trapp&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/6253" target="_blank"&gt;Colgate-Palmolive &amp;amp; SAP Imagineering Fellowship&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Daniel+McWeeney" target="_blank"&gt;Daniel McWeeney&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Intelligence (BI)&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/5562" target="_blank"&gt;What should be the Next Big Thing for SAP in BW/BI?&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Vitaliy+Rudnytskiy" target="_blank"&gt;Vitaliy Rudnytskiy&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business Process Expert&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7382" target="_blank"&gt;Gliffy Plug-in for SDN/BPX WIKI has finally arrived&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Richard+Hirsch" target="_blank"&gt;Richard Hirsch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Widgets&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7034" target="_blank"&gt;SDN Contributor Wordpress Widget&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Oliver+Kohl" target="_blank"&gt;Oliver Kohl&lt;/a&gt;&lt;br /&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/5687" target="_blank"&gt;Create your First Yahoo! Widget!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Abesh+Bhattacharjee" target="_blank"&gt;Abesh Bhattacharjee&lt;/a&gt;&lt;br /&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/6762" target="_blank"&gt;SDN Points on Your Desktop&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=OlaeOfOs6Bw%3D" target="_blank"&gt;Guillaume García&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Community Day&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7787" target="_blank"&gt;SAP Mentor Program&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Mark+Finnern" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7628" target="_blank"&gt;SAP Community Day - Looking forward not backward...&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Thomas+Alexander+Ritter" target="_blank"&gt;Thomas Alexander Ritter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7605" target="_blank"&gt;Where is Eddy?&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Mark+Finnern" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7483" target="_blank"&gt;Blag on TechEd (Las Vegas) - Community Day&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Alvaro+Tejada+Galindo" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Java Programming&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7195" target="_blank"&gt;Make a JavaFX application calling a BAPI, using your SAP NetWeaver 7.1 Composition Environment&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=20037" target="_blank"&gt;Ignacio Hernández&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP Developer Network&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8034" target="_blank"&gt;Forget the 1 Million...&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Craig+Cmehil" target="_blank"&gt;Craig Cmehil&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/8005" target="_blank"&gt;Two Shots from the Past&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Mark+Finnern" target="_blank"&gt;Mark Finnern&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/7951" target="_blank"&gt;SAP Community Network Reaches One Million Members!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Mark+Yolton" target="_blank"&gt;Mark Yolton&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP TechEd&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7601" target="_blank"&gt;My TechEd 2007 experience....a photo tour!&lt;/a&gt; by &lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=PbkYPx%2F0G6A%3D" target="_blank"&gt;Christopher Solomon&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7496" target="_blank"&gt;Majority...what? Majority Desk!&lt;/a&gt; by &lt;a href="https://wiki.sdn.sap.com/wiki/display/profile/Alvaro+Tejada+Galindo" target="_blank"&gt;Alvaro Tejada Galindo&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Happy Blogging! &lt;/p&gt;&lt;p&gt; &lt;/p&gt;      &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/48024" onclick="this.href='http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/48024';" target="_top"&gt;Alvaro Tejada Galindo&lt;/a&gt; is an Project Manager, Senior ABAP Consultant, Scripting Languages Geek, Programming books author, Geek Comics author and SAP Mentor.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-8874976749328564614?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/8874976749328564614/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=8874976749328564614' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8874976749328564614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8874976749328564614'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/12/blags-best-blogs-picks-from-2007-alvaro.html' title=''/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-8697843983961110680</id><published>2009-09-21T22:53:00.001-07:00</published><updated>2009-09-21T22:53:46.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='golden rules'/><title type='text'>Ten golden rules that help me every day</title><content type='html'>&lt;img alt="" src="http://www.gravatar.com/avatar/add6944dd255593011ae48bbe3dee7d3?s=50&amp;amp;d=http%3A%2F%2Fwww.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D50&amp;amp;r=G" class="avatar avatar-50 photo" height="50" width="50" /&gt; Ivan Femia           &lt;p&gt;In this short blog I would give you some tips and tricks that could make your SAP life easier and, even more, generate a money saving.&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Good programmers write good code, but great programmers reuse the good programmers’ code! Do not create something that is already done, try to find a standard function already created by SAP or try to understand what the standard do in order to optimize your development.&lt;/li&gt;&lt;li&gt;Perform always the extended check (SLIN), this makes your development conform to SAP standards line guides and simplify code adjustments (e.g. after a system upgrade).&lt;/li&gt;&lt;li&gt;Try to follow a well defined naming convention, this SDN blog could be a good start example &lt;a title="Nomen est Omen - ABAP Naming Conventions" href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304" target="_blank"&gt;Nomen est Omen – ABAP Naming Conventions&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Monitor your reports with standards tool in order to optimize your code and find bottle necks (e.g. ST05 and SE30).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-weight: normal; font-size: 13px;"&gt;Have a problem in a standard report, check SAP OSS your issue probably is already solved by SAP.&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Avoid standard modification take a look to the new Enhancement Framework.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span style="font-weight: normal; font-size: 13px;"&gt;Even if you are or not an expert take part to the SCN community: forum, blog and wiki; you will learn something new.&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;SAP is not only ABAP, there are a lot of technologies related: Web Dynpro, Java, RIA and so on, find the right one for your project. All of them have its pros and cons.&lt;/li&gt;&lt;li&gt;Consider web services and ABAP proxy as system integrator, base your developments onto these powerful technologies, instead of out of date flat files and other stuffs.&lt;/li&gt;&lt;li&gt;Finally share your knowledge on SCN, all of us are ready to learn.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Any suggestion is always appreciated &lt;img src="http://www.plinky.it/blog/wp-includes/images/smilies/icon_razz.gif" alt=":P" class="wp-smiley" /&gt; &lt;/p&gt; &lt;p&gt;I wanna thank &lt;a style="margin: 0px; padding: 0px; color: rgb(83, 113, 197); text-decoration: none;" href="http://weblogs.sdn.sap.com/pub/u/1678" target="_blank"&gt;Andrea Olivieri&lt;/a&gt; for his support.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-8697843983961110680?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/8697843983961110680/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=8697843983961110680' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8697843983961110680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8697843983961110680'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/09/ten-golden-rules-that-help-me-every-day.html' title='Ten golden rules that help me every day'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-4760880751110486299</id><published>2009-09-08T07:04:00.001-07:00</published><updated>2009-09-08T07:05:27.007-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshoots'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>Troubleshooting Your ABAP Programs Using Coverage Analyzer</title><content type='html'>&lt;table style="width: 680px; height: 110px;" border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="100%"&gt;&lt;h3&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251990338" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251990338';" target="_top"&gt;Zahack&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=jJaOypBMAQQ%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;YASH Technologies&lt;br /&gt;Posted on Aug. 31, 2009 12:28 AM in &lt;!-- Category: 29 --&gt;&lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15563" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15563';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15563" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15563';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;        &lt;p&gt; Coverage Analyzer is a very powerful runtime analysis tool provided by SAP that enables an ABAP developer to monitor processing blocks such as reports, subroutines, function-modules and methods.&lt;/p&gt;  &lt;p&gt;Powerful filtering system in Coverage Analyzer facilitates developer to enter the number of calls separately according to periods, users and functional areas.&lt;/p&gt;  &lt;p&gt;In a nut-shell; Coverage Analyzer is a function for persistently monitoring the system-wide execution of ABAP programs;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;It enables the success of test activities to be assessed for quality checks.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;It also provides an overview of the use of programs for development purposes.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Developer can use this tool to trace programs for development purpose and Quality Manager can use this tool to check system performance for quality assurance.&lt;/p&gt;  &lt;p&gt;It helps carry out a range of Administration Settings and the Monitoring Activity. Moreover it helps get summarized information of number of program executions, number of runtime errors, number of program resets. Fascinatingly, the results can be formatted separately according to user-group; each user-group can contain any number of users under one test key.&lt;/p&gt;  &lt;p&gt;Broadly, functions of Coverage Analyzer are classified into two;&lt;/p&gt;  &lt;p align="left"&gt;1.      Administration Settings&lt;/p&gt;  &lt;ul class="unIndentedList"&gt;&lt;li&gt; On/Off.&lt;/li&gt;&lt;li&gt; Test Groups.&lt;/li&gt;&lt;li&gt; Registrations.&lt;/li&gt;&lt;li&gt; Reset.&lt;/li&gt;&lt;li&gt; Settings.&lt;/li&gt;&lt;li&gt; Monitor.&lt;/li&gt;&lt;li&gt; Consistency Checks.&lt;/li&gt;&lt;/ul&gt;              &lt;p align="left"&gt;2.      Display &lt;/p&gt;  &lt;ul class="unIndentedList"&gt;&lt;li&gt; Global.&lt;/li&gt;&lt;li&gt; Detail.&lt;/li&gt;&lt;/ul&gt;      &lt;p&gt;A simple exercise will help us easily understand Coverage Analyzer.&lt;/p&gt;  &lt;p&gt;In order to make use of Coverage Analyzer, user has to have an appropriate role. To check user authorization; &lt;/p&gt;  &lt;p&gt;Call up transaction SUIM (User Information System).&lt;/p&gt;  &lt;p&gt;Expand Authorizations node.&lt;/p&gt;  &lt;p&gt;Choose &lt;em&gt;By Object&lt;/em&gt; and execute it (press F8).&lt;/p&gt;&lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJdkguWTOI/AAAAAAAAADA/0fjrdiE22tw/CG40.png" alt="" height="323" width="314" /&gt;&lt;br /&gt;   &lt;p&gt;Check the presence of authorization object &lt;strong&gt;S_COV_ADM&lt;/strong&gt; in the system.&lt;/p&gt;  &lt;p&gt; &lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJdkub2y-I/AAAAAAAAADE/DMolfqWDjgY/CG41.png" alt="" height="181" width="329" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJdkmw3A6I/AAAAAAAAADI/sIeQlE-09vM/CG42.png" alt="" height="125" width="690" /&gt;&lt;/p&gt;&lt;p&gt;Confirm the where-used list for profiles using &lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJdk4suH8I/AAAAAAAAADM/DFu0MciLFZY/CG43.png" alt="" height="37" width="31" /&gt; icon or Ctrl+Shift+F11.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJdk5qN7XI/AAAAAAAAADQ/Cin_2rI2Ni8/CG44.png" alt="" height="247" width="589" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Once user authorization is checked to have absolute access to &lt;strong&gt;SCOV (Coverage Analyzer) &lt;/strong&gt;transaction; user can proceed further. If a role is not assigned to a user, Basis consultant has to be consulted in this regards.&lt;/p&gt;  &lt;p&gt;In fact, a tip to be remembered is that Coverage Analyzer tool should be used on weekends or in the evening, when all users and packages are on loose ends. Since backup server collects data from all the servers including local and remote; system needs all packages and users to be in the passive mode. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Let's start up with a simple example to understand Coverage Analyzer in a better way:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Call up the transaction &lt;strong&gt;SCOV &lt;/strong&gt;or navigate through SAP Easy Access-&gt;SAP Menu-&gt;Tools-&gt;ABAP Workbench-&gt;Test-&gt;SCOV (Coverage Analyzer).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJdtTxK11I/AAAAAAAAADU/GzGrMBzR7nY/CG45.png" alt="" height="375" width="248" /&gt;                                           &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;General Status of the system is shown on the right hand pane of the window;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJdtWcF95I/AAAAAAAAADY/2w-eP1arkTg/CG46.png" alt="" height="250" width="500" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Coverage Analyzer administration includes all of the functions required for carrying out settings and checks.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJdtcgtOwI/AAAAAAAAADc/Fbjm8HiWgDs/CG47.png" alt="" height="336" width="194" /&gt;&lt;/p&gt;  &lt;p&gt;Administration and Display nodes are shown on the left pane of the window.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Before the Coverage Analyzer being switched on, settings have to be maintained for backup server and filters are to be set. Having not made settings for backup server, if Coverage Analyzer is started, it simply throws out an information message to maintain background server for data collection.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJdtuXtetI/AAAAAAAAADg/ujBriZ0eENE/CG48.png" alt="" height="142" width="382" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So, Administration settings are to be done before starting up the Coverage Analyzer.&lt;/p&gt;  &lt;p&gt;Expand Administration node, select Settings;&lt;/p&gt;  &lt;p&gt;Settings function is used to set the parameters for the Global and Detail views, and to filter the programs to be checked via the package.&lt;/p&gt;  &lt;p&gt;In order to make settings, switch settings to Change Mode (Cntrl+F1).&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip to remember: &lt;/strong&gt;A program is regarded as tested if the following conditions are fulfilled;&lt;/p&gt;  &lt;p&gt;Count1 Absolute Value     &gt;     0.&lt;/p&gt;  &lt;p&gt;Count2 Absolute Value     &gt;     0.&lt;/p&gt;  &lt;p&gt;RABAX2 Absolute Value    =     0.&lt;/p&gt;  &lt;p&gt;Unicode Check                =     1.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJdtgGSdII/AAAAAAAAADk/9GIjmNEVJOs/CG49.png" alt="" height="147" width="529" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Count1 and RABAX1 indicate the number of programs executed and runtime errors &lt;em&gt;since the Coverage Analyzer was started.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Count2 and RABAX2 indicate the number of programs executed and runtime errors &lt;em&gt;since the last reset.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Further, assign package to be used during analysis. When a package is pre-selected, the evaluation for the Global view is only performed for this package. If this restriction is not applied, all of the programs are included together with those from &lt;strong&gt;local packages&lt;/strong&gt; &lt;strong&gt;($*) &lt;/strong&gt;and programs generated &lt;strong&gt;locally without packages ( ).&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJed31S07I/AAAAAAAAAEw/5G9dUIainKY/CG4A.png" alt="" height="80" width="573" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If ABAP programs with a set Unicode flag are only to be traced by the Coverage Analyzer, then select &lt;em&gt;Unicode &lt;/em&gt;checkbox. Checking &lt;em&gt;Unicode&lt;/em&gt; is to mark it as &lt;strong&gt;‘X', &lt;/strong&gt;else leave it unattended.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeeJzTLEI/AAAAAAAAAE0/5TSKxYkG0EM/CG4B.png" alt="" height="64" width="309" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;It's optional to set the lights; lights provide a visual means of representing the status of the results for the degree of coverage in the Global and Detail views.&lt;/p&gt;  &lt;p&gt;Lights are set by default, which can be set according to developer's way of analysis.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RED           &lt;/strong&gt;0   LT 33  %&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;YELLOW&lt;/strong&gt;  33 LT 66  % &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;GREEN&lt;/strong&gt;    66 LE 100%  &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJej26wowI/AAAAAAAAAE4/03YgAO4TTyg/CG4C.png" alt="" height="84" width="371" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Further, Monitor Settings have to be done, which includes setting Trace Level and Maximum Entries Log and Maximum Entries Data Monitor. &lt;/p&gt;  &lt;p&gt;There are 4 different trace levels (1-4), the higher the trace level, the more information is drawn for debugging.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJej9totXI/AAAAAAAAAE8/I6e4VifWYb4/CG4D.png" alt="" height="98" width="382" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip: &lt;/strong&gt;The values for Maximum Entries Log and Maximum Entries Data Monitor limit the lines displayed for the General Log and Monitor Data Volumes in the monitor function.&lt;/p&gt;  &lt;p&gt;The defaulted lines for &lt;em&gt;log file &lt;/em&gt;are 100 and for &lt;em&gt;data volume &lt;/em&gt;are 200.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Background server &lt;/em&gt;has to be specified, where precisely data is to be collected. Moreover, the period for which background job has to be repeated is also to be specified. &lt;/p&gt;  &lt;p&gt;The defaulted value for &lt;em&gt;Data Collection: Period (Min)&lt;/em&gt; is 30 mins, which can be modified based on developer's way of analysis. In this case, current server is specified as Background server.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJekPwHpUI/AAAAAAAAAFA/kEQGGbaJUAk/CG4E.png" alt="" height="73" width="500" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Further, &lt;em&gt;Summarization&lt;/em&gt; function facilitates checking the same processing blocks in several systems simultaneously.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip to remember: &lt;/strong&gt;The results from the &lt;em&gt;individual systems&lt;/em&gt; are &lt;em&gt;local&lt;/em&gt; and those from the &lt;em&gt;remote systems&lt;/em&gt; are &lt;em&gt;summarized.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Local Degree of coverage               LE        100%.&lt;/p&gt;  &lt;p&gt;Summarized degree of coverage     LE         100%.&lt;/p&gt;  &lt;p&gt;Local Degree of coverage GE Summarized degree of coverage.&lt;/p&gt;    &lt;p&gt;To determine RFC connection with current server, call up transaction &lt;strong&gt;SM59-&gt;&lt;/strong&gt;RFC Destinations-&gt;R/3 Connections-&gt;&lt;strong&gt;E6SCLNT900&lt;/strong&gt;.&lt;/p&gt;    &lt;p&gt;Desired RFC connections in Summarize coverage results can be specified; moreover period and start time for summarize data can also be specified.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJekM9hHPI/AAAAAAAAAFE/rLyzBwa8mxQ/CG4F.png" alt="" height="94" width="536" /&gt;&lt;/p&gt;    &lt;p&gt;Finally, save the &lt;em&gt;Settings.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;Choose &lt;em&gt;On/Off, Status &lt;/em&gt;in the Administration node and start up the Coverage Analyzer.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Switch Coverage Analyzer On/Off: &lt;/em&gt;This displays the number of programs that have been initialized.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Switch Automatic Recordings On/Off: &lt;/em&gt;This displays the automatic recording period and the version number for the Global view.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Switch Data Aggregations from Different Remote Systems: &lt;/em&gt;This displays background server and all of the other systems whose results are used for Data-aggregation.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJeBeDL1LI/AAAAAAAAADo/BSIjohLTJUk/CG50.png" alt="" height="267" width="445" /&gt;&lt;/p&gt;    &lt;p&gt;If the server is in switched-off mode exception shows &lt;strong&gt;RED &lt;/strong&gt;signal, &lt;strong&gt;GREEN &lt;/strong&gt;signifies server to be in switched-on mode and &lt;strong&gt;YELLOW&lt;/strong&gt; represents either RFC problem or database and shared memory inconsistency.&lt;/p&gt;    &lt;p&gt;In this case, we'll proceed without switching on &lt;em&gt;Switch Automatic Recording On/Off.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeBkFxwWI/AAAAAAAAADs/3WP6gZKvQ1A/CG51.png" alt="" height="322" width="577" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The servers which are actually running are shown as flagged up.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Create Test-Groups;&lt;/strong&gt; Test-Groups are made to summarize and display the results of the Coverage Analyzer for a particular set of users under one generic key/heading.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip to remember: &lt;/strong&gt;Test-groups should not be created more than 10. Moreover, only users assigned a role with the authorization object S_COV_ADM are allowed to define group.&lt;/p&gt;    &lt;p&gt;Two pre-defined Test-groups are always available;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ALL    - &lt;/strong&gt;Coverage results summarized for all test groups on the &lt;em&gt;local system&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;COND - &lt;/strong&gt;Coverage results on the &lt;em&gt;local system&lt;/em&gt; as well as &lt;em&gt;remote system&lt;/em&gt;.&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;In this case, we create a test-group.&lt;/p&gt;    &lt;p&gt;To create a test-group; switch on the &lt;em&gt;Change Mode&lt;/em&gt;, click &lt;em&gt;Append Row&lt;/em&gt; icon provided in the application tool-bar.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeBhFM7GI/AAAAAAAAADw/QfDVdN4h6Fc/CG52.png" alt="" height="57" width="67" /&gt;  &lt;/p&gt;  &lt;p&gt;Define a Test-group following Y/Z naming convention; then save it.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeBvH8b8I/AAAAAAAAAD0/c-imqqCS4Ns/CG53.png" alt="" height="96" width="613" /&gt;&lt;/p&gt;    &lt;p&gt;Next step is to assign users to the just-made test-group.&lt;/p&gt;  &lt;p&gt;To assign Users to a test-group; switch on the &lt;em&gt;Change Mode&lt;/em&gt;, click &lt;em&gt;Append Row&lt;/em&gt; icon provided in the application tool-bar.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeBhFM7GI/AAAAAAAAADw/QfDVdN4h6Fc/CG52.png" alt="" height="57" width="67" /&gt;&lt;/p&gt;    &lt;p&gt;Select desired test-group for which users have to be assigned; in this case we assign SAPDEV02 as user to test-group ZTST.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJeLEtFDKI/AAAAAAAAAD8/lcqTZfWN16M/CG55.png" alt="" height="119" width="505" /&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Tip: &lt;/strong&gt;A test-group can contain any number of users, for example, all HR developers in one group. That makes filtering pretty easy. Moreover, comparison of performance of test-groups can be done in Global view.&lt;/p&gt;    &lt;p&gt;An optional function to be done is &lt;em&gt;Reset&lt;/em&gt;; explicitly this function is intended for situations in which the results of the previous analyses are no longer required. It resets all the counters of the Coverage Analyzer to 0 for all the programs of a selected group.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeLR9l2FI/AAAAAAAAAEA/GaV4NYXgy-Q/CG56.png" alt="" height="371" width="505" /&gt;&lt;/p&gt;    &lt;p&gt;Further more, implicit reset is carried out automatically as soon as the flow or the data of a program changes.&lt;/p&gt;  &lt;p&gt;After successful reset, an information message is popped-up;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeLfMiLmI/AAAAAAAAAEE/wtNxjbtNGIg/CG57.png" alt="" height="38" width="331" /&gt;&lt;/p&gt;    &lt;p&gt;Consistency check has to be done for all the servers including remote ones, before proceeding to actual analysis;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJeLViQ-wI/AAAAAAAAAEI/NlxyVtbRn7g/CG58.png" alt="" height="221" width="507" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Check Status of All Servers &lt;/em&gt;checks whether the status in the shared memory matches the status in the database.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Check Status of Background Jobs &lt;/em&gt;checks whether all the batch jobs of the Coverage Analyzer are activated. If this is not the case, the batch jobs are all rescheduled by means of the &lt;em&gt;Repair &lt;/em&gt;function.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Check Table Consistency (Long Runtime) &lt;/em&gt;may become inconsistent if the Coverage Analyzer fails on an application server due to system error.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Repair &lt;/em&gt;function also bridges the gap between activating and generating a program.&lt;/p&gt;    &lt;p&gt;So, in order to check inconsistencies, check the types of inconsistencies accordingly and &lt;em&gt;Execute Checks&lt;/em&gt;, and then choose monitor to check for the inconsistency messages,&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;GREEN &lt;/strong&gt;indicates Information message, &lt;strong&gt;YELLOW&lt;/strong&gt; indicates Warning message and &lt;strong&gt;RED&lt;/strong&gt; indicates Error message.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeLixh_VI/AAAAAAAAAEM/hMRBA5R_XnM/CG59.png" alt="" height="175" width="613" /&gt;&lt;/p&gt;    &lt;p&gt;In the present case; no inconsistencies have been found while starting All Servers. In case, there arise any warning or error messages, those problems are to be fixed and then select particular row of the warning/error message and click &lt;em&gt;Completed.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;General Log &lt;/em&gt;gives general information, while &lt;em&gt;Monitor Volume gi&lt;/em&gt;ves detailed information of started server.&lt;/p&gt;&lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJekF7ZJEI/AAAAAAAAAFI/sbDcQInd7mA/CG5A.png" alt="" height="135" width="541" /&gt;&lt;/p&gt;      &lt;p&gt;Once the warning is attended, select the row and hit &lt;em&gt;Completed&lt;/em&gt;, which will going to turn yellow signal to green signal.&lt;/p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeqcuOUvI/AAAAAAAAAFM/PfCKXLfdEeU/CG5B.png" alt="" height="67" width="541" /&gt;  &lt;p&gt;&lt;strong&gt;Tip: &lt;/strong&gt;Every time inconsistencies are checked; &lt;em&gt;General Log&lt;/em&gt; should be &lt;em&gt;refreshed&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;To select more than 1 message, keep &lt;em&gt;Cntrl&lt;/em&gt; key pressed.&lt;/p&gt;    &lt;p&gt;Global display; gives coverage results at author or package level according to criteria you select under &lt;em&gt;Settings. &lt;/em&gt;It precisely gives high-level view.&lt;/p&gt;  &lt;p&gt;Views can be based on &lt;em&gt;Author &lt;/em&gt;or &lt;em&gt;Package. &lt;strong&gt;ALL &lt;/strong&gt;&lt;/em&gt;signifies all the authors on local system based on view given and the &lt;strong&gt;&lt;em&gt;COND &lt;/em&gt;&lt;/strong&gt;(y/z test groups)&lt;strong&gt;&lt;em&gt; &lt;/em&gt;&lt;/strong&gt;signifies all the authors on both local and remote systems based on view given. If &lt;em&gt;‘Other view' &lt;/em&gt;is selected as &lt;em&gt;Package&lt;/em&gt;, then selection is done accordingly.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJeqX8ARRI/AAAAAAAAAFQ/173VPDFK_5U/CG5C.png" alt="" height="184" width="316" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeqcUxoZI/AAAAAAAAAFU/HmXnk0qsJlQ/CG5D.png" alt="" height="412" width="649" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;Since &lt;em&gt;Automatic Recordings &lt;/em&gt;were not switched on; percentage-based progress display over time cannot be seen for selected SAPDEV02 author.&lt;/p&gt;    &lt;p&gt;Normally, Global display view gives Quality Managers to view the system performance and also to compare performance of two test-groups, the following way;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeqmaZxeI/AAAAAAAAAFY/5ZW338CeT3M/CG5E.png" alt="" height="461" width="613" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unicode:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This value indicates how many percent of the processing blocks have the Unicode flag set (the flag itself is set per program)&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Capacity Utilization:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This value is computed as the ratio of used processing blocks to loaded processing blocks to loaded processing blocks.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Accumulated Executions (Percent)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This value indicates in percent how many processing blocks have been executed since the start of the Coverage Analyzer.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Tested processing blocks (Percent)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This value indicates in percent how many processing blocks have been executed in the actual version without runtime errors.&lt;/p&gt;  &lt;p&gt;In the figure above you can see that currently 98% of the processing blocks in the system belong to a program that has the Unicode flag set, 26% have been executed since start of the coverage analyzer, 9% have been executed in the active version without errors and the capacity utilization is 29%.&lt;/p&gt;      &lt;p&gt;&lt;em&gt;Exact Value Table &lt;/em&gt;can be viewed for author SAPDEV02; which displays number processing blocks for author SAPDEV02 on timely manner.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJeqtou0uI/AAAAAAAAAFc/GmQgKPW1gV0/CG5F.png" alt="" height="423" width="505" /&gt;  &lt;p&gt;Graphical view of the selected row can be seen using &lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeTY5CvTI/AAAAAAAAAEQ/zgV3hcAXBYY/CG60.png" alt="" height="28" width="31" /&gt;&lt;!--[if gte vml 1]&gt;                                                  &lt;![endif]--&gt; icon; that displays graphical view of the individual date and all dates when no row is selected.&lt;/p&gt;  &lt;p&gt;All rows selected for graphical analysis;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh5.ggpht.com/_0orj3W4u3yw/SpJeTc9FNDI/AAAAAAAAAEU/IgFEtK0pp5g/CG61.png" alt="" height="359" width="421" /&gt;&lt;/p&gt;&lt;p&gt;Individual selection for graphical analysis;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeTvjhADI/AAAAAAAAAEY/iIa0wMcFass/CG62.png" alt="" height="353" width="409" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip: &lt;/strong&gt;Moreover, previous saved history can also be viewed for the specific user.&lt;/p&gt;    &lt;p&gt;Details display view; gives summarized and detailed results. It precisely gives low-level view.&lt;/p&gt;  &lt;p&gt;Strong filtering options allow user to select on what conditions results are to be displayed.&lt;/p&gt;    &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJeTg8RNNI/AAAAAAAAAEc/0UUqxknHPWs/CG63.png" alt="" height="401" width="500" /&gt;&lt;/p&gt;        &lt;p&gt;Conditions can be set for range of test-groups, packages and authors pertaining to those test-groups.&lt;/p&gt;  &lt;p&gt;In the present example; test-group ZTST and Author SAPDEV02 is taken as single-value selection, which gives results pertaining to specified criteria. Moreover, other filters can also be set and settings should be done defining access via &lt;em&gt;Package Object, Package and Author&lt;/em&gt;. Defaulted access-via is &lt;em&gt;Program Object&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh3.ggpht.com/_0orj3W4u3yw/SpJeT-GBURI/AAAAAAAAAEg/GCTM7PcdkrQ/CG64.png" alt="" height="331" width="375" /&gt;&lt;/p&gt;    &lt;p&gt;Hitting &lt;em&gt;Standard Settings &lt;/em&gt;is going to reset all the values.&lt;/p&gt;    &lt;p&gt;Once settings are done; hit execute button, that is going to get detailed information, including number of calls made to that particular object, number of  processing blocks, load size in Kilo byte. Besides all the information given; double-clicking the object name will navigate to the particular program or executing block where exactly error has been found.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh4.ggpht.com/_0orj3W4u3yw/SpJedpSPEMI/AAAAAAAAAEk/FRfuqpDD71s/CG65.png" alt="" /&gt;&lt;/p&gt;    &lt;p&gt; &lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJed0lYjKI/AAAAAAAAAEo/pQGlNWSU91U/CG66.png" alt="" height="182" width="580" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://lh6.ggpht.com/_0orj3W4u3yw/SpJed1mcLoI/AAAAAAAAAEs/CHWbeCxi56M/CG67.png" alt="" height="383" width="580" /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;Current Executions = Program units currently used / Total no. of Program units.&lt;/p&gt;  &lt;p&gt;Capacity Utilization = No. of Program units currently used / Loaded Program units.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Conclusion: &lt;/strong&gt;Likewise, many such program executions, runtime errors and program resets can be easily traced using this powerful ABAP runtime analysis tool; Coverage Analyzer.&lt;/p&gt;          &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251990338" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251990338';" target="_top"&gt;Zahack&lt;/a&gt; is an SAP ABAP Consultant at YASH Technologies.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-4760880751110486299?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/4760880751110486299/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=4760880751110486299' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/4760880751110486299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/4760880751110486299'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/09/troubleshooting-your-abap-programs.html' title='Troubleshooting Your ABAP Programs Using Coverage Analyzer'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_0orj3W4u3yw/SpJdkguWTOI/AAAAAAAAADA/0fjrdiE22tw/s72-c/CG40.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-3489845623985594144</id><published>2009-09-08T07:03:00.000-07:00</published><updated>2009-09-08T07:04:13.501-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='troubleshoots'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>Ways of Testing ABAP programs</title><content type='html'>&lt;table border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="100%"&gt;&lt;h3&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251991595" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251991595';" target="_top"&gt;Viquar Iqbal&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=iBJy4ZS4stE%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;Yash Technologies&lt;br /&gt;Posted on Sep. 02, 2009 03:59 AM in &lt;!-- Category: 29 --&gt;&lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 46 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/46"&gt;Beginner&lt;/a&gt;&lt;!-- Category: 98 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/98"&gt;ERP&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15662" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15662';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15662" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15662';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;       &lt;p&gt;&lt;strong&gt;      &lt;/strong&gt;ABAP testing is like a who-dunnit novel. You need to find out the runtime murderer of you program. As a developer I wanted to know what all can be done to test my program so that the client gets the best quality possible and without any embarrassing runtime dumps. &lt;/p&gt;&lt;p&gt;So I found out that there are 5 tools if not more, which can trace minute details after activating your program. &lt;/p&gt;&lt;ul&gt;&lt;li&gt; EPC- Extended program check &lt;/li&gt;&lt;li&gt; Code inspector&lt;/li&gt;&lt;li&gt; ABAP UNIT&lt;/li&gt;&lt;li&gt; ECATT&lt;/li&gt;&lt;li&gt; Coverage Analyzer&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Many times it happens that we just do an EPC or SCI and say that the program is fine and can be delivered. But to check a program thoroughly with various test data we need to use at least 4 of the above test tools. Following is an overview of them. &lt;/p&gt;&lt;p&gt;Testing is generally divided between Static and Runtime Testing. &lt;/p&gt;&lt;p&gt;EPC and SCI are static.&lt;/p&gt;&lt;p&gt;ABAP UNIT, ECATT and Coverage analyzer fall in runtime testing category.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;EPC &lt;/strong&gt;(TCode: SLIN) - It checks the source code for various aspects like PERFORM/FORM interfaces, Problematic Statements etc. It's a good tool to remove potential runtime errors. So it's important that EPC gives your program a clean chit.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Code Inspector&lt;/strong&gt; (TCode: SCI) - It's mostly used to check multiple programs. We can check for all the programs by a user, in a particular package etc. There are multiple options that you can choose from using SCI for example checking if all the programs are coded according to naming standards. You can also choose what to check in your program by selecting &lt;em&gt; Goto-&gt;Management of -&gt; Tests &lt;/em&gt;and select the class which handles the code check.&lt;/p&gt;&lt;p&gt;Once we statically check the program, we need to check for the reason program is made i.e. Runtime checks.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ABAP UNIT&lt;/strong&gt;-We can access it in TCode -SE38. Under menu Program-&gt;test-&gt;Unit test. Most of the programs are modularized unit (form, function, or method). So, each block performs a specific functionality. Suppose the code is huge but modularized and it's giving incorrect output only for a particular field or particular functionality we can check only &lt;strong&gt;that &lt;/strong&gt;particular module with test data to compare it with expected result. They are implemented as local object class in the same program whose unit is to be tested.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ECATT&lt;/strong&gt; (TCode- SECATT) - It's also called integration test. After checking minute details, ECATT looks at the bigger picture. It checks if components of an application work well together .Its used for automated tests, we can run it across systems as well.It's a powerful scripting engine and editor for writing test scripts. It has many advantages like storing test data, reproduce the tests, integration of third party tools etc.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Coverage Analyzer (&lt;/strong&gt;Tcode - SCOV) - It's used to monitor, system-wide execution of all parts (Modularization Units) of the program are executed over a period of time. It's also used for the execution of programs by a particular user group. There are many uses of SCOV like it helps to identify &lt;em&gt;dead&lt;/em&gt; code , System wide execution (for RFC enabled FM ) , graphical display of program status( number of processing blocks loaded v/s Number of processing blocks used ), Option of  filtering programs for monitoring ( Unicode enabled ) etc. It can be used both by Quality Managers as well as developers.&lt;/p&gt;&lt;p&gt;So if we make our programs go through these rigorous tests .In return we'll get satisfaction of a high quality product as well as a Very Happy Customer!&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Further Readings&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304" target="_top"&gt;https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/wlg/15563" target="_top"&gt;https://weblogs.sdn.sap.com/pub/wlg/15563&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/3334" target="_top"&gt;https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/3334&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://wiki.sdn.sap.com/wiki/x/Tw4" target="_top"&gt;http://wiki.sdn.sap.com/wiki/x/Tw4&lt;/a&gt;&lt;/p&gt;      &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251991595" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251991595';" target="_top"&gt;Viquar Iqbal&lt;/a&gt; is an Associate ABAP Consultant for Yash Technologies.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-3489845623985594144?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/3489845623985594144/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=3489845623985594144' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/3489845623985594144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/3489845623985594144'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/09/ways-of-testing-abap-programs.html' title='Ways of Testing ABAP programs'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-7208302323644311053</id><published>2009-09-08T07:02:00.000-07:00</published><updated>2009-09-08T07:03:21.024-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='naming conventions'/><title type='text'>Nomen est Omen - ABAP Naming Conventions</title><content type='html'>&lt;table border="0" cellpadding="4" cellspacing="4"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left" valign="top" width="100%"&gt;&lt;h3&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251890496" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251890496';" target="_top"&gt;Uwe Schieferstein&lt;/a&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=fqZQPJtHazdyRQuvGSiXOQ%3D%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;Lindt &amp;amp; Spruengli (Schweiz) AG&lt;br /&gt;Posted on Aug. 31, 2009 12:33 AM in &lt;!-- Category: 29 --&gt;&lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 52 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/52"&gt;Standards&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;   &lt;p class="sapTxtSml"&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901" target="_top"&gt;https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901&lt;/a&gt;&lt;/p&gt;   &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304';"&gt;&lt;img src="http://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15304';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;  &lt;img src="http://weblogs.sdn.sap.com/images/clearpixel.gif" /&gt;       &lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;My comment about the importance of ABAP naming conventions to Thorsten Franz' blog &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901" target="_blank"&gt;Great Programmers will their Code to the new Guy&lt;/a&gt; triggered an interesting discussion about naming conventions for ABAP. The opinions range from &lt;em&gt;"...is important"&lt;/em&gt; to &lt;em&gt;"...We do not advise you on naming conventions, do whatever you want".&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The latter statement sounds like a capitulation. This resignation might be due to the following questions:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Are there useful naming conventions for ABAP? Apparently not even SAP has them.&lt;/li&gt;&lt;li&gt;Do naming conventions really improve ABAP coding and how?&lt;/li&gt;&lt;li&gt;How can we check the compliance of ABAP program objects with the naming conventions?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;ABAP Naming Conventions: &lt;em&gt;"Yes, we exist"&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;I started my SAP career more than 10 years ago at &lt;a href="http://www.cirrus-group.com/" target="_blank"&gt;Cirrus Consulting&lt;/a&gt;. The very first thing I got there was a comprehensive documentation about ABAP naming and programming conventions which they had created for one of their biggest customers. And at the Zürcher Kantonalbank they had such a document, too.&lt;/p&gt;&lt;p&gt;Admittedly there were deviations from these conventions in particular because many external developers worked at these customers and the &lt;em&gt;Code Inspector&lt;/em&gt; (SCI) was not yet available at that time. Nevertheless these conventions facilitated the readability of the coding and the handing over (for maintenance) to other developers. And if you look carefully around you will realize that even SAP (or at least a subset of its developers) uses naming conventions. &lt;/p&gt;&lt;p&gt;Now let us imagine a "...do whatever you want" customer where a developer creates a report (containing a constant for the speed of light) which in the subsequent years has been maintained by three other developers. Three of them use their own naming conventions and the forth one uses none at all so we may end up with the following representations of a single constant:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;GC_LIGHTSPEED or LC_LIGHTSPEED&lt;/li&gt;&lt;li&gt;CO_LIGHTSPEED&lt;/li&gt;&lt;li&gt;C_LIGHTSPEED&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The forth developer may replace all previous representations with his own SPEED_OF_LIGHT without any prefix because everybody "knows" that this is a (pyhsical) constant. This medley of naming conventions will definitely confuse every developer. And this is just a simple example considered with the mixing up the naming of global and local variables.&lt;/p&gt;&lt;p&gt;In the following section I will present my own naming conventions which are a "best-of-breed" blend of SAP naming conventions and those of my previous employers. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Call a Spade a Spade &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Naming conventions must be &lt;u&gt;&lt;strong&gt;concise&lt;/strong&gt;&lt;/u&gt;, &lt;u&gt;&lt;strong&gt;short &lt;/strong&gt;&lt;/u&gt;and &lt;u&gt;&lt;strong&gt;distinct&lt;/strong&gt;&lt;/u&gt;. Any ambiguity is a burden for maintenance in the future. Using three categories of criteria it is possible to unambigously name virtually all variables and most signature parameters:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Visibility&lt;/strong&gt;: Global / Local / Class Context&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Type&lt;/strong&gt;: Field / Structure / Table Type / Reference / Constants&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Structural Context&lt;/strong&gt;: FORM routines / Function Modules / Methods &lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;There are two general naming conventions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Variables and Class Attributes: &lt;strong&gt;&lt;visibility&gt;_&lt;type&gt;_&lt;description&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Signature Parameters: &lt;strong&gt;&lt;structural&gt;_&lt;type&gt;_&lt;description&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Visibility &amp;amp; Type&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;We have three kinds of visibility: Global, Local and Class Context (which includes Interfaces as well) and seven different types (see below).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Example &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Coding &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Global&lt;br /&gt;&lt;/td&gt;&lt;td&gt;G&lt;/td&gt;&lt;td&gt;Field&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: gd_matnr TYPE matnr.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: gs_knb1 TYPE knb1.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: gt_vbak TYPE TABLE OF vbak.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GO_GRID&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: go_grid TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: gif_msglist TYPE REF TO if_reca_message_list.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: gdo_data TYPE REF TO data.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Constant&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GC_LIGHTSPEED&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CONSTANTS: gc_lightspeed TYPE i VALUE '300000'.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local&lt;/td&gt;&lt;td&gt;L&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: ld_matnr TYPE matnr. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure &lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: ls_knb1 TYPE knb1.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: lt_vbak TYPE TABLE OF vbak. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LO_GRID&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: lo_grid TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: lif_msglist TYPE REF TO if_reca_message_list.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: ldo_data TYPE REF TO data.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Constant&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;LC_LIGHTSPEED&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CONSTANTS: lc_lightspeed TYPE i VALUE '300000'. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Class Context&lt;br /&gt;&lt;/td&gt;&lt;td&gt;M&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: md_matnr TYPE matnr.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: ms_knb1 TYPE knb1.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: mt_vbak TYPE TABLE OF vbak.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MO_GRID&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: mo_grid TYPE REF TO cl_gui_alv_grid. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: mif_msglist TYPE REF TO if_reca_message_list. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DATA: mdo_data TYPE REF TO data.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Constant&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;MC_LIGHTSPEED&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CONSTANTS: mc_lightspeed TYPE i VALUE '300000'. &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;The vast majority of variables within program objects are either global or local. And in the future there will be a remarkably shift towards class attributes (ABAP-OO). Thus, assigning a unique prefix to each group makes their visibility unambigous for every developer.&lt;/p&gt;&lt;p&gt;Class attributes (instance and static) are special because they are global within the class/instance whereas they appear local from outside the class/instance. Without referring to a class(name) or instance these attributes are "hidden" (i.e. local).&lt;/p&gt;&lt;p&gt;&lt;u&gt;Question&lt;/u&gt;: Does the type prefix offer any benefit?&lt;/p&gt;&lt;p&gt;In ABAP forum posts you may find the following definitions for ALV grid instances:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;GRID: global (?), local (?), class context (?); class reference (?)&lt;/li&gt;&lt;li&gt;G_ALV_GRID: global (!?), local (?), class context (?); class reference (!?)&lt;/li&gt;&lt;li&gt;GO_GRID: global class reference OUTSIDE any class context (my naming convention)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Answer&lt;/u&gt;: Yes, because we meet the developer's expectation and anticipation.&lt;/p&gt;&lt;p&gt;You may argue: What a big fuss about such a little subtlety. My answer to this is: Every SAP developer who comes across a GO_GRID variable in any of my programs knows in advance(!) the meaning and scope of it. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Structural Context (1): FORM routine Signature&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The SAP system does not care about which kind of &lt;em&gt;formal parameters&lt;/em&gt; (USING or CHANGING) are used in FORM routine signatures. Both kinds of formal parameters can be changed within the routine and the modified contents transferred back to the calling program. This is ambiguity at its worst.&lt;/p&gt;&lt;p&gt;In order to make the signature of a FORM routine clear as crystal we define every &lt;strong&gt;Input = USING&lt;/strong&gt; parameter and every &lt;strong&gt;Output = CHANGING&lt;/strong&gt; parameter. Within the FORM routine all USING parameters should be regarded as "constants" meaning that they are not changed nor is any change transferred back to the calling program. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Example&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;USING&lt;/td&gt;&lt;td&gt;U&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;UD_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;US_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;UT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;UO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;UIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;UDO_DATA&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CHANGING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Again, by defining Input = USING (prefix 'U') and Output = CHANGING (prefix 'C') we meet the developer's expectation and alleviate understanding of the FORM routine. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Structural Context (2): Function Module Signature&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The same logic applies to function modules parameters. In addition, we can facilitate the understanding of &lt;strong&gt;TABLES &lt;/strong&gt;parameters (&lt;em&gt;Yes, I know they are obsolete yet some still like to use 'em&lt;/em&gt;) by the semantics of their Input/Output behaviour:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IT_ITAB = Input only &lt;/li&gt;&lt;li&gt;ET_ITAB = Output only&lt;/li&gt;&lt;li&gt;XT_ITAB = Input &amp;amp; Output&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Prefix&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Example&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IMPORTING &lt;/td&gt;&lt;td&gt;I&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ID_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EXPORTING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;E&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ED_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ES_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ET_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CHANGING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;TABLES&lt;br /&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;"Importing"&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IT&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;"Exporting"&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ET&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ET_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;"Changing"&lt;br /&gt;&lt;/td&gt;&lt;td&gt;XT&lt;br /&gt;&lt;/td&gt;&lt;td&gt;XT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Of course there is no technical difference whatsoever between "Importing", "Exporting" and "Changing" TABLES parameters. Yet the different naming gives the developer already an idea about the function of this module without looking into the coding. Or in other words: Try to "express" the function of the module already in its signature.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;br /&gt;&lt;strong&gt;Structural Context (3a): Method Signature&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;The logic explained above is just applied to method parameters as well and extended to the additional RETURNING parameters of methods.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Prefix&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Example&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;IMPORTING &lt;/td&gt;&lt;td&gt;I&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ID_MATNR&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EXPORTING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;E&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ED_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ES_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ET_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;EDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CHANGING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;C&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CS_KNB1&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RETURNING&lt;br /&gt;&lt;/td&gt;&lt;td&gt;R&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RD_MATNR&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RS_KNB1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RT_VBAK&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RO_GRID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RIF_MSGLIST&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;RDO_DATA&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;strong&gt;Structural Context (3b): Static vs. Instance Attributes&lt;br /&gt;&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Static attributes are special because they exist only once for all instances of this class. Modifying a static attribute within a given instance makes this change visible to all other instances. Both types of attributes have the prefix 'M' (class context) in my naming convention. In order to distinguish between static and instance attributes I apply the following convention:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instance Attribute: with self-reference me-&gt; (e.g. me-&gt;md_key)&lt;/li&gt;&lt;li&gt;Static Attribute: without self-reference (.e.g. ms_row) &lt;/li&gt;&lt;/ul&gt;You can find an example of this naming convention in the coding of INCLUDE ZRSWBOSDR_C01 in my blog &lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12692" target="_blank"&gt;Multi-Purpose ALV Programming&lt;/a&gt;.   &lt;p&gt;Another unambigous convention is to drop the self-reference prefix and use the full qualified name for static attributes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Instance Attribute: md_key (with or with self-reference prefix)&lt;/li&gt;&lt;li&gt;Static Attribute: lcl_eventhandler=&gt;ms_row &lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;u&gt;Field-Symbols&lt;/u&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;We can apply the same naming conventions even to field-symbols which makes them much more readable and understandable for every developer. This is particularly important because the contents of field-symbols cannot be analyzed statically but is only determined at runtime.   &lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Type &lt;/strong&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Prefix&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Example&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Global&lt;br /&gt;&lt;/td&gt;&lt;td&gt;G&lt;/td&gt;&lt;td&gt;Field&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;gd_matnr&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure&lt;br /&gt;&lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;gs_knb1&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;gt_vbak&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;go_grid&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;gif_msglist&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;gdo_data&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local&lt;/td&gt;&lt;td&gt;L&lt;/td&gt;&lt;td&gt;Field&lt;br /&gt;&lt;/td&gt;&lt;td&gt;D&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;ld_matnr&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Structure &lt;/td&gt;&lt;td&gt;S&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;ls_knb1&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Table Type&lt;br /&gt;&lt;/td&gt;&lt;td&gt;T&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;lt_vbak&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Class&lt;br /&gt;&lt;/td&gt;&lt;td&gt;O&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;lo_grid&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Interface&lt;br /&gt;&lt;/td&gt;&lt;td&gt;IF&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;lif_msglist&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td&gt;Data Object&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DO&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;ldo_data&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;SAP and Lego&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Why has Lego become one of the world's most famous toys? Part of the answer can be found &lt;a href="http://en.wikipedia.org/wiki/Lego#Design" target="_blank"&gt;here&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;"Lego pieces of all varieties are a part of a universal system. Despite variation in the design and purpose of individual pieces over the years, each remains compatible in some way with existing pieces. Lego bricks from 1958 still interlock with those made in 2009, and Lego sets for young children are compatible with those made for teenagers.&lt;/p&gt;&lt;p&gt; Bricks, beams, axles, mini figures, and all other parts in the Lego system are manufactured to an exacting degree of precision. When snapped together, pieces must have just the right amount of strength and flexibility mixed together to stick together. They must stay together until pulled apart. They cannot be too easy to pull apart, or the resulting constructions would be unstable; they also cannot be too difficult to pull apart, since the disassembly of one creation in order to build another is part of the Lego appeal. In order for pieces to have just the right "clutch power", Lego elements are manufactured within a tolerance of 2 µm." &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;QUESTION: &lt;em&gt;"Have you ever seen a child which sits in front of a pile of Lego bricks claiming it can't build anything because all bricks have the same size???"  &lt;/em&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;For me SAP is just an incredibly huge pile of Lego bricks (for grown-ups). Consistent naming conventions are an indispensable standard which enables us to manufacture long-lasting developments that are easy to understand and maintain (pull apart and reassemble).&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Code Inspector: Check Compliance with your Naming Conventions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Code Inspector (transaction SCI) provides you with all means to check compliance with your naming conventions. Within the check variant you an explicit check &lt;strong&gt;Programming Conventions&lt;/strong&gt;. &lt;/p&gt;&lt;p&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/251890496/CodeInspector_1_Overview.png" alt="Code Inspector - Overview" align="middle" height="388" width="444" /&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Looking at the check &lt;strong&gt;Naming Conventions&lt;/strong&gt; a popup appears where you can define your conventions for data variables and signatures (FORM routine, function module, classes).&lt;/p&gt;&lt;p&gt;Since I have not yet mentioned  macros (DEFINE) yet here is my convention:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;MAC_&lt;/strong&gt;&lt;description&gt;: e.g. mac_suppress_toolbar_btn &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;Another set of frequently used global variables are (select-)parameters and select-options:&lt;/p&gt;&lt;p&gt;SELECT-OPTIONS:&lt;/p&gt;&lt;p&gt;  S_MATNR      FOR mara-matnr.&lt;/p&gt;&lt;p&gt;PARAMETERS:&lt;/p&gt;&lt;p&gt;  P_MATKL      TYPE matkl. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/251890496/CodeInspector_2_NamingConventions.png" alt="Code Inspector - Naming Conventions" align="middle" height="479" width="661" /&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Looking at the check &lt;strong&gt;Extended Naming Conventions for Programs&lt;/strong&gt; you will find my 7 types (Field, Structure, Table Type, Class, Interface, Data Object, Constant) grouped into 5 prefixes:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Elementary Type&lt;/strong&gt; includes Field and Constant&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Object Reference&lt;/strong&gt; includes Class and Interface &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/251890496/CodeInspector_3_ExtendedNamingConventions.png" alt="Code Inspector - Extended Naming Conventions" align="middle" height="220" width="660" /&gt; &lt;/p&gt;&lt;p&gt;The prefixes shown above are the default values when opening the check with which I do not agree. For example, the prefix "R" indicates a global range according to my conventions:&lt;/p&gt;&lt;p&gt;DATA: rt_matnr    TYPE RANGE OF matnr. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It is possible to define useful naming conventions for ABAP. Naming conventions significantly help in understanding a program and navigating around it. Both the new and the senior guy will benefit in particular when it comes to maintenance because they can focus their analysis on the program logic and not the "logic" of the previous developer. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Naming conventions are not impositions for creative developers but, on the contrary, side rails for long-lasting development. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Further Readings&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14901" target="_blank"&gt;Great Programmers will their Code to the New Guy&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15238" target="_blank"&gt;The Little SE80 of Horrors&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15457" target="_blank"&gt;Random Ramblings of an obsolete programmer&lt;/a&gt;  &lt;/p&gt;       &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/u/251890496" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251890496';" target="_top"&gt;Uwe Schieferstein&lt;/a&gt; is a SAP developer / SAP-XI consultant for Lindt &amp;amp; Spruengli (Schweiz) AG currently focusing on EDI integration.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-7208302323644311053?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/7208302323644311053/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=7208302323644311053' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/7208302323644311053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/7208302323644311053'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/09/nomen-est-omen-abap-naming-conventions.html' title='Nomen est Omen - ABAP Naming Conventions'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-7785251962349538742</id><published>2009-08-14T00:48:00.000-07:00</published><updated>2009-08-14T01:01:20.682-07:00</updated><title type='text'>Sending E-Mail from ABAP - Version 610 and Higher - BCS Interface</title><content type='html'>&lt;p class="sapTxtH1" style="color: rgb(34, 90, 141); font-weight: bold;"&gt;Blogs&lt;/p&gt;  &lt;table border="0" cellpadding="4" cellspacing="4"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td align="left" valign="top" width="65"&gt; &lt;img src="https://weblogs.sdn.sap.com/images/people/thomas_jung.jpg" alt="Thomas Jung" height="85" width="65" /&gt;  &lt;/td&gt; &lt;td align="left" valign="top" width="100%"&gt; &lt;h3&gt;Sending E-Mail from ABAP - Version 610 and Higher - BCS Interface&lt;br /&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/u/251694270" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251694270';" target="_top"&gt;Thomas Jung&lt;/a&gt; &lt;img src="https://weblogs.sdn.sap.com/images/icons/sap.gif" alt="SAP Employee" border="0" height="10" width="20" /&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;SAP Labs, LLC&lt;br /&gt;Posted on Sep. 08, 2004 03:13 AM in &lt;!-- Category: 29 --&gt;&lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 12 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/12"&gt;Application Server&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/789" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/789';"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/789" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/789';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;        &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Introduction&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;There seems to be a lot of requests in the forums for tips on how to send E-Mail from ABAP. Based upon these requests, I thought I would pull together some resources and samples on the subject. The setup and samples are quite different on different releases. Yesterday I posted a weblog for releases &lt;=46D that used the API function modules. This weblog focuses on releases 610 and higher. There are many changes in this release. For one there is no longer any reliance on external executables to send the mail. The SAP Kernel now contains native SMTP processing capabilities in the Internet Connection Manager (ICM). Also we have a new ABAP interface that can be used called the Business Communication Services (BCS). All samples came from a 620 system.&lt;p&gt;&lt;/p&gt; &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Configuration&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Before we start with any ABAP coding, we first have to setup and configure a few things. Much of this configuration may have already been completed by your Basis group.  &lt;strong&gt;&lt;span style="font-size:100%;"&gt;ICM Setup&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Unlike in release 46D and lower, we have no external executables to setup. There is no need to configure the Internet Mail Gateway or create any RFC destinations. However there is some setup that needs to be done to the ICM to activate and configure SMTP processing. &lt;a href="https://service.sap.com/sap/support/notes/455140"&gt;OSS Note 455140&lt;/a&gt; gives an excellent step-by-step guide to configuring SMTP. I will just give you a quick check list here without going into all the configuration details provided by this note.&lt;br /&gt;1. If you are one release 610 only, you must add the SMTP Plug-In entry in your instance profile. This is not needed as of release 620 because the system is delivered with SMTP as an integrated part of the ICM.&lt;br /&gt;2.  In the instance profile, specify the TCP/IP port that SMTP will listen on.  Port 25 is the default.&lt;br /&gt;3.  If you have multiple clients in your SAP system, you will want to setup a virtual host for each client.&lt;br /&gt;4.  Verify in transaction SICF that you have a SMTP node and that it is activated.  It should look something like the following:&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email8.jpg" alt="image" border="0" height="379" width="595" /&gt;  &lt;strong&gt;&lt;span style="font-size:100%;"&gt;SAPConnect&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Well we are finished with all the low level setup. Now we need to connect the lowest layer (the ICM) to SAP's middle message layer: SAPConnect. SAPConnect sits between the application layer (such as SAP Office) and the lowest layer hiding all the technical details. All of the SAPConnect monitoring and configuration can be reached from one transaction called SCOT. First SCOT has several different views that can be used. One shows the Jobs that have been setup, the other shows setup by routings, etc. I prefer to start SCOT in System Status View. This shows a tree with the communication types, the nodes setup for each type and the number of messages in each status. The following is a screen shot of this view:&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email9.jpg" alt="image" border="0" height="382" width="556" /&gt; We want to create a new node in SAPConnect for our E-Mail. As of release 46C you have a quite nice Wizard that walks you through the process. However you can also control all settings directly in a dialog maintenance window. This is a screen shot of our Email Node.&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email10.jpg" alt="image" border="0" height="397" width="579" /&gt; You can see that to setup this node all we have to do is specify the connection information for an external mail server. In our case we give the host name for our Corporate Microsoft Exchange Server. Also at this level we can specify the code page that we want all messages converted to before they are sent. I choose Unicode UTF-8 because we have an MDMP system that contains English, German, Spanish, Thai, and Polish languages. By converting to UTF-8 we get around the problem described in OSS note 331418. You do NOT have to have a Unicode system or kernel to support this functionality. Please refer to OSS Note 633265 for the necessary support package levels for this functionality to be complete. Now lets look at the configuration on our only configured address type: Internet. We don't do any outbound filtering to different nodes. Therefore the address areas is set to the wildcard '*'. To comply with the Unicode setup we have all output formats being converted to PDF as OSS note 633265 suggests.&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email11.jpg" alt="image" border="0" height="395" width="435" /&gt; Next we need to schedule a job that will transmit out E-mails. Normally E-Mails will only go out when this job runs, so you probably want to schedule it quite frequently. (Later in my code example, I will show you how using the BCS interface you can send E-mails immediately as well). In our production system we run this job every 5 minutes. The job setup can also be done from SCOT. Switch your view to JOBS. You can then hit CREATE to start the process of scheduling a new Send Job.   &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Running a Test&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;We are just about ready to run our first test. The only other requirement is that the sender of any E-mail, must have their return address setup in their user master. If you don't maintain this data, you will get a send error. If you want an SAP program to generate these addresses for you, have a look at OSS note 104263. Also in 46C and higher you have the option to configure the system to generate the sender address on the fly. OSS note 320443 gives you the details of this solution. You can see from the following screen shot the field that must be maintained in the user master:&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email7.jpg" alt="image" border="0" height="351" width="322" /&gt; Let's try a test now. I like to start by testing using the SAP short message functionality. You will want to use menu System-&gt;Short Message. From here we will prepare a short test message. If you don't want to wait for your batch job to run to find out if your message went through, just jump back to transaction SCOT. From the System Status view you can choose Ctrl+F7 or the Execute Icon to start the send process for a communication type. You should receive your test message if everything is setup fine.  &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Trouble Shooting&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Let's say that everything didn't go fine. Where do we start trouble shooting? Once again start with the transaction SCOT. The system status shows us our status overview. You can see the number of messages in Error or Waiting. If you have a lot of messages in Waiting status, your send job probably isn't scheduled.  The overview screen is nice, but you probably want more details. From SCOT you can choose Utilities-&gt;Overview of Send Orders (Or Tcode SOST). This transaction will give a detailed report by Address type, status, date, time and sender. For each message we can view the transmission history, the message itself, and the trace log. You can also try and resubmit the message from here. If you need to activate tracing, you want to return to transaction SCOT. You then choose Utilities-&gt;Trace-&gt;Internal Trace. You can also view all traces from here without having to go through SOST.   &lt;strong&gt;&lt;span style="font-size:100%;"&gt;ABAP Coding&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;If everything has worked up to this point, then you are ready to start writing your own E-mail calls in ABAP. The example I am going to share with you is actually a function module that we wrote. We wanted to write a function module that would really simplify the process of sending E-mail for our newer ABAP developers. We wanted them to just specify a few parameters and be off and running without having to understand the BCS classes. Hopefully you will find this function module helpful as well as being a good tutorial on how to use the BCS classes.  &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Function Interface&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The function module Interface is quite simple in that it only has 3 input parameters.&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email12.jpg" alt="image" border="0" height="152" width="595" /&gt; The first is an optional parameter used to set what requested statuses types will be returned. You can specify N for No Statuses, E for Only Error Statuses, or A for All Statuses.  The second parameter is an internal table that will hold all of our document parts. The following is the line type that defines this internal table type:&lt;br /&gt;&lt;img src="" /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email13.jpg" alt="image" border="0" height="236" width="597" /&gt;&lt;br /&gt;The first entry in this table will become our E-Mail Body. All other parts will become attachments in the email. For each record in this table you must specify the document type as a value defined in the foreign key table TSOTD. You can also supply the subject line (or attachment name) in the subject field. You can then specify the content of this document part in either the CONTENT_TEXT (ASCII text) or CONTENT_HEX (Binary data such as PDFs). You will notice that the structure of these two content areas match those used by the API function modules in 46D and lower. This makes for a very easy change from the API function modules to the BCS Classes. The third parameter is another internal table that will hold all of our recipients. The following is the line type that defines this internal table type:&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email14.jpg" alt="image" border="0" height="279" width="589" /&gt;&lt;br /&gt;The calling program has the choice of setting a full email address directly into the C_ADDRESS field or just specifying an SAP User ID in the UNAME field. If the calling program chooses to use the UNAME field, the function module will lookup the user's E-Mail address from their user master record. Finally there are several flags that can be set per recipient such as No Forward, Express Message, etc. The function module has no Exporting, Changing, or table parameters. The only exception that is returned is the BCS Exception class itself: CX_BCS.&lt;br /&gt;&lt;img src="https://weblogs.sdn.sap.com/weblogs/images/1918/email15.jpg" alt="image" border="0" height="129" width="478" /&gt;  &lt;strong&gt;&lt;span style="font-size:100%;"&gt;Function Module Code&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;We start off the coding in our function module with a few class definitions.  We then some variable declarations.&lt;br /&gt;&lt;textarea rows="20" cols="79"&gt;*----------------------------------------------------------------------* * CLASS-DEFINITIONS                                                    * *----------------------------------------------------------------------*   DATA: send_request       TYPE REF TO cl_bcs.   DATA: document           TYPE REF TO cl_document_bcs.   DATA: sender             TYPE REF TO cl_sapuser_bcs.   DATA: recipient          TYPE REF TO if_recipient_bcs.   DATA: exception_info     TYPE REF TO if_os_exception_info,         bcs_exception      TYPE REF TO cx_bcs.  *----------------------------------------------------------------------* * INTERNAL TABLES                                                      * *----------------------------------------------------------------------*   DATA: l_mailtext TYPE soli_tab.   DATA: l_mailhex  TYPE solix_tab.   DATA: iaddsmtp   TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE.   DATA: ireturn    TYPE bapiret2 OCCURS 0 WITH HEADER LINE.  *----------------------------------------------------------------------* * VARIABLES                                                            * *----------------------------------------------------------------------*   DATA: mail_line  LIKE LINE OF l_mailtext.   DATA: mailx_line LIKE LINE OF l_mailhex.   DATA: bapiadsmtp         TYPE bapiadsmtp.  *----------------------------------------------------------------------* * CONSTANTS                                                            * *----------------------------------------------------------------------*   CONSTANTS:     kimball_domain(12) TYPE c VALUE '@kimball.com'.    CLASS cl_cam_address_bcs DEFINITION LOAD.   CLASS cl_abap_char_utilities DEFINITION LOAD. &lt;/textarea&gt; Next we start the execution code itself. We will wrap all of our code inside a try...catch statement in order to trap any BCS errors. We will then start by creating an instance of the BCS persistent class that we will call send_request.&lt;br /&gt;&lt;textarea rows="3" cols="79"&gt; TRY. * Create persistent send request       send_request = cl_bcs=&gt;create_persistent( ). &lt;/textarea&gt; Now we are ready to create the e-mail content itself. The first record in our documents importing parameter will become the main e-mail document. All other content will be inserted as attachments to this document.&lt;br /&gt;&lt;textarea rows="20" cols="79"&gt; DATA: first(1) TYPE c.       CLEAR first.       DATA: documents_line LIKE LINE OF documents.        LOOP AT documents INTO documents_line.         IF first IS INITIAL.           MOVE 'X' TO first. * Build the Main Document           IF documents_line-content_hex[] IS INITIAL.             document = cl_document_bcs=&gt;create_document(                                 i_type    = documents_line-type                                 i_text    = documents_line-content_text                                 i_subject = documents_line-subject ).           ELSE.             document = cl_document_bcs=&gt;create_document(                                 i_type    = documents_line-type                                 i_hex     = documents_line-content_hex                                 i_subject = documents_line-subject ).           ENDIF.         ELSE.           IF documents_line-content_hex[] IS INITIAL. * Add Attachment             CALL METHOD document-&gt;add_attachment               EXPORTING                 i_attachment_type    = documents_line-type                 i_attachment_subject = documents_line-subject                 i_att_content_text   = documents_line-content_text.           ELSE.             CALL METHOD document-&gt;add_attachment               EXPORTING                 i_attachment_type    = documents_line-type                 i_attachment_subject = documents_line-subject                 i_att_content_hex    = documents_line-content_hex.           ENDIF.         ENDIF.       ENDLOOP. &lt;/textarea&gt;  Now we can add our document (and its attachments) to our send request.&lt;br /&gt;&lt;textarea rows="2" cols="79"&gt;* Add document to send request       CALL METHOD send_request-&gt;set_document( document ). &lt;/textarea&gt; Next we will create a sender object (this function module automatically uses the current user) and place it into our send request.&lt;br /&gt;&lt;textarea rows="6" cols="79"&gt;* Get sender object       sender = cl_sapuser_bcs=&gt;create( sy-uname ). * Add sender       CALL METHOD send_request-&gt;set_sender         EXPORTING           i_sender = sender. &lt;/textarea&gt; Following the sender, we can add our recipients to the e-mail. If requested by the calling program we will lookup the recipients e-mail address from their SAP User Master using the BAPI, BAPI_USER_GET_DETAIL. If an e-mail address isn't maintained there, we will try and create one by concatenating their user id together with our default company domain name.&lt;br /&gt;&lt;textarea rows="20" cols="79"&gt;      DATA: recipients_line LIKE LINE OF recipients.       LOOP AT recipients INTO recipients_line.         IF recipients_line-c_address IS INITIAL. * Create recipient           CLEAR iaddsmtp.           REFRESH iaddsmtp.           CLEAR bapiadsmtp.           CLEAR recipient. * Read the E-Mail address for the user           CALL FUNCTION 'BAPI_USER_GET_DETAIL'             EXPORTING               username = recipients_line-uname             TABLES               return   = ireturn               addsmtp  = iaddsmtp.           LOOP AT iaddsmtp WHERE std_no = 'X'.             CLEAR bapiadsmtp.             MOVE iaddsmtp TO bapiadsmtp.           ENDLOOP. * If no E-mail address was found, create one.           IF bapiadsmtp-e_mail = ''.             CONCATENATE recipients_line-uname kimball_domain                       INTO recipients_line-c_address.           ELSE.             MOVE bapiadsmtp-e_mail TO recipients_line-c_address.           ENDIF.         ENDIF.          recipient = cl_cam_address_bcs=&gt;create_internet_address( recipients_line-c_address ). * Add recipient with its respective attributes to send request         CALL METHOD send_request-&gt;add_recipient           EXPORTING             i_recipient  = recipient             i_express    = recipients_line-i_express             i_copy       = recipients_line-i_copy             i_blind_copy = recipients_line-i_blind_copy             i_no_forward = recipients_line-i_no_foward.        ENDLOOP. &lt;/textarea&gt;  We are almost done now.  All we have to do is set the return status attributes of the message.&lt;br /&gt;&lt;textarea rows="7" cols="79"&gt;* Set that you don't need a Return Status E-mail       DATA: status_mail TYPE bcs_stml.       status_mail = requested_status.       CALL METHOD send_request-&gt;set_status_attributes         EXPORTING           i_requested_status = requested_status           i_status_mail      = status_mail. &lt;/textarea&gt; Remember earlier that I said that e-mails had to wait for a job to run to actually send them out. Well here is opportunity to by-pass this job and send them immediately. The E-mails still get logged in the system and can be monitored from SCOT (or SOST). The following code will trigger the send immediately.&lt;br /&gt;&lt;textarea rows="2" cols="79"&gt;* set send immediately flag       send_request-&gt;set_send_immediately( 'X' ). &lt;/textarea&gt; Finally we tell the system to send our email. We follow this up with a commit work statement. Because the BCS is written as a Persistent Object Class, no activity will take place until we trigger the commit work. We close by catching the BCS errors into the BCS exception class.&lt;br /&gt;&lt;textarea rows="9" cols="79"&gt;* Send document       CALL METHOD send_request-&gt;send( ).        COMMIT WORK.      CATCH cx_bcs INTO bcs_exception.       RAISE EXCEPTION bcs_exception.    ENDTRY. &lt;/textarea&gt;  Finally here is the complete code sample provided for easier viewing:&lt;br /&gt;&lt;textarea rows="10" cols="79"&gt;FUNCTION z_e_keg_send_simple_email. *"---------------------------------------------------------------------- *"*"Local interface: *"  IMPORTING *"     VALUE(REQUESTED_STATUS) TYPE  BCS_RQST DEFAULT 'E' *"     VALUE(DOCUMENTS) TYPE  ZES_KEG_EMAIL_DOCUMENTS *"     VALUE(RECIPIENTS) TYPE  ZES_KEG_EMAIL_RECIPIENTS *"  RAISING *"      CX_BCS *"----------------------------------------------------------------------  *----------------------------------------------------------------------* * CLASS-DEFINITIONS                                                    * *----------------------------------------------------------------------*   DATA: send_request       TYPE REF TO cl_bcs.   DATA: document           TYPE REF TO cl_document_bcs.   DATA: sender             TYPE REF TO cl_sapuser_bcs.   DATA: recipient          TYPE REF TO if_recipient_bcs.   DATA: exception_info     TYPE REF TO if_os_exception_info,         bcs_exception      TYPE REF TO cx_bcs.  *----------------------------------------------------------------------* * INTERNAL TABLES                                                      * *----------------------------------------------------------------------*   DATA: l_mailtext TYPE soli_tab.   DATA: l_mailhex  TYPE solix_tab.   DATA: iaddsmtp   TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE.   DATA: ireturn    TYPE bapiret2 OCCURS 0 WITH HEADER LINE.  *----------------------------------------------------------------------* * VARIABLES                                                            * *----------------------------------------------------------------------*   DATA: mail_line  LIKE LINE OF l_mailtext.   DATA: mailx_line LIKE LINE OF l_mailhex.   DATA: bapiadsmtp         TYPE bapiadsmtp.  *----------------------------------------------------------------------* * CONSTANTS                                                            * *----------------------------------------------------------------------*   CONSTANTS:     kimball_domain(12) TYPE c VALUE '@kimball.com'.    CLASS cl_cam_address_bcs DEFINITION LOAD.   CLASS cl_abap_char_utilities DEFINITION LOAD.    TRY. * Create persistent send request       send_request = cl_bcs=&gt;create_persistent( ).        DATA: first(1) TYPE c.       CLEAR first.       DATA: documents_line LIKE LINE OF documents.        LOOP AT documents INTO documents_line.         IF first IS INITIAL.           MOVE 'X' TO first. * Build the Main Document           IF documents_line-content_hex[] IS INITIAL.             document = cl_document_bcs=&gt;create_document(                                 i_type    = documents_line-type                                 i_text    = documents_line-content_text                                 i_subject = documents_line-subject ).           ELSE.             document = cl_document_bcs=&gt;create_document(                                 i_type    = documents_line-type                                 i_hex     = documents_line-content_hex                                 i_subject = documents_line-subject ).           ENDIF.         ELSE.           IF documents_line-content_hex[] IS INITIAL. * Add Attachment             CALL METHOD document-&gt;add_attachment               EXPORTING                 i_attachment_type    = documents_line-type                 i_attachment_subject = documents_line-subject                 i_att_content_text   = documents_line-content_text.           ELSE.             CALL METHOD document-&gt;add_attachment               EXPORTING                 i_attachment_type    = documents_line-type                 i_attachment_subject = documents_line-subject                 i_att_content_hex    = documents_line-content_hex.           ENDIF.         ENDIF.       ENDLOOP.   * Add document to send request       CALL METHOD send_request-&gt;set_document( document ).  * Get sender object       sender = cl_sapuser_bcs=&gt;create( sy-uname ).  * Add sender       CALL METHOD send_request-&gt;set_sender         EXPORTING           i_sender = sender.         DATA: recipients_line LIKE LINE OF recipients.       LOOP AT recipients INTO recipients_line.         IF recipients_line-c_address IS INITIAL. * Create recipient           CLEAR iaddsmtp.           REFRESH iaddsmtp.           CLEAR bapiadsmtp.           CLEAR recipient. * Read the E-Mail address for the user           CALL FUNCTION 'BAPI_USER_GET_DETAIL'             EXPORTING               username = recipients_line-uname             TABLES               return   = ireturn               addsmtp  = iaddsmtp.           LOOP AT iaddsmtp WHERE std_no = 'X'.             CLEAR bapiadsmtp.             MOVE iaddsmtp TO bapiadsmtp.           ENDLOOP. * If no E-mail address was found, create one.           IF bapiadsmtp-e_mail = ''.             CONCATENATE recipients_line-uname kimball_domain                       INTO recipients_line-c_address.           ELSE.             MOVE bapiadsmtp-e_mail TO recipients_line-c_address.           ENDIF.         ENDIF.          recipient = cl_cam_address_bcs=&gt;create_internet_address( recipients_line-c_address ). * Add recipient with its respective attributes to send request         CALL METHOD send_request-&gt;add_recipient           EXPORTING             i_recipient  = recipient             i_express    = recipients_line-i_express             i_copy       = recipients_line-i_copy             i_blind_copy = recipients_line-i_blind_copy             i_no_forward = recipients_line-i_no_foward.        ENDLOOP.  * Set that you don't need a Return Status E-mail       DATA: status_mail TYPE bcs_stml.       status_mail = requested_status.       CALL METHOD send_request-&gt;set_status_attributes         EXPORTING           i_requested_status = requested_status           i_status_mail      = status_mail.  * set send immediately flag       send_request-&gt;set_send_immediately( 'X' ).  * Send document       CALL METHOD send_request-&gt;send( ).        COMMIT WORK.      CATCH cx_bcs INTO bcs_exception.       RAISE EXCEPTION bcs_exception.    ENDTRY. ENDFUNCTION. &lt;/textarea&gt;       &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/u/251694270" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251694270';" target="_top"&gt;Thomas Jung&lt;/a&gt; is an SAP NetWeaver Product Manager focusing on Custom Development - including ABAP, MDM APIs, UI Strategy, and NetWeaver Voice.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-7785251962349538742?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/7785251962349538742/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=7785251962349538742' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/7785251962349538742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/7785251962349538742'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/08/sending-e-mail-from-abap-version-610.html' title='Sending E-Mail from ABAP - Version 610 and Higher - BCS Interface'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-3152021709692108924</id><published>2009-08-12T00:18:00.000-07:00</published><updated>2009-08-12T00:19:19.584-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>Basic ABAP OO eLearnings</title><content type='html'>&lt;p class="sapTxtH1" style="color: rgb(34, 90, 141); font-weight: bold;"&gt;Blogs&lt;/p&gt;  &lt;table border="0" cellpadding="4" cellspacing="4"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td align="left" valign="top" width="65"&gt; &lt;img src="https://weblogs.sdn.sap.com/images/people/thomas_jung.jpg" alt="Thomas Jung" height="85" width="65" /&gt;  &lt;/td&gt; &lt;td align="left" valign="top" width="100%"&gt; &lt;h3&gt;Basic ABAP OO eLearnings&lt;br /&gt;&lt;span class="sapTxtSml" style="font-weight: normal;"&gt;&lt;nobr&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/u/251694270" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251694270';" target="_top"&gt;Thomas Jung&lt;/a&gt; &lt;img src="https://weblogs.sdn.sap.com/images/icons/sap.gif" alt="SAP Employee" border="0" height="10" width="20" /&gt;&lt;/nobr&gt;&lt;br /&gt;&lt;!-- Business card --&gt;&lt;a href="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.sdn.businesscard.SDNBusinessCard?u=5%2BhLK9C3p0Q%3D"&gt;Business Card&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Company: &lt;/b&gt;SAP Labs, LLC&lt;br /&gt;Posted on Aug. 11, 2009 06:29 AM in &lt;!-- Category: 29 --&gt;&lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/29"&gt;ABAP&lt;/a&gt;&lt;!-- Category: 46 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/46"&gt;Beginner&lt;/a&gt;&lt;!-- Category: 24 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/24"&gt;Business Server Pages&lt;/a&gt;&lt;!-- Category: 43 --&gt;, &lt;a href="https://weblogs.sdn.sap.com/weblogs/topic/43"&gt;Web Dynpro&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;/td&gt; &lt;td align="right" valign="top" width="80"&gt; &lt;!-- begin print options --&gt; &lt;table align="right" border="0" cellpadding="2" cellspacing="0" width="70"&gt;  &lt;tbody&gt;&lt;tr&gt; &lt;td align="right" width="18"&gt; &lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/rss_18.gif" alt="Subscribe." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="http://weblogs.sdn.sap.com/pub/q/weblogs_rss?x-ver=1.0&amp;amp;x-mimetype=application%2Frdf%2Bxml" target="_top"&gt;Subscribe&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="javascript:this.window.print();"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/print_18.gif" alt="Print." border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="javascript:this.window.print();"&gt;Print&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td align="right" width="18"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15408" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15408';"&gt;&lt;img src="https://weblogs.sdn.sap.com/images/icons/permalink_18.gif" alt="Permalink" border="0" height="18" hspace="3" vspace="0" width="18" /&gt;&lt;/a&gt;&lt;/td&gt; &lt;td class="sapTxtSml" align="left" nowrap="nowrap"&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15408" target="_top" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/15408';"&gt;Permalink&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;!-- end print options --&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div class="sapTxtSml"&gt;        &lt;h3&gt;Introduction &lt;/h3&gt;&lt;p&gt;This blog introduces a 5 part eLearning series based upon a frequent request – to look at basic ABAP Object Oriented concepts. Throughout this series we will look at OO terminology, development tools, and design patterns that span a variety of ABAP release levels. We will try to keep the discussion away from all the new cutting edge syntax so that it is still quite usable for those of you on older releases like 4.6C or 6.20. &lt;/p&gt;&lt;p&gt;For the 5 part series we will start with Part 1 looking at tooling (the ABAP Class Builder) and some basic terminology. In Part 2 we will expand the lesson by looking at static vs. instance, visibility, exception classes, inheritance, polymorphism and abstract classes. In part 3 we will see how a special type of class, called a persistent object, can be used for Object Oriented access to the database. In part 4 we will explore Object Oriented concepts in User Interface technologies. Keeping with the theme of older release levels, we will focus this part on using Model View Controller and OO eventing within Classic Dynpro applications. Finally in part 5 we will look at real world, complex example that uses all the techniques and technologies from the previous parts.&lt;/p&gt;&lt;h3&gt;Part 1 - Basics&lt;/h3&gt;&lt;p&gt;In Part1 of the eLearning we start with the very most basic concepts. We will explore the class builder tool within SE80 and discuss some of the terminology that you need to know in order to begin to learn Object Oriented design and development.&lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/d0458046-0349-2c10-be9e-b1c24e7dc5d4" target="_top"&gt;Part 1 Video&lt;/a&gt; Running Time: 53 Minutes&lt;/p&gt;&lt;h3&gt;Part 2 - Classes, Inheritance, Visibility, Polymorphism&lt;/h3&gt;&lt;p&gt;In this part, we will expand the lesson by looking at static vs. instance, visibility, exception classes, inheritance, polymorphism and abstract classes. We start with a very basic class with only static methods that works very much like a Function Group/Function Modules. Next we change the methods into instance methods and see how a class instance allows us to model complex data structures and relationships in code. Then we see how exception classes can make our exceptions more meaningful and simplify the surrounding code for dealing with exceptions. Finally we see the real power of object oriented design come to life as we use inheritance and polymorphism to hide the inner complexity of our business logic from calling applications all while ensuring uniform execution of our code. These techniques may feel foreign at first, but in the long run they lead to code that is easier and safer to maintain. &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/702a1a1a-0749-2c10-60bc-fac23e642bac" target="_top"&gt;Part 2 Video&lt;/a&gt; Running Time: 1 Hour, 10 Minutes&lt;/p&gt;&lt;h3&gt;Part 3 - Persistant Objects&lt;/h3&gt;In this part, we will expand the lessons of the previous tutorial and look at a special type of class in ABAP – the Persistent Object. Persistent Objects are an OO-based approach to the types of data access that you would normally perform with SQL statements. With Persistent Objects you don’t code any SQL statements. Instead a class is generated for you that contains SET and GET methods for reading and updating data. ABAP Persistent Objects also contain the functionality for more complex update scenarios – like V2 Asynchronous updates. &lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/5013ab26-0e54-2c10-e9b6-d897ba834c6e" target="_top"&gt;Part 3 Video&lt;/a&gt; Running Time: 1 Hour, 9 Minutes&lt;/p&gt;&lt;h3&gt;Part 4 - User Interface &lt;/h3&gt;&lt;p&gt;In this part, we look at the special use case of Object Oriented technology and design techniques as they are applied to User Interface creation. Throughout all the ABAP UI technologies, we study how MVC (Model View Controller) design can be applied. We look briefly at BSP and Web Dynpro ABAP and OO effects the overall design as well as specific features like UI element rendering and eventing. We close with an example of how you can adapt even Classic Dynpro and its PBO/PAI processing looks to a more Object Oriented MVC flow. &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/b078afac-e85b-2c10-03ac-94ce6ae84a7a" target="_top"&gt;Part 4 Video&lt;/a&gt; Running Time: 1 Hour&lt;/p&gt;&lt;h3&gt;Part 5 - Putting It All Together&lt;/h3&gt;&lt;p&gt;In this final entry in the 5 part ABAP OO series, we examine examples of how SAP puts the techniques that we learned in the previous 4 sessions to work within the standard code that they deliver to customers. We start by looking at the CL_BCS classes for sending email. CL_BCS* serves as a perfect example of the use of Persistent Objects and Polymorphism. We also look at the functionality behind the new ABAP Code Completion feature in the ABAP Editor. This block of code uses Persistent Objects, Inheritance/Polymorphism, Exception Classes, and MVC structured Classic Dynpro. &lt;/p&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/c093d4e1-8264-2c10-c1bb-8b9535a2c99e" target="_top"&gt;Part 5 Video&lt;/a&gt; Running Time: 42 Minutes&lt;/p&gt;&lt;h3&gt;Source Code&lt;/h3&gt;&lt;p&gt;&lt;a href="https://www.sdn.sap.com/irj/scn/elearn?rid=/library/uuid/60fb6575-8364-2c10-bfaa-92f48530f19e" target="_blank"&gt;Source Code Download&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The source code for this tutorial is provided in two different formats. The directories cofiles and data contain ABAP transport files with all the development objects contained in this tutorial. If you have access and permission to import transport files from external systems, this can be a good way to import the tutorial source code. All objects are imported at once and all development object types are supported. However you should only use this approach if you are importing into a 7.0 or higher level system. The transport files contain development objects (like Web Dynpro ABAP) that only exist at this development level. If you import the transport in earlier releases, you will receive import errors.&lt;/p&gt;&lt;p&gt;The other solution is to import the development objects using SAPlink. SAPlink is not an SAP provided or supported solution. It is a community created project for exporting and importing ABAP development objects in XML format. You can read more about SAPlink at &lt;a href="http://www.saplink.org/" target="_top"&gt;http://www.saplink.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The SAPlink files are the ones with the file extension NUGG. I have divided the SAPlink files into smaller groups so that you can import just the objects that you want and avoid technologies that might not be supported on your release level. The main drawback to SAPlink is that it doesn't have a plug-in that supports persistent objects. Therefore it is not possible to include the persistent classes from Part 3 of the Tutorial. I have still included the data dictionary objects and programs from this section of the tutorial.&lt;/p&gt;&lt;p&gt;The following is the listing of the SAPlink objects and the suggested order of import:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO - these are basic classes and programs from Tutorial #1 and #2. They should be usable back to WebAS 6.10 and higher based releases.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_PERSISTENT_DDIC - these are the only the data dictionary objects used in Tutorial #3.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_PERSISTENT_PROGRAMS - these are the dynpro programs that are used to test the persistent classes from Tutorial #3. They need the persistent objects that cannot be offered via SAPlink. You would need to create the persistent objects manually before you could import these programs&lt;br /&gt;without error.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_PERSISTENT_PROGRAMS_702 - These would mostly be an item of curiosity. For proper import they would require an ABAP 7.02 based system (which isn't available yet as of Aug 2009) or NetWeaver 7.1x or higher (of which there is not version of the Business Suite that runs on this&lt;br /&gt;NetWeaver release). Chances are low that there are many people who could import these objects without syntax errors. However knowing this, you might still want to study the code to see what will be possible in the near future.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_UI_DDIC - From Tutorial #4 - these are the data dictionary objects that are used throughout the UI based tutorials. Please import these before any of the other UI tutorials and regardless of which UI technology tutorials you are importing.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_UI_DYNPRO - From Tutorial #4 - these are the classic dynpro based tutorials and can be imported into any release level supported by SAPlink (technically the demos should work back in 4.6C as well if you want to recreate them manually).&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_UI_BSP - From Tutorial #4 - these are the BSP (Business Server Pages) related examples. Only import them into a WebAS 6.20 or higher based release level.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;NUGG_AFS_OO_UI_WDA - From Tutorial #4 - these are Web Dynpro ABAP related examples. Only import them into a NetWeaver 7.0 or higher based release level.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;      &lt;/div&gt;  &lt;p class="sapTxtSml"&gt;&lt;i&gt;&lt;a href="https://weblogs.sdn.sap.com/pub/u/251694270" onclick="this.href='https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/u/251694270';" target="_top"&gt;Thomas Jung&lt;/a&gt; is an SAP NetWeaver Product Manager focusing on Custom Development - including ABAP, MDM APIs, UI Strategy, and NetWeaver Voice.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-3152021709692108924?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/3152021709692108924/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=3152021709692108924' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/3152021709692108924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/3152021709692108924'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/08/basic-abap-oo-elearnings.html' title='Basic ABAP OO eLearnings'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-8239981990769530990</id><published>2009-06-05T00:52:00.000-07:00</published><updated>2009-06-05T01:01:00.691-07:00</updated><title type='text'>SAP IDES ECC 5+ Demo flight Data Generation</title><content type='html'>Buddy, I was wondering a while for seeking the T.Code to create demo data for Flight model for training purpose. Finally, the beauty just comes to me, :D. Its T.Code is &lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;BC_DATA_GEN&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Good luck buddies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-8239981990769530990?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/8239981990769530990/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=8239981990769530990' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8239981990769530990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/8239981990769530990'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/06/sap-ides-ecc-5-demo-flight-data.html' title='SAP IDES ECC 5+ Demo flight Data Generation'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-2869398716967384542</id><published>2009-04-13T20:52:00.001-07:00</published><updated>2009-04-13T21:24:34.692-07:00</updated><title type='text'>FM Parsing Select option for displaying in ALV header</title><content type='html'>&lt;style type="text/css"&gt; SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style: italic; color: #808080; } .L1S32 { color: #3399FF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } &lt;/style&gt; &lt;span&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;      Form  f_parse_select_option&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*       text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*      --&gt;SIGN       text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*      --&gt;OPTION     text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*      --&gt;LOW        text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*      --&gt;HIGH       text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*      --&gt;TEXT       text&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;form&lt;/span&gt; f_parse_select_option &lt;span class="L1S52"&gt;tables&lt;/span&gt; t_sel&lt;br /&gt;                           &lt;span class="L1S52"&gt;changing&lt;/span&gt; o_text.&lt;br /&gt;  &lt;span class="L1S52"&gt;constants&lt;/span&gt; lt_e_txt &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;c&lt;/span&gt; length &lt;span class="L1S32"&gt;3&lt;/span&gt; &lt;span class="L1S52"&gt;value&lt;/span&gt; &lt;span class="L1S33"&gt;'#'&lt;/span&gt;.&lt;br /&gt;  &lt;span class="L1S52"&gt;data&lt;/span&gt;: li_length &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;  &lt;span class="L1S52"&gt;field&lt;/span&gt;-symbols: &amp;#60;fs&amp;#62;     &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;any&lt;/span&gt;,&lt;br /&gt;                 &amp;#60;sign&amp;#62;   &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;any&lt;/span&gt;,&lt;br /&gt;                 &amp;#60;option&amp;#62; &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;any&lt;/span&gt;,&lt;br /&gt;                 &amp;#60;low&amp;#62;    &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;any&lt;/span&gt;,&lt;br /&gt;                 &amp;#60;high&amp;#62;   &lt;span class="L1S52"&gt;type&lt;/span&gt; &lt;span class="L1S52"&gt;any&lt;/span&gt;.&lt;br /&gt;  &lt;span class="L1S52"&gt;loop&lt;/span&gt; &lt;span class="L1S52"&gt;at&lt;/span&gt; t_sel[] &lt;span class="L1S52"&gt;assigning&lt;/span&gt; &amp;#60;fs&amp;#62;.&lt;br /&gt;    &lt;span class="L1S52"&gt;assign&lt;/span&gt; &lt;span class="L1S52"&gt;component&lt;/span&gt; &lt;span class="L1S33"&gt;'SIGN'&lt;/span&gt; &lt;span class="L1S52"&gt;of&lt;/span&gt; &lt;span class="L1S52"&gt;structure&lt;/span&gt; &amp;#60;fs&amp;#62; &lt;span class="L1S52"&gt;to&lt;/span&gt; &amp;#60;sign&amp;#62;.&lt;br /&gt;    &lt;span class="L1S52"&gt;assign&lt;/span&gt; &lt;span class="L1S52"&gt;component&lt;/span&gt; &lt;span class="L1S33"&gt;'OPTION'&lt;/span&gt; &lt;span class="L1S52"&gt;of&lt;/span&gt; &lt;span class="L1S52"&gt;structure&lt;/span&gt; &amp;#60;fs&amp;#62; &lt;span class="L1S52"&gt;to&lt;/span&gt; &amp;#60;option&amp;#62;.&lt;br /&gt;    &lt;span class="L1S52"&gt;assign&lt;/span&gt; &lt;span class="L1S52"&gt;component&lt;/span&gt; &lt;span class="L1S33"&gt;'LOW'&lt;/span&gt; &lt;span class="L1S52"&gt;of&lt;/span&gt; &lt;span class="L1S52"&gt;structure&lt;/span&gt; &amp;#60;fs&amp;#62; &lt;span class="L1S52"&gt;to&lt;/span&gt; &amp;#60;low&amp;#62;.&lt;br /&gt;    &lt;span class="L1S52"&gt;assign&lt;/span&gt; &lt;span class="L1S52"&gt;component&lt;/span&gt; &lt;span class="L1S33"&gt;'HIGH'&lt;/span&gt; &lt;span class="L1S52"&gt;of&lt;/span&gt; &lt;span class="L1S52"&gt;structure&lt;/span&gt; &amp;#60;fs&amp;#62; &lt;span class="L1S52"&gt;to&lt;/span&gt; &amp;#60;high&amp;#62;.&lt;br /&gt;    &lt;span class="L1S52"&gt;case&lt;/span&gt; &amp;#60;sign&amp;#62;.&lt;br /&gt;      &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'I'&lt;/span&gt;.&lt;br /&gt;        &lt;span class="L1S52"&gt;case&lt;/span&gt; &amp;#60;option&amp;#62;.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'EQ'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; lt_e_txt o_text &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'GE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'&gt;='&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'GT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'&gt;'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'LE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt; '&lt;=' &lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'LT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'&lt;'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'BT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'['&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S33"&gt;'-&gt;'&lt;/span&gt; &amp;#60;high&amp;#62; &lt;span class="L1S33"&gt;']'&lt;/span&gt; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NB'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;']'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S33"&gt;'-&gt;'&lt;/span&gt; &amp;#60;high&amp;#62; &lt;span class="L1S33"&gt;'['&lt;/span&gt; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'CP'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NP'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;        &lt;span class="L1S52"&gt;endcase&lt;/span&gt;.&lt;br /&gt;      &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'E'&lt;/span&gt;.&lt;br /&gt;        &lt;span class="L1S52"&gt;case&lt;/span&gt; &amp;#60;option&amp;#62;.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'EQ'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'GE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &lt;span class="L1S33"&gt;'&gt;='&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'GT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &lt;span class="L1S33"&gt;'&gt;'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'LE'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &lt;span class="L1S33"&gt;'&lt;='&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'LT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &lt;span class="L1S33"&gt;'&lt;'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'BT'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;']'&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S33"&gt;'-&gt;'&lt;/span&gt; &amp;#60;high&amp;#62; &lt;span class="L1S33"&gt;'['&lt;/span&gt; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NB'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'['&lt;/span&gt; &amp;#60;low&amp;#62; &lt;span class="L1S33"&gt;'-&gt;'&lt;/span&gt; &amp;#60;high&amp;#62; &lt;span class="L1S33"&gt;']'&lt;/span&gt; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'CP'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;          &lt;span class="L1S52"&gt;when&lt;/span&gt; &lt;span class="L1S33"&gt;'NP'&lt;/span&gt;.&lt;br /&gt;            &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text lt_e_txt &amp;#60;low&amp;#62; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;        &lt;span class="L1S52"&gt;endcase&lt;/span&gt;.&lt;br /&gt;    &lt;span class="L1S52"&gt;endcase&lt;/span&gt;.&lt;br /&gt;    &lt;span class="L1S52"&gt;concatenate&lt;/span&gt; o_text &lt;span class="L1S33"&gt;'/'&lt;/span&gt; &lt;span class="L1S52"&gt;into&lt;/span&gt; o_text &lt;span class="L1S52"&gt;separated&lt;/span&gt; &lt;span class="L1S52"&gt;by&lt;/span&gt; space.&lt;br /&gt;  &lt;span class="L1S52"&gt;endloop&lt;/span&gt;.&lt;br /&gt;  &lt;span class="L1S52"&gt;condense&lt;/span&gt; o_text.&lt;br /&gt;  li_length = &lt;span class="L1S52"&gt;strlen&lt;/span&gt;( o_text ) - &lt;span class="L1S32"&gt;1&lt;/span&gt;.&lt;br /&gt;  o_text = o_text+&lt;span class="L1S32"&gt;0&lt;/span&gt;(li_length).&lt;br /&gt;  &lt;span class="L1S52"&gt;condense&lt;/span&gt; o_text.&lt;br /&gt;&lt;span class="L1S52"&gt;endform&lt;/span&gt;.                    &lt;span class="L1S31"&gt;"f_parse_select_option&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-2869398716967384542?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/2869398716967384542/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=2869398716967384542' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/2869398716967384542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/2869398716967384542'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/04/fm-parsing-select-option-for-displaying.html' title='FM Parsing Select option for displaying in ALV header'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-4598270190765202347</id><published>2009-03-30T20:25:00.001-07:00</published><updated>2009-03-30T20:25:29.886-07:00</updated><title type='text'>BAPI for Details of Sales Order</title><content type='html'>BAPISDORDER_GETDETAILEDLIST&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-4598270190765202347?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/4598270190765202347/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=4598270190765202347' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/4598270190765202347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/4598270190765202347'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2009/03/bapi-for-details-of-sales-order.html' title='BAPI for Details of Sales Order'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-2292604044860359716</id><published>2008-11-20T23:44:00.000-08:00</published><updated>2008-11-21T04:55:53.899-08:00</updated><title type='text'>User Exits &amp; BADIs</title><content type='html'>So, just KIS, what are they?&lt;br /&gt;&lt;br /&gt;First, User Exist, according to the definition in SAP Wiki, is "a common term that is used when we need to do any extra specific functionality over and above the SAP standard coding. User exits are anticipated point of enhancement delivered by SAP. These user exits are nothing but well defined interfaces and are stable."&lt;br /&gt;&lt;br /&gt;So, BADIs is like User Exit but  implemented using ABAP Objects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-2292604044860359716?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/2292604044860359716/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=2292604044860359716' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/2292604044860359716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/2292604044860359716'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2008/11/user-exits-badis.html' title='User Exits &amp; BADIs'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-1902538464096146937</id><published>2008-11-05T23:45:00.000-08:00</published><updated>2008-11-06T00:45:34.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>ABAP Objects in Action: Screen Programming with the Control Framework</title><content type='html'>&lt;h1 style="font-weight: bold;"&gt;&lt;a href="http://www.sapinsideronline.com/archive/volume_01_%282000%29/issue_01_%28june%29/v1i1a06.cfm"&gt;&lt;span style="font-size:100%;"&gt;&lt;article_title&gt;ABAP Objects in Action: Screen Programming with the Control Framework&lt;!-- InstanceEndEditable --&gt;&lt;/article_title&gt;&lt;/span&gt;&lt;/a&gt;     &lt;/h1&gt;    &lt;span style="font-size:100%;"&gt;&lt;article_author&gt;&lt;!-- InstanceBeginEditable name="article_author" --&gt;&lt;em&gt;by Horst Keller and Gisbert Loff, SAP &lt;/em&gt;&lt;!-- InstanceEndEditable --&gt;&lt;/article_author&gt;&lt;/span&gt;   &lt;span class="hidden"  style="font-size:100%;"&gt;&lt;article_categories&gt;&lt;!-- InstanceBeginEditable name="article_categories" --&gt; &lt;/article_categories&gt;&lt;/span&gt;&lt;p&gt;&lt;span class="hidden"  style="font-size:100%;"&gt;&lt;b&gt;Categories: &lt;/b&gt;Development/Programming&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;!-- InstanceEndEditable --&gt;&lt;/p&gt;      &lt;span style="font-size:100%;"&gt;&lt;article_abstract&gt;&lt;!-- InstanceBeginEditable name="article_abstract" --&gt; &lt;!--This article demonstrates how to use controls with ABAP Objects to program single-screen user interfaces. It also takes you step-by-step through the development process and provides sample code that serves as a starting point for creating more inviting user interfaces.--&gt;  &lt;!-- InstanceEndEditable --&gt;&lt;/article_abstract&gt;&lt;article_private&gt;&lt;!-- InstanceBeginEditable name="article_private" --&gt;       &lt;/article_private&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;This article demonstrates how to use controls with ABAP Objects to program single-screen  user interfaces. It also takes you step-by-step through the development process  and provides sample code that serves as a starting point for creating more inviting  user interfaces.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;If you have attended a recent training class or SAP demonstration where SAP's "flight model" was used as a database, you should recognize the abbreviations AA, AZ, and so on, shown on the flight information screen in &lt;b&gt;Figure 1&lt;/b&gt;. But compared to classical training examples, the screen in Figure 1 is much fancier. The upper left portion shows an airplane graphic that has no functionality - it is for visual purposes only. On the lower left is a tree structure, from which users can select carriers or flight connections from SAP's flight model. The third pane displays the Web site of the selected carrier or the detail lists for flight connections. &lt;/p&gt;       &lt;p&gt; This is just one example of the kinds of easy-to-use, easy-to-navigate interfaces that you can provide users when you combine the strengths of GUI control technology with ABAP Objects. &lt;/p&gt;       &lt;p&gt; In this article, we show you how to use controls with ABAP Objects to program single-screen user interfaces. After providing an overview of the control framework, we will take you step by step through the development process and provide some sample code - which will run in R/3 Release 4.6 - that you can use as a starting point for creating more inviting user interfaces in your own applications.&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;img src="http://www.sapinsideronline.com/archive/images/24-0100.gif" border="1" /&gt;&lt;/p&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Figure 1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width="95%"&gt;&lt;span style="font-size:100%;"&gt;User Interface of the Flight Model Program&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Control Technology Overview&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; The R/3 system communicates with the user via screens on the frontend. In classical ABAP programming, screens may contain input/output fields, checkboxes, radio buttons, and push buttons to interact with the user.&lt;/p&gt;       &lt;p&gt; All user actions that raise the runtime event PAI (Process After Input) and the respective processing on the application server are connected to a function code that is transported to the application server.¹&lt;/p&gt;       &lt;p&gt;&lt;b&gt; Controls in General&lt;/b&gt; &lt;/p&gt;       &lt;p&gt;Controls are independent software components that are shipped with the SAP GUI, beginning with Release 4.5. You can place controls on screens to either replace or work alongside classical components - both are supported in parallel. SAP currently supports ActiveX controls for Microsoft Windows platforms and JavaBeans for the SAP GUI in the Java environment. &lt;/p&gt;       &lt;p&gt; Note that controls provide a great deal of functionality and can keep a lot of data at the presentation server without putting weight on the application server (for example, during scrolling and editing of texts). On the other hand, frequent data exchange between the frontend and backend may increase the network load. Therefore, controls are appropriate when most of the work can be done at the frontend and when exchange with the backend does not occur too often. &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Control Framework&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; In order to facilitate programming with controls, starting with Release 4.6, the SAP Basis system provides a control framework (CFW). The CFW encapsulates all available controls in global classes of ABAP Objects. To work with controls on your screen, simply create objects of these global classes, call their methods, and react on their events. Since the CFW classes are part of an inheritance hierarchy, these classes provide a standardized interface for most of the common functionality you will find in the controls. &lt;/p&gt;       &lt;p&gt;The CFW distinguishes between &lt;i&gt;container controls&lt;/i&gt; and &lt;i&gt;application          controls&lt;/i&gt;. Application controls are the components you want to use on the screen. Container controls provide a software layer that standardizes all layout-related issues and the implementation of application controls. All application controls must be linked to a container control while the container control is linked to an area of the screen (see&lt;b&gt; Figure 2&lt;/b&gt;).        &lt;/p&gt;       &lt;img style="width: 360px; height: 226px;" src="http://www.sapinsideronline.com/archive/images/26-0100.gif" border="1" /&gt;        &lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;         &lt;tbody&gt;&lt;tr&gt;            &lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;b&gt;Figure 2&lt;/b&gt;&lt;/td&gt;           &lt;td width="95%"&gt;Container Controls and Application Controls on Screens&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;       &lt;p&gt;&lt;b&gt;Container Controls&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; Container controls provide areas on the screen that can be used for application controls. The most important container controls are encapsulated in the following global classes²: &lt;/p&gt;       &lt;ul type="square"&gt;&lt;li&gt;&lt;b&gt; CL_GUI_CUSTOM_CONTAINER: &lt;/b&gt;When you create an object of this class, you must link it to a custom control on a screen via the IMPORTING parameter container_name of its constructor. You can use the Screen Painter to create one or several custom controls within the area of one screen, and you can use custom controls together with classical screen elements. Any application control that you link to a custom container will appear within its screen area.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt;CL_GUI_DOCKING_CONTAINER:&lt;/b&gt; When you create an object of this class, you must link it to one of the four edges of a screen. By doing so, you create a new area docked to a screen without using the Screen Painter. Any application control that you link to a docking container will appear within that screen area.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; CL_GUI_SPLITTER_CONTAINER:&lt;/b&gt; When you create an object of this class, you must link it to an already existing container control. By doing so, you split the area of the existing control either vertically or horizontally into two new areas, as was done to create the screen in Figure 1. You can then link application controls to the new areas. You can also nest splitter controls to create more areas.&lt;/li&gt;&lt;/ul&gt;       &lt;p&gt;&lt;b&gt; Application Controls&lt;/b&gt; &lt;/p&gt;       &lt;p&gt;After creating objects of container controls, you can create objects of application controls - the components you want to use onscreen. You must link each application control to an object of a container control. You can do this by simply passing the respective reference to the parameter parent of the application control's constructor. Important application controls and their respective global classes are: &lt;/p&gt;       &lt;ul type="square"&gt;&lt;li&gt;&lt;b&gt; CL_GUI_ALV_GRID:&lt;/b&gt; This control allows you to display interactive lists. (ALV stands for ABAP List Viewer, which replaces classical list processing.)&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; CL_GUI_HTML_VIEWER: &lt;/b&gt;This control allows you to display HTML documents. For example, the new help viewer of the ABAP keyword documentation uses an HTML control.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; CL_GUI_PICTURE: &lt;/b&gt;This control allows you to display any given picture on an R/3 screen. For example, the airplane in Figure 1 is displayed in a picture control. SAP Easy Access is another example of a picture control as background.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; CL_GUI_SIMPLE_TREE:&lt;/b&gt; This control allows you to display and work with a tree structure. In addition to the simple tree, there are also other kinds of trees available. For example, the Object Navigator of the ABAP Workbench uses a tree control.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; CL_GUI_TEXTEDIT: &lt;/b&gt;This control implements a full-fledged editor for viewing and maintaining texts. For example, the ABAP Editor uses a textedit control. &lt;/li&gt;&lt;/ul&gt;       &lt;p&gt;&lt;b&gt;Control Methods&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; You use the methods defined in the control's classes to work with the controls displayed on the screen. In general, you work with the methods of the application controls. You would use these, for example, to fill text from an internal table into the text editor of the textedit control. But sometimes you will also call methods of the CFW. In order to minimize the network load between backend and frontend, method calls are buffered in an automation queue before being sent to the frontend at defined synchronization points, such as at the end of PBO (Process Before Output) processing. To force a synchronization point in your program, you can call the static method cl_gui_cfw=&gt; flush. &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Control Events and Event Handling&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; User actions on controls can trigger events. However, the events of controls are not classical screen events, which trigger the PAI processing at the application server and send a function code. Instead, they are declared as ABAP Objects events in their global wrapper classes. For performance reasons, a user action on controls is not automatically passed back to the application server. If you want an event to be passed back to the application server, you must register it in your program using the special method set_registered_events, which is available in all application controls. You can specify two kinds of event handling: &lt;/p&gt;       &lt;ul type="square"&gt;&lt;li&gt;&lt;b&gt;System Events (default): &lt;/b&gt;The event is            passed to the application server, but does not trigger the PAI event            (see &lt;b&gt;Figure 3&lt;/b&gt;). In order to react on the event, you must register an event handler method in your ABAP program with the SET HANDLER statement. This method is then executed on the application server.&lt;br /&gt;&lt;br /&gt;     &lt;i&gt;Pros and cons:&lt;/i&gt; The benefits of using this default technique is that the event handler method is executed automatically. There also are no conflicts with the classical automatic input checks associated with the screen. The disadvantage is that the contents of the classical screen fields that might exist alongside controls are not automatically transported to the program. &lt;table border="1" bordercolor="#330099" cellpadding="5" cellspacing="0" width="100"&gt;             &lt;tbody&gt;&lt;tr&gt;                &lt;td&gt;                  &lt;p&gt;&lt;b&gt;&lt;img src="http://www.sapinsideronline.com/archive/volume_01_%282000%29/backup/04/check_mark.gif" height="7" width="6" /&gt;TIP:&lt;/b&gt; If you work with classical screen fields and you really need to transport their contents during control event handling, you can call the static method cl_gui_cfw=&gt;set_new_ok_code to set a function code and trigger the PAI event, including a field transport. After PAI has been processed, the PBO event of the next screen is triggered (see Figure 3). &lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;                      &lt;img style="width: 354px; height: 226px;" src="http://www.sapinsideronline.com/archive/images/28a-0100.gif" border="1" /&gt;            &lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;             &lt;tbody&gt;&lt;tr&gt;                &lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;b&gt;Figure 3&lt;/b&gt;&lt;/td&gt;               &lt;td width="95%"&gt;Handling of System Events&lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;                    &lt;/li&gt;&lt;li&gt;                       &lt;b&gt;Application Events: &lt;/b&gt;With this second type of event handling, the event is passed to the application server and triggers the PAI (see &lt;b&gt;Figure 4&lt;/b&gt;). If you want to handle the event, you must include a method call for cl_gui_cfw=&gt;dispatch in an appropriate PAI dialog module. The dispatch method calls all event handler methods that are defined and registered with the SET HANDLER statement for that event. After the event handler has been processed, control returns to the PAI module and PAI processing continues.&lt;br /&gt;&lt;br /&gt;     &lt;i&gt; Pros and cons:&lt;/i&gt; The advantage of using this method is that you can specify the point at which the event is handled. The contents of the screen fields are also transported to the application server beforehand. The disadvantage is that this kind of event handling can lead to conflicts with the automatic input checks on the screen, which can cause events to be lost.&lt;br /&gt;&lt;br /&gt;Why two types of event handling? You have these options because controls may be displayed on classical ABAP screens, and there may be classical screen elements alongside controls. The flexibility of the two types of event registration and the methods of the CFW, mentioned above, allow you to steer the sequence of data transports between frontend and backend. If you do not use any classical screen components at all, you can simply work with &lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;img style="width: 380px; height: 251px;" src="http://www.sapinsideronline.com/archive/images/28b-0100.gif" border="1" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;system events (the default mode).             &lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;             &lt;tbody&gt;&lt;tr&gt;                &lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;b&gt;Figure 4&lt;/b&gt;&lt;/td&gt;               &lt;td width="95%"&gt;Handling of Application Events&lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;         &lt;/li&gt;&lt;/ul&gt;       &lt;p&gt;&lt;b&gt;Introduction to the Demonstration Program&lt;/b&gt;        &lt;/p&gt;       &lt;p&gt;Our demonstration program is designed to be as simple as possible. It is meant to demonstrate the basic concepts of programming with GUI controls. Because of this, we omitted all superfluous code, and we did not exploit all the possibilities that control technology provides. With the information we provide in this article, you can go on to modify the program to learn more. You can find the code in our example at DEMO_ABAP_ OBJECTS_SPLIT_SCREEN in R/3 Release 4.6C or higher.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Program Structure&lt;/b&gt;&lt;/p&gt;       &lt;p&gt;&lt;b&gt; Figure 5&lt;/b&gt; shows the processing blocks of the demonstration program. The program contains two local classes, screen_init and screen_handler, which are used to create and fill the controls and to react on the user's input. Since controls are displayed on classical ABAP screens, we need a small classical framework to call a carrier screen for our controls. We use the event block LOAD-OF-PROGRAM and two dialog modules for that purpose. &lt;/p&gt;       &lt;p&gt;&lt;b&gt;      Listing 1&lt;/b&gt; shows the coding structure of the program. For our demonstration program, we have chosen the program type 1 (executable). Note that we could have taken one of the other program types that support screens, namely a module pool or a function pool. Choosing an executable just simplifies the program execution, because you can start the program directly from the ABAP Editor. &lt;/p&gt;       &lt;p&gt;The program does not contain any global data declarations, and it does not make use of the classical reporting events such as START-OF-SELECTION. It is simply a container for the three processing blocks of the classical screen framework, shown in Figure 5, and our two local classes. &lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;img style="width: 405px; height: 195px;" src="http://www.sapinsideronline.com/archive/images/30a-0100.gif" border="1" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Figure 5&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width="95%"&gt;&lt;span style="font-size:100%;"&gt;Structure of the Demonstration Program&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;table border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr bgcolor="#ffd991"&gt;      &lt;td&gt;        &lt;pre&gt;&lt;code&gt;PROGRAM demo_abap_objects_split_screen.&lt;br /&gt;* Classes   ***************************************************&lt;br /&gt;CLASS screen_init DEFINITION CREATE PRIVATE.&lt;br /&gt;...&lt;br /&gt;ENDCLASS.&lt;br /&gt;CLASS screen_handler DEFINITION.&lt;br /&gt;...&lt;br /&gt;ENDCLASS.&lt;br /&gt;CLASS screen_init IMPLEMENTATION.&lt;br /&gt;...&lt;br /&gt;ENDCLASS.&lt;br /&gt;CLASS screen_handler IMPLEMENTATION.&lt;br /&gt;...&lt;br /&gt;ENDCLASS.&lt;br /&gt;* Classical processing blocks ********************************&lt;br /&gt;LOAD-OF-PROGRAM.&lt;br /&gt;...&lt;br /&gt;MODULE status_0100 OUTPUT.&lt;br /&gt;...&lt;br /&gt;ENDMODULE.&lt;br /&gt;MODULE cancel INPUT.&lt;br /&gt;...&lt;br /&gt;ENDMODULE.     &lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;Layout of the Demonstration Program&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;The Program at Runtime&lt;/b&gt; &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Figure 6&lt;/b&gt; shows which objects the program uses to create the screen display of the demonstration program, along with the references between these objects. &lt;/p&gt;       &lt;p&gt; During screen display, there is no instance of the local class screen_init because there is no global reference variable in the program that can point to such an instance. An object of screen_init will be created temporarily during each PBO processing of the screen, where it is used as a factory object to create the control objects from the global classes cl_gui_splitter_container, cl_gui_picture, and cl_gui_ simple_tree. After each PBO processing, the object of screen_init will be deleted by the garbage collector. The objects of the global classes are kept alive by pointers from the CFW because they are bound to screen areas. An instance of screen_handler is registered as an event handler for events of object cl_gui_simple_tree. This instance itself holds references to objects of the global classes cl_gui_ html_viewer and cl_gui_alv_grid. The instances of the global classes are linked to controls on the screen via the CFW layer. The two objects of cl_gui_ splitter_container split the screen in the three areas shown in Figure 1. The objects of the application controls are linked to these areas. The objects of cl_gui_html_viewer and cl_gui_alv_grid are both linked to the same area.&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;img style="width: 398px; height: 192px;" src="http://www.sapinsideronline.com/archive/images/30a-0100.gif" border="1" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Figure 6&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width="95%"&gt;&lt;span style="font-size:100%;"&gt;Runtime Objects of the Demonstration Program&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;br /&gt;Demonstration Program in Detail&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;       &lt;p&gt; The following sections explain the definitions and the processing blocks of the demonstration program in detail. (Again, the code shown here is available at DEMO_ABAP_OBJECTS_SPLIT_ SCREEN in Release 4.6C or higher.) &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Classical Screen Framework &lt;/b&gt;&lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 2&lt;/b&gt; shows the complete coding of the three classical processing blocks listed in Figure 5. The ABAP runtime environment raises the event LOAD-OF-PROGRAM at the moment when the program is started. The respective processing block does nothing but call Screen 100. Screen 100 is created with the Screen Painter. In its screen flow logic, the two dialog modules status_0100 and cancel are called during PBO and PAI respectively, the latter with the addition AT EXIT-COMMAND. We did not use the graphical Screen Painter for our example because we have no classical elements on our screen, and we will use an implicit method to create a custom control. The PBO module sets a GUI status. Within that status, the three function codes BACK, EXIT, and CANCEL are defined with function type E (Exit Command) and are activated in the symbol bar. Therefore, the PAI module is called only when the user wants to leave the program. The most important action during PBO is calling the static method init_screen of class screen_handler. All actual screen handling is encapsulated in the two local classes.&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr bgcolor="#ffd991"&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;  LOAD-OF-PROGRAM.&lt;br /&gt;CALL SCREEN 100.&lt;br /&gt;&lt;br /&gt;MODULE status_0100 OUTPUT.&lt;br /&gt;SET PF-STATUS 'SCREEN_100'.&lt;br /&gt;SET TITLEBAR 'TIT_100'.&lt;br /&gt;CALL METHOD screen_init=&gt;init_screen.&lt;br /&gt;ENDMODULE.&lt;br /&gt;&lt;br /&gt;MODULE cancel INPUT.&lt;br /&gt;LEAVE PROGRAM.&lt;br /&gt;ENDMODULE.     &lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 2&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;Classical Processing Blocks of the              Demonstration Program&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt; &lt;b&gt;Local Class Definitions &lt;/b&gt;&lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 3 &lt;/b&gt;shows the declaration parts of the two local classes of the program: screen_init and screen_handler. In each of the declaration parts, two visibility sections are defined by using the statements PUBLIC SECTION and PRIVATE SECTION. Only those class components that must be used from the outside client are declared in the public sections. All other components are encapsulated in the private sections. All attributes are reference variables that refer to global classes of the CFW. Each local class has an instance constructor and private methods that are used to fill the controls with data. &lt;/p&gt;       &lt;p&gt;&lt;b&gt;      &lt;/b&gt;In addition to these general features,          our two local classes also have their own particular features: &lt;/p&gt;       &lt;ul type="square"&gt;&lt;li&gt;Class screen_init has a public static method, init_screen, that can be called without creating an object of that class.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; Class screen_handler has an event handler method handle_node_ double_click that can handle events of the global class cl_gui_ simple_tree.&lt;/li&gt;&lt;/ul&gt;       &lt;p&gt; &lt;b&gt;      &lt;/b&gt;Note the addition CREATE PRIVATE in the definition of screen_init in Listing 3. Objects of class screen_ init can be created only within class screen_init itself.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr bgcolor="#ffd991"&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;  CLASS screen_init DEFINITION CREATE PRIVATE.&lt;br /&gt;PUBLIC SECTION.&lt;br /&gt;CLASS-METHODS init_screen.&lt;br /&gt;METHODS constructor.&lt;br /&gt;PRIVATE SECTION.&lt;br /&gt;DATA: splitter_h TYPE REF TO cl_gui_splitter_container,&lt;br /&gt;      splitter_v TYPE REF TO cl_gui_splitter_container,&lt;br /&gt;      picture TYPE REF TO cl_gui_picture,&lt;br /&gt;      tree TYPE REF TO cl_gui_simple_tree.&lt;br /&gt;METHODS: fill_tree, fill_picture.&lt;br /&gt;ENDCLASS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CLASS screen_handler DEFINITION. PUBLIC SECTION.&lt;br /&gt;METHODS: constructor IMPORTING container&lt;br /&gt;          TYPE REF TO cl_gui_container,&lt;br /&gt;       handle_node_double_click&lt;br /&gt;          FOR EVENT node_double_click&lt;br /&gt;          OF cl_gui_simple_tree&lt;br /&gt;          IMPORTING node_key.&lt;br /&gt;PRIVATE SECTION.&lt;br /&gt;DATA: html_viewer TYPE REF TO cl_gui_html_viewer,&lt;br /&gt;    list_viewer TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;METHODS: fill_html IMPORTING carrid TYPE spfli-carrid,&lt;br /&gt;       fill_list IMPORTING carrid TYPE spfli-carrid&lt;br /&gt;                           connid TYPE spfli-connid.&lt;br /&gt;ENDCLASS.      &lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 3&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;Declaration Parts of the Two Local              Classes&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;br /&gt;Static Method init_screen &lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;       &lt;p&gt;&lt;b&gt;Listing 4&lt;/b&gt; shows the static method init_screen of class screen_init. The single purpose of method init_screen is to create a temporary object of class screen_init. This is done by using a local reference variable, screen. During the CREATE OBJECT statement, the instance constructor of screen_init is executed. Note that after leaving method init_screen, the reference variable screen is deleted. The object is not referenced anymore and will be deleted by the next turn of the garbage collector. &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr bgcolor="#ffd991"&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;  METHOD init_screen.&lt;br /&gt;DATA screen TYPE REF TO screen_init.&lt;br /&gt;CREATE OBJECT screen.&lt;br /&gt;ENDMETHOD.       &lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 4&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Static Method init_screen              of Class screen_init&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;b&gt;Instance Constructor of screen_init &lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;       &lt;p&gt;&lt;b&gt;Listing 5&lt;/b&gt; shows the instance constructor of class screen_init. The instance constructor is used to create all the container controls on Screen 100 and two of the application controls (picture and tree). Furthermore, it creates an event handler for events of the tree control. Most of the data objects that are needed for this purpose are declared locally within the constructor. The reference variables of type cl_gui_ container can contain references that point to any container control at the screen. &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr bgcolor="#ffd991"&gt;      &lt;td&gt;        &lt;pre&gt;&lt;code&gt;METHOD constructor.&lt;br /&gt;DATA: events TYPE cntl_simple_events,&lt;br /&gt;event LIKE LINE OF events,&lt;br /&gt;event_handler TYPE REF TO screen_handler,&lt;br /&gt;container_left TYPE REF TO cl_gui_container,&lt;br /&gt;container_right TYPE REF TO cl_gui_container,&lt;br /&gt;container_top TYPE REF TO cl_gui_container,&lt;br /&gt;container_bottom TYPE REF TO cl_gui_container.&lt;br /&gt;CREATE OBJECT splitter_h&lt;br /&gt;EXPORTING&lt;br /&gt;parent = cl_gui_container=&gt;screen0&lt;br /&gt;rows = 1&lt;br /&gt;columns = 2.&lt;br /&gt;CALL METHOD splitter_h-&gt;set_border&lt;br /&gt;EXPORTING border = cl_gui_cfw=&gt;false.&lt;br /&gt;CALL METHOD splitter_h-&gt;set_column_mode&lt;br /&gt;EXPORTING mode = splitter_h-&gt;mode_absolute.&lt;br /&gt;CALL METHOD splitter_h-&gt;set_column_width&lt;br /&gt;EXPORTING id = 1&lt;br /&gt;width = 110.&lt;br /&gt;container_left = splitter_h-&gt;get_container( row = 1 column = 1 ).&lt;br /&gt;container_right = splitter_h-&gt;get_container( row = 1 column = 2 ).&lt;br /&gt;CREATE OBJECT splitter_v&lt;br /&gt;EXPORTING&lt;br /&gt;parent = container_left&lt;br /&gt;rows = 2&lt;br /&gt;columns = 1.&lt;br /&gt;CALL METHOD splitter_v-&gt;set_border&lt;br /&gt;EXPORTING border = cl_gui_cfw=&gt;false.&lt;br /&gt;CALL METHOD splitter_v-&gt;set_row_mode&lt;br /&gt;EXPORTING mode = splitter_v-&gt;mode_absolute.&lt;br /&gt;CALL METHOD splitter_v-&gt;set_row_height&lt;br /&gt;EXPORTING id = 1&lt;br /&gt;height = 160.&lt;br /&gt;container_top = splitter_v-&gt;get_container( row = 1 column = 1 ).&lt;br /&gt;container_bottom = splitter_v-&gt;get_container( row = 2 column = 1 ).&lt;br /&gt;CREATE OBJECT picture&lt;br /&gt;EXPORTING parent = container_top.&lt;br /&gt;CREATE OBJECT tree&lt;br /&gt;EXPORTING parent = container_bottom&lt;br /&gt;node_selection_mode =&lt;br /&gt;cl_gui_simple_tree=&gt;node_sel_mode_single.&lt;br /&gt;CREATE OBJECT event_handler&lt;br /&gt;EXPORTING container = container_right.&lt;br /&gt;event-eventid = cl_gui_simple_tree=&gt;eventid_node_double_click.&lt;br /&gt;event-appl_event = ' '.&lt;br /&gt;APPEND event TO events.&lt;br /&gt;CALL METHOD tree-&gt;set_registered_events&lt;br /&gt;EXPORTING events = events.&lt;br /&gt;SET HANDLER event_handler-&gt;handle_node_double_click FOR tree.&lt;br /&gt;CALL METHOD: me-&gt;fill_picture,&lt;br /&gt;me-&gt;fill_tree.&lt;br /&gt;ENDMETHOD.   &lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 5&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Constructor of Class              screen_init&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;Creating the Container Controls&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; The code in Listing 5 demonstrates the process involved in creating the container controls in the demonstration program: &lt;/p&gt;       &lt;ol&gt;&lt;li&gt;&lt;b&gt;Create the first splitter container&lt;/b&gt; (CREATE OBJECT splitter_h). The constructor creates an object of the global class cl_gui_splitter_ container using the reference variable splitter_h. In the CREATE statement, actual parameters are passed to the IMPORTING parameters of the global class's constructor.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; &lt;b&gt;Create a Custom Control at Screen 100&lt;/b&gt; (parent = cl_gui_container =&gt;screen0). By passing the static attribute screen0 of class cl_gui_ container to the parameter parent, we use the entire area of Screen 100 as a custom control implicitly. (This is why we didn't have to use the graphical Screen Painter for Screen 100 to create a custom control.)&lt;br /&gt;&lt;br /&gt;Alternatively, we could create a custom control on Screen 100 with the graphical Screen Painter and pass its name instead of screen0. Then, only this area would be used for displaying the controls. &lt;table border="1" bordercolor="#330099" cellpadding="5" cellspacing="0" width="350"&gt;             &lt;tbody&gt;&lt;tr&gt;                &lt;td&gt;                  &lt;p&gt;&lt;b&gt;&lt;img src="http://www.sapinsideronline.com/archive/volume_01_%282000%29/backup/04/check_mark.gif" height="7" width="6" /&gt;TIP:&lt;/b&gt; When you write more complex programs that work with more than one screen, you must create custom controls with the graphical Screen Painter in order to distinguish between the screens.&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;                    &lt;/li&gt;&lt;li&gt;&lt;b&gt;Split the screen into two columns&lt;/b&gt; (columns = 2). We fill the remaining IMPORTING parameters with appropriate values to split Screen 100 into two columns. For each column, a new container control is created. References to each new container are stored in a system table of the CFW. You cannot access this table from the ABAP program. Nevertheless, the table lines point to container control objects of the program that are currently linked to a screen and prevent these objects from being deleted by the garbage collector, even if the container control objects are not referenced in the program itself (see Figure 6).&lt;br /&gt;&lt;br /&gt;     &lt;table border="1" bordercolor="#330099" cellpadding="5" cellspacing="0" width="350"&gt;             &lt;tbody&gt;&lt;tr&gt;                &lt;td&gt;                  &lt;p&gt;&lt;b&gt;&lt;img src="http://www.sapinsideronline.com/archive/volume_01_%282000%29/backup/04/check_mark.gif" height="7" width="6" /&gt;TIP:&lt;/b&gt; To remove a control object from the program, you must use its method free before initializing all respective reference variables. This method deletes the respective entry from the CFW system table.&lt;/p&gt;               &lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;                    &lt;/li&gt;&lt;li&gt;&lt;b&gt;Get references of the two columns&lt;/b&gt; into container_left and container_right. After we set some attributes of the columns by calling methods of splitter_h, we read the references to our containers from the CFW into the local reference variables container_left and container_right by functional calls of method get_container.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; Create two rows in the left column&lt;/b&gt; (CREATE OBJECT splitter_v). We follow the basic principles of steps 1-4 in a similar procedure to split the left column into two rows. Here, we pass the reference in container_left to the constructor of cl_gui_splitter_ container and get references of the two new container objects into the local reference variables container_ top and container_bottom. &lt;/li&gt;&lt;/ol&gt;       &lt;p&gt;&lt;b&gt;Creating the Application Controls&lt;/b&gt; By going through the steps listed above, we have created all the container controls that we need. Now we can go on to create our application controls. The process is shown in the code in Listing 5, and involves these steps: &lt;/p&gt;       &lt;ol&gt;&lt;li&gt;&lt;b&gt; Create application controls for the left column &lt;/b&gt;(CREATE OBJECT picture and CREATE OBJECT tree). With the instance constructor of class screen_init, we create the two application controls for the containers in the left column. In the upper container, we create an object of cl_gui_picture. In the lower container, we create an object of cl_gui_simple_tree. We link the objects to the respective container controls by passing the references in container_top and container_ bottom to their constructor's IMPORTING parameter parent.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;&lt;b&gt; Create an event handler &lt;/b&gt;(CREATE OBJECT event_handler). Since we want our program to react on user actions in the tree control, we must provide and register an event handler:&lt;br /&gt;     &lt;ul type="square"&gt;&lt;li&gt;First, we create an object of our local class screen_handler.&lt;br /&gt;   &lt;br /&gt;       &lt;/li&gt;&lt;li&gt; The constructor of this class demands an IMPORTING parameter of type cl_gui_container. We pass the reference to the right column's container control.&lt;br /&gt;   &lt;br /&gt;       &lt;/li&gt;&lt;li&gt;In order to register our object of class screen_handler as an event handler for the tree control, we must call the special method set_registered_events as well as the simple SET HANDLER statement (see "Control Events and Event Handling" above).&lt;br /&gt;   &lt;br /&gt;       &lt;/li&gt;&lt;li&gt; The parameters are passed via an internal table of type cntl_ simple_events, which is defined in the ABAP Dictionary.&lt;br /&gt;   &lt;br /&gt;       &lt;/li&gt;&lt;li&gt; By moving a blank character ' ' (default value) and not an 'X' to the component appl_event, we define that the event is handled as a system event (default) and not as an application event.&lt;br /&gt;   &lt;br /&gt;       &lt;/li&gt;&lt;/ul&gt;         &lt;/li&gt;&lt;li&gt; Send initial data to the application controls (call method: me-&gt;fill picture, me-&gt;fill tree). Finally, the constructor calls the methods fill_picture and fill_tree to initialize the contents of our application controls on the screen. &lt;/li&gt;&lt;/ol&gt;       &lt;p&gt;&lt;b&gt;Method fill_picture&lt;/b&gt; &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 6&lt;/b&gt; shows the instance method fill_picture of class screen_init. The method fill_picture imports a picture in GIF format from an indx type database table abtree into a local internal table pict_tab. The function module dp_create_url creates a URL for that internal table and passes it to the local variable url. By passing that URL to method load_picture_from_url of our picture control object, we send the picture to the picture control at the screen. The method set_display_mode allows us to set the attributes of the picture displayed in the control.&lt;/p&gt;       &lt;p&gt; Instead of working with an internal table, you can also use a local picture file from your presentation server and pass its name directly to the parameter url of method load_picture_from_url. Our program has the advantage of working for all users. &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD fill_picture.&lt;br /&gt;TYPES pict_line(256) TYPE c.&lt;br /&gt;DATA pict_tab TYPE TABLE OF pict_line.&lt;br /&gt;DATA url(255) TYPE c.&lt;br /&gt;IMPORT pict_tab = pict_tab FROM DATABASE abtree(pi) ID 'FLIGHTS'.&lt;br /&gt;CALL FUNCTION 'DP_CREATE_URL'&lt;br /&gt;EXPORTING&lt;br /&gt; type = 'IMAGE'&lt;br /&gt; subtype = 'GIF'&lt;br /&gt;TABLES&lt;br /&gt;data = pict_tab&lt;br /&gt;CHANGING&lt;br /&gt; url = url.&lt;br /&gt;CALL METHOD picture-&gt;load_picture_from_url EXPORTING url = url.&lt;br /&gt;CALL METHOD picture-&gt;set_display_mode&lt;br /&gt;EXPORTING display_mode = picture-&gt;display_mode_fit_center.&lt;br /&gt;ENDMETHOD.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 6&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Method fill_picture              of Class screen_init&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;TIP:&lt;/b&gt;How                can you save pictures in an indx type database table? &lt;b&gt;Listing                7&lt;/b&gt; shows a little helper routine that fulfills that purpose. Provide your favorite picture in a folder (for example, C:\TEMP\ of your presentation server) and simply run this program. The program loads the picture in binary format into an internal table and exports it to an indx type database table. (We strongly recommend that you create your own indx type table instead of using abtree or indx itself!)&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;REPORT picture_save.&lt;br /&gt;PARAMETERS file TYPE rlgrap-filename DEFAULT 'C:\TEMP\.GIF'.&lt;br /&gt;PARAMETERS id(20) TYPE c.&lt;br /&gt;DATA pict_line(256) TYPE c.&lt;br /&gt;DATA pict_tab LIKE TABLE OF pict_line.&lt;br /&gt;CALL FUNCTION 'WS_UPLOAD'&lt;br /&gt;EXPORTING&lt;br /&gt; filename = file&lt;br /&gt; filetype = 'BIN'&lt;br /&gt;TABLES&lt;br /&gt; data_tab = pict_tab.&lt;br /&gt;EXPORT pict_tab = pict_tab TO DATABASE abtree(pi) ID id.&lt;br /&gt;&lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 7&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;Helper Routine to Save GIFs in a Database              Table&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;Method fill_tree &lt;/b&gt;&lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 8&lt;/b&gt; shows the instance method fill_tree of class screen_init. To create a tree-like structure within the tree control, you must call method add_nodes and pass an internal table of special structure and contents to that method. The addition TYPE TABLE OF in the declaration of node_table in Listing 8 shows that the line type of that internal table is abdemonode, defined in the ABAP Dictionary. You can create such types by copying the global template structure mtreesnode. &lt;/p&gt;       &lt;p&gt;The internal table contains one line for each node of the tree. Each node must have a unique key node_key. The columns relatkey and relatship describe the relations between the nodes. You can also add description texts, change the standard icons, and so on. In our example, we create a node table from the contents of database table spfli. The database table spfli is the well-known table of flight connections from SAP's training and demonstration flight model. &lt;/p&gt;       &lt;p&gt; We select all data from spfli into the sorted internal table spfli_tab and process this table in a loop. There, we fill the internal table node_table with lines that represent a tree structure of two hierarchy levels. The attributes of the nodes are set by assigning flags to some columns of node_table. Note that we replace the standard folder icon with an airplane icon for the subnodes by assigning the internal code "@AV@" to the image columns.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD fill_tree.&lt;br /&gt;DATA: node_table TYPE TABLE OF abdemonode,&lt;br /&gt;node TYPE abdemonode,&lt;br /&gt;spfli_wa TYPE spfli,&lt;br /&gt;spfli_tab TYPE SORTED TABLE OF spfli&lt;br /&gt;WITH UNIQUE KEY carrid connid.&lt;br /&gt;SELECT carrid connid&lt;br /&gt;FROM spfli&lt;br /&gt;INTO CORRESPONDING FIELDS OF TABLE spfli_tab.&lt;br /&gt;node-hidden = ' '.&lt;br /&gt;node-disabled = ' '.&lt;br /&gt;node-isfolder = 'X'.&lt;br /&gt;node-expander = ' '.&lt;br /&gt;LOOP AT spfli_tab INTO spfli_wa.&lt;br /&gt;AT NEW carrid.&lt;br /&gt;node-node_key = spfli_wa-carrid.&lt;br /&gt;CLEAR node-relatkey.&lt;br /&gt;CLEAR node-relatship.&lt;br /&gt;node-text = spfli_wa-carrid.&lt;br /&gt;node-n_image = ' '.&lt;br /&gt;node-exp_image = ' '.&lt;br /&gt;APPEND node TO node_table.&lt;br /&gt;ENDAT.&lt;br /&gt;AT NEW connid.&lt;br /&gt;CONCATENATE spfli_wa-carrid spfli_wa-connid&lt;br /&gt;  INTO node-node_key.&lt;br /&gt;node-relatkey = spfli_wa-carrid.&lt;br /&gt;node-relatship = cl_gui_simple_tree=&gt;relat_last_child.&lt;br /&gt;node-text = spfli_wa-connid.&lt;br /&gt;node-n_image = '@AV@'.&lt;br /&gt;node-exp_image = '@AV@'.&lt;br /&gt;ENDAT.&lt;br /&gt;APPEND node TO node_table.&lt;br /&gt;ENDLOOP.&lt;br /&gt;CALL METHOD tree-&gt;add_nodes&lt;br /&gt;EXPORTING table_structure_name = 'ABDEMONODE'&lt;br /&gt;node_table = node_table.&lt;br /&gt;ENDMETHOD.&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 8&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Method fill_tree              of Class screen_init&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;br /&gt;&lt;img src="http://www.sapinsideronline.com/archive/volume_01_%282000%29/backup/04/check_mark.gif" height="7" width="6" /&gt;TIP:&lt;/b&gt;                To find the internal codes of all SAP icons, execute the report                SHOWICON.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;Instance Constructor of screen_handler&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; &lt;b&gt;Listing 9&lt;/b&gt; shows the instance constructor of class screen_handler. The instance constructor of class screen_init creates an object of class screen_ handler. This means that the execution of the instance constructor of class screen_handler is embedded in the execution of the instance constructor of class screen_init. It creates two application control objects, both of which are linked to the right column of our vertical splitter control. Remember that the instance constructor of class screen_init passes the reference to the right column's container control and to the constructor's parameter container in the CREATE OBJECT statement. The application controls can display either HTML pages or lists, but they are not filled during the constructor's execution yet. Filling these controls depends on the user's action in the tree control.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD constructor.&lt;br /&gt;CREATE OBJECT: html_viewer EXPORTING parent = container,&lt;br /&gt;list_viewer EXPORTING i_parent = container.&lt;br /&gt;ENDMETHOD.&lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 9&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Constructor of Class              screen_handler&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt; &lt;p&gt;&lt;b&gt;Method handle_node_double_click&lt;/b&gt;&lt;/p&gt;        &lt;p&gt;&lt;b&gt; Listing 10 &lt;/b&gt;shows the instance method handle_node_double_click of class screen_handler. This method is declared and registered as an event handler for the event node_double_click of our tree control object. Therefore, each time a user double-clicks on a node of the tree, it triggers that method. The method imports the event's EXPORTING parameter node_key, which contains the key of the selected node. Depending on the key's contents, the event handler either calls method fill_html or fill_list. It also sets the visibility of the two application controls referenced by html_viewer and list_viewer. Remember that both controls are linked to the right column of our vertical splitter control. The event handler steers their alternative display in that container. &lt;/p&gt;       &lt;p&gt; As stated above, method calls to the frontend are buffered in an automation queue. But since there is no automatic synchronization point after handling a system event on the backend, we must force the system to process the preceding method calls. To do this, we must call the static method cl_gui_cfw=&gt;flush. Note that we do not have any regular PAI processing in our program except when the user leaves the screen. The communication between frontend and backend is handled by the CFW. The frontend-to-backend communication is triggered by events, and the backend-to-frontend communication is triggered by flushes.&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD handle_node_double_click.&lt;br /&gt;DATA: carrid TYPE spfli-carrid,&lt;br /&gt;connid TYPE spfli-connid.&lt;br /&gt;carrid = node_key(2).&lt;br /&gt;connid = node_key+2(4).&lt;br /&gt;IF connid IS INITIAL.&lt;br /&gt;CALL METHOD: fill_html EXPORTING carrid = carrid,&lt;br /&gt;html_viewer-&gt;set_visible EXPORTING visible = 'X',&lt;br /&gt;list_viewer-&gt;set_visible EXPORTING visible = ' '.&lt;br /&gt;ELSE.&lt;br /&gt;CALL METHOD: fill_list EXPORTING carrid = carrid&lt;br /&gt;connid = connid,&lt;br /&gt;list_viewer-&gt;set_visible EXPORTING visible = 'X',&lt;br /&gt;html_viewer-&gt;set_visible EXPORTING visible = ' '.&lt;br /&gt;ENDIF.&lt;br /&gt;CALL METHOD cl_gui_cfw=&gt;flush.&lt;br /&gt;ENDMETHOD.&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(224, 165, 75);" nowrap="nowrap" width="5%"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 10&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Method handle_node_double_click              of Class screen_handler&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;br /&gt;Method fill_html&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt; &lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 11 &lt;/b&gt;shows the instance method fill_html of class screen_handler. When a user selects a node, this method reads the value of column URL from the database table SCARR according to the node selected. The selected URL is simply passed to the method show_url of our HTML control, which displays it in its area on the screen. &lt;/p&gt;       &lt;p&gt; Beginning with Release 4.6C, the new column URL of the carrier database table SCARR will contain the addresses of the carrier's Web sites. To add, change, or update the addresses, you can provide your own data and change the program accordingly.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD fill_html.&lt;br /&gt;DATA url TYPE scarr-url.&lt;br /&gt;SELECT SINGLE url&lt;br /&gt;FROM   scarr&lt;br /&gt;INTO   url&lt;br /&gt;WHERE  carrid = carrid.&lt;br /&gt;CALL METHOD html_viewer-&gt;show_url EXPORTING url = url.&lt;br /&gt;ENDMETHOD.&lt;/code&gt; &lt;/pre&gt;       &lt;/td&gt;&lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg nowrap="nowrap" width="5%" style="color:#e0a54b;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 11&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Method fill_html              of Class screen_handler&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;Method fill_list &lt;/b&gt;&lt;/p&gt;       &lt;p&gt;&lt;b&gt;Listing 12 &lt;/b&gt;shows the instance method fill_list of class screen_handler. This method gives you an impression of how to work with the new SAP List Viewer, which will replace classical ABAP list processing. As with the tree control, you have to prepare data in an internal table and pass this table to a method of the List Viewer object. In our case, we read detail information from database table sflight into an internal table flight_tab when the user has double-clicked a flight connection in the tree. In addition to the actual data, we prepare and pass additional information - such as the list's title and some of its attributes - to the method. &lt;b&gt;Figure 7&lt;/b&gt; shows the screen after          selecting a flight connection in the tree. &lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;table bgcolor="#ffd991" border="1" cellpadding="0" cellspacing="0" width="500"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;        &lt;pre&gt; &lt;code&gt;METHOD fill_list.&lt;br /&gt;DATA: flight_tab TYPE TABLE OF demofli,&lt;br /&gt;BEGIN OF flight_title,&lt;br /&gt; carrname TYPE scarr-carrname,&lt;br /&gt; cityfrom TYPE spfli-cityfrom,&lt;br /&gt; cityto TYPE spfli-cityto,&lt;br /&gt;END OF flight_title,&lt;br /&gt;list_layout TYPE lvc_s_layo.&lt;br /&gt;SELECT SINGLE c~carrname p~cityfrom p~cityto&lt;br /&gt;INTO  CORRESPONDING FIELDS OF flight_title&lt;br /&gt;FROM  ( scarr AS c&lt;br /&gt;  INNER JOIN spfli AS p ON c~carrid = p~carrid )&lt;br /&gt;WHERE p~carrid = carrid AND&lt;br /&gt; p~connid = connid.&lt;br /&gt;SELECT fldate seatsmax seatsocc&lt;br /&gt;INTO  CORRESPONDING FIELDS OF TABLE flight_tab&lt;br /&gt;FROM  sflight&lt;br /&gt;WHERE carrid = carrid AND connid = connid&lt;br /&gt;ORDER BY fldate.&lt;br /&gt;CONCATENATE flight_title-carrname&lt;br /&gt;connid&lt;br /&gt;flight_title-cityfrom&lt;br /&gt;flight_title-cityto&lt;br /&gt;INTO list_layout-grid_title&lt;br /&gt;SEPARATED BY space.&lt;br /&gt;list_layout-smalltitle = 'X'.&lt;br /&gt;list_layout-cwidth_opt = 'X'.&lt;br /&gt;list_layout-no_toolbar = 'X'.&lt;br /&gt;CALL METHOD list_viewer-&gt;set_table_for_first_display&lt;br /&gt;EXPORTING i_structure_name = 'DEMOFLI'&lt;br /&gt;is_layout = list_layout&lt;br /&gt;CHANGING  it_outtab = flight_tab.&lt;br /&gt;ENDMETHOD.&lt;/code&gt; &lt;/pre&gt;&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg nowrap="nowrap" width="5%" style="color:#e0a54b;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Listing 12&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td bg="" style="color: rgb(255, 255, 255);" width="95%"&gt;&lt;span style="font-size:100%;"&gt;The Instance Method fill_list              of Class screen_handler&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;img src="http://www.sapinsideronline.com/archive/images/46-0100.gif" border="1" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;table border="1" cellpadding="5" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bg nowrap="nowrap" width="5%" style="color:#e0a54b;"&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Figure 7&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;td width="95%"&gt;&lt;span style="font-size:100%;"&gt;List Display with an ALV Control&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/p&gt;       &lt;p&gt; In this article, we showed you the principal concepts of programming screens with the control framework using a detailed demonstration program. This procedure can be condensed into the following steps:&lt;/p&gt;       &lt;ol&gt;&lt;li&gt; Create container control objects and link them to areas at the screen.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; Create application control objects and link them to the container            controls.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; Provide data for the controls in data objects, which, in most cases,            are internal tables of special global types.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; Send the data to the controls by calling control methods.&lt;br /&gt;&lt;br /&gt;   &lt;/li&gt;&lt;li&gt; React on user actions on the controls by defining and registering            event handler methods. &lt;/li&gt;&lt;/ol&gt;       &lt;p&gt; In this article, we did not explain the single control classes - or their methods and events - in great detail. We simply wanted to provide an overview for the ABAP Objects programmer who wants to use global classes of the CFW and who defines his or her own local classes to handle the control objects on the screen. &lt;/p&gt;       &lt;p&gt; Using this article as a starting point, you can learn more about the features of the control framework by referring to the documentation of the control classes or to their definition in the class builder of the ABAP Workbench. With that information, you can then continue to explore the CFW on your own. For example, you might create classes that react when a user clicks on a picture. Or you could look further into tree controls, so that when a user selects a node in a tree control, you could introduce context menus for those nodes. Users would then find these when they right-click on a particular node. Finally, there is much to discover about the ALV, which we covered only briefly. ALV is the best choice for presenting tabular data on the screen. It replaces classical table controls as well as classical lists, and it provides a complete environment for interactive reporting. &lt;/p&gt;       &lt;p&gt; If you wish to design and improve GUI features that benefit your users, the opportunities are there, and the development process for these interfaces is more streamlined than ever before. Whichever features you choose to take advantage of, this article can be your springboard to creating an interface that is an effective tool for your end users.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;hr color="#e0a54b" width="100%"&gt;       &lt;p&gt;&lt;strong&gt;Horst Keller&lt;/strong&gt; is information developer in the SAP ABAP &amp;amp; GUI Group. He documents the ABAP language with an emphasis on ABAP Objects. He also develops and teaches classes on ABAP programming and gives workshops at technical education conferences. You can reach him at &lt;a href="mailto:horst.keller@sap.com"&gt;horst.keller@sap.com&lt;/a&gt;.         &lt;/p&gt;       &lt;p&gt;&lt;strong&gt;Gisbert Loff&lt;/strong&gt; is product manager in the SAP ABAP &amp;amp; GUI Group, where he handles all GUI-related issues. He has given various lecture presentations and workshops at technical education conferences and SAPPHIREs. You can reach him at &lt;a href="mailto:gisbert.loff@sap.com"&gt;gisbert.loff@sap.com&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-1902538464096146937?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/1902538464096146937/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=1902538464096146937' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/1902538464096146937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/1902538464096146937'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2008/11/abap-objects-in-action-screen.html' title='ABAP Objects in Action: Screen Programming with the Control Framework'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4957148266609676762.post-5979261821352767675</id><published>2008-11-05T01:19:00.000-08:00</published><updated>2009-04-13T21:10:37.031-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALV'/><title type='text'>Get instance of ALV after calling REUSE_ALV_GRID_DISPLAY</title><content type='html'>At work I met the scenario like this.&lt;br /&gt;&lt;br /&gt;I often use Function Module (FM) REUSE_ALV_GRID_DISPLAY to display an ALV list (usually the fastest way). However, the problem came to me when I needed to reload the data inside ALV control. Normally, you would think that just re-calling the FM to gain the goal. But, this way would create another screen and it is not satisfied my aim.&lt;br /&gt;&lt;br /&gt;After searching a while in the alv object (ABAP OO). I fould that the class has the instance level method refresh_table_display that would help me out for the situation. From that clue, the only thing that I need is the current instance of ALV object already created by the first FM call.&lt;br /&gt;&lt;br /&gt;Thanks to internet and some one's wisdom, the way is just appear in front of me.&lt;br /&gt;&lt;br /&gt;Here is how:&lt;br /&gt;* you need the filed symbol ref to class alv.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 0, 0); font-weight: bold;"&gt;FIELD-SYMBOLS: &amp;#60;fs_alv&amp;#62; TYPE REF TO cl_gui_alv_grid.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(153, 0, 0); font-weight: bold;"&gt;ASSIGN ('(SAPLSLVC_FULLSCREEN)GT_GRID-GRID') TO &amp;#60;fs_alv&amp;#62; .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;*If the sy-subrc equal 0, this means that you just got an instance and freely to manipulate it.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic; font-weight: bold;"&gt;    IF sy-subrc = 0.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic; font-weight: bold;"&gt;      CALL METHOD &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic; font-weight: bold;"&gt;&amp;#60;fs_alv&amp;#62;-&gt;refresh_table_display().&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0); font-style: italic; font-weight: bold;"&gt;    ENDIF.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;P.S: after the release of R/3 4.7 , Object Oriented Programming model is fully implemented. Feel free to work with OOP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4957148266609676762-5979261821352767675?l=myabaplife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myabaplife.blogspot.com/feeds/5979261821352767675/comments/default' title='Đăng Nhận xét'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4957148266609676762&amp;postID=5979261821352767675' title='0 Nhận xét'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/5979261821352767675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4957148266609676762/posts/default/5979261821352767675'/><link rel='alternate' type='text/html' href='http://myabaplife.blogspot.com/2008/11/get-instance-of-alv-after-calling.html' title='Get instance of ALV after calling REUSE_ALV_GRID_DISPLAY'/><author><name>Tran Vu Nguyen</name><uri>http://www.blogger.com/profile/16410529815419800678</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
