<?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-5905076148757900899</id><updated>2011-11-27T18:52:11.278-06:00</updated><category term='Dynamic Color'/><category term='OO ALV'/><category term='ABAP Games'/><category term='RFC'/><category term='Smartforms'/><category term='Classical ALV'/><category term='Performance'/><category term='Email'/><category term='BDC'/><category term='SALV Tutorial'/><category term='Table Control'/><category term='Others'/><category term='Survey'/><category term='ABAP Fun'/><category term='Formatting'/><category term='Dynamic ITAB'/><category term='Output on Selection Screen'/><category term='Tutorials'/><category term='Table Maintenance'/><category term='Exception Handling'/><category term='Objects'/><category term='Log Display'/><category term='ABAP Objects'/><category term='SALV Limitations'/><category term='Classical'/><category term='Data Integrity'/><category term='Code'/><category term='Field Symbols'/><category term='Non-SAP'/><category term='Generic Object Service (GOS)'/><category term='ABAP'/><category term='HTML'/><category term='Excel Formatting'/><category term='SAPScript / SmartForm'/><category term='Function Module'/><category term='Standard Table Display'/><category term='Tricks'/><category term='Design Patterns'/><category term='Design Principles'/><title type='text'>SAP ABAP Help</title><subtitle type='html'>You will get some good insight code snippets, tips &amp;amp; tricks in SAP ABAP/4.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-5016490768464579937</id><published>2011-09-07T21:43:00.000-05:00</published><updated>2011-09-07T21:43:14.394-05:00</updated><title type='text'>Moved to Own domain..!</title><content type='html'>Hello All,&lt;br /&gt;&lt;br /&gt;Over the past couple of months, I was thinking to move SAP ABAP Help blog to its own domain. Finally, I have decided to move it to domain: &lt;a href="http://www.blogger.com/www.help-abap.zevolving.com" title="www.help-abap.zevolving.com"&gt;www.help-abap.zevolving.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This new site would have lot of &lt;strong&gt;NEW features&lt;/strong&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New sections: Beginners(as highly demanded), Design Patterns &amp;amp; Design Principles, IDOC, performance and many more...&lt;/li&gt;&lt;li&gt;More Social Sharing: Social sharing including &lt;a href="http://www.facebook.com/pages/SAP-ABAP-Help/269923279701872" title="Facebook"&gt;Facebook&lt;/a&gt; alongwith &lt;a href="http://feeds.feedburner.com/SapAbapHelp" title="RSS"&gt;RSS&lt;/a&gt; and &lt;a href="http://twitter.com/#!/zevolving" title="Twitter"&gt;Twitter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Syntax Highlighter: "New" ABAP Editor like syntax highlighter with Interactive toolbar&lt;/li&gt;&lt;li&gt;Improved Comments: Reply option to start discussion on any comment&lt;/li&gt;&lt;li&gt;Suggestions: Suggestion page for better feedback regarding site layout and content&lt;/li&gt;&lt;li&gt;Mobile Version: Mobile device compatible version&lt;/li&gt;&lt;/ul&gt;(Some are already implemented, rest would be available soon)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Friends using the Google Friend Connect:&lt;/b&gt;&lt;br /&gt;I couldn't find any good technique to migrate you from Blogger to the new site. I personally request you to use the RSS Feed Subscription to get all the updates in your email. I have included couple of options here for hassle-free Email Subscription.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tr&gt;&lt;td style="background-color: #F7F7F7; width:50%"&gt;&lt;br /&gt;&lt;form style="padding:3px;"       action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow"        onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri=sapabaphelpblog', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true"&gt;&lt;input type="text" style="width:140px; line-height: 20px;" name="email"       value="Your E-Mail"       onfocus="if(this.value==this.defaultValue)this.value=''"     onblur="if(this.value=='')this.value=this.defaultValue"/&gt;     &lt;input type="hidden" value="sapabaphelpblog" name="uri"/&gt;&lt;br /&gt;&lt;input type="hidden" name="loc" value="en_US"/&gt;&lt;br /&gt;&lt;input type="submit" class="submitbutton" value="Subscribe" /&gt;&lt;br /&gt;&lt;/form&gt;&lt;/td&gt; &lt;td style="background-color: #F7F7F7; width:50%"&gt;&lt;br /&gt;&lt;a href="http://feedburner.google.com/fb/a/mailverify?uri=SapAbapHelp&amp;amp;loc=en_US"&gt;Subscribe to SAP ABAP Help by Email&lt;/a&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Please explore this new &lt;a href="http://help-abap.zevolving.com/"&gt;SAP ABAP Help&lt;/a&gt; and let me know about your feedback via &lt;a href="http://help-abap.zevolving.com/suggestions"&gt;Suggestion page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Naimesh Patel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-5016490768464579937?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/5016490768464579937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/09/moved-to-own-domain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5016490768464579937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5016490768464579937'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/09/moved-to-own-domain.html' title='Moved to Own domain..!'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/03932805403479765286</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-5905076148757900899.post-1166615751910880627</id><published>2011-07-15T18:22:00.010-05:00</published><updated>2011-07-15T18:46:57.379-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Non-SAP'/><title type='text'>Chrome Extension for SAP ABAP Blog</title><content type='html'>I am proud to present first version of &lt;span style="font-weight:bold;"&gt;Chrome Extension for SAP ABAP Help Blog.&lt;/span&gt; This extension is also the first one SAP space. &lt;a href="https://chrome.google.com/webstore/detail/mneccidlopamkljjelaghhdfkmcmalid" target="_blank" class="ahover"&gt;SAP ABAP Help&lt;/a&gt; extension is now available in the Chrome Web Store. This extension allow you to stay tuned with the Blog content - Both Post and Comments. &lt;br /&gt;&lt;br /&gt;If you are not yet using Chrome browser, you can install it by visiting &lt;a href="http://www.google.com/chrome/intl/en/make/download.html?brand=CHKZ" target="_blank" class="ahover"&gt;Chrome Download&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;After you install the extension, you would see this icon in the Chrome browser. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-pWYaHxzgQLY/TiDN3fx1eWI/AAAAAAAABGY/KsV9HWzQq0k/s1600/1_install.png"&gt;&lt;img style=" margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 297px; height: 87px;" src="http://1.bp.blogspot.com/-pWYaHxzgQLY/TiDN3fx1eWI/AAAAAAAABGY/KsV9HWzQq0k/s400/1_install.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629725887520143714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By clicking this icon, you will observe a popup with the latest post, latest comment and popular posts. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-N3yeafopG-A/TiDQ49d9HeI/AAAAAAAABGw/-Sf4caWZurs/s1600/app_scr_o1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 277px;" src="http://3.bp.blogspot.com/-N3yeafopG-A/TiDQ49d9HeI/AAAAAAAABGw/-Sf4caWZurs/s400/app_scr_o1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629729211204574690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can configure the number of posts, displaying author &amp; post date as well as the Summary for the post. Similar type of settings are also available for comments section. Settings can be accessed using this option. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-gw243_2jfzc/TiDPslFso1I/AAAAAAAABGo/4pW0CDlU5Zg/s1600/3_settings.png"&gt;&lt;img style=" margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 141px;" src="http://1.bp.blogspot.com/-gw243_2jfzc/TiDPslFso1I/AAAAAAAABGo/4pW0CDlU5Zg/s400/3_settings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5629727898990322514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let me know if you face any issues while using the extension.&lt;br /&gt;&lt;br /&gt;Enjoy another way to stay in touch with SAP ABAP Blog...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Get in touch with me if you wish to know, how this works or want to develop one for your site/blog.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1166615751910880627?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1166615751910880627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/07/chrome-extension-for-sap-abap-blog.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1166615751910880627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1166615751910880627'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/07/chrome-extension-for-sap-abap-blog.html' title='Chrome Extension for SAP ABAP Blog'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pWYaHxzgQLY/TiDN3fx1eWI/AAAAAAAABGY/KsV9HWzQq0k/s72-c/1_install.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-7004437401563554925</id><published>2011-06-20T21:40:00.017-05:00</published><updated>2011-08-08T21:53:37.944-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Integrity'/><category scheme='http://www.blogger.com/atom/ns#' term='Function Module'/><title type='text'>Function Module Pass by Value - Data Loss</title><content type='html'>When we design the Function Module, we can specify either Pass by Value or Pass by Reference for a parameter. It is very important to pay close attention while designing the FM where we are using the Table Types as the variables. &lt;br /&gt;&lt;br /&gt;Have you ever seen a situation where you can see the data in internal table but it doesn't LOOP further. It exits out of the LOOP and only processes that LOOP only. Sounds weird? &lt;br /&gt;&lt;br /&gt;Let's see this code. We have an ITAB which has 5 records. We pass this ITAB to the FM ZTEST_NP_PASS_BY_VALUE as parameter CT_VBAP. This parameter is Pass by Value. In the FM, we copy the data from the importing parameter to local table LT_VBAP. We Sort the table LT_VBAP and delete adjacent duplicates which would leave only one record in the LT_VBAP. Ideally, it should not change anything in the CT_VBAP. But the output is surprising. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="mdiv110804"&gt;&lt;pre id="pre110804"&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;  Purpose: Illustrates dangerous use of Pass by Value&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;  Author : Naimesh Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;REPORT  &lt;/span&gt;ztest_np_itab_copy&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD &lt;/span&gt;&lt;span class="L0S52"&gt;TABLE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;lv_index &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;&lt;span class="L0S52"&gt;i&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*PARAMETERS: p_vbeln TYPE vbak-vbeln DEFAULT '1001234567'.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;START&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SELECTION&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*----- Pass by Value --------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;PERFORM &lt;/span&gt;f_fill_data&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/ &lt;span class="L0S33"&gt;'Pass by Value'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Total lines in LT_VBAP'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;LOOP &lt;/span&gt;&lt;span class="L0S52"&gt;AT &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TRANSPORTING &lt;/span&gt;&lt;span class="L0S52"&gt;NO &lt;/span&gt;&lt;span class="L0S52"&gt;FIELDS &lt;/span&gt;&lt;span class="L0S52"&gt;WHERE &lt;/span&gt;vbeln &lt;span class="L0S52"&gt;IS &lt;/span&gt;&lt;span class="L0S52"&gt;NOT &lt;/span&gt;&lt;span class="L0S52"&gt;INITIAL&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/ sy&lt;span class="L0S70"&gt;-&lt;/span&gt;tabix&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDLOOP&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'FM Call - Parameter Pass by Value'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;LOOP &lt;/span&gt;&lt;span class="L0S52"&gt;AT &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TRANSPORTING &lt;/span&gt;&lt;span class="L0S52"&gt;NO &lt;/span&gt;&lt;span class="L0S52"&gt;FIELDS &lt;/span&gt;&lt;span class="L0S52"&gt;WHERE &lt;/span&gt;vbeln &lt;span class="L0S52"&gt;IS &lt;/span&gt;&lt;span class="L0S52"&gt;NOT &lt;/span&gt;&lt;span class="L0S52"&gt;INITIAL&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE &lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;10&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Processing'&lt;/span&gt;&lt;span class="L0S55"&gt;, &lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;tabix&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CALL &lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION &lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_PASS_BY_VALUE'&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CHANGING&lt;/span&gt;&lt;br /&gt;ct_vbap &lt;span class="L0S55"&gt;= &lt;/span&gt;lt_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDLOOP&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* Total Lines&lt;/span&gt;&lt;br /&gt;lv_index &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S52"&gt;LINES&lt;/span&gt;&lt;span class="L0S55"&gt;( &lt;/span&gt;lt_vbap &lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Total lines in LT_VBAP'&lt;/span&gt;&lt;span class="L0S55"&gt;, &lt;/span&gt;lv_index&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;      Form  F_FILL_DATA&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;FORM &lt;/span&gt;f_fill_data &lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;lwa_vbap &lt;span class="L0S52"&gt;LIKE &lt;/span&gt;&lt;span class="L0S52"&gt;LINE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;lt_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;l_vbeln &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;vbak&lt;span class="L0S70"&gt;-&lt;/span&gt;vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;l_vbeln &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'1001234567'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DO &lt;/span&gt;&lt;span class="L0S32"&gt;5 &lt;/span&gt;&lt;span class="L0S52"&gt;TIMES&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;lwa_vbap&lt;span class="L0S70"&gt;-&lt;/span&gt;vbeln &lt;span class="L0S55"&gt;= &lt;/span&gt;l_vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;lwa_vbap&lt;span class="L0S70"&gt;-&lt;/span&gt;posnr &lt;span class="L0S55"&gt;= &lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;index &lt;/span&gt;* &lt;span class="L0S32"&gt;100&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;APPEND &lt;/span&gt;lwa_vbap &lt;span class="L0S52"&gt;TO &lt;/span&gt;lt_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDDO&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFORM&lt;/span&gt;&lt;span class="L0S55"&gt;.                    &lt;/span&gt;&lt;span class="L0S31"&gt;" F_FILL_DATA&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This is the FM ZTEST_NP_PASS_BY_VALUE:&lt;br /&gt;&lt;div id="mdiv1108041"&gt;&lt;pre id="pre1108041"&gt;&lt;span class="L0S52"&gt;FUNCTION &lt;/span&gt;ZTEST_NP_PASS_BY_VALUE&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"*"Local Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"  CHANGING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"     VALUE(CT_VBAP) TYPE  VBAP_T&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;li_vbap &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD &lt;/span&gt;&lt;span class="L0S52"&gt;TABLE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;li_vbap &lt;span class="L0S55"&gt;= &lt;/span&gt;ct_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;SORT &lt;/span&gt;li_vbap &lt;span class="L0S52"&gt;BY &lt;/span&gt;vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DELETE &lt;/span&gt;&lt;span class="L0S52"&gt;ADJACENT &lt;/span&gt;&lt;span class="L0S52"&gt;DUPLICATES &lt;/span&gt;&lt;span class="L0S52"&gt;FROM &lt;/span&gt;li_vbap &lt;span class="L0S52"&gt;COMPARING &lt;/span&gt;vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the output of the above code: &lt;br /&gt;You can see that there are 5 lines in the LT_VBAP. After FM was called for the first record, it didn't LOOP further. But the total number of lines in the table LT_VBAP are still 5. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-KQtKENeUY5A/TgAHQrKKcnI/AAAAAAAABFI/oCz0li9jd_0/s1600/itab_pass_by_value.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 167px;" src="http://3.bp.blogspot.com/-KQtKENeUY5A/TgAHQrKKcnI/AAAAAAAABFI/oCz0li9jd_0/s400/itab_pass_by_value.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5620500318003032690" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;What happened here:&lt;/span&gt; &lt;br /&gt;Till the statement which copies the data from the CT_VBAP to LI_VBAP, it is referring to same memory reference which can be checked in the debugger. Once the FM passes control back to the called program, some how it is loosing the track of the T_VBAP and put the data from LI_VBAP back to T_VBAP which has essentially only 1 record. It is weird that the Debugger also shows that still T_VBAP has 5 rows. But the LOOP finishes after processing the 1st record as seen in the output of the report. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Impact &lt;/span&gt; &lt;br /&gt;Imagine if this type of FM call with Pass by Value is in the User-exit which could be deep down burried in the call stack and LOOP doesn't processes all the records in the starndard SAP code, it would be pretty difficult to figure out what happend and why it was happened. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How to save this data from Data Loss?&lt;/span&gt; &lt;br /&gt;We need to use the table with reference. This avoid us loosing the data and keeps the data consistency. &lt;br /&gt;&lt;br /&gt;Code Snippet to demo pass by Reference&lt;br /&gt;&lt;div id="mdiv1108042"&gt;&lt;pre id="pre1108042"&gt;&lt;span class="L0S31"&gt;*----- Pass by Reference ---- *&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;SKIP &lt;/span&gt;&lt;span class="L0S32"&gt;2&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CLEAR &lt;/span&gt;lt_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;PERFORM &lt;/span&gt;f_fill_data&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/ &lt;span class="L0S33"&gt;'Pass by Reference'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Total lines in LT_VBAP'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;LOOP &lt;/span&gt;&lt;span class="L0S52"&gt;AT &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TRANSPORTING &lt;/span&gt;&lt;span class="L0S52"&gt;NO &lt;/span&gt;&lt;span class="L0S52"&gt;FIELDS &lt;/span&gt;&lt;span class="L0S52"&gt;WHERE &lt;/span&gt;vbeln &lt;span class="L0S52"&gt;IS &lt;/span&gt;&lt;span class="L0S52"&gt;NOT &lt;/span&gt;&lt;span class="L0S52"&gt;INITIAL&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/ sy&lt;span class="L0S70"&gt;-&lt;/span&gt;tabix&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDLOOP&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'FM Call - Parameter with Reference'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;LOOP &lt;/span&gt;&lt;span class="L0S52"&gt;AT &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TRANSPORTING &lt;/span&gt;&lt;span class="L0S52"&gt;NO &lt;/span&gt;&lt;span class="L0S52"&gt;FIELDS &lt;/span&gt;&lt;span class="L0S52"&gt;WHERE &lt;/span&gt;vbeln &lt;span class="L0S52"&gt;IS &lt;/span&gt;&lt;span class="L0S52"&gt;NOT &lt;/span&gt;&lt;span class="L0S52"&gt;INITIAL&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE &lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;10&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Processing'&lt;/span&gt;&lt;span class="L0S55"&gt;, &lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;tabix&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CALL &lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION &lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_REFERENCE'&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CHANGING&lt;/span&gt;&lt;br /&gt;ct_vbap &lt;span class="L0S55"&gt;= &lt;/span&gt;lt_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDLOOP&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* Total Lines&lt;/span&gt;&lt;br /&gt;lv_index &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S52"&gt;LINES&lt;/span&gt;&lt;span class="L0S55"&gt;( &lt;/span&gt;lt_vbap &lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;) &lt;/span&gt;space&lt;span class="L0S55"&gt;, &lt;/span&gt;&lt;span class="L0S33"&gt;'Total lines in LT_VBAP'&lt;/span&gt;&lt;span class="L0S55"&gt;, &lt;/span&gt;lv_index&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Code Snippet FM ZTEST_NP_REFERENCE&lt;br /&gt;&lt;div id="mdiv1108043"&gt;&lt;pre id="pre1108043"&gt;&lt;span class="L0S52"&gt;FUNCTION &lt;/span&gt;ztest_np_reference&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"*"Local Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"  CHANGING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"     REFERENCE(CT_VBAP) TYPE  VBAP_T&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*"----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD &lt;/span&gt;&lt;span class="L0S52"&gt;TABLE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;lt_vbap &lt;span class="L0S55"&gt;= &lt;/span&gt;ct_vbap&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;SORT &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;BY &lt;/span&gt;vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DELETE &lt;/span&gt;&lt;span class="L0S52"&gt;ADJACENT &lt;/span&gt;&lt;span class="L0S52"&gt;DUPLICATES &lt;/span&gt;&lt;span class="L0S52"&gt;FROM &lt;/span&gt;lt_vbap &lt;span class="L0S52"&gt;COMPARING &lt;/span&gt;vbeln&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Output of this code: &lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-7KzjR4glwJw/TgALLnYtRfI/AAAAAAAABFQ/LS_lV4CC98I/s1600/itab_reference_op.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 321px; height: 225px;" src="http://2.bp.blogspot.com/-7KzjR4glwJw/TgALLnYtRfI/AAAAAAAABFQ/LS_lV4CC98I/s400/itab_reference_op.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5620504629137458674" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-7004437401563554925?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/7004437401563554925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/06/function-module-pass-by-value-data-loss.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7004437401563554925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7004437401563554925'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/06/function-module-pass-by-value-data-loss.html' title='Function Module Pass by Value - Data Loss'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-KQtKENeUY5A/TgAHQrKKcnI/AAAAAAAABFI/oCz0li9jd_0/s72-c/itab_pass_by_value.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-9082174253211473890</id><published>2011-06-13T19:14:00.023-05:00</published><updated>2011-08-09T00:27:17.381-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Function Module'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Performance of ITAB Copy</title><content type='html'>Today, we'll see another performance drainage - Internal Table Copy. If we don't use the data properly, we'll run into the situation where we'll use lot of resoruces to perform the ITAB copy and end up reducing the performance of our application.&lt;br /&gt;&lt;br /&gt;Sometimes, we pass the ITAB from one application to diffrent FM / Method, do some processing like modify certain fields or add some records in it and we get it back from the called module. If this FMs are called so many times it will affect the application performace at large.&lt;br /&gt;&lt;br /&gt;We'll first try to copy the data traditionally - using []. In the main program we have an internal table, which we pass to the FM ZTEST_NP_DATA_SET. Here we save the data to global memory of the Function Group into IT_EDIDD. We'll call another FM ZTEST_NP_DATA_GET to get the data.&lt;br /&gt;&lt;br /&gt;The second way, we'll use the REF TO DATA. from our main program, we'll get the reference of the data into O_DATA and pass it to FM ZTEST_NP_DATA_SET_1. We'll get the data from the object reference. We'll aslo save the data reference to the Function group Global data. We'll call the FM ZTEST_NP_DATA_SET_2 to get the data from the FM to main program.&lt;br /&gt;&lt;br /&gt;Code Snippet to show performance of ITAB Copy&lt;br /&gt;&lt;div id="mdiv110613"&gt;&lt;pre id="pre110613"&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp; Performance of ITAB Copy&lt;/span&gt; &lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp; Author: Naimesh Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;REPORT&amp;nbsp;&amp;nbsp;&lt;/span&gt;ztest_np_itab_copy&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lt_edidd&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TABLE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;edid4&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;LINE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lv_sta_time&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;timestampl&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_end_time&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;timestampl&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_diff_w&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;p&amp;nbsp;&lt;span class="L0S52"&gt;DECIMALS&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;5&lt;/span&gt;&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_diff_f&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&amp;nbsp;&lt;/span&gt;lv_diff_w&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_save&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&amp;nbsp;&lt;/span&gt;lv_diff_w&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;l_times&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;i&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;START&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SELECTION&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;l_times&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;10000&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Table&amp;nbsp;copy&amp;nbsp;with&amp;nbsp;[]&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;GET&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TIME&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STAMP&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FIELD&amp;nbsp;&lt;/span&gt;lv_sta_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DO&amp;nbsp;&lt;/span&gt;l_times&amp;nbsp;&lt;span class="L0S52"&gt;TIMES&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lwa_edidd&lt;span class="L0S70"&gt;-&lt;/span&gt;sdata&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'1'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;APPEND&amp;nbsp;&lt;/span&gt;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_DATA_SET'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;it_edidd&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_DATA_GET'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IMPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;et_edidd&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDDO&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;GET&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TIME&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STAMP&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FIELD&amp;nbsp;&lt;/span&gt;lv_end_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;lv_diff_w&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lv_end_time&amp;nbsp;&lt;span class="L0S70"&gt;-&amp;nbsp;&lt;/span&gt;lv_sta_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;30&lt;/span&gt;&lt;span class="L0S55"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'Itab&amp;nbsp;Copy'&lt;/span&gt;&lt;span class="L0S55"&gt;,&amp;nbsp;&lt;/span&gt;lv_diff_w&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;table&amp;nbsp;passed&amp;nbsp;with&amp;nbsp;reference&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CLEAR&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lo_data&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;REF&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;data&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;GET&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TIME&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STAMP&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FIELD&amp;nbsp;&lt;/span&gt;lv_sta_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DO&amp;nbsp;&lt;/span&gt;l_times&amp;nbsp;&lt;span class="L0S52"&gt;TIMES&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lwa_edidd&lt;span class="L0S70"&gt;-&lt;/span&gt;sdata&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'1'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;APPEND&amp;nbsp;&lt;/span&gt;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;lt_edidd&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;GET&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;REFERENCE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;lt_edidd&amp;nbsp;&lt;span class="L0S52"&gt;INTO&amp;nbsp;&lt;/span&gt;lo_data&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_DATA_SET_1'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;io_edidd&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lo_data&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'ZTEST_NP_DATA_GET_1'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IMPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;eo_edidd&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lo_data&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDDO&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;GET&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TIME&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STAMP&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FIELD&amp;nbsp;&lt;/span&gt;lv_end_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;lv_diff_f&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lv_end_time&amp;nbsp;&lt;span class="L0S70"&gt;-&amp;nbsp;&lt;/span&gt;lv_sta_time&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;/&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;30&lt;/span&gt;&lt;span class="L0S55"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'Itab&amp;nbsp;Copy&amp;nbsp;with&amp;nbsp;Reference'&lt;/span&gt;&lt;span class="L0S55"&gt;,&amp;nbsp;&lt;/span&gt;lv_diff_f&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Code FM ZTEST_NP_DATA_SET Data Copy using [ ]&lt;br /&gt;&lt;div id="mdiv1106131"&gt;&lt;pre id="pre1106131"&gt;&lt;span class="L0S52"&gt;FUNCTION&lt;/span&gt;&amp;nbsp;ZTEST_NP_DATA_SET.&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;*&amp;quot;Local&amp;nbsp;Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;IMPORTING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUE(IT_EDIDD)&amp;nbsp;TYPE&amp;nbsp;&amp;nbsp;TAB_EDIDD&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;t_edidd[]&amp;nbsp;=&amp;nbsp;it_edidd[].&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;data&lt;/span&gt;:&amp;nbsp;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;like&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;line&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;of&lt;/span&gt;&amp;nbsp;t_edidd.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;if&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;lines&lt;/span&gt;(&amp;nbsp;t_edidd&amp;nbsp;)&amp;nbsp;=&amp;nbsp;&lt;span class="L0S32"&gt;500&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;append&lt;/span&gt;&amp;nbsp;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;to&lt;/span&gt;&amp;nbsp;t_edidd.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDIF&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Code FM ZTEST_NP_DATA_GET to data from FG &lt;br /&gt;&lt;div id="mdiv1106132"&gt;&lt;pre id="pre1106132"&gt;&lt;span class="L0S52"&gt;FUNCTION&lt;/span&gt;&amp;nbsp;ZTEST_NP_DATA_GET.&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;*&amp;quot;Local&amp;nbsp;Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;EXPORTING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;REFERENCE(ET_EDIDD)&amp;nbsp;TYPE&amp;nbsp;&amp;nbsp;TAB_EDIDD&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;et_edidd&amp;nbsp;=&amp;nbsp;t_edidd.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Code FM ZTEST_NP_DATA_SET_1 - Data copy using REF TO DATA&lt;br /&gt;&lt;div id="mdiv1106134"&gt;&lt;pre id="pre1106134"&gt;&lt;span class="L0S52"&gt;FUNCTION&lt;/span&gt;&amp;nbsp;ztest_np_data_set_1.&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;*&amp;quot;Local&amp;nbsp;Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;IMPORTING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;REFERENCE(IO_EDIDD)&amp;nbsp;TYPE&amp;nbsp;REF&amp;nbsp;TO&amp;nbsp;&amp;nbsp;DATA&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;o_edidd&amp;nbsp;=&amp;nbsp;io_edidd.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;FIELD&lt;/span&gt;-SYMBOLS:&amp;nbsp;&amp;lt;lt_edidd&amp;gt;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;tab_edidd.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ASSIGN&lt;/span&gt;&amp;nbsp;o_edidd-&amp;gt;*&amp;nbsp;&lt;span class="L0S52"&gt;TO&lt;/span&gt;&amp;nbsp;&amp;lt;lt_edidd&amp;gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;LINE&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&amp;nbsp;&amp;lt;lt_edidd&amp;gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IF&lt;/span&gt;&amp;nbsp;&lt;span class="L0S52"&gt;LINES&lt;/span&gt;(&amp;nbsp;&amp;lt;lt_edidd&amp;gt;&amp;nbsp;)&amp;nbsp;=&amp;nbsp;&lt;span class="L0S32"&gt;500&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;APPEND&lt;/span&gt;&amp;nbsp;lwa_edidd&amp;nbsp;&lt;span class="L0S52"&gt;TO&lt;/span&gt;&amp;nbsp;&amp;lt;lt_edidd&amp;gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDIF&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Code ZTEST_NP_DATA_GET_1 - Get Data reference back&lt;br /&gt;&lt;div id="mdiv1106133"&gt;&lt;pre id="pre1106133"&gt;&lt;span class="L0S52"&gt;FUNCTION&lt;/span&gt;&amp;nbsp;ZTEST_NP_DATA_GET_1.&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;*&amp;quot;Local&amp;nbsp;Interface:&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;EXPORTING&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;REFERENCE(EO_EDIDD)&amp;nbsp;TYPE&amp;nbsp;REF&amp;nbsp;TO&amp;nbsp;&amp;nbsp;DATA&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;quot;----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;eo_edidd&amp;nbsp;=&amp;nbsp;o_edidd.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDFUNCTION&lt;/span&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Some stats on running the program with different number of records:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-a8KxKgCG7UQ/Tfatvw7kGRI/AAAAAAAABEg/XqyMH3SNEds/s1600/Perf_stats.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 289px; height: 103px;" src="http://4.bp.blogspot.com/-a8KxKgCG7UQ/Tfatvw7kGRI/AAAAAAAABEg/XqyMH3SNEds/s400/Perf_stats.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5617868621291460882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On graph:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-XKzIrmIvBHU/TfauOReSmEI/AAAAAAAABEw/PnHftBQNxpE/s1600/perf_Stat_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 227px; height: 96px;" src="http://4.bp.blogspot.com/-XKzIrmIvBHU/TfauOReSmEI/AAAAAAAABEw/PnHftBQNxpE/s400/perf_Stat_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5617869145423124546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-bOo7n77YOFg/Tfat4YhFR2I/AAAAAAAABEo/r5671KsLH2w/s1600/Perf_graph.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 237px;" src="http://3.bp.blogspot.com/-bOo7n77YOFg/Tfat4YhFR2I/AAAAAAAABEo/r5671KsLH2w/s400/Perf_graph.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5617868769356760930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, if we use the traditional ITAB Copy, it will decrease the performance with increasing number of records.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-9082174253211473890?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/9082174253211473890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/06/performance-of-itab-copy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/9082174253211473890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/9082174253211473890'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/06/performance-of-itab-copy.html' title='Performance of ITAB Copy'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-a8KxKgCG7UQ/Tfatvw7kGRI/AAAAAAAABEg/XqyMH3SNEds/s72-c/Perf_stats.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-1564424301821082921</id><published>2011-02-22T20:08:00.020-06:00</published><updated>2011-02-23T19:21:09.140-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>READ-ONLY attribute vs GETTER methods</title><content type='html'>READ-ONLY is something different for the people who have worked on the OOP in the past. Like JAVA doesn't have the read only addition. So, there is a hot discussion going on in SAP ABAP Objects world, why READ-ONLY is there and what is the purpose of it. Let's unleash the READ-ONLY (and its power over GETTER methods).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As good Object Oriented Programming suggests, we should hide our attributes from the outside world and let them allow to access only with the PUBLIC methods. These methods are:&lt;br /&gt;&lt;li&gt;SETTER – To set the data to the attribute. Usually, this method has the single parameter and typically that is named as VALUE. Implementation of the method sets the respective attribute from the parameter value. So, we should use the naming convention as SET_attr( ).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;GETTER – To retrieve the value from the attribute. This method should have the single parameter and typically it would be VALUE as type RETURNING. Implementation of this method, passes the attribute value to the caller in the parameter. As we name the SETTER methods, we should name the GETTER methods as GET_attr( ).&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Now, let’s see what is the READ-ONLY:&lt;br /&gt;READ-ONLY is the addition to the PUBLIC attributes. This allows the caller to access the attribute, but doesn’t allow it to change the value. Refer keyword documentation on READ-ONLY on SAP Help at: &lt;a class='ahover' rel="nofollow" target="_blank" href="http://help.sap.com/abapdocu_70/en/ABAPDATA_OPTIONS.htm#&amp;ABAP_ADDITION_2@2@"&gt;READ-ONLY addition&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Caller can simply access the variable directly with proper operator. Like this:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="650" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Caller accesses READ-ONLY attribute &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#FAFAFA;font-family:Arial monospaced for SAP;font-size: 11pt"&gt;&lt;pre&gt;&lt;span&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;&amp;nbsp;Developer&amp;nbsp;:&amp;nbsp;Naimesh&amp;nbsp;Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;&amp;nbsp;Purpose&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;READ-ONLY&amp;nbsp;Demo&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;REPORT&lt;/span&gt;&amp;nbsp;&amp;nbsp;ztest_np.&lt;br /&gt;&lt;span class="L1S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;CLASS&lt;/span&gt;&amp;nbsp;lcl_example&amp;nbsp;&lt;span class="L1S52"&gt;DEFINITION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;PUBLIC&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;SECTION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;v_speed&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;READ&lt;/span&gt;-ONLY.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHODS&lt;/span&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;constructor&amp;nbsp;&lt;span class="L1S52"&gt;IMPORTING&lt;/span&gt;&amp;nbsp;speed&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;&lt;span class="L1S52"&gt;ENDCLASS&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;lcl_example&amp;nbsp;DEFINITION&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;CLASS&lt;/span&gt;&amp;nbsp;lcl_example&amp;nbsp;&lt;span class="L1S52"&gt;IMPLEMENTATION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHOD&lt;/span&gt;&amp;nbsp;constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me-&amp;gt;v_speed&amp;nbsp;=&amp;nbsp;speed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;ENDMETHOD&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;constructor&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;ENDCLASS&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;lcl_example&amp;nbsp;IMPLEMENTATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;START-&lt;span class="L1S52"&gt;OF&lt;/span&gt;-SELECTION.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;o_test&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;REF&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TO&lt;/span&gt;&amp;nbsp;lcl_example.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;CREATE&lt;/span&gt;&amp;nbsp;OBJECT&amp;nbsp;o_test&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;speed&amp;nbsp;=&amp;nbsp;&lt;span class="L1S32"&gt;10&lt;/span&gt;.&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;nbsp;o_test-&amp;gt;v_speed&amp;nbsp;=&amp;nbsp;100.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;nbsp;Syntax&amp;nbsp;Error&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;WRITE&lt;/span&gt;:&amp;nbsp;&lt;span class="L1S33"&gt;'Accessing&amp;nbsp;V_SPEED:'&lt;/span&gt;,&amp;nbsp;o_test-&amp;gt;v_speed.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;In simple terms, we can reduce the amount of coding by using the READ-ONLY operator rather than creating GET_attr( ) methods for each methods.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GETTER vs READ-ONLY Performance: Who wins?&lt;/span&gt;&lt;br /&gt;I tried to create this sample program to find out which is better.  Here is the code lines:&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="650" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Lines for READ-ONLY vs GETTER &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#FAFAFA;font-family:Arial monospaced for SAP;font-size: 11pt;"&gt;&lt;pre&gt;&lt;span&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;&amp;nbsp;Developer&amp;nbsp;:&amp;nbsp;Naimesh&amp;nbsp;Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;&amp;nbsp;Purpose&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;READ-ONLY&amp;nbsp;vs&amp;nbsp;GETTER&amp;nbsp;Performance&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;REPORT&lt;/span&gt;&amp;nbsp;&amp;nbsp;ztest_np.&lt;br /&gt;&lt;span class="L1S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;CLASS&lt;/span&gt;&amp;nbsp;lcl_car&amp;nbsp;&lt;span class="L1S52"&gt;DEFINITION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;PUBLIC&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;SECTION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;v_speed&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;READ&lt;/span&gt;-ONLY.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHODS&lt;/span&gt;:&amp;nbsp;get_speed&amp;nbsp;RETURNING&amp;nbsp;&lt;span class="L1S52"&gt;value&lt;/span&gt;(&lt;span class="L1S52"&gt;return&lt;/span&gt;)&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHODS&lt;/span&gt;:&amp;nbsp;set_speed&amp;nbsp;&lt;span class="L1S52"&gt;IMPORTING&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;value&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;&lt;span class="L1S52"&gt;ENDCLASS&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;lcl_car&amp;nbsp;DEFINITION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;CLASS&lt;/span&gt;&amp;nbsp;lcl_car&amp;nbsp;&lt;span class="L1S52"&gt;IMPLEMENTATION&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHOD&lt;/span&gt;&amp;nbsp;get_speed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;return&lt;/span&gt;&amp;nbsp;=&amp;nbsp;v_speed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;ENDMETHOD&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;get_speed&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;METHOD&lt;/span&gt;&amp;nbsp;set_speed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v_speed&amp;nbsp;=&amp;nbsp;&lt;span class="L1S52"&gt;value&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;ENDMETHOD&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;set_speed&lt;/span&gt;&lt;br /&gt;&lt;span class="L1S52"&gt;ENDCLASS&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S31"&gt;&amp;quot;lcl_Car&amp;nbsp;IMPLEMENTATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;START-&lt;span class="L1S52"&gt;OF&lt;/span&gt;-SELECTION.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;o_bmw&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;REF&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TO&lt;/span&gt;&amp;nbsp;lcl_car.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;CREATE&lt;/span&gt;&amp;nbsp;OBJECT&amp;nbsp;o_bmw.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;lv_speed&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;lv_temp&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;i&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DATA&lt;/span&gt;:&amp;nbsp;lv_flag&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;flag,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_sta_time&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;timestampl,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_end_time&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;timestampl,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_diff_w&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;TYPE&lt;/span&gt;&amp;nbsp;p&amp;nbsp;&lt;span class="L1S52"&gt;DECIMALS&lt;/span&gt;&amp;nbsp;&lt;span class="L1S32"&gt;5&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_diff_f&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;LIKE&lt;/span&gt;&amp;nbsp;lv_diff_w,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_save&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;LIKE&lt;/span&gt;&amp;nbsp;lv_diff_w.&lt;br /&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;nbsp;Getter&amp;nbsp;Performance&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;GET&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIME&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;STAMP&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;FIELD&lt;/span&gt;&amp;nbsp;lv_sta_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DO&lt;/span&gt;&amp;nbsp;&lt;span class="L1S32"&gt;1000&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIMES&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o_bmw-&amp;gt;set_speed(&amp;nbsp;sy-&lt;span class="L1S52"&gt;index&lt;/span&gt;&amp;nbsp;).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_temp&amp;nbsp;=&amp;nbsp;lv_temp&amp;nbsp;+&amp;nbsp;o_bmw-&amp;gt;get_speed(&amp;nbsp;).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;ENDDO&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;GET&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIME&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;STAMP&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;FIELD&lt;/span&gt;&amp;nbsp;lv_end_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;lv_diff_w&amp;nbsp;=&amp;nbsp;lv_end_time&amp;nbsp;-&amp;nbsp;lv_sta_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;WRITE&lt;/span&gt;:&amp;nbsp;/(&lt;span class="L1S32"&gt;15&lt;/span&gt;)&amp;nbsp;&lt;span class="L1S33"&gt;'With&amp;nbsp;getter'&lt;/span&gt;,&amp;nbsp;lv_diff_w.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;CLEAR&lt;/span&gt;:&amp;nbsp;lv_sta_time,&amp;nbsp;lv_end_time,&amp;nbsp;lv_temp.&lt;br /&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;nbsp;READ-ONLY&amp;nbsp;Performance&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;GET&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIME&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;STAMP&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;FIELD&lt;/span&gt;&amp;nbsp;lv_sta_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;DO&lt;/span&gt;&amp;nbsp;&lt;span class="L1S32"&gt;1000&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIMES&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;o_bmw-&amp;gt;set_speed(&amp;nbsp;sy-&lt;span class="L1S52"&gt;index&lt;/span&gt;&amp;nbsp;).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_temp&amp;nbsp;=&amp;nbsp;lv_temp&amp;nbsp;+&amp;nbsp;o_bmw-&amp;gt;v_speed.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;ENDDO&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;GET&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;TIME&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;STAMP&lt;/span&gt;&amp;nbsp;&lt;span class="L1S52"&gt;FIELD&lt;/span&gt;&amp;nbsp;lv_end_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;lv_diff_f&amp;nbsp;=&amp;nbsp;lv_end_time&amp;nbsp;-&amp;nbsp;lv_sta_time.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;WRITE&lt;/span&gt;:&amp;nbsp;/(&lt;span class="L1S32"&gt;15&lt;/span&gt;)&amp;nbsp;&lt;span class="L1S33"&gt;'With&amp;nbsp;READ-ONLY'&lt;/span&gt;,&amp;nbsp;lv_diff_f.&lt;br /&gt;&lt;br /&gt;&lt;span class="L1S31"&gt;*&amp;nbsp;Saved&amp;nbsp;time&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;lv_save&amp;nbsp;=&amp;nbsp;lv_diff_w&amp;nbsp;-&amp;nbsp;lv_diff_f.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L1S52"&gt;WRITE&lt;/span&gt;:&amp;nbsp;/(&lt;span class="L1S32"&gt;15&lt;/span&gt;)&amp;nbsp;&lt;span class="L1S33"&gt;'Saved&amp;nbsp;time'&lt;/span&gt;,&amp;nbsp;lv_save.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;When I ran the report, it showed that we can save around 67% of time while using the READ-ONLY compared to GETTER( ) method. When GETTER( ) method take about 100% time, direct attribute access finishes job in about 33% time. This should be useful when we are designing complex system, which uses too many GETTER methods. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-FeS--9gPYAA/TWR7OQL2AvI/AAAAAAAABB8/6fT211Gqfok/s1600/read_only_getter_perf.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 298px; height: 80px;" src="http://2.bp.blogspot.com/-FeS--9gPYAA/TWR7OQL2AvI/AAAAAAAABB8/6fT211Gqfok/s400/read_only_getter_perf.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5576717723384546034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1564424301821082921?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1564424301821082921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/02/read-only-attribute-vs-getter-methods.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1564424301821082921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1564424301821082921'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/02/read-only-attribute-vs-getter-methods.html' title='READ-ONLY attribute vs GETTER methods'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-FeS--9gPYAA/TWR7OQL2AvI/AAAAAAAABB8/6fT211Gqfok/s72-c/read_only_getter_perf.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-932598922438058598</id><published>2011-02-17T20:18:00.013-06:00</published><updated>2011-02-17T21:48:00.537-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>CLASS_CONSTRUCTOR and CONSTRUCTOR: Who comes before whom?</title><content type='html'>Today we will see how the constructor and class-constructor triggers at runtime. Before we start, please complete the survey as per my previous post - &lt;a href="http://help-abap.blogspot.com/2011/02/sap-abap-help-needs-your-help.html"&gt;SAP ABAP Help needs your HELP!!&lt;/a&gt;, if you hadn't (Thanks).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CONSTRUCTOR&lt;/span&gt;&lt;br /&gt;Whenever we instantiate the object using the statement CREATE OBJECT statement, CONSTRUCTOR would be called. System creates an object before it calls the CONSTRUCTOR method.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;CLASS_CONSTRUCTOR&lt;/span&gt;&lt;br /&gt;This type of constructor is the static constructor. This would be automatically accessed when system accesses the class for the first time.&lt;br /&gt;&lt;br /&gt;CONSTRUCTOR( ) is called when we instantiate the object, whereas call of CLASS_CONSTRUCTOR( ) method is different based how the class is accessed. Let's see it in details using this Classes.&lt;br /&gt;&lt;br /&gt;Class Hierarchy UML -&lt;br /&gt;Each of this class has a CONSTRUCTOR( ), a CLASS-CONSTRUCTOR( ) and a Constant except class LCL_C. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-rWD6ACJsxrw/TV3aup_7FrI/AAAAAAAABBc/TZMnObDFnWo/s1600/CC_HIER.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 380px;" src="http://1.bp.blogspot.com/-rWD6ACJsxrw/TV3aup_7FrI/AAAAAAAABBc/TZMnObDFnWo/s400/CC_HIER.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574852408837346994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Developer : Naimesh Patel&lt;br /&gt;*&amp; Purpose   : CLASS_CONSTRUCTOR and CONSTRUCTOR explaination&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ZTEST_NP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ==== LCL_A ===== *&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_a DEFINITION.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    CLASS-METHODS: class_constructor.&lt;br /&gt;    CONSTANTS: c_a TYPE char1 VALUE 'A'.&lt;br /&gt;    METHODS: constructor.&lt;br /&gt;ENDCLASS.                    "lcl_a DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_a IMPLEMENTATION.&lt;br /&gt;  METHOD class_constructor.&lt;br /&gt;    WRITE: / ' Class Constructor A'.&lt;br /&gt;  ENDMETHOD.                    "class_constructor&lt;br /&gt;  METHOD constructor.&lt;br /&gt;    WRITE: / '  Constructor A'.&lt;br /&gt;  ENDMETHOD.                    "constructor&lt;br /&gt;ENDCLASS.                    "lcl_a IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ==== LCL_B ===== *&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_b DEFINITION INHERITING FROM lcl_a.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    CONSTANTS: c_b TYPE char1 VALUE 'B'.&lt;br /&gt;    CLASS-METHODS: class_constructor.&lt;br /&gt;    METHODS constructor.&lt;br /&gt;ENDCLASS.                    "lcl_b DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_b IMPLEMENTATION.&lt;br /&gt;  METHOD class_constructor.&lt;br /&gt;    WRITE : / ' Class Constructor B'.&lt;br /&gt;  ENDMETHOD.                    "class_constructor&lt;br /&gt;  METHOD constructor.&lt;br /&gt;    super-&amp;gt;constructor( ).&lt;br /&gt;    WRITE : / '  Constructor B'.&lt;br /&gt;  ENDMETHOD.                    "constructor&lt;br /&gt;ENDCLASS.                    "lcl_b IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ==== LCL_C ===== *&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_c DEFINITION INHERITING FROM lcl_b.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    CLASS-METHODS: class_constructor.&lt;br /&gt;    METHODS constructor.&lt;br /&gt;ENDCLASS.                    "lcl_b DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_c IMPLEMENTATION.&lt;br /&gt;  METHOD class_constructor.&lt;br /&gt;    WRITE : / ' Class Constructor C'.&lt;br /&gt;  ENDMETHOD.                    "class_constructor&lt;br /&gt;  METHOD constructor.&lt;br /&gt;    super-&amp;gt;constructor( ).&lt;br /&gt;    WRITE : / '  Constructor C'.&lt;br /&gt;  ENDMETHOD.                    "constructor&lt;br /&gt;ENDCLASS.                    "lcl_b IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ==== LCL_D ===== *&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_d DEFINITION INHERITING FROM lcl_c.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    CONSTANTS: c_d TYPE char1 VALUE 'D'.&lt;br /&gt;    CLASS-METHODS: class_constructor.&lt;br /&gt;    METHODS constructor.&lt;br /&gt;ENDCLASS.                    "lcl_b DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_d IMPLEMENTATION.&lt;br /&gt;  METHOD class_constructor.&lt;br /&gt;    WRITE : / ' Class Constructor D'.&lt;br /&gt;  ENDMETHOD.                    "class_constructor&lt;br /&gt;  METHOD constructor.&lt;br /&gt;    super-&amp;gt;constructor( ).&lt;br /&gt;    WRITE : / '  Constructor D'.&lt;br /&gt;  ENDMETHOD.                    "constructor&lt;br /&gt;ENDCLASS.                    "lcl_b IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ==== LCL_Z ===== *&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_z DEFINITION.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    CLASS-METHODS: class_constructor.&lt;br /&gt;    CONSTANTS: c_z TYPE char1 VALUE 'Z'.&lt;br /&gt;    METHODS: constructor.&lt;br /&gt;ENDCLASS.                    "lcl_z DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_z IMPLEMENTATION.&lt;br /&gt;  METHOD class_constructor.&lt;br /&gt;    WRITE: / ' Class Constructor Z'.&lt;br /&gt;  ENDMETHOD.                    "class_constructor&lt;br /&gt;  METHOD constructor.&lt;br /&gt;    WRITE: / '  Constructor Z'.&lt;br /&gt;  ENDMETHOD.                    "constructor&lt;br /&gt;ENDCLASS.                    "lcl_z IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Now, let's take a look at different scenarios:&lt;br /&gt;This code accesses the constant C_D of the class LCL_D.&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet - Constant  access Scenario &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;LOAD-OF-PROGRAM.&lt;br /&gt;  WRITE: / '... LOAD-OF-PROGRAM ...'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  SKIP 2.&lt;br /&gt;  WRITE: / '... START-OF-SELECTION ...'.&lt;br /&gt;  WRITE: / 'lcl_d=&amp;gt;c_d  ..... ', lcl_d=&amp;gt;c_d.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-nxyI1KBNkmI/TV3g9TIRKFI/AAAAAAAABB0/1Ab3h22YvHc/s1600/cc_scn_1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 199px; height: 161px;" src="http://2.bp.blogspot.com/-nxyI1KBNkmI/TV3g9TIRKFI/AAAAAAAABB0/1Ab3h22YvHc/s400/cc_scn_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574859257466136658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;It has executed all the CLASS_CONSTRUCTOR( ) of the higher classes in class hierarchy of class D i.e. Class LCL_A, LCL_B, LCL_C and LCL_D in the sequence. It didn't execute the CLASS_CONSTRUCTOR( ) of the Class LCL_Z because we are not referring to any component of that class. &lt;br /&gt;&lt;br /&gt;Second scenario, in which we instantiate the object reference to LCL_D.&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet - Instantiation scenario &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;LOAD-OF-PROGRAM.&lt;br /&gt;  WRITE: / '... LOAD-OF-PROGRAM ...'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  SKIP 2.&lt;br /&gt;  WRITE: / '... START-OF-SELECTION ...'.&lt;br /&gt;  WRITE: / 'Instantiating LO_D'.&lt;br /&gt;  DATA: lo_d TYPE REF TO lcl_d.&lt;br /&gt;  CREATE OBJECT lo_d.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-euMNeWmpwh8/TV3gsoqdTtI/AAAAAAAABBs/q44oter9KA0/s1600/cc_scn_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 227px; height: 223px;" src="http://3.bp.blogspot.com/-euMNeWmpwh8/TV3gsoqdTtI/AAAAAAAABBs/q44oter9KA0/s400/cc_scn_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574858971188907730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;We can see that the CLASS_CONSTRUCTOR and CONSTRUCTOR were not called before START-OF-SELECTION. They were actually called when the CREATE OBJECT statement reached. So, instantiating the object has first called the method CLASS_CONSTRUCTOR( ) of the higher classes in the class hierarchy and then all CONSTRUCTOR( ).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Which class-constructor calls first when both classes are not related?&lt;/span&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="400" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet - Complex&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;LOAD-OF-PROGRAM.&lt;br /&gt;  WRITE: / '... LOAD-OF-PROGRAM ...'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  SKIP 2.&lt;br /&gt;  WRITE: / '... START-OF-SELECTION ...'.&lt;br /&gt;  WRITE: / 'Instantiating LO_D'.&lt;br /&gt;  DATA: lo_d TYPE REF TO lcl_d.&lt;br /&gt;  CREATE OBJECT lo_d.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  SKIP 1.&lt;br /&gt;  WRITE: / 'lcl_z=&amp;gt;c_z  ..... ', lcl_z=&amp;gt;c_z.&lt;br /&gt;  WRITE: / 'lcl_b=&amp;gt;c_b  ..... ', lcl_b=&amp;gt;c_b.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-4kOD4teYTag/TV3flvCK2qI/AAAAAAAABBk/5vkf0ai-SLs/s1600/cc_scn_3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 211px; height: 282px;" src="http://4.bp.blogspot.com/-4kOD4teYTag/TV3flvCK2qI/AAAAAAAABBk/5vkf0ai-SLs/s400/cc_scn_3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5574857753128262306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Wow! Too many different execution paths! System first encountered LCL_Z=&gt;C_Z. So, it has called the CLASS_CONSTRUCTOR of the LCL_Z. After that it encountered LCL_B=&gt;C_B. Thus, it calls the CLASS_CONSTRUCTOR of the class hierarchy of the class LCL_B i.e. CLASS_CONSTRUCTOR of classes LCL_A and LCL_B.&lt;br /&gt;&lt;br /&gt;Now, when we instantiated the object LO_D, system calls the methods CLASS_CONSTRUCTOR( ) of the remaining classes of the class hierarchies i.e. method CLASS_CONSTRUCTOR( ) of classes LCL_C and LCL_D. It doesn't call CLASS_CONSTRUCTOR( ) of the classes LCL_A and LCL_B, because they were already called when it has encountered the access to constant LCL_B=&gt;C_B.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can find more information of constructors on SAP Keyword documentation - &lt;a class='ahover' href="http://help.sap.com/abapdocu_70/en/ABENCONSTRUCTOR.htm" rel="nofollow" target="_blank"&gt;Constructors&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-932598922438058598?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/932598922438058598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/02/classconstructor-and-constructor-who.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/932598922438058598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/932598922438058598'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/02/classconstructor-and-constructor-who.html' title='CLASS_CONSTRUCTOR and CONSTRUCTOR: Who comes before whom?'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-rWD6ACJsxrw/TV3aup_7FrI/AAAAAAAABBc/TZMnObDFnWo/s72-c/CC_HIER.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2869956649767903693</id><published>2011-02-16T21:02:00.010-06:00</published><updated>2011-02-17T20:12:43.675-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Survey'/><title type='text'>SAP ABAP Help needs your HELP!!</title><content type='html'>&lt;/br&gt;&lt;br /&gt;I need your help to improve the content on this site, like content of the site, look &amp; feel, etc.&lt;br /&gt;&lt;br /&gt;I had setup a survey. Please take this survey - &lt;a class='ahover' href="http://www.surveymonkey.com/s/W67CFX5" rel="nofollow" target="_blank"&gt;SAP ABAP Help Survey&lt;/a&gt;. It will only take 5 minutes of your time. You can also leave comment here, if you wish to have something which is not listed in the survey.&lt;br /&gt;&lt;br /&gt;If somehow this link doesn't work, please leave a comment here. I'll try to fix it.&lt;br /&gt;&lt;br /&gt;Thanks Much! I Appreciate your help!&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;Naimesh Patel&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2869956649767903693?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2869956649767903693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2011/02/sap-abap-help-needs-your-help.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2869956649767903693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2869956649767903693'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2011/02/sap-abap-help-needs-your-help.html' title='SAP ABAP Help needs your HELP!!'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4848748796207891182</id><published>2010-11-18T22:09:00.017-06:00</published><updated>2011-08-23T08:54:47.896-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 7 : Relationship Browser</title><content type='html'>&lt;div class="subtitle"&gt;Relationships in GOS Toolbar&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the series of Generic Object Services(GOS) available in the SAP, we have discussed different usage of the GOS toolbar. You can find all of these discussions at &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#GOS"&gt;Tutorials &gt; Generic Object Services (GOS)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today, we'll see the another concept: Relationship browser. Relationships option is available in the GOS Toolbar at GOS toolbar &gt; Relationships.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Pj9z40ys5GI/TOYAf3Qu9EI/AAAAAAAAA_g/DKMeBKYDHME/s1600/Relat_1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 248px; height: 218px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/TOYAf3Qu9EI/AAAAAAAAA_g/DKMeBKYDHME/s400/Relat_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5541116938936054850" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This browser could display different linked objects like Sales Documents, Inbound IDOCs, Outbound IDOcs etc. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Pj9z40ys5GI/TOYAOJr2w5I/AAAAAAAAA_Y/bEKdOHw0e6A/s1600/Relat_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 191px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/TOYAOJr2w5I/AAAAAAAAA_Y/bEKdOHw0e6A/s400/Relat_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5541116634644005778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now lets see how to add this Relationships in this relationship browser. For this purpose, we can use method CREATE_LINK of the class CL_BINARY_RELATION or the FM BINARY_RELATION_CREATE. &lt;br /&gt;&lt;br /&gt;Method CREATE_LINK is an advanced version to create the Link which would be displayed in the Relationship browser. Since the method CREATE_LINK is an improved version to create the links, it doesn't support all the object models. For the remaining of the object models, we need to use the FM BINARY_RELATION_CREATE. So, the question is how to know when to use FM. &lt;br /&gt;&lt;br /&gt;When the relation model is not supported by the method CREATE_LINK, it raises the exception CX_OBL_MODEL_ERROR. So, we'll call the method CREATE_LINK inside the TRY ... CATCH ... ENDTRY block. &lt;br /&gt;&lt;br /&gt;This Code Snippet shows how to use the method to create links in the relationship browser.&lt;br /&gt;&lt;div id="mdiv101118"&gt;&lt;pre id="pre101118"&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;&amp;nbsp;Developer:&amp;nbsp;Naimesh&amp;nbsp;Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;&amp;nbsp;Purpose&amp;nbsp;&amp;nbsp;:&amp;nbsp;To&amp;nbsp;Create&amp;nbsp;Relation&amp;nbsp;between&amp;nbsp;Business&amp;nbsp;Objects&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;REPORT&amp;nbsp;&amp;nbsp;&lt;/span&gt;zgos_relation_create&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CLASS&amp;nbsp;&lt;/span&gt;lcl_relation&amp;nbsp;&lt;span class="L0S52"&gt;DEFINITION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;PUBLIC&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;SECTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPES&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;BEGIN&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;ty_related&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;INCLUDE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibflporb&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPES&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relation&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;oblreltype&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;END&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;ty_related&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPES&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ty_t_related&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TABLE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;ty_related&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHODS&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;constructor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IMPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_no&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibfboriid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_type&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibftypeid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_cat&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibfcatid&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHODS&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;add_relation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IMPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_no&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibfboriid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_type&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibftypeid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_cat&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibfcatid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relation&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;oblreltype&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHODS&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create_relations&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;PRIVATE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;SECTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t_related&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;ty_t_related&lt;span class="L0S55"&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;sibflporbt,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my_prop&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibflporb&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDCLASS&lt;/span&gt;&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;lcl_relation&amp;nbsp;DEFINITION&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CLASS&amp;nbsp;&lt;/span&gt;lcl_relation&amp;nbsp;&lt;span class="L0S52"&gt;IMPLEMENTATION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHOD&amp;nbsp;&lt;/span&gt;constructor&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&amp;nbsp;Properties&amp;nbsp;of&amp;nbsp;Referent&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;my_prop&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_no&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;my_prop&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_type&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;my_prop&lt;span class="L0S70"&gt;-&lt;/span&gt;catid&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_cat&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDMETHOD&lt;/span&gt;&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;constructor&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHOD&amp;nbsp;&lt;/span&gt;add_relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;Add&amp;nbsp;Referenc&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;FIELD&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SYMBOLS&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;LINE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;t_related&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;APPEND&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;INITIAL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;LINE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;t_related&amp;nbsp;&lt;span class="L0S52"&gt;ASSIGNING&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_no&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_type&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;catid&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;obj_cat&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;relation&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDMETHOD&lt;/span&gt;&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;add_relation&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;METHOD&amp;nbsp;&lt;/span&gt;create_relations&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lwa_relate_key&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibflporb&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;FIELD&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SYMBOLS&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&amp;nbsp;&lt;span class="L0S52"&gt;LIKE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;LINE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;OF&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;t_related&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_parent&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;borident&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_related&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;borident&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_relation&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;binreltyp&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lx_obl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;REF&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;cx_obl&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lp_errstr&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;string&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_done&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;flag&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;each&amp;nbsp;relation&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;LOOP&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;AT&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;t_related&amp;nbsp;&lt;span class="L0S52"&gt;ASSIGNING&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;MOVE-CORRESPONDING&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&amp;nbsp;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;lwa_relate_key&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;TRY&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;First&amp;nbsp;try&amp;nbsp;with&amp;nbsp;new&amp;nbsp;method&amp;nbsp;to&amp;nbsp;create&amp;nbsp;the&amp;nbsp;Link&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;METHOD&amp;nbsp;&lt;/span&gt;cl_binary_relation&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;create_link&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is_object_a&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;my_prop&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is_object_b&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lwa_relate_key&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ip_reltype&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_done&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'X'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;the&amp;nbsp;Link&amp;nbsp;can&amp;nbsp;not&amp;nbsp;be&amp;nbsp;handled&amp;nbsp;by&amp;nbsp;this&amp;nbsp;class,&amp;nbsp;call&amp;nbsp;the&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FM&amp;nbsp;to&amp;nbsp;create&amp;nbsp;the&amp;nbsp;link&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CATCH&amp;nbsp;&lt;/span&gt;cx_obl_model_error&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_parent&lt;span class="L0S70"&gt;-&lt;/span&gt;objkey&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;my_prop&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_parent&lt;span class="L0S70"&gt;-&lt;/span&gt;objtype&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;me&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;my_prop&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_related&lt;span class="L0S70"&gt;-&lt;/span&gt;objkey&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_related&lt;span class="L0S70"&gt;-&lt;/span&gt;objtype&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_relation&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CALL&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BINARY_RELATION_CREATE'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_rolea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;ls_parent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_roleb&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;ls_related&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relationtype&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lv_relation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXCEPTIONS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;no_model&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;internal_error&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unknown&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;3&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;OTHERS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S32"&gt;4&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IF&amp;nbsp;&lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;subrc&amp;nbsp;&amp;lt;&amp;gt;&amp;nbsp;&lt;span class="L0S32"&gt;0&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;MESSAGE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;ID&amp;nbsp;&lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgid&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'S'&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;NUMBER&amp;nbsp;&lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgno&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;WITH&amp;nbsp;&lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgv1&amp;nbsp;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgv2&amp;nbsp;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgv3&amp;nbsp;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;msgv4&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ELSE&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lv_done&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'X'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDIF&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CATCH&amp;nbsp;&lt;/span&gt;cx_obl&amp;nbsp;&lt;span class="L0S52"&gt;INTO&amp;nbsp;&lt;/span&gt;lx_obl&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lp_errstr&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lx_obl&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;get_text&lt;span class="L0S55"&gt;(&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;MESSAGE&amp;nbsp;&lt;/span&gt;lp_errstr&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'S'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDTRY&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;IF&amp;nbsp;&lt;/span&gt;lv_done&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'X'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;/&amp;nbsp;&lt;span class="L0S33"&gt;'Relation&amp;nbsp;added:&amp;nbsp;'&lt;/span&gt;&lt;span class="L0S55"&gt;,&amp;nbsp;&lt;/span&gt;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;span class="L0S32"&gt;10&lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;,&amp;nbsp;&amp;lt;lfs_relat&amp;gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDIF&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDLOOP&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;COMMIT&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;WORK&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;ENDMETHOD&lt;/span&gt;&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;create_relations&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDCLASS&lt;/span&gt;&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;lcl_relation&amp;nbsp;IMPLEMENTATION&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;START&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SELECTION&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;o_relation&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;REF&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;lcl_relation&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Sales&amp;nbsp;Order&amp;nbsp;as&amp;nbsp;the&amp;nbsp;Referent&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;CREATE&amp;nbsp;&lt;/span&gt;OBJECT&amp;nbsp;o_relation&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_no&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'1000010010'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Sales&amp;nbsp;Order&amp;nbsp;Number&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_type&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BUS2032'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Sales&amp;nbsp;Order&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_cat&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BO'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Add&amp;nbsp;Delivery&amp;nbsp;to&amp;nbsp;Sales&amp;nbsp;Order&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;o_relation&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;add_relation&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_no&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'8000020000'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_type&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'LIKP'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_cat&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BO'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relation&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'LINK'&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Link&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Add&amp;nbsp;IDOC&amp;nbsp;to&amp;nbsp;Sales&amp;nbsp;Order&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;o_relation&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;add_relation&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_no&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'1000012345'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_type&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'IDOC'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj_cat&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BO'&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relation&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'IDC0'&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;IDOC&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Create&amp;nbsp;Relations&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;o_relation&lt;span class="L0S70"&gt;-&amp;gt;&lt;/span&gt;create_relations&lt;span class="L0S55"&gt;(&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;After successful program run, it will display the relationship in the browser of the Order.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Pj9z40ys5GI/TOYBJwI3yMI/AAAAAAAAA_o/7IGX8DKK1Co/s1600/Order_Relation.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 139px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/TOYBJwI3yMI/AAAAAAAAA_o/7IGX8DKK1Co/s400/Order_Relation.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5541117658578536642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4848748796207891182?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4848748796207891182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2010/11/generic-object-services-gos-toolbar_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4848748796207891182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4848748796207891182'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2010/11/generic-object-services-gos-toolbar_18.html' title='Generic Object Services (GOS) Toolbar Part 7 : Relationship Browser'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/TOYAf3Qu9EI/AAAAAAAAA_g/DKMeBKYDHME/s72-c/Relat_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-6765536222628774826</id><published>2010-11-17T21:06:00.004-06:00</published><updated>2011-08-23T11:41:11.902-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 6 : Copy Attachments between objects</title><content type='html'>&lt;div class="subtitle"&gt;Copy GOS attachment from one object to another object&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sometimes it is required to copy the attachments from one object to another object. For example, we want to attach the customer's purchase order to Sales Order and Billing document once the billing document is generated. &lt;br /&gt;&lt;br /&gt;To copy the attachments between the objects, we can use the utility method COPY_LINKED_OBJECTS of the class CL_GOS_SERVICE_TOOLS. We need to tell the method using IT_SERVICE_SELECTION, which service needs to be performed i.e. for the attachment copy, we need to perform the "Attachment Create" service. We also let the method know the the source and target.&lt;br /&gt;&lt;br /&gt;Here is the Code snippet which copies the attachments between Customers.&lt;br /&gt;&lt;div id="mdiv101117"&gt;&lt;pre id="pre101117"&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;&amp;nbsp;Developed&amp;nbsp;by:&amp;nbsp;Naimesh&amp;nbsp;Patel&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;&amp;nbsp;Purpose&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;To&amp;nbsp;Copy&amp;nbsp;the&amp;nbsp;Attachment&amp;nbsp;from&amp;nbsp;One&amp;nbsp;Object&amp;nbsp;to&amp;nbsp;Another&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;REPORT&amp;nbsp;&amp;nbsp;&lt;/span&gt;ztest_np_copy_gos_att&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;lt_services&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;tgos_sels&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Services&amp;nbsp;table&amp;nbsp;typ&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;ls_service&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sgos_sels&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Services&amp;nbsp;structure&amp;nbsp;type&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&amp;nbsp;&lt;/span&gt;ls_source&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibflporb&lt;span class="L0S55"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Source&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ls_target&amp;nbsp;&lt;span class="L0S52"&gt;TYPE&amp;nbsp;&lt;/span&gt;sibflporb&lt;span class="L0S55"&gt;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;&amp;nbsp;Target&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;START&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SELECTION&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Service&amp;nbsp;needs&amp;nbsp;to&amp;nbsp;be&amp;nbsp;performed&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_service&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;sign&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'I'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_service&lt;span class="L0S70"&gt;-&lt;/span&gt;option&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'EQ'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_service&lt;span class="L0S70"&gt;-&lt;/span&gt;low&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'PCATTA_CREA'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;APPEND&amp;nbsp;&lt;/span&gt;ls_service&amp;nbsp;&lt;span class="L0S52"&gt;TO&amp;nbsp;&lt;/span&gt;lt_services&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Source&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_source&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'CUST1'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_source&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'KNA1'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_source&lt;span class="L0S70"&gt;-&lt;/span&gt;catid&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BO'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Target&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_target&lt;span class="L0S70"&gt;-&lt;/span&gt;instid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'CUST2'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_target&lt;span class="L0S70"&gt;-&lt;/span&gt;typeid&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'KNA1'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ls_target&lt;span class="L0S70"&gt;-&lt;/span&gt;catid&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;&lt;span class="L0S33"&gt;'BO'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;nbsp;Copy&amp;nbsp;the&amp;nbsp;objects&amp;nbsp;between&amp;nbsp;Source&amp;nbsp;and&amp;nbsp;Target&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;cl_gos_service_tools&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;copy_linked_objects&lt;span class="L0S55"&gt;(&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is_source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;ls_source&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is_target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;ls_target&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;it_service_selection&amp;nbsp;&lt;span class="L0S55"&gt;=&amp;nbsp;&lt;/span&gt;lt_services&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;span class="L0S31"&gt;*&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="L0S52"&gt;COMMIT&amp;nbsp;&lt;/span&gt;&lt;span class="L0S52"&gt;WORK&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-6765536222628774826?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/6765536222628774826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2010/11/generic-object-services-gos-toolbar.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6765536222628774826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6765536222628774826'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2010/11/generic-object-services-gos-toolbar.html' title='Generic Object Services (GOS) Toolbar Part 6 : Copy Attachments between objects'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-1094864382399865204</id><published>2010-01-18T13:15:00.002-06:00</published><updated>2010-01-18T13:20:32.849-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV Table 14 - Editable Checkbox</title><content type='html'>&lt;div class="subtitle"&gt;Editable Checkbox in the SALV table&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the series of the SALV Model Table display in SAP ABAP, today we will see how to get the editable checkbox in ALV Grid. You can find all the Previous discussion at &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#SALVTAB"&gt;Tutorials &gt; SALV Table Display&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To get the selectable (editable) checkbox, we need to get the specific column from the column object. After this, we need to set the cell type as  IF_SALV_C_CELL_TYPE=&gt;CHECKBOX_HOTSPOT by using the method SET_CELL_TYPE. To update the values in the checkbox, we need to handle the event LINK_CLICK. This event LINK_CLICK is triggered when we click on the hotspot enabled checkbox. In the event handler method, we need to change the value of the checkbox field and call the REFRESH method to refresh the value on the ALV.&lt;br /&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; SALV Table, editable checkbox&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  zsalv_editable_checkbox.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report DEFINITION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Final output table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TYPES: BEGIN OF ty_vbak,&lt;br /&gt;           vbeln TYPE vbak-vbeln,&lt;br /&gt;           erdat TYPE erdat,&lt;br /&gt;           auart TYPE auart,&lt;br /&gt;           kunnr TYPE kunnr,&lt;br /&gt;           check TYPE flag,&lt;br /&gt;           END   OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   ALV reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: o_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      get_data,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Generating output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_handler DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;    METHODS:&lt;br /&gt;      on_link_click FOR EVENT link_click OF cl_salv_events_table&lt;br /&gt;        IMPORTING row column.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_event_handler DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  DATA: lo_report TYPE REF TO lcl_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;get_data( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;generate_output( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report IMPLEMENTATION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD get_data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SELECT vbeln erdat auart kunnr&lt;br /&gt;           INTO  TABLE t_vbak&lt;br /&gt;           FROM  vbak&lt;br /&gt;           UP TO 20 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "get_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*.......................................................................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* exception class&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lx_msg TYPE REF TO cx_salv_msg.&lt;br /&gt;    TRY.&lt;br /&gt;        cl_salv_table=&amp;gt;factory(&lt;br /&gt;          IMPORTING&lt;br /&gt;            r_salv_table = o_alv&lt;br /&gt;          CHANGING&lt;br /&gt;            t_table      = t_vbak ).&lt;br /&gt;      CATCH cx_salv_msg INTO lx_msg.&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*...Get all the Columns&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_cols TYPE REF TO cl_salv_columns.&lt;br /&gt;    lo_cols = o_alv-&amp;gt;get_columns( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   set the Column optimization&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_cols-&amp;gt;set_optimize( 'X' ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*...Process individual columns&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_column TYPE REF TO cl_salv_column_list.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Change the properties of the Columns KUNNR&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TRY.&lt;br /&gt;        lo_column ?= lo_cols-&amp;gt;get_column( 'CHECK' ).&lt;br /&gt;        lo_column-&amp;gt;set_cell_type( if_salv_c_cell_type=&amp;gt;checkbox_hotspot ).&lt;br /&gt;        lo_column-&amp;gt;set_output_length( 10 ).&lt;br /&gt;      CATCH cx_salv_not_found.                          "#EC NO_HANDLER&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Get the event object&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_events TYPE REF TO cl_salv_events_table.&lt;br /&gt;    lo_events = o_alv-&amp;gt;get_event( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Instantiate the event handler object&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_event_handler TYPE REF TO lcl_event_handler.&lt;br /&gt;    CREATE OBJECT lo_event_handler.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   event handler&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SET HANDLER lo_event_handler-&amp;gt;on_link_click FOR lo_events.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Displaying the ALV&lt;br /&gt;*   Here we will call the DISPLAY method to get the output on the screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    o_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "generate_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_event_handler IMPLEMENTATION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_handler IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD on_link_click.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Get the value of the checkbox and set the value accordingly&lt;br /&gt;*   Refersh the table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    FIELD-SYMBOLS: &amp;lt;lfa_data&amp;gt; LIKE LINE OF lo_report-&amp;gt;t_vbak.&lt;br /&gt;    READ TABLE lo_report-&amp;gt;t_vbak ASSIGNING &amp;lt;lfa_data&amp;gt; INDEX row.&lt;br /&gt;    CHECK sy-subrc IS INITIAL.&lt;br /&gt;    IF &amp;lt;lfa_data&amp;gt;-check IS INITIAL.&lt;br /&gt;      &amp;lt;lfa_data&amp;gt;-check = 'X'.&lt;br /&gt;    ELSE.&lt;br /&gt;      CLEAR &amp;lt;lfa_data&amp;gt;-check.&lt;br /&gt;    ENDIF.&lt;br /&gt;    lo_report-&amp;gt;o_alv-&amp;gt;refresh( ).&lt;br /&gt;  ENDMETHOD.                    "on_link_click&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_event_handler IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1094864382399865204?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1094864382399865204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2010/01/salv-table-14-editable-checkbox.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1094864382399865204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1094864382399865204'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2010/01/salv-table-14-editable-checkbox.html' title='SALV Table 14 - Editable Checkbox'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2191978789446034623</id><published>2010-01-04T22:00:00.003-06:00</published><updated>2010-01-04T22:18:00.409-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV Table 13 - Apply Sorts</title><content type='html'>&lt;div class="subtitle"&gt;Apply Sorts to SALV Table &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the series of the SALV Model Table display in SAP ABAP, today we will see how to apply Sorting to the ALV Grid. You can find all the Previous discussion at &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#SALVTAB"&gt;Tutorials &gt; SALV Table Display&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sorts are very important in the reporting. Sorting also provides us the functionality to have the Subtotal on amount / quantity fields. To achieve the sort functions, we have the class CL_SALV_SORTS.&lt;br /&gt;&lt;br /&gt;We need to use the method ADD_SORTS of the class CL_SALV_SORTS to apply a filter on a specific column. We need to pass the column name e.g. AUART in the parameter COLUMNNAME. We can also set the of sort direction by setting up the parameter SEQUENCE.&lt;br /&gt;&lt;br /&gt;For this example, I have added a sort on the AUART column and the subtotal for the NETWR column.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_oo_alv_sorts.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report DEFINITION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Final output table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TYPES: BEGIN OF ty_vbak,&lt;br /&gt;           vbeln     TYPE vbak-vbeln,&lt;br /&gt;           erdat     TYPE erdat,&lt;br /&gt;           auart     TYPE auart,&lt;br /&gt;           kunnr     TYPE kunnr,&lt;br /&gt;           netwr     TYPE netwr,&lt;br /&gt;           END   OF ty_vbak.&lt;br /&gt;    TYPES: ty_t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   ALV reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: o_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      get_data,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Generating output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this section we will define the private methods which can&lt;br /&gt;*      be implemented to set the properties of the ALV and can be&lt;br /&gt;*      called in the&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PRIVATE SECTION.&lt;br /&gt;    METHODS:&lt;br /&gt;      set_pf_status&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      set_sorts&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      set_aggregations&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv  TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - End....................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  DATA: lo_report TYPE REF TO lcl_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;get_data( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;generate_output( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report IMPLEMENTATION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD get_data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SELECT vbeln erdat auart kunnr netwr&lt;br /&gt;           INTO  CORRESPONDING FIELDS OF TABLE t_vbak&lt;br /&gt;           FROM  vbak&lt;br /&gt;           up to 20 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "get_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*.......................................................................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* New ALV instance&lt;br /&gt;*   We are calling the static Factory method which will give back&lt;br /&gt;*   the ALV object reference.&lt;br /&gt;*&lt;br /&gt;* exception class&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lx_msg TYPE REF TO cx_salv_msg.&lt;br /&gt;    TRY.&lt;br /&gt;        cl_salv_table=&amp;gt;factory(&lt;br /&gt;          IMPORTING&lt;br /&gt;            r_salv_table = o_alv&lt;br /&gt;          CHANGING&lt;br /&gt;            t_table      = t_vbak ).&lt;br /&gt;      CATCH cx_salv_msg INTO lx_msg.&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will call the methods which will set the&lt;br /&gt;*      different properties to the ALV&lt;br /&gt;*&lt;br /&gt;*   Set default PF status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_pf_status&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set SORT&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_sorts&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set the Aggregations&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_aggregations&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*$*$*.....CODE_ADD_2 - End....................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;* Displaying the ALV&lt;br /&gt;*   Here we will call the DISPLAY method to get the output on the screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    o_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "generate_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will implement the methods which are defined in&lt;br /&gt;*      the class definition&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_pf_status.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_functions TYPE REF TO cl_salv_functions_list.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_functions = co_alv-&amp;gt;get_functions( ).&lt;br /&gt;    lo_functions-&amp;gt;set_default( abap_true ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_pf_status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_sorts.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_sort TYPE REF TO cl_salv_sorts.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   get Sort object&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_sort = co_alv-&amp;gt;get_sorts( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set the SORT on the AUART with Subtotal&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TRY.&lt;br /&gt;        CALL METHOD lo_sort-&amp;gt;add_sort&lt;br /&gt;          EXPORTING&lt;br /&gt;            columnname = 'AUART'&lt;br /&gt;            subtotal   = if_salv_c_bool_sap=&amp;gt;true.&lt;br /&gt;      CATCH cx_salv_not_found .                         "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_existing .                          "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_data_error .                        "#EC NO_HANDLER&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_sorts&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_aggregations.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_aggrs TYPE REF TO cl_salv_aggregations.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_aggrs = co_alv-&amp;gt;get_aggregations( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Add TOTAL for COLUMN NETWR&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TRY.&lt;br /&gt;        CALL METHOD lo_aggrs-&amp;gt;add_aggregation&lt;br /&gt;          EXPORTING&lt;br /&gt;            columnname  = 'NETWR'&lt;br /&gt;            aggregation = if_salv_c_aggregation=&amp;gt;total.&lt;br /&gt;      CATCH cx_salv_data_error .                        "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_not_found .                         "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_existing .                          "#EC NO_HANDLER&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_aggregations&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - End....................................3..*$*$*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SAP Help on SALV Column Sorting:&lt;br /&gt;&lt;a class='ahover' href="http://help.sap.com/saphelp_nw04/helpdata/en/e9/e5eb40c4f8712ae10000000a155106/frameset.htm" rel="nofollow"&gt;ALV Object Model - Sorting by Columns&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2191978789446034623?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2191978789446034623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2010/01/salv-table-13-apply-sorts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2191978789446034623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2191978789446034623'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2010/01/salv-table-13-apply-sorts.html' title='SALV Table 13 - Apply Sorts'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-1119492982731342100</id><published>2009-12-30T20:28:00.003-06:00</published><updated>2009-12-30T20:45:08.701-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV OM Undocumented Limitations - Initial Lines in Details Screen</title><content type='html'>&lt;div class="subtitle"&gt;SALV Limitations: Initial Lines in Detail screen&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is another undocumented limitation of the SALV OM: Initial Lines and Detail Screen Title is not possible in ALV (created using container) with SALV OM. These features are possible in the ALV Grid created with the CL_GUI_ALV_GRID.&lt;br /&gt;&lt;br /&gt;In the Layout TYPE LVC_S_LAYO, we have the provision to set the Initial lines in the detail view by setting up the field DETAILINIT. We can set the title to detail screen as well by populating the value in the field DETAILTITL. These features are not available in the SALV OM. Method GET_LVC_LAYOUT of Class CL_SALV_CONTROLLER_METADATA sets the Layout to TYPE LVC_S_LAYO for the ALV GRID. In fact SALV OM only sets few fields of Layout in this method. It only populated very few fields of the LVC_S_LAYO.&lt;br /&gt;&lt;br /&gt;Discussion in SCN forum: &lt;a class='ahover' href="http://forums.sdn.sap.com/message.jspa?messageID=8577360#8577360" rel="nofollow" target="_blank"&gt;Detail initial lines for SALV&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1119492982731342100?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1119492982731342100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-om-undocumented-limitations-inital.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1119492982731342100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1119492982731342100'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-om-undocumented-limitations-inital.html' title='SALV OM Undocumented Limitations - Initial Lines in Details Screen'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-1248564100131083887</id><published>2009-12-29T18:44:00.004-06:00</published><updated>2009-12-29T19:06:53.081-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Limitations'/><title type='text'>SALV OM Undocumented Limitations - Separator in the Toolbar</title><content type='html'>&lt;div class="subtitle"&gt;SALV Limitations: Separator in Toolbar&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In this new series on SALV Object Model (SALV OM), I will document some of the Limitations which are not documented in standard SAP documentation.&lt;br /&gt;&lt;br /&gt;In the ALV GRID (created using container) type of SALV, we can't have a Separator in the Toolbar. To add the separator in the Toolbar, button type (BUTN_TYPE) field of toolbar must be set to "3". SALV OM doesn't allow to specify this button type. It assumes that there would be only normal buttons (BUTN_TYPE = '0'). Method IF_SALV_TOOLBAR_ADAPTER~BUILD_UIFUNCTION in class CL_SALV_GRID_ADAPTER, creates the toolbar functions.&lt;br /&gt;&lt;br /&gt;&lt;a class='ahover' href="http://forums.sdn.sap.com/message.jspa?messageID=8574091#8574091" rel="nofollow" target="_blank"&gt;Code Lines which impose this restriction in SALV OM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To overcome this limitation, SAP could enhance SALV OM to provide us the method to set the button type in the CL_SALV_FUNCTION and use that button type here in the code instead of assuming that button as the normal button.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1248564100131083887?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1248564100131083887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-om-undocumented-limitations.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1248564100131083887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1248564100131083887'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-om-undocumented-limitations.html' title='SALV OM Undocumented Limitations - Separator in the Toolbar'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-7660661623492175700</id><published>2009-12-28T22:26:00.002-06:00</published><updated>2009-12-28T22:36:06.742-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV Table 12 - Apply Filters</title><content type='html'>&lt;div class="subtitle"&gt;Apply Filters to SALV Table &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the series of the SALV Model Table display in SAP ABAP, today we will see how to apply Filters to the ALV Grid. You can find all the Previous discussion at &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#SALVTAB"&gt;Tutorials &gt; SALV Table Display&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Filters are important to display only values required by the users. i.e. See only the "Red" Lights from the Traffic Light report. To achieve this functionality, we have the CL_SALV_FILTERS class of SAP OM.&lt;br /&gt;&lt;br /&gt;We can use the method ADD_FILTERS of the class CL_SALV_FILTERS to apply the filter on a specific column. The values in the filters would work exactly like values in a Range or Select-options i.e. SIGN, OPTION, LOW &amp; HIGH. For this example, I have applied filters on the ERDAT column to only show records with a specific date.&lt;br /&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet to Apply Filters&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_oo_alv_filters.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       Code to Apply Filters to SALV Table Display&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report DEFINITION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Final output table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TYPES: BEGIN OF ty_vbak,&lt;br /&gt;           vbeln     TYPE vbak-vbeln,&lt;br /&gt;           erdat     TYPE erdat,&lt;br /&gt;           auart     TYPE auart,&lt;br /&gt;           kunnr     TYPE kunnr,&lt;br /&gt;           netwr     TYPE netwr,&lt;br /&gt;           END   OF ty_vbak.&lt;br /&gt;    TYPES: ty_t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   ALV reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: o_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      get_data,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Generating output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this section we will define the private methods which can&lt;br /&gt;*      be implemented to set the properties of the ALV and can be&lt;br /&gt;*      called in the&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PRIVATE SECTION.&lt;br /&gt;    METHODS:&lt;br /&gt;      set_pf_status&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      set_filters&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - End....................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  DATA: lo_report TYPE REF TO lcl_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;get_data( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;generate_output( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report IMPLEMENTATION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD get_data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SELECT vbeln erdat auart kunnr netwr&lt;br /&gt;           INTO  CORRESPONDING FIELDS OF TABLE t_vbak&lt;br /&gt;           FROM  vbak&lt;br /&gt;           where erdat ge '20090101'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "get_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*.......................................................................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* New ALV instance&lt;br /&gt;*   We are calling the static Factory method which will give back&lt;br /&gt;*   the ALV object reference.&lt;br /&gt;*&lt;br /&gt;* exception class&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lx_msg TYPE REF TO cx_salv_msg.&lt;br /&gt;    TRY.&lt;br /&gt;        cl_salv_table=&amp;gt;factory(&lt;br /&gt;          IMPORTING&lt;br /&gt;            r_salv_table = o_alv&lt;br /&gt;          CHANGING&lt;br /&gt;            t_table      = t_vbak ).&lt;br /&gt;      CATCH cx_salv_msg INTO lx_msg.&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will call the methods which will set the&lt;br /&gt;*      different properties to the ALV&lt;br /&gt;*&lt;br /&gt;*   Set default PF status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_pf_status&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set Filters&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_filters&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*$*$*.....CODE_ADD_2 - End....................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;* Displaying the ALV&lt;br /&gt;*   Here we will call the DISPLAY method to get the output on the screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    o_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "generate_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will implement the methods which are defined in&lt;br /&gt;*      the class definition&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_pf_status.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_functions TYPE REF TO cl_salv_functions_list.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_functions = co_alv-&amp;gt;get_functions( ).&lt;br /&gt;    lo_functions-&amp;gt;set_default( abap_true ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_pf_status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_filters.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_filters TYPE REF TO cl_salv_filters.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_filters = co_alv-&amp;gt;get_filters( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set the filter for the column ERDAT&lt;br /&gt;*     the filter criteria works exactly same as any&lt;br /&gt;*     RANGE or SELECT-OPTIONS works.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TRY.&lt;br /&gt;        CALL METHOD lo_filters-&amp;gt;add_filter&lt;br /&gt;          EXPORTING&lt;br /&gt;            columnname = 'ERDAT'&lt;br /&gt;            sign       = 'I'&lt;br /&gt;            option     = 'EQ'&lt;br /&gt;            low        = '20091214'&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*           high       =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;            .&lt;br /&gt;      CATCH cx_salv_not_found .                         "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_data_error .                        "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_existing .                          "#EC NO_HANDLER&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_filters&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - End....................................3..*$*$*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-7660661623492175700?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/7660661623492175700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-table-12-apply-filters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7660661623492175700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7660661623492175700'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-table-12-apply-filters.html' title='SALV Table 12 - Apply Filters'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4049875994480420263</id><published>2009-12-22T18:00:00.004-06:00</published><updated>2009-12-22T18:21:46.342-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV Table 11 - Apply Aggregations</title><content type='html'>&lt;div class="subtitle"&gt;Apply Aggregations like Totals, Minimum values to SALV Table &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the series of the SALV Model Table display in SAP ABAP, today we will see how to apply aggregations to the ALV Grid. You can find all the Previous discussion at &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#SALVTAB"&gt;Tutorials &gt; SALV Table Display&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Aggregations plays important role in the reporting. E.g. Providing the TOTALS, Minimum values, Maximum values, Subtotals etc. To achieve this in the SALV model, we have the class CL_SALV_AGGREGATIONS. &lt;br /&gt;&lt;br /&gt;For instance, to apply TOTALS on the the NETWR column (as shown in the example) we need to use the method ADD_AGGREGATION on this column. The parameter AGGREGATION would be used to determine the type of the aggregation. Interface IF_SALV_C_AGGREGATION contains the constants which can be used in this parameter.&lt;br /&gt;&lt;br /&gt;In this example I need to change the output table to add column NETWR as compared to previous discussion in this series, so I will provide the entire code which generate the output which has all three scenario. For test purpose, We will apply TOTALS on the NETWR column. Once the TOTAL is applied, we will bring the TOTAL row at the &lt;span style="font-style:italic;"&gt;top&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet to Apply Aggregations&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_oo_alv_aggr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       Code to apply Aggregations to SALV Table display&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report DEFINITION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Final output table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TYPES: BEGIN OF ty_vbak,&lt;br /&gt;           vbeln     TYPE vbak-vbeln,&lt;br /&gt;           erdat     TYPE erdat,&lt;br /&gt;           auart     TYPE auart,&lt;br /&gt;           kunnr     TYPE kunnr,&lt;br /&gt;           netwr     TYPE netwr,&lt;br /&gt;           END   OF ty_vbak.&lt;br /&gt;    TYPES: ty_t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   ALV reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: o_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      get_data,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Generating output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this section we will define the private methods which can&lt;br /&gt;*      be implemented to set the properties of the ALV and can be&lt;br /&gt;*      called in the&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PRIVATE SECTION.&lt;br /&gt;    METHODS:&lt;br /&gt;      set_pf_status&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      set_aggregations&lt;br /&gt;        CHANGING&lt;br /&gt;          co_alv  TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_1 - End....................................1..*$*$*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  DATA: lo_report TYPE REF TO lcl_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;get_data( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;generate_output( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*       CLASS lcl_report IMPLEMENTATION&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD get_data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SELECT vbeln erdat auart kunnr netwr&lt;br /&gt;           INTO  CORRESPONDING FIELDS OF TABLE t_vbak&lt;br /&gt;           FROM  vbak&lt;br /&gt;           UP TO 20 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "get_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*.......................................................................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* New ALV instance&lt;br /&gt;*   We are calling the static Factory method which will give back&lt;br /&gt;*   the ALV object reference.&lt;br /&gt;*&lt;br /&gt;* exception class&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lx_msg TYPE REF TO cx_salv_msg.&lt;br /&gt;    TRY.&lt;br /&gt;        cl_salv_table=&amp;gt;factory(&lt;br /&gt;          IMPORTING&lt;br /&gt;            r_salv_table = o_alv&lt;br /&gt;          CHANGING&lt;br /&gt;            t_table      = t_vbak ).&lt;br /&gt;      CATCH cx_salv_msg INTO lx_msg.&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will call the methods which will set the&lt;br /&gt;*      different properties to the ALV&lt;br /&gt;*&lt;br /&gt;*   Set default PF status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_pf_status&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Set the colors to ALV display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD set_aggregations&lt;br /&gt;      CHANGING&lt;br /&gt;        co_alv = o_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*$*$*.....CODE_ADD_2 - End....................................2..*$*$*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;* Displaying the ALV&lt;br /&gt;*   Here we will call the DISPLAY method to get the output on the screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    o_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "generate_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*&lt;br /&gt;*&lt;br /&gt;*    In this area we will implement the methods which are defined in&lt;br /&gt;*      the class definition&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_pf_status.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_functions TYPE REF TO cl_salv_functions_list.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_functions = co_alv-&amp;gt;get_functions( ).&lt;br /&gt;    lo_functions-&amp;gt;set_default( abap_true ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_pf_status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD set_aggregations.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_aggrs TYPE REF TO cl_salv_aggregations.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_aggrs = co_alv-&amp;gt;get_aggregations( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Add TOTAL for COLUMN NETWR&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TRY.&lt;br /&gt;        CALL METHOD lo_aggrs-&amp;gt;add_aggregation&lt;br /&gt;          EXPORTING&lt;br /&gt;            columnname  = 'NETWR'&lt;br /&gt;            aggregation = if_salv_c_aggregation=&amp;gt;total.&lt;br /&gt;      CATCH cx_salv_data_error .                        "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_not_found .                         "#EC NO_HANDLER&lt;br /&gt;      CATCH cx_salv_existing .                          "#EC NO_HANDLER&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Bring the total line to top&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_aggrs-&amp;gt;set_aggregation_before_items( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "set_aggregations&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*$*$*.....CODE_ADD_3 - End....................................3..*$*$*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4049875994480420263?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4049875994480420263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-table-11-apply-aggregations.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4049875994480420263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4049875994480420263'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/salv-table-11-apply-aggregations.html' title='SALV Table 11 - Apply Aggregations'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-3788515949587428063</id><published>2009-12-20T09:37:00.003-06:00</published><updated>2009-12-20T09:45:42.664-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Principles'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>Object Oriented Design Principles (OODP): Open-Closed Principle(OCP)</title><content type='html'>&lt;div class="subtitle"&gt;Open-Closed Principle (OCP)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is one of my published blogs on SCN - SAP Community Network.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Definition:&lt;/span&gt;&lt;br /&gt;The name itself sounds like contradicting – OPEN &amp; CLOSE, but by definition, A module should be OPEN for extension but CLOSED for modification. The Open-Closed Principle (OCP) is one of the most important Design Principle. OCP originated from the work of by the Bertrand Meyer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In simple words: We can add new features in the module without changing the existing code (CLOSED) but by adding new code (OPEN).  By following this principle, we can make sure that by changing the code in the method we are not going to break existing functionality. Let us try to see it using the example.&lt;br /&gt;&lt;br /&gt;Continue reading here:&lt;br /&gt;&lt;a class='ahover' href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/14394" rel="nofollow"&gt;Object Oriented Design Principles (OODP): Open-Closed Principle(OCP)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-3788515949587428063?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/3788515949587428063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/object-oriented-design-principles-oodp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3788515949587428063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3788515949587428063'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/object-oriented-design-principles-oodp.html' title='Object Oriented Design Principles (OODP): Open-Closed Principle(OCP)'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4589367399699046030</id><published>2009-12-16T18:02:00.011-06:00</published><updated>2009-12-17T17:47:45.601-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Measure the Performance between Break-Points using SE30</title><content type='html'>&lt;div class="subtitle"&gt;Using transaction SE30 measure the Performance between breakpoints&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We can measure the runtime and check the performance of the program by using the transaction SE30. SAP Help on the &lt;a class='ahover' href="http://help.sap.com/saphelp_nw70/helpdata/en/c6/617cafe68c11d2b2ab080009b43351/frameset.htm" rel="nofollow"&gt;Runtime Analysis using SE30&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today we will elaborate the option to measure the performance of the specific part of the code using the SE30. This option would be helpful when we want to measure the performance of particular subroutine, FM, Select query etc. We have the option to start the runtime analysis and stop it on the fly by options System &gt; Utilities &gt; Runtime Analysis &gt; Switch On and Switch Off.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Pj9z40ys5GI/Syl389ErkiI/AAAAAAAAA54/qZIrLKh6ikg/s1600-h/1+screen+option.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/Syl389ErkiI/AAAAAAAAA54/qZIrLKh6ikg/s400/1+screen+option.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415991915959783970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For demo, we will set two breakpoints: one before starting the FM and one after FM. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl4_cZfhuI/AAAAAAAAA6A/8-rPmu18ldY/s1600-h/2_bp_1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 129px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl4_cZfhuI/AAAAAAAAA6A/8-rPmu18ldY/s400/2_bp_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415993058239940322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl5Ghj2w5I/AAAAAAAAA6I/zqCxWmzVGys/s1600-h/2_bp_2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 169px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl5Ghj2w5I/AAAAAAAAA6I/zqCxWmzVGys/s400/2_bp_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415993179884667794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When we reach at the breakpoint and we try to start the performance measurement by option Utilities &gt; Runtime Analysis &gt; Switch On, system would give the message as "The Particular units" option is not selected. &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl6v9MdXQI/AAAAAAAAA6Q/xeuO_lnsi5o/s1600-h/4_mes.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 298px; height: 27px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl6v9MdXQI/AAAAAAAAA6Q/xeuO_lnsi5o/s400/4_mes.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415994991188991234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This message appears because the  DEFAULT variant doesn't have this option selected. You can see this variant in SE30. Enter the DEFAULT and press the "Display" button.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl636NFlLI/AAAAAAAAA6Y/oJYPicdMdj4/s1600-h/5_option.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 96px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/Syl636NFlLI/AAAAAAAAA6Y/oJYPicdMdj4/s400/5_option.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415995127825274034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, we need to select the option "Particular Units" in the measurement variant. To do this, we will copy this standard measurement variant to user specific variant and then select the option "Particular Units". &lt;br /&gt;&lt;br /&gt;To measure the performance:&lt;br /&gt;1) Run SE30&lt;br /&gt;2) Select this newly copied variant. Here we need to select User Defined variant.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SyrDAYiKEHI/AAAAAAAAA6o/dkyYm-rip9M/s1600-h/6_user_Variant.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 72px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SyrDAYiKEHI/AAAAAAAAA6o/dkyYm-rip9M/s400/6_user_Variant.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5416355913219575922" /&gt;&lt;/a&gt;&lt;br /&gt;3) Enter the required program / transaction and measure it&lt;br /&gt;4) When it reaches to the breakpoint ON the measurement by System &gt; Utilities &gt; Runtime Analysis &gt; Switch On&lt;br /&gt;5) Press F8&lt;br /&gt;6) When it reaches to the next breakpoint ON the measurement by System &gt; Utilities &gt; Runtime Analysis &gt; Switch Off&lt;br /&gt;7) After finishing the entire transaction, press the evaluate button to evaluate the performance of required code lines.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;TIP:&lt;/span&gt;&lt;br /&gt;Runtime performance can be switched ON by enter /RON in the transaction box when it reaches to the desired breakpoint. Same way /ROFF could be used to switch off the performance measurement.&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4589367399699046030?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4589367399699046030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/measure-performance-between-break.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4589367399699046030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4589367399699046030'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/measure-performance-between-break.html' title='Measure the Performance between Break-Points using SE30'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/Syl389ErkiI/AAAAAAAAA54/qZIrLKh6ikg/s72-c/1+screen+option.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-5950605146434599613</id><published>2009-12-15T17:54:00.005-06:00</published><updated>2009-12-15T18:22:45.150-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Use of Field-symbols vs Work area</title><content type='html'>&lt;div class="subtitle"&gt;To use the Field-symbols against the Work Area for Internal table processing&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Internal table processing is essential part of any ABAP program. Generally, we use the explicit work area to process the internal table like appending &amp; modifying records. We can reduce the time and improve the performance of the program by using the field-symbols. &lt;br /&gt;&lt;br /&gt;When we use the LOOP construct with the explicit work area, system need to engage the resources to put the required record in the work area, process it and move it back to the table if the needed. This additional processing time could be saved by using the field-symbol. By using the field-symbols we can save this additional time and improve the performance. Field-symbols are similar to dereferenced pointers in C. While using the field-symbol, system uses the same memory allocated to that particular field in the record instead of moving it to work area and processing. More on field-symbols can be found at: &lt;a class='ahover' href="http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm" rel="nofollow"&gt;Field-Symbols on SAP Help&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This code snippet shows how to use the field-symbols to process the loop with time measurement.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;  Illustrate the performance gain by using the field-symbols&lt;br /&gt;*&amp;  over header areas&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_loop_fs.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: i_bseg TYPE STANDARD TABLE OF bseg,&lt;br /&gt;      wa_bseg LIKE LINE OF i_bseg.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lv_flag TYPE flag,&lt;br /&gt;      lv_sta_time TYPE timestampl,&lt;br /&gt;      lv_end_time TYPE timestampl,&lt;br /&gt;      lv_diff_w   TYPE p DECIMALS 5,&lt;br /&gt;      lv_diff_f   LIKE lv_diff_w,&lt;br /&gt;      lv_save     LIKE lv_diff_w.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;fs_bseg&amp;gt; LIKE LINE OF i_bseg.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* data selection = 10,000 records&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SELECT * FROM bseg INTO TABLE i_bseg UP TO 100 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Begin - Processing with Work area&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_sta_time.&lt;br /&gt;LOOP AT i_bseg INTO wa_bseg.&lt;br /&gt;  IF lv_flag = 'X'.&lt;br /&gt;    wa_bseg-sgtxt = 'TEST'.&lt;br /&gt;    MODIFY i_bseg FROM wa_bseg.&lt;br /&gt;  ENDIF.&lt;br /&gt;  CLEAR wa_bseg.&lt;br /&gt;  IF lv_flag IS INITIAL.&lt;br /&gt;    lv_flag = 'X'.&lt;br /&gt;  ENDIF.&lt;br /&gt;ENDLOOP.&lt;br /&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;lv_diff_w = lv_end_time - lv_sta_time.&lt;br /&gt;WRITE: /(15) 'Work area', lv_diff_w.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* End   - Processing with Work Area&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLEAR: lv_flag,&lt;br /&gt;       lv_sta_time,&lt;br /&gt;       lv_end_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Begin - Processing with Field-Symbols&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_sta_time.&lt;br /&gt;LOOP AT i_bseg ASSIGNING &amp;lt;fs_bseg&amp;gt;.&lt;br /&gt;  IF lv_flag = 'X'.&lt;br /&gt;    &amp;lt;fs_bseg&amp;gt;-sgtxt = 'TEST'.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF lv_flag IS INITIAL.&lt;br /&gt;    lv_flag = 'X'.&lt;br /&gt;  ENDIF.&lt;br /&gt;ENDLOOP.&lt;br /&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;lv_diff_f = lv_end_time - lv_sta_time.&lt;br /&gt;WRITE: /(15) 'Field-Symbol', lv_diff_f.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* End   - Processing with Work Area&lt;br /&gt;*&lt;br /&gt;* Net time saving&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;lv_save = lv_diff_w - lv_diff_f.&lt;br /&gt;WRITE: /(15) 'Total Save', lv_save.&lt;br /&gt;WRITE: / 'Done'.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Some statistics:&lt;/span&gt;&lt;br /&gt;In this performance measurement, time taken by the work area to process is considered as the 100%. By using the field-symbols, we can definitely improve the performance.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SygnlAt4YKI/AAAAAAAAA5o/5ug3m2I18m4/s1600-h/FS_vs_WA_data.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 244px; height: 107px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SygnlAt4YKI/AAAAAAAAA5o/5ug3m2I18m4/s400/FS_vs_WA_data.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415622068714102946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SygnznDEsPI/AAAAAAAAA5w/iNu8YZv5xR0/s1600-h/FS_vs_WA_stat.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 235px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SygnznDEsPI/AAAAAAAAA5w/iNu8YZv5xR0/s400/FS_vs_WA_stat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415622319521706226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-5950605146434599613?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/5950605146434599613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/use-of-field-symbols-vs-work-area.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5950605146434599613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5950605146434599613'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/use-of-field-symbols-vs-work-area.html' title='Use of Field-symbols vs Work area'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Pj9z40ys5GI/SygnlAt4YKI/AAAAAAAAA5o/5ug3m2I18m4/s72-c/FS_vs_WA_data.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-7759071976054865511</id><published>2009-12-14T19:29:00.003-06:00</published><updated>2009-12-14T20:03:22.793-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Parallel Cursor - 2: without using READ</title><content type='html'>&lt;div class="subtitle"&gt;Parallel Cursor without using READ&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In previous post &lt;a href="http://help-abap.blogspot.com/2009/12/parallel-cursor-to-speed-up-performance.html"&gt;Parallel Cursor - To speed up performance of Nested LOOP&lt;/a&gt;, we have seen a technique how to speed up the performance of the nested LOOP constructs in ABAP. In today's post, we will see another variance of the Parallel cursor technique.  In this technique, we will exit out the inner LOOP when both keys are not matching by saving the LOOP index in a variable. This index variable would be used in the LOOP construct to start the LOOP. Initially, this index variable would be set to 1. Statistics shows that this new technique is powerful over the technique as shown in the previous post which uses the READ TABLE.&lt;br /&gt;&lt;br /&gt;Here is the code snippet to achieve this Parallel Cursor technique:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_PARALLEL_CURSOR&lt;br /&gt;*&amp; Purpose: Illustration on how to use Parallel Cursor&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_parallel_cursor.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: ty_t_vbak TYPE STANDARD TABLE OF vbak.&lt;br /&gt;DATA: it_vbak TYPE ty_t_vbak .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: ty_t_vbap TYPE STANDARD TABLE OF vbap.&lt;br /&gt;DATA: it_vbap TYPE ty_t_vbap.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;lfs_vbak&amp;gt; LIKE LINE OF it_vbak,&lt;br /&gt;               &amp;lt;lfs_vbap&amp;gt; LIKE LINE OF it_vbap.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* necessary data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SELECT * FROM vbak&lt;br /&gt;  INTO TABLE it_vbak&lt;br /&gt;  UP TO 100 ROWS.&lt;br /&gt;CHECK it_vbak IS NOT INITIAL.&lt;br /&gt;SELECT * FROM vbap&lt;br /&gt;  INTO TABLE it_vbap&lt;br /&gt;  FOR ALL ENTRIES IN it_vbak&lt;br /&gt;  WHERE vbeln = it_vbak-vbeln.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lv_start_time TYPE timestampl,&lt;br /&gt;      lv_end_time   TYPE timestampl,&lt;br /&gt;      lv_diff       TYPE timestampl.&lt;br /&gt;DATA: lv_tabix TYPE i.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*....... Parallel Cursor with Nested Loop .......................&lt;br /&gt;* Get the Start Time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_start_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Starting the Parallel Cursor&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SORT: it_vbak BY vbeln,&lt;br /&gt;      it_vbap BY vbeln.&lt;br /&gt;LOOP AT it_vbak ASSIGNING &amp;lt;lfs_vbak&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Read the second internal table with BINARY SEARCH&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  READ TABLE it_vbap TRANSPORTING NO FIELDS&lt;br /&gt;       WITH KEY vbeln = &amp;lt;lfs_vbak&amp;gt;-vbeln&lt;br /&gt;       BINARY SEARCH.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Get the TABIX number&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lv_tabix = sy-tabix.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Start the LOOP from the first accessed record in&lt;br /&gt;* previous READ i.e. LV_TABIX&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT it_vbap FROM lv_tabix ASSIGNING &amp;lt;lfs_vbap&amp;gt; .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   End the LOOP, when there is no more record with similar key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    IF &amp;lt;lfs_vbap&amp;gt;-vbeln &amp;lt;&amp;gt; &amp;lt;lfs_vbak&amp;gt;-vbeln.&lt;br /&gt;      EXIT.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Rest of the logic would go from here...&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the end time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Actual time Spent:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;lv_diff = lv_end_time - lv_start_time.&lt;br /&gt;WRITE: /(50) 'Time Spent on Parallel Cursor Nested loops:', lv_diff.&lt;br /&gt;CLEAR: lv_start_time, lv_end_time, lv_diff.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*....... Parallel Cursor - 2 with Nested Loop ...................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;Clear lv_tabix.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Get the Start Time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_start_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Starting the Parallel Cursor&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SORT: it_vbak BY vbeln,&lt;br /&gt;      it_vbap BY vbeln.&lt;br /&gt;lv_tabix = 1.     " Set the starting index 1&lt;br /&gt;LOOP AT it_vbak ASSIGNING &amp;lt;lfs_vbak&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Start the nested LOOP from the index&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT it_vbap from lv_tabix&lt;br /&gt;                  ASSIGNING &amp;lt;lfs_vbap&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Save index &amp; Exit the loop, if the keys are not same&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    if &amp;lt;lfs_vbak&amp;gt;-vbeln &amp;lt;&amp;gt; &amp;lt;lfs_vbap&amp;gt;-vbeln.&lt;br /&gt;      lv_tabix = sy-tabix.&lt;br /&gt;      EXIT.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Rest of the logic would go from here...&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDLOOP.&lt;br /&gt;ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the end time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Actual time Spent:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;lv_diff = lv_end_time - lv_start_time.&lt;br /&gt;WRITE: /(50) 'Time Spent on Parallel Cursor 2 Nested loops', lv_diff.&lt;br /&gt;CLEAR: lv_start_time, lv_end_time, lv_diff.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This statistics and graph shows the time used by the nested LOOP as the 100%. For the 1000 VBAK records, parallel cursor technique with READ consumes 1.84% time compare to nested LOOPs 100%. This technique without READ TABLE only requires 1.05% time compare to 100% of nested LOOPs.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SybuIrXNGMI/AAAAAAAAA5Y/Zkz92qYI_z0/s1600-h/Parallel_cursor_stats2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 334px; height: 112px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SybuIrXNGMI/AAAAAAAAA5Y/Zkz92qYI_z0/s400/Parallel_cursor_stats2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415277434806016194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SybuR92bVeI/AAAAAAAAA5g/mJ_5sNDPm8g/s1600-h/Parallel_Cursor_graph.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 178px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SybuR92bVeI/AAAAAAAAA5g/mJ_5sNDPm8g/s400/Parallel_Cursor_graph.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5415277594387633634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-7759071976054865511?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/7759071976054865511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/parallel-cursor-2-without-using-read.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7759071976054865511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7759071976054865511'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/parallel-cursor-2-without-using-read.html' title='Parallel Cursor - 2: without using READ'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Pj9z40ys5GI/SybuIrXNGMI/AAAAAAAAA5Y/Zkz92qYI_z0/s72-c/Parallel_cursor_stats2.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-5484870842511617539</id><published>2009-12-13T16:59:00.005-06:00</published><updated>2009-12-13T17:09:38.806-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Parallel Cursor - To speed up performance of Nested LOOP</title><content type='html'>&lt;div class="subtitle"&gt;Technique to speed up the performance of the Nested LOOP - Parllel Cursor&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'm back after a long break. Today, we will tackle down the biggest performance related issue around the Nested Loops.&lt;br /&gt;&lt;br /&gt;Traditionally in ABAP, we use the LOOP using the WHERE clause for Nested loops. This type of nested loops are very common in our day-to-day programming. But, the cost, in terms of performance, is higher when we use the nested loops. This cost would become a key issue when working with huge tables e.g. BKPF &amp; BSEG, VBAK &amp; VBAP, MKPF &amp; MSEG. Sometimes, this cost increases and reaches to the point where program fails to finish the execution. &lt;br /&gt;&lt;br /&gt;We have the concept of Parallel Cursor exists in ABAP to overcome this hurdle and reduce this cost. In parallel cursor, we first try to see if there is any entry exist in the second table inside the LOOP construct of first table. We use the READ .. WITH KEY .. BINARY SEARCH to check if the entry exist in the second table. We use this record number SY-TABIX to LOOP on the second table using LOOP .. FROM index.&lt;br /&gt;&lt;br /&gt;This code snippet gives us the idea of the time taken by both the nested loops and the parallel cursor loops.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_PARALLEL_CURSOR&lt;br /&gt;*&amp; Purpose: Illustration on how to use Parallel Cursor&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_parallel_cursor.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: ty_t_vbak TYPE STANDARD TABLE OF vbak.&lt;br /&gt;DATA: it_vbak TYPE ty_t_vbak .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: ty_t_vbap TYPE STANDARD TABLE OF vbap.&lt;br /&gt;DATA: it_vbap TYPE ty_t_vbap.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;lfs_vbak&amp;gt; LIKE LINE OF it_vbak,&lt;br /&gt;               &amp;lt;lfs_vbap&amp;gt; LIKE LINE OF it_vbap.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* necessary data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SELECT * FROM vbak&lt;br /&gt;  INTO TABLE it_vbak&lt;br /&gt;  UP TO 1000 ROWS.&lt;br /&gt;CHECK it_vbak IS NOT INITIAL.&lt;br /&gt;SELECT * FROM vbap&lt;br /&gt;  INTO TABLE it_vbap&lt;br /&gt;  FOR ALL ENTRIES IN it_vbak&lt;br /&gt;  WHERE vbeln = it_vbak-vbeln.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lv_start_time TYPE timestampl,&lt;br /&gt;      lv_end_time   TYPE timestampl,&lt;br /&gt;      lv_diff       TYPE timestampl.&lt;br /&gt;DATA: lv_tabix TYPE i.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*...... Normal Nested Loop .................................&lt;br /&gt;* Get the Start Time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_start_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Nested Loop&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;LOOP AT it_vbak ASSIGNING &amp;lt;lfs_vbak&amp;gt;.&lt;br /&gt;  LOOP AT it_vbap ASSIGNING &amp;lt;lfs_vbap&amp;gt;&lt;br /&gt;                  WHERE vbeln = &amp;lt;lfs_vbak&amp;gt;-vbeln.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the end time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Actual time Spent:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;lv_diff = lv_end_time - lv_start_time.&lt;br /&gt;WRITE: /(50) 'Time Spent on Nested Loop', lv_diff.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLEAR: lv_start_time, lv_end_time, lv_diff.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*....... Parallel Cursor with Nested Loop .......................&lt;br /&gt;* Get the Start Time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_start_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Starting the Parallel Cursor&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SORT: it_vbak BY vbeln,&lt;br /&gt;      it_vbap BY vbeln.&lt;br /&gt;LOOP AT it_vbak ASSIGNING &amp;lt;lfs_vbak&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Read the second internal table with BINARY SEARCH&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  READ TABLE it_vbap TRANSPORTING NO FIELDS&lt;br /&gt;       WITH KEY vbeln = &amp;lt;lfs_vbak&amp;gt;-vbeln&lt;br /&gt;       BINARY SEARCH.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Get the TABIX number&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lv_tabix = sy-tabix.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Start the LOOP from the first accessed record in&lt;br /&gt;* previous READ i.e. LV_TABIX&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT it_vbap FROM lv_tabix ASSIGNING &amp;lt;lfs_vbap&amp;gt; .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   End the LOOP, when there is no more record with similar key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    IF &amp;lt;lfs_vbap&amp;gt;-vbeln &amp;lt;&amp;gt; &amp;lt;lfs_vbak&amp;gt;-vbeln.&lt;br /&gt;      EXIT.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Rest of the logic would go from here...&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the end time&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;GET TIME STAMP FIELD lv_end_time.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Actual time Spent:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;lv_diff = lv_end_time - lv_start_time.&lt;br /&gt;WRITE: /(50) 'Time Specnt on Parallel Cursor Nested loops:', lv_diff.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;I ran this program multiple times and capture this statistics.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SyVz7Z59mHI/AAAAAAAAA5Q/jZRnzJNEdME/s1600-h/Parallel_Cursor_Stats.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 105px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SyVz7Z59mHI/AAAAAAAAA5Q/jZRnzJNEdME/s400/Parallel_Cursor_Stats.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5414861591386364018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-5484870842511617539?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/5484870842511617539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/12/parallel-cursor-to-speed-up-performance.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5484870842511617539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/5484870842511617539'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/12/parallel-cursor-to-speed-up-performance.html' title='Parallel Cursor - To speed up performance of Nested LOOP'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/SyVz7Z59mHI/AAAAAAAAA5Q/jZRnzJNEdME/s72-c/Parallel_Cursor_Stats.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-3655195420662912084</id><published>2009-08-10T19:33:00.009-05:00</published><updated>2011-06-23T10:35:37.245-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Dynamic Parameter Texts in Selection Screen - 2</title><content type='html'>&lt;div class="subtitle"&gt;Selection Screen Parameter Text by coding using Function Modules&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the last post &lt;a href="http://help-abap.blogspot.com/2009/04/dynamic-parameter-texts-in-selection.html"&gt;Dynamic Parameter Texts in Selection Screen&lt;/a&gt; (which was so many weeks ago), we discussed how we can change the selection screen parameter by changing the values of some selection screen specific variables. &lt;a class='ahover' href="http://help-abap.blogspot.com/2009/04/dynamic-parameter-texts-in-selection.html?showComment=1248260811008#c4391132975707112429"&gt;Greets Enno&lt;/a&gt; suggested to use the FM SELECTION_TEXTS_MODIFY to handle the selection screen parameters more easily and in standard way.&lt;br /&gt;&lt;br /&gt;Some of the readers also left comment on the previous post about the use of this trick. One scenario I came in my mind: Certain Parameter Texts based on the Radio button selection. E.g. We have some radio buttons like Sales Order, Credit Memo, Debit Memo and so on. Based on this radiobutton selection, we want to display the Date's parameter text.&lt;br /&gt;&lt;br /&gt;This code snippet will realize this scenario using the FM SELECTION_TEXTS_MODIFY.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="650" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet to show dynamic parameter text &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#FAFAFA;font-family:Arial monospaced for SAP;font-size: 11pt"&gt;&lt;pre&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp; Report  ZTEST_NP_HELPER&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;REPORT  &lt;/span&gt;ztest_np_helper&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* Selection Screen Class definition&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CLASS &lt;/span&gt;lcl_selscr &lt;span class="L0S52"&gt;DEFINITION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;PUBLIC &lt;/span&gt;&lt;span class="L0S52"&gt;SECTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;CLASS&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;      f_date_text &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;char30&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;CLASS&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;METHODS&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;      set_text&lt;br /&gt;        &lt;span class="L0S52"&gt;IMPORTING&lt;/span&gt;&lt;br /&gt;          if_name &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;char8&lt;br /&gt;          if_type &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;char1&lt;br /&gt;          if_text &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;char30&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      change_screen&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;PRIVATE &lt;/span&gt;&lt;span class="L0S52"&gt;SECTION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;CLASS&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;:&lt;/span&gt;&lt;br /&gt;      t_text &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;&lt;span class="L0S52"&gt;STANDARD &lt;/span&gt;&lt;span class="L0S52"&gt;TABLE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;rsseltexts&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDCLASS&lt;/span&gt;&lt;span class="L0S55"&gt;.                    &lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;lcl_selscr DEFINITION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*.... Selection Screen&lt;/span&gt;&lt;br /&gt;SELECTION&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;SCREEN&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;&lt;span class="L0S52"&gt;BEGIN &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;&lt;span class="L0S52"&gt;BLOCK &lt;/span&gt;blk1 &lt;span class="L0S52"&gt;WITH &lt;/span&gt;&lt;span class="L0S52"&gt;FRAME &lt;/span&gt;&lt;span class="L0S52"&gt;TITLE &lt;/span&gt;aaa&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;PARAMETERS&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;p_so   &lt;span class="L0S52"&gt;RADIOBUTTON &lt;/span&gt;&lt;span class="L0S52"&gt;GROUP &lt;/span&gt;rd1 &lt;span class="L0S52"&gt;DEFAULT &lt;/span&gt;&lt;span class="L0S33"&gt;'X' &lt;/span&gt;&lt;span class="L0S52"&gt;USER-COMMAND &lt;/span&gt;usr1&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;            p_cre  &lt;span class="L0S52"&gt;RADIOBUTTON &lt;/span&gt;&lt;span class="L0S52"&gt;GROUP &lt;/span&gt;rd1&lt;span class="L0S55"&gt;,&lt;/span&gt;&lt;br /&gt;            p_deb  &lt;span class="L0S52"&gt;RADIOBUTTON &lt;/span&gt;&lt;span class="L0S52"&gt;GROUP &lt;/span&gt;rd1&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;PARAMETERS&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;p_date &lt;span class="L0S52"&gt;TYPE &lt;/span&gt;datum&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;SELECTION&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;SCREEN&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;&lt;span class="L0S52"&gt;END &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;&lt;span class="L0S52"&gt;BLOCK &lt;/span&gt;blk1&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*.... Initialization&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;INITIALIZATION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;  aaa &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Select an option to continue'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*.... At Selection-Screen Output&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;AT &lt;/span&gt;&lt;span class="L0S52"&gt;SELECTION-SCREEN &lt;/span&gt;&lt;span class="L0S52"&gt;OUTPUT&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* text for Radiobuttons&lt;/span&gt;&lt;br /&gt;  lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;set_text&lt;span class="L0S55"&gt;( &lt;/span&gt;if_name &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P_SO'&lt;/span&gt;&lt;br /&gt;                        if_type &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P' &lt;/span&gt;if_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Sales Order' &lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;  lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;set_text&lt;span class="L0S55"&gt;( &lt;/span&gt;if_name &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P_CRE'&lt;/span&gt;&lt;br /&gt;                        if_type &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P' &lt;/span&gt;if_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Credit memo' &lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;  lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;set_text&lt;span class="L0S55"&gt;( &lt;/span&gt;if_name &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P_DEB'&lt;/span&gt;&lt;br /&gt;                        if_type &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P' &lt;/span&gt;if_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Debit memo' &lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* determine the text for the P_DATE&lt;/span&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;CASE &lt;/span&gt;&lt;span class="L0S33"&gt;'X'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;WHEN &lt;/span&gt;p_so&lt;span class="L0S55"&gt;.    &lt;/span&gt;lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;f_date_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Sales Order Entry Date'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;WHEN &lt;/span&gt;p_cre&lt;span class="L0S55"&gt;.   &lt;/span&gt;lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;f_date_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Credit Memo Entry Date'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;WHEN &lt;/span&gt;p_deb&lt;span class="L0S55"&gt;.   &lt;/span&gt;lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;f_date_text &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'Debit Memo Entry Date'&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;ENDCASE&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;  lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;set_text&lt;span class="L0S55"&gt;( &lt;/span&gt;if_name &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P_DATE'&lt;/span&gt;&lt;br /&gt;                        if_type &lt;span class="L0S55"&gt;= &lt;/span&gt;&lt;span class="L0S33"&gt;'P'&lt;/span&gt;&lt;br /&gt;                        if_text &lt;span class="L0S55"&gt;= &lt;/span&gt;lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;f_date_text &lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* Change the Selection Screen&lt;/span&gt;&lt;br /&gt;  lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;change_screen&lt;span class="L0S55"&gt;( &lt;/span&gt;&lt;span class="L0S55"&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*.... Start of selection&lt;/span&gt;&lt;br /&gt;START&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;OF&lt;/span&gt;&lt;span class="L0S70"&gt;-&lt;/span&gt;SELECTION&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;WRITE&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;&lt;span class="L0S33"&gt;'Date Text'&lt;/span&gt;&lt;span class="L0S55"&gt;, &lt;/span&gt;lcl_selscr&lt;span class="L0S70"&gt;=&amp;gt;&lt;/span&gt;f_date_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;* Selection Screen Class definition&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S31"&gt;*----------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;CLASS &lt;/span&gt;lcl_selscr &lt;span class="L0S52"&gt;IMPLEMENTATION&lt;/span&gt;&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;METHOD &lt;/span&gt;set_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;DATA&lt;/span&gt;&lt;span class="L0S55"&gt;: &lt;/span&gt;la_text &lt;span class="L0S52"&gt;LIKE &lt;/span&gt;&lt;span class="L0S52"&gt;LINE &lt;/span&gt;&lt;span class="L0S52"&gt;OF &lt;/span&gt;t_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    la_text&lt;span class="L0S70"&gt;-&lt;/span&gt;name &lt;span class="L0S55"&gt;= &lt;/span&gt;if_name&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    la_text&lt;span class="L0S70"&gt;-&lt;/span&gt;kind &lt;span class="L0S55"&gt;= &lt;/span&gt;if_type&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    la_text&lt;span class="L0S70"&gt;-&lt;/span&gt;&lt;span class="L0S52"&gt;text &lt;/span&gt;&lt;span class="L0S55"&gt;= &lt;/span&gt;if_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;APPEND &lt;/span&gt;la_text &lt;span class="L0S52"&gt;TO &lt;/span&gt;t_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;ENDMETHOD&lt;/span&gt;&lt;span class="L0S55"&gt;.                    &lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;set_text&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;METHOD &lt;/span&gt;change_screen&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;    &lt;span class="L0S52"&gt;CALL &lt;/span&gt;&lt;span class="L0S52"&gt;FUNCTION &lt;/span&gt;&lt;span class="L0S33"&gt;'SELECTION_TEXTS_MODIFY'&lt;/span&gt;&lt;br /&gt;      &lt;span class="L0S52"&gt;EXPORTING&lt;/span&gt;&lt;br /&gt;        &lt;span class="L0S52"&gt;program  &lt;/span&gt;&lt;span class="L0S55"&gt;= &lt;/span&gt;sy&lt;span class="L0S70"&gt;-&lt;/span&gt;cprog&lt;br /&gt;      &lt;span class="L0S52"&gt;TABLES&lt;/span&gt;&lt;br /&gt;        seltexts &lt;span class="L0S55"&gt;= &lt;/span&gt;t_text&lt;span class="L0S55"&gt;.&lt;/span&gt;&lt;br /&gt;  &lt;span class="L0S52"&gt;ENDMETHOD&lt;/span&gt;&lt;span class="L0S55"&gt;.                    &lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;change_screen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="L0S52"&gt;ENDCLASS&lt;/span&gt;&lt;span class="L0S55"&gt;.                    &lt;/span&gt;&lt;span class="L0S31"&gt;&amp;quot;lcl_selscr IMPLEMENTATION&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-3655195420662912084?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/3655195420662912084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/08/dynamic-parameter-texts-in-selection.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3655195420662912084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3655195420662912084'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/08/dynamic-parameter-texts-in-selection.html' title='Dynamic Parameter Texts in Selection Screen - 2'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-761392878125859545</id><published>2009-04-27T17:29:00.006-05:00</published><updated>2009-06-06T10:36:11.759-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tricks'/><title type='text'>Dynamic Parameter Texts in Selection Screen</title><content type='html'>&lt;div class="subtitle"&gt;Selection Screen Parameter Text by coding&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sometimes, we need to dispaly the Dynamic Parameter Text for the parameters in the selection screen.&lt;br /&gt;&lt;br /&gt;We can use &lt;strong&gt;%_&lt;em&gt;parameter&lt;/em&gt;_%_APP_%-TEXT&lt;/strong&gt; to have the parameter text from the coding.&lt;br /&gt;&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet to show dynamic parameter text&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*---------------------------------------------------------------------&lt;br /&gt;* Shows how to give the selection screen parameter name by&lt;br /&gt;*  using coding&lt;br /&gt;*---------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ZTEST_NP_TMP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: w_carrid TYPE sflight-carrid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;** Selection Screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.&lt;br /&gt;SELECT-OPTIONS:   s_carrid FOR w_carrid.&lt;br /&gt;SELECTION-SCREEN: END   OF BLOCK blk1.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;INITIALIZATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Description for the parameter&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  if sy-uname = 'TEST'.&lt;br /&gt;    %_s_carrid_%_app_%-text = 'Carrier ID'.&lt;br /&gt;  else.&lt;br /&gt;    %_s_carrid_%_app_%-text = 'Flight ID'.&lt;br /&gt;  endif.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Without the code, we would see the selection screen like this:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SfYz4o6cpvI/AAAAAAAAA3s/HNlnlyXYgRE/s1600-h/param_wo_text.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 69px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SfYz4o6cpvI/AAAAAAAAA3s/HNlnlyXYgRE/s400/param_wo_text.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5329504257187817202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And with the code, selection screen would be like this:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SfY0BzeTodI/AAAAAAAAA30/FpPHyp3aoms/s1600-h/param_w_text.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 91px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SfY0BzeTodI/AAAAAAAAA30/FpPHyp3aoms/s400/param_w_text.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5329504414641398226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We can use this trik:&lt;br /&gt;* Dyanmic Parameter text&lt;br /&gt;* While Sharing the example code&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-761392878125859545?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/761392878125859545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/dynamic-parameter-texts-in-selection.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/761392878125859545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/761392878125859545'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/dynamic-parameter-texts-in-selection.html' title='Dynamic Parameter Texts in Selection Screen'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Pj9z40ys5GI/SfYz4o6cpvI/AAAAAAAAA3s/HNlnlyXYgRE/s72-c/param_wo_text.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-3270438727832078387</id><published>2009-04-22T16:55:00.003-05:00</published><updated>2009-04-22T17:41:07.368-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>Persistent Object Service - Example</title><content type='html'>&lt;div class="subtitle"&gt;Shows how to use the Persistent object in the Application.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Previously, we have seen &lt;a href="http://help-abap.blogspot.com/2009/04/persistent-object-services-basics.html"&gt;Persistent Object Services - Basics&lt;/a&gt;. Today we will see how to use the Persistent Object services in the test application. You can find all these under &lt;a href="http://help-abap.blogspot.com/2008/10/abap-objects.html#OOABAP"&gt;ABAP Objects&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To use the persistent objects, we need to:&lt;br /&gt;Get the Agent Object by accessing the public attribute AGENT in the agent class.&lt;br /&gt;For Read access, get the persistent object by using the GET_PERSISTENT method of the agent object. To create entry using the persistent objects, we need to use the CREATE_PERSISTENT method of the agent object.&lt;br /&gt;&lt;br /&gt;Lets see it by example. For demo purpose, we will use the class CL_SPFLI_PERSISTENT.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet to show the use of the Persistent Object&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Shows how to use the Persistent Service to work with Persistent&lt;br /&gt;*&amp;  objects to get data and create entries.&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_persistent.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lo_spfli_a  TYPE REF TO ca_spfli_persistent,   " Actor Class&lt;br /&gt;      lo_spfli_c  TYPE REF TO cl_spfli_persistent,   " Persistent Class&lt;br /&gt;      lo_exc      TYPE REF TO cx_root.               " Exception&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: la_cityfrom TYPE spfli-cityfrom.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the Agent&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_spfli_a = ca_spfli_persistent=&amp;gt;agent.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;***** Reading the Entry&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  TRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     Get the Persistent object for key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      lo_spfli_c = lo_spfli_a-&amp;gt;get_persistent(&lt;br /&gt;                      i_carrid = 'AA'&lt;br /&gt;                      i_connid = '0017' ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Print the CITYFORM, if the persistent object is created&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      IF lo_spfli_c IS BOUND.&lt;br /&gt;        la_cityfrom = lo_spfli_c-&amp;gt;get_cityfrom( ).&lt;br /&gt;        WRITE: 'City From:', la_cityfrom.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     Write: No data message&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      ELSE.&lt;br /&gt;        WRITE: 'No data found'.&lt;br /&gt;      ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Exception handling&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CATCH cx_root INTO lo_exc.&lt;br /&gt;      MESSAGE lo_exc TYPE 'S'.&lt;br /&gt;  ENDTRY.&lt;br /&gt;  CLEAR: lo_spfli_a,&lt;br /&gt;         lo_spfli_c.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;***** Creating the Entry&lt;br /&gt;* Get the Agent (same agent object due to Singleton)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_spfli_a = ca_spfli_persistent=&amp;gt;agent.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  TRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     Get the Persistent object for key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      lo_spfli_c = lo_spfli_a-&amp;gt;create_persistent(&lt;br /&gt;                      i_carrid = 'ZZ'&lt;br /&gt;                      i_connid = '0017' ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*     set the CITYFROM&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      lo_spfli_c-&amp;gt;set_cityfrom( 'NY' ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Exception handling&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CATCH cx_root INTO lo_exc.&lt;br /&gt;      MESSAGE lo_exc TYPE 'S'.&lt;br /&gt;  ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Required to coommit the changes to database&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  COMMIT WORK.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;You can check the standard program DEMO_CREATE_PERSISTENT.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Some facts:&lt;/strong&gt;&lt;br /&gt;- Singleton Design pattern is used for the Agent object in the agent class.&lt;br /&gt;- We need to call the COMMIT WORK in order to update our changes into the database table&lt;br /&gt;- If the entry doesn't exist in the database than resulting object of method GET_PERSISTENT would not be bound.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-3270438727832078387?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/3270438727832078387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/persistent-object-service-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3270438727832078387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3270438727832078387'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/persistent-object-service-example.html' title='Persistent Object Service - Example'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4971876060364784596</id><published>2009-04-21T18:25:00.008-05:00</published><updated>2009-12-13T16:53:31.452-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Objects'/><title type='text'>Persistent Object Services - Basics</title><content type='html'>&lt;div class="subtitle"&gt;Some basics used in the Persistent Objects&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Today we will see some basics about the Persistent Object Services.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why do we need Persistent Object Service:&lt;/strong&gt;&lt;br /&gt;To better understand the need of the persistent objects we need to first understand the concept of the transient data. The local data for the program like Attributes of the class, or program data is known as the transient data. &lt;br /&gt;&lt;br /&gt;Normally, with ABAP we load the data into our transient data, work on that and put it back to the database table (if required). At this point of time, our data exists in the two palces: Transient data (ABAP program local data) and in the appropriate database table or other storage medium (which is the persistent data). To avoid having the same data at the same time in two different context, we should use the persistent objects. Because by definition, the persistent data is the data which will be preserved beyound the runtime.&lt;br /&gt;&lt;br /&gt;For SAP, we could have the persistent data in form of the Database table or file operations.&lt;br /&gt;&lt;br /&gt;SAP Help defines the persistent objects like:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt; &lt;em&gt; Technically speaking, ABAP Objects are always transient, just like the data objects in ABAP programs. There are no persistent objects in ABAP Objects. However, the Persistence Service within Object Services allows application developers to work with persistent objects. The Persistence Service can be thought of as a software layer between the ABAP program and the data repository (that is, the database), which allows you to save the attributes of objects with a unique identity, and then load them again when you need them. &lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pros-&amp;-Cons&lt;/strong&gt;&lt;br /&gt;- Good for big dialog / web applications where we are dealing with large number of data but for only one document at time like Sales Order processing, Process Order, GR creation etc.&lt;br /&gt;- Adds one more abstraction layer in between the Business logic and the database.&lt;br /&gt;- Not performance efficient for the report programming&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How to create Persistent Objects&lt;/strong&gt;&lt;br /&gt;&lt;a class='ahover' href="http://help.sap.com/saphelp_nw04/Helpdata/EN/b1/82309cd26611d4b2e90050dadfb92b/frameset.htm" rel="nofollow"&gt;SAP Help on Mapping the Persistent Objects&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Classes generated alongwith mapping:&lt;/strong&gt;&lt;br /&gt;When we finish up the creation of the persistent object services for any database table(s) it would create 2 additional classes. E.g: If we sucessfully map the table SPFLI in the Persistent Object class - ZCL_SPFLI_PERSISTENT, system would generate:&lt;br /&gt;Actor Class - ZCA_SPFLI_PERSISTENT&lt;br /&gt;Base Class - ZCB_SPFLI_PERSISTENT&lt;br /&gt;&lt;br /&gt;In future posts, we would see how to use Persistent objects in application and some of its properties.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4971876060364784596?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4971876060364784596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/persistent-object-services-basics.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4971876060364784596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4971876060364784596'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/persistent-object-services-basics.html' title='Persistent Object Services - Basics'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-999531151885101095</id><published>2009-04-20T20:29:00.005-05:00</published><updated>2011-06-20T22:26:07.440-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RFC'/><category scheme='http://www.blogger.com/atom/ns#' term='Function Module'/><title type='text'>RFC Calls II - Solution to mandatory Parameters to FM</title><content type='html'>In the last post &lt;a href="http://help-abap.blogspot.com/2009/04/rfc-calls-function-module-parameter.html"&gt;RFC Calls: Function Module Parameter Passing&lt;/a&gt;, we have seen how system take care of the obligatory parameters even though the calling program doesn't pass it to the RFC FM.&lt;br /&gt;&lt;br /&gt;Why does system needs to do that: Error handling. RFC FM can be called from outside SAP application also. If we don't pass the obligatory parameters, it would lead to runtime error of the missing obligatory parameters CALL_FUNCTION_PARM_MISSING. It could lead SAP System to errorenous status. It could become severe when we are dealing with the LUW - COMMIT WORK and ROLLBACK WORK.&lt;br /&gt;&lt;br /&gt;This would raise an question: how do the programmer will design his code to make sure he got all the obligatory parameters filled in? &lt;br /&gt;&lt;br /&gt;The simple solution would be: Create all the parameters as optional. Check all the parameters in the code with addition IF field IS NOT SUPPLIED and fill the return table with proper messages. This would notify the calling system that it didn't pass the obligatory parameters to execute the requested Function Module.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;More reading on RFCs:&lt;/strong&gt;&lt;br /&gt;&lt;a class='ahover' href="http://help.sap.com/saphelp_nw04/helpdata/en/6f/1bd5b6a85b11d6b28500508b5d5211/content.htm" rel="nofollow"&gt;SAP Help - RFC&lt;/a&gt;&lt;br /&gt;&lt;a class='ahover' href="https://www.sdn.sap.com/irj/sdn/abap?rid=/library/uuid/f078394a-4469-2910-c4bf-853c75674694" rel="nofollow"&gt;Master of the Five Remote Function Call (RFC) in ABAP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-999531151885101095?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/999531151885101095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/rfc-calls-ii-solution-to-mandatory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/999531151885101095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/999531151885101095'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/rfc-calls-ii-solution-to-mandatory.html' title='RFC Calls II - Solution to mandatory Parameters to FM'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-916161644096950422</id><published>2009-04-17T17:18:00.005-05:00</published><updated>2011-06-20T22:26:07.441-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RFC'/><category scheme='http://www.blogger.com/atom/ns#' term='Function Module'/><title type='text'>RFC Calls: Function Module Parameter Passing</title><content type='html'>&lt;div class="subtitle"&gt;Parameter Passing in the RFC Function Module Calls&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Today we will discuss how system take care of the obligatory parameter passing in the RFC function module.&lt;br /&gt;&lt;br /&gt;Generally, when we call the FM without passing the obligatory parameter, system would raise the exception CALL_FUNCTION_PARM_MISSING and would lead to run time error. Now, when we call the same RFC FM with perticular Destination without passing the obligatory parameter, system is not giving any runtime error. How does this happen? Why this different behaviour?&lt;br /&gt;&lt;br /&gt;Actually, when we generate our RFC FM, System generates one more Include program with Subroutine which calls the FM. So, when we call the RFC FM using CALL FUNCTION ... DESTINATION .. RFC Framework calls this generated Subroutine. This Subroutine passes all the parameters to the FM Call, including the obligatory ones and it is not giving us any runtime error of missing parameters.&lt;br /&gt;&lt;br /&gt;To demonstrate this, I would use the RFC FM ZTEST_NP_RFC which was created in the FG ZTEST_NP. This is the code snippet for the RFC:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet of the RFC Function Module &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FUNCTION ztest_np_rfc.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*"----------------------------------------------------------------------&lt;br /&gt;*"*"Local Interface:&lt;br /&gt;*"  IMPORTING&lt;br /&gt;*"     VALUE(KUNNR) TYPE  KUNNR&lt;br /&gt;*"     VALUE(NAME1) TYPE  NAME1&lt;br /&gt;*"  EXPORTING&lt;br /&gt;*"     VALUE(SUBRC) TYPE  SUBRC&lt;br /&gt;*"  EXCEPTIONS&lt;br /&gt;*"      NO_DATA_FOUND&lt;br /&gt;*"----------------------------------------------------------------------&lt;br /&gt;*&lt;br /&gt;* Both initial.. Return 3&lt;br /&gt;* Else.. Return 4&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF  kunnr IS INITIAL&lt;br /&gt;  AND name1 IS INITIAL.&lt;br /&gt;    subrc = '3'.&lt;br /&gt;  ELSE.&lt;br /&gt;    subrc = '4'.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFUNCTION.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;System has generated the Include LZTEST_NP_RFCV01 (L+fmname+V01) with subroutine ZTEST_NP_RFC (same name as the FM) which call the FM. This include is part of the RFC framework. Here is the code snippet for this include:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet of the System Generated include LZTEST_NP_RFCV01&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*******************************************************************&lt;br /&gt;*   THIS FILE IS GENERATED BY THE FUNCTION LIBRARY               **&lt;br /&gt;*   NEVER CHANGE IT MANUALLY, PLEASE!                            **&lt;br /&gt;*******************************************************************&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM ZTEST_NP_RFC %_RFC.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Parameter declaration&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA KUNNR TYPE&lt;br /&gt;KUNNR&lt;br /&gt;.&lt;br /&gt;DATA NAME1 TYPE&lt;br /&gt;NAME1&lt;br /&gt;.&lt;br /&gt;DATA SUBRC TYPE&lt;br /&gt;SUBRC&lt;br /&gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Assign default values&lt;br /&gt;* Call remote function&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'ZTEST_NP_RFC' %_RFC&lt;br /&gt;     EXPORTING&lt;br /&gt;       KUNNR = KUNNR&lt;br /&gt;       NAME1 = NAME1&lt;br /&gt;     IMPORTING&lt;br /&gt;       SUBRC = SUBRC&lt;br /&gt;  .&lt;br /&gt;ENDFORM.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lets see the call to this FM:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet to test RFC FM&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_1 LINE-COUNT 10 NO STANDARD PAGE HEADING.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lf_subrc TYPE subrc.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* CALL RFC FM without passing the mandatory Parameters&lt;br /&gt;*  and it would give us error&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'ZTEST_NP_RFC' DESTINATION 'NONE'&lt;br /&gt;    IMPORTING&lt;br /&gt;      subrc = lf_subrc.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  WRITE: lf_subrc.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Now, how do we find out how does this work? Since this is a part of the system, we need to activate the system debugging.&lt;br /&gt;1. Put a breakpoint on the FM&lt;br /&gt;2. Run the Program&lt;br /&gt;3. From the debugger, start the System debugging. Settings &gt; System Debugging&lt;br /&gt;4. Step in (F5)&lt;br /&gt;5. Check the Call the Stack&lt;br /&gt;&lt;br /&gt;Have a look at the call stack&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SekCpGIIfnI/AAAAAAAAA3c/3E6sgwp0LWo/s1600-h/rfc_call_stack.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 107px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SekCpGIIfnI/AAAAAAAAA3c/3E6sgwp0LWo/s400/rfc_call_stack.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5325790939384938098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;.. and the RFC Framework subroutine:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SekC-Y85CwI/AAAAAAAAA3k/p5lAa7Jm-fI/s1600-h/rfc_call.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 313px; height: 400px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SekC-Y85CwI/AAAAAAAAA3k/p5lAa7Jm-fI/s400/rfc_call.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5325791305215314690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This would raise an question: As a developer, how do we design our RFC FMs which would not fail in terms of the functionality (works even we don't pass the mandatory parameters)? In next blog, we would explore why it behaves like this and how we can overcome the problem. You can find it here: &lt;a href="http://help-abap.blogspot.com/2009/04/rfc-calls-ii-solution-to-mandatory.html"&gt;RFC Calls II - Solution to mandatory Parameters to FM&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-916161644096950422?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/916161644096950422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/rfc-calls-function-module-parameter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/916161644096950422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/916161644096950422'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/rfc-calls-function-module-parameter.html' title='RFC Calls: Function Module Parameter Passing'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Pj9z40ys5GI/SekCpGIIfnI/AAAAAAAAA3c/3E6sgwp0LWo/s72-c/rfc_call_stack.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2809703940690182004</id><published>2009-04-02T19:08:00.003-05:00</published><updated>2009-04-02T19:31:59.060-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAPScript / SmartForm'/><title type='text'>SAPScript / SmartForms Custom Formatting</title><content type='html'>In the previous post, we have seen how we can apply &lt;a href="http://help-abap.blogspot.com/2009/04/sapscript-smartforms-formatting-options.html"&gt;standard formatting options in the Smartform and SAPScripts&lt;/a&gt;. Today we will see, how we can create our own Formatting option which we can use in SAPScript or SmartForms. &lt;br /&gt;&lt;br /&gt;There is lots of the similarity between Capital Oh "O" and the Zero "0" in the Output. So, business may wants to print the ZERO as the "Slashed Zero" like "Ø". Let's see how we can achieve to print the slashed Zero in our outputs.&lt;br /&gt;&lt;br /&gt;For Smatforms, we can very well add the Program lines and convert all the Zeros to the slashed zero "Ø". But, it would be difficult to implement the same in the SAPScript using the PERFORM.&lt;br /&gt;&lt;br /&gt;We can use the Conversion Routine to achieve this easily.&lt;br /&gt;1. Create a Conversion Routine Function Modules:&lt;br /&gt;For Conversion Routines, we need two FM - One for the Input &amp; One for Output. E.g. If we want to create a conversion routine like ZZERO, then our conversion FMs would be: CONVERSION_EXIT_ZZERO_INPUT &amp; CONVERSION_EXIT_ZZERO_OUTPUT. &lt;br /&gt;&lt;br /&gt;To replace the zeros with the Slashed Zero, we need to implement the logic in the OUTPUT Conversion FM.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet for CONVERSION_EXIT_ZZERO_OUTPUT&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Importing&lt;br /&gt;*&amp;   value(INPUT) &lt;br /&gt;*&amp; Exporting&lt;br /&gt;*&amp;   value(OUTPUT)&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  OUTPUT = INPUT.&lt;br /&gt;  REPLACE ALL OCCURRENCES OF '0' IN output WITH 'Ø'.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;For the INPUT conversion FM, we really don't need any logic. So, we are just going to move the INPUT to OUTPUT.&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt; &lt;b&gt;Code Snippet for CONVERSION_EXIT_ZZERO_INPUT&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Importing&lt;br /&gt;*&amp;   value(INPUT) &lt;br /&gt;*&amp; Exporting&lt;br /&gt;*&amp;   value(OUTPUT)&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  INPUT = OUTPUT.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;2. Create a New Domain &amp; assign the Conversion Routine. Like: create the domain name &lt;br /&gt;ZZ_ZERO for the amount&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; Data type        CURR&lt;br /&gt; No. characters       13&lt;br /&gt; Decimal places        2&lt;br /&gt;&lt;br /&gt; Output length        17&lt;br /&gt; Convers. routine ZZERO&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3. Use this domain and create a data element.&lt;br /&gt;&lt;br /&gt;Now, you can refer to this data element in your Smartform / SAPScript and it will print the '1ØØØ.1Ø' instead of the '1000.10'.&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2809703940690182004?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2809703940690182004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/sapscript-smartforms-custom-formatting.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2809703940690182004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2809703940690182004'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/sapscript-smartforms-custom-formatting.html' title='SAPScript / SmartForms Custom Formatting'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-7368616577892443814</id><published>2009-04-01T17:37:00.005-05:00</published><updated>2009-04-01T18:29:12.649-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAPScript / SmartForm'/><title type='text'>SAPScript / SmartForms Formatting Options</title><content type='html'>There are so many standard formatting options avaliable in the SAPScript and SmartForms.&lt;br /&gt;&lt;br /&gt;Refer to the document &lt;a href="http://smartform.googlecode.com/files/SAPScript_System_symbol.pdf"&gt;Formatting Symbols in SAPScript&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-7368616577892443814?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/7368616577892443814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/04/sapscript-smartforms-formatting-options.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7368616577892443814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7368616577892443814'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/04/sapscript-smartforms-formatting-options.html' title='SAPScript / SmartForms Formatting Options'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-9160984577031979898</id><published>2009-03-10T19:09:00.010-05:00</published><updated>2011-09-04T00:28:03.751-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Games'/><title type='text'>Marbles Game in ABAP</title><content type='html'>&lt;div class="subtitle"&gt;Marbles Game, a fun and simple variation of the famous Chinese Checkers Game! &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Aim:&lt;/strong&gt; &lt;br /&gt;Try to remove all but one marble from the board. You can remove a marble by skipping over it to an empty spot. Select a marble by clicking on it and move it by selecting the spot that you want to move to.  &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Look:&lt;/strong&gt; &lt;br /&gt;It looks like this: &lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SbcCIY1nR5I/AAAAAAAAA28/k6gxOp3Tngc/s1600-h/Marbles_ABAP.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 303px; height: 400px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SbcCIY1nR5I/AAAAAAAAA28/k6gxOp3Tngc/s400/Marbles_ABAP.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5311716628636321682" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Here is the code snippet for Marbles Game: &lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet to change the Subtotal for Display &amp; Print&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_MARBLE&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ZTEST_NP_MARBLE NO STANDARD PAGE HEADING.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* I N C L U D E&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;INCLUDE &amp;lt;ICON&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* D A T A   D E F I N I T I O N&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;*....Types&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: BEGIN OF TY_SCORE,&lt;br /&gt;SRL   TYPE I,&lt;br /&gt;UNAME TYPE SY-UNAME,&lt;br /&gt;SCORE TYPE I,&lt;br /&gt;TIME  TYPE I,&lt;br /&gt;END   OF TY_SCORE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Internal Tables&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: BEGIN OF ITAB OCCURS 0,&lt;br /&gt;C1,  C2,  C3,&lt;br /&gt;C4,  C5,  C6,&lt;br /&gt;C7,  C8,  C9,&lt;br /&gt;END   OF ITAB.&lt;br /&gt;DATA: BEGIN OF IT_PRINT OCCURS 0,&lt;br /&gt;C1(4), C2(4), C3(4),&lt;br /&gt;C4(4), C5(4), C6(4),&lt;br /&gt;C7(4), C8(4), C9(4),&lt;br /&gt;END   OF IT_PRINT.&lt;br /&gt;DATA: IT_SCORE TYPE STANDARD TABLE OF TY_SCORE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Work Areas&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: WA_ITAB  LIKE ITAB,&lt;br /&gt;WA_PRINT LIKE IT_PRINT,&lt;br /&gt;W_SCORE  TYPE TY_SCORE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Globle Variables&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: L_NO_M      TYPE I,&lt;br /&gt;L_NO_S      TYPE I,&lt;br /&gt;L_NO_C      TYPE CHAR10,&lt;br /&gt;L_HALF      TYPE I,&lt;br /&gt;L_HALF_HALF TYPE I,&lt;br /&gt;L_PRINT     TYPE FLAG,&lt;br /&gt;L_NAME      TYPE CHAR20,&lt;br /&gt;L_MOD       TYPE I.&lt;br /&gt;DATA: W_ON        TYPE FLAG,&lt;br /&gt;W_SEL_LINE  TYPE I,&lt;br /&gt;W_SEL_COL   TYPE CHAR1,&lt;br /&gt;W_DEST_OK   TYPE FLAG,&lt;br /&gt;W_DEST_LINE TYPE I,&lt;br /&gt;W_DEST_COL  TYPE CHAR1,&lt;br /&gt;W_FIELD     TYPE CHAR20,&lt;br /&gt;W_LINE      TYPE I,&lt;br /&gt;W_GAME_OVER TYPE FLAG,&lt;br /&gt;W_TOTAL     TYPE I,&lt;br /&gt;W_REM       TYPE I,&lt;br /&gt;W_GONE      TYPE I,&lt;br /&gt;W_ST_TIME   TYPE I,&lt;br /&gt;W_END_TIME  TYPE I,&lt;br /&gt;W_EXPORTED  TYPE FLAG.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Field symbols&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;F&amp;gt; TYPE ANY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Constants&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CONSTANTS: ICON_0(40) TYPE C VALUE ICON_WD_RADIO_BUTTON_EMPTY,&lt;br /&gt;ICON_1(40) TYPE C VALUE ICON_RADIOBUTTON,&lt;br /&gt;ICON_2(40) TYPE C VALUE ICON_COLOR.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*.. Some systems don't have above listed ICONs You can use:&lt;br /&gt;**....Constants&lt;br /&gt;*CONSTANTS: ICON_0(40) TYPE C VALUE ICON_AVERAGE,      " ICON_WD_RADIO_BUTTON_EMPTY,&lt;br /&gt;*           ICON_1(40) TYPE C VALUE ICON_POSITIVE,     " ICON_RADIOBUTTON,&lt;br /&gt;*           ICON_2(40) TYPE C VALUE ICON_COLOR.&lt;br /&gt;*&lt;br /&gt;*....Ranges&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;RANGES: R_NOT_GREY FOR ABDOCMODE-FLAG.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*....Macros&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DEFINE CONV_I_C.&lt;br /&gt;&amp;2 = &amp;1.&lt;br /&gt;CONDENSE &amp;2.&lt;br /&gt;END-OF-DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* S E L E C T I O N   S C R E E N&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;PARAMETERS: P_NUM TYPE I DEFAULT 7.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* A T   S E L E C T I O N - S C R E E N .&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;AT SELECTION-SCREEN.&lt;br /&gt;IF  P_NUM GT 9&lt;br /&gt;OR  P_NUM LT 5.&lt;br /&gt;MESSAGE E398(00) WITH 'Currently allowed only: 5, 7, 9'.&lt;br /&gt;ENDIF.&lt;br /&gt;L_MOD = P_NUM MOD 2.&lt;br /&gt;IF L_MOD = 0.&lt;br /&gt;MESSAGE E398(00) WITH 'Only odd numbers are allowed'.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* S T A R T   O F   S E L E C T I O N&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;GET TIME FIELD W_ST_TIME.&lt;br /&gt;PERFORM FILL_MARBLES.&lt;br /&gt;PERFORM FILL_PRINT_TABLE.&lt;br /&gt;PERFORM WRITE_MARBLES.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;* A T   L I N E   S E L E C T I O N&lt;br /&gt;*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;AT LINE-SELECTION.&lt;br /&gt;GET CURSOR FIELD W_FIELD.&lt;br /&gt;PERFORM CALCULATE_MARBLES.&lt;br /&gt;PERFORM FILL_PRINT_TABLE.&lt;br /&gt;SY-LSIND = 0.&lt;br /&gt;PERFORM WRITE_MARBLES.&lt;br /&gt;PERFORM CHECK_GAME_OVER.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  fill_marbles&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Fillup the initial table for the marbles&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM FILL_MARBLES .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Grey cells&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  L_HALF = FLOOR( P_NUM / 2 ).&lt;br /&gt;L_HALF_HALF = L_HALF / 2.&lt;br /&gt;R_NOT_GREY-SIGN   = 'I'.&lt;br /&gt;R_NOT_GREY-OPTION = 'BT'.&lt;br /&gt;R_NOT_GREY-LOW  = ( L_HALF - L_HALF_HALF ) + 1.&lt;br /&gt;R_NOT_GREY-HIGH = ( L_HALF + L_HALF_HALF ) - 1.&lt;br /&gt;APPEND R_NOT_GREY.&lt;br /&gt;CLEAR  R_NOT_GREY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Filling up the table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DO P_NUM TIMES.&lt;br /&gt;L_NO_M = SY-INDEX.&lt;br /&gt;NEW-LINE.&lt;br /&gt;DO P_NUM TIMES.&lt;br /&gt;L_NO_S = SY-INDEX.&lt;br /&gt;CLEAR: L_PRINT.&lt;br /&gt;IF L_NO_M IN R_NOT_GREY.&lt;br /&gt;L_PRINT = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;IF L_NO_S IN R_NOT_GREY.&lt;br /&gt;L_PRINT = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;IF L_PRINT = 'X'.&lt;br /&gt;CONV_I_C L_NO_S L_NO_C.&lt;br /&gt;CONCATENATE 'WA_ITAB-C' L_NO_C INTO L_NAME.&lt;br /&gt;ASSIGN (L_NAME) TO &amp;lt;F&amp;gt;.&lt;br /&gt;IF  L_NO_S = L_HALF&lt;br /&gt;AND L_NO_M = L_HALF.&lt;br /&gt;&amp;lt;F&amp;gt; = '0'.&lt;br /&gt;W_TOTAL = W_TOTAL - 1.&lt;br /&gt;ELSE.&lt;br /&gt;&amp;lt;F&amp;gt; = '1'.&lt;br /&gt;W_TOTAL = W_TOTAL + 1.&lt;br /&gt;ENDIF.&lt;br /&gt;ELSE.&lt;br /&gt;WRITE: ' '.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDDO.&lt;br /&gt;APPEND WA_ITAB TO ITAB.&lt;br /&gt;CLEAR  WA_ITAB.&lt;br /&gt;ENDDO.&lt;br /&gt;W_REM = W_TOTAL.&lt;br /&gt;ENDFORM.                    " fill_marbles&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  fill_print_Table&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Convert ITAB value to PRINT table value .&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM FILL_PRINT_TABLE .&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY.&lt;br /&gt;REFRESH IT_PRINT.&lt;br /&gt;LOOP AT ITAB INTO WA_ITAB.&lt;br /&gt;L_NO_M = SY-INDEX.&lt;br /&gt;DO P_NUM TIMES.&lt;br /&gt;CONV_I_C SY-INDEX L_NO_C.&lt;br /&gt;CLEAR L_NAME.&lt;br /&gt;CONCATENATE 'WA_ITAB-C' L_NO_C INTO L_NAME.&lt;br /&gt;ASSIGN (L_NAME) TO &amp;lt;F&amp;gt;.&lt;br /&gt;CLEAR L_NAME.&lt;br /&gt;CONCATENATE 'WA_PRINT-C' L_NO_C INTO L_NAME.&lt;br /&gt;ASSIGN (L_NAME) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;CASE &amp;lt;F&amp;gt;.&lt;br /&gt;WHEN '1'.&lt;br /&gt;&amp;lt;F1&amp;gt; = ICON_1.&lt;br /&gt;WHEN '0'.&lt;br /&gt;&amp;lt;F1&amp;gt; = ICON_0.&lt;br /&gt;WHEN '2'.&lt;br /&gt;&amp;lt;F1&amp;gt; = ICON_2.&lt;br /&gt;WHEN OTHERS.&lt;br /&gt;ENDCASE.&lt;br /&gt;ENDDO.&lt;br /&gt;APPEND WA_PRINT TO IT_PRINT.&lt;br /&gt;CLEAR  WA_PRINT.&lt;br /&gt;ENDLOOP.&lt;br /&gt;ENDFORM.                    " fill_print_Table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  write_marbles&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Write marbles from the PRINT table&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM WRITE_MARBLES .&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY.&lt;br /&gt;IF W_GAME_OVER IS INITIAL.&lt;br /&gt;LOOP AT IT_PRINT INTO WA_PRINT.&lt;br /&gt;SKIP 1.&lt;br /&gt;W_LINE = SY-TABIX.&lt;br /&gt;WRITE: (2) W_LINE.&lt;br /&gt;HIDE  W_LINE.&lt;br /&gt;DO P_NUM TIMES.&lt;br /&gt;CONV_I_C SY-INDEX L_NO_C.&lt;br /&gt;CLEAR L_NAME.&lt;br /&gt;CONCATENATE 'WA_PRINT-C' L_NO_C INTO L_NAME.&lt;br /&gt;ASSIGN (L_NAME) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;IF NOT &amp;lt;F1&amp;gt; IS INITIAL.&lt;br /&gt;WRITE: (2) &amp;lt;F1&amp;gt; AS ICON HOTSPOT ON, (2) ' '.&lt;br /&gt;ELSE.&lt;br /&gt;WRITE: (2) ' ', (2) ' '.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDDO.&lt;br /&gt;ENDLOOP.&lt;br /&gt;ENDIF.&lt;br /&gt;SKIP 4.&lt;br /&gt;WRITE: /(30) 'Total Marbles:',    W_TOTAL.&lt;br /&gt;WRITE: /(30) 'Remaining Marbles', W_REM.&lt;br /&gt;SKIP 4.&lt;br /&gt;PERFORM WRITE_5_HIGH_SCORE.&lt;br /&gt;ENDFORM.                    " write_marbles&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  calculate_marbles&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Calculate the marbles after the user input in line selection&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM CALCULATE_MARBLES .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* No marble has been selected&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF W_ON IS INITIAL.&lt;br /&gt;PERFORM VALIDATE_INPUT.&lt;br /&gt;ELSE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* remove the seleced marble&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    PERFORM DESELECT_MARBLE.&lt;br /&gt;IF W_ON = 'X'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     Check destination cell, if the same marble has not been selected&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      PERFORM CHECK_DESTINATION.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Destination is ok ..? rearrange the marbles in ITAB&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF W_DEST_OK = 'X'.&lt;br /&gt;PERFORM REARRANGE_MARBLES.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDFORM.                    " calculate_marbles&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  validate_input&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Validating the selected marble, is it movable or not&lt;br /&gt;*       if marble is movable, highlight it&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM VALIDATE_INPUT .&lt;br /&gt;DATA: L_SEL_FIELD(20),&lt;br /&gt;L_TMP_FIELD(20),&lt;br /&gt;L_SEL_COL(1),&lt;br /&gt;L_TMP_COL(2),&lt;br /&gt;L_TMP_LINE TYPE I,&lt;br /&gt;L_OK TYPE FLAG.&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY,&lt;br /&gt;&amp;lt;F2&amp;gt; TYPE ANY.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.&lt;br /&gt;L_SEL_FIELD = W_FIELD.&lt;br /&gt;L_SEL_COL   = W_FIELD+10(1).&lt;br /&gt;REPLACE 'PRINT' INTO L_SEL_FIELD WITH 'ITAB'.&lt;br /&gt;CONDENSE L_SEL_FIELD.&lt;br /&gt;ASSIGN (L_SEL_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* value = 0 &amp;gt;&amp;gt; No marble&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF &amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;MESSAGE S398(00) WITH 'No marble to select.!'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Check right&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  L_TMP_COL = L_SEL_COL + 2.&lt;br /&gt;IF L_TMP_COL &amp;lt; 9.&lt;br /&gt;CONCATENATE 'WA_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Check left&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_OK IS INITIAL.&lt;br /&gt;L_TMP_COL = L_SEL_COL - 2.&lt;br /&gt;IF L_TMP_COL &amp;gt; 0.&lt;br /&gt;CONCATENATE 'WA_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* check Above&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_OK IS INITIAL.&lt;br /&gt;L_TMP_LINE = W_LINE - 2.&lt;br /&gt;IF L_TMP_LINE &amp;gt; 0.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Check underneath&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_OK IS INITIAL.&lt;br /&gt;L_TMP_LINE = W_LINE + 2.&lt;br /&gt;IF L_TMP_LINE &amp;lt; 9.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Ok .. than ON&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_OK = 'X'.&lt;br /&gt;W_ON = 'X'.&lt;br /&gt;&amp;lt;F1&amp;gt; = '2'.&lt;br /&gt;MODIFY ITAB FROM WA_ITAB INDEX W_LINE.&lt;br /&gt;W_SEL_LINE = W_LINE.&lt;br /&gt;W_SEL_COL  = L_SEL_COL .&lt;br /&gt;ELSE.&lt;br /&gt;MESSAGE S398(00) WITH 'No marble to select.!' ' ' ' ' ' '.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDFORM.                    " validate_input&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  deselect_marble&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Deselect the marble if the same marble is selected again&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM DESELECT_MARBLE .&lt;br /&gt;DATA: L_SEL_FIELD(20).&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY.&lt;br /&gt;READ TABLE ITAB INTO WA_ITAB INDEX W_LINE.&lt;br /&gt;L_SEL_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'PRINT' INTO L_SEL_FIELD WITH 'ITAB'.&lt;br /&gt;CONDENSE L_SEL_FIELD.&lt;br /&gt;ASSIGN (L_SEL_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;IF &amp;lt;F1&amp;gt; = '2'.&lt;br /&gt;&amp;lt;F1&amp;gt; = '1'.&lt;br /&gt;MODIFY ITAB FROM WA_ITAB INDEX W_LINE.&lt;br /&gt;MESSAGE S398(00) WITH 'Marble was deselected..!!'.&lt;br /&gt;CLEAR: W_ON, W_SEL_LINE, W_SEL_COL.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDFORM.                    " deselect_marble&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  check_destination&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Check the destination cell, it should not be empty and distnce&lt;br /&gt;*       between selected cell and destination cell must be 2&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM CHECK_DESTINATION .&lt;br /&gt;DATA: L_DEST_FIELD(20),&lt;br /&gt;L_DEST_COL(1),&lt;br /&gt;L_DEST_NOT_OK TYPE FLAG,&lt;br /&gt;L_TMP_LINE TYPE I,&lt;br /&gt;L_TMP_COL  TYPE C.&lt;br /&gt;DATA: L_ITAB_DEST LIKE ITAB.&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB_DEST INDEX W_LINE.&lt;br /&gt;L_DEST_FIELD = W_FIELD.&lt;br /&gt;L_DEST_COL   = W_FIELD+10(1).&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_DEST_FIELD WITH 'L_ITAB_DEST'.&lt;br /&gt;CONDENSE L_DEST_FIELD.&lt;br /&gt;ASSIGN (L_DEST_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Destination should be empty&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF &amp;lt;F1&amp;gt; &amp;lt;&amp;gt; '0'.&lt;br /&gt;L_DEST_NOT_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Calcualate the distance between selected marble and destination&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_DEST_NOT_OK IS INITIAL.&lt;br /&gt;IF W_SEL_LINE &amp;lt;&amp;gt; W_LINE.&lt;br /&gt;L_TMP_LINE = ABS( W_SEL_LINE - W_LINE ).&lt;br /&gt;IF L_TMP_LINE &amp;lt;&amp;gt; '2'.&lt;br /&gt;L_DEST_NOT_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;IF L_DEST_NOT_OK IS INITIAL.&lt;br /&gt;IF W_SEL_COL &amp;lt;&amp;gt; L_DEST_COL.&lt;br /&gt;L_TMP_COL = ABS( W_SEL_COL - L_DEST_COL ).&lt;br /&gt;IF L_TMP_COL &amp;lt;&amp;gt; '2'.&lt;br /&gt;L_DEST_NOT_OK = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* destination not ok&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF L_DEST_NOT_OK = 'X'.&lt;br /&gt;MESSAGE S398(00) WITH 'Destination is not GOOD' ' ' ' ' ' '.&lt;br /&gt;ELSE.&lt;br /&gt;W_DEST_OK = 'X'.&lt;br /&gt;W_DEST_LINE = W_LINE.&lt;br /&gt;W_DEST_COL  = L_DEST_COL.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDFORM.                    " check_destination&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  rearrange_marbles&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Rearrange marbles&lt;br /&gt;*     1 Remove the marble which is inbetween the selected &amp; destination&lt;br /&gt;*     2 Remove the marble from the selected cell&lt;br /&gt;*     3 Put marble on the destination cell&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM REARRANGE_MARBLES .&lt;br /&gt;DATA: L_FIELD(20),&lt;br /&gt;L_TMP_LINE TYPE I,&lt;br /&gt;L_TMP_COL  TYPE CHAR1,&lt;br /&gt;L_NO_MOVE  TYPE FLAG,&lt;br /&gt;L_ITAB LIKE ITAB.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Make the inbetween column as 0 if both lines are same&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF W_SEL_LINE = W_DEST_LINE.&lt;br /&gt;IF W_SEL_COL &amp;gt; W_DEST_COL.&lt;br /&gt;L_TMP_COL = W_DEST_COL + 1.&lt;br /&gt;ELSE.&lt;br /&gt;L_TMP_COL = W_SEL_COL + 1.&lt;br /&gt;ENDIF.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;L_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.&lt;br /&gt;CONDENSE L_FIELD.&lt;br /&gt;L_FIELD+8(1) = L_TMP_COL.&lt;br /&gt;ASSIGN (L_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;IF &amp;lt;F1&amp;gt; = 1.&lt;br /&gt;&amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;W_GONE = W_GONE + 1.&lt;br /&gt;MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;ELSE.&lt;br /&gt;L_NO_MOVE = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;CLEAR  L_ITAB.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Make the inbetween line as 0 if both lines are same&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF W_SEL_COL = W_DEST_COL.&lt;br /&gt;IF W_SEL_LINE &amp;gt; W_DEST_LINE.&lt;br /&gt;L_TMP_LINE = W_DEST_LINE + 1.&lt;br /&gt;ELSE.&lt;br /&gt;L_TMP_LINE = W_SEL_LINE + 1.&lt;br /&gt;ENDIF.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;L_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.&lt;br /&gt;CONDENSE L_FIELD.&lt;br /&gt;L_FIELD+8(1) = W_SEL_COL.&lt;br /&gt;ASSIGN (L_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;IF &amp;lt;F1&amp;gt; = 1.&lt;br /&gt;&amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;W_GONE = W_GONE + 1.&lt;br /&gt;MODIFY ITAB FROM L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;ELSE.&lt;br /&gt;L_NO_MOVE = 'X'.&lt;br /&gt;ENDIF.&lt;br /&gt;CLEAR  L_ITAB.&lt;br /&gt;ENDIF.&lt;br /&gt;IF L_NO_MOVE IS INITIAL.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Make Destination = 1&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    READ TABLE ITAB INTO L_ITAB INDEX W_DEST_LINE.&lt;br /&gt;L_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.&lt;br /&gt;CONDENSE L_FIELD.&lt;br /&gt;L_FIELD+8(1) = W_DEST_COL.&lt;br /&gt;ASSIGN (L_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;&amp;lt;F1&amp;gt; = '1'.&lt;br /&gt;MODIFY ITAB FROM L_ITAB INDEX W_DEST_LINE.&lt;br /&gt;CLEAR  L_ITAB.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Make Selected = 0.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;L_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.&lt;br /&gt;CONDENSE L_FIELD.&lt;br /&gt;L_FIELD+8(1) = W_SEL_COL.&lt;br /&gt;ASSIGN (L_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;&amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;CLEAR  L_ITAB.&lt;br /&gt;ELSE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Make Selected = 1 when no movement&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    READ TABLE ITAB INTO L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;L_FIELD = W_FIELD.&lt;br /&gt;REPLACE 'WA_PRINT' INTO L_FIELD WITH 'L_ITAB'.&lt;br /&gt;CONDENSE L_FIELD.&lt;br /&gt;L_FIELD+8(1) = W_SEL_COL.&lt;br /&gt;ASSIGN (L_FIELD) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;&amp;lt;F1&amp;gt; = '1'.&lt;br /&gt;MODIFY ITAB FROM L_ITAB INDEX W_SEL_LINE.&lt;br /&gt;CLEAR  L_ITAB.&lt;br /&gt;ENDIF.&lt;br /&gt;W_REM = W_TOTAL - W_GONE.&lt;br /&gt;CLEAR: W_DEST_OK, W_DEST_LINE, W_DEST_COL,&lt;br /&gt;W_ON,      W_SEL_LINE,  W_SEL_COL.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " rearrange_marbles&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  check_game_over&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Check game over when the remaining marbles are half than&lt;br /&gt;*         the original marbles. Check for all cells with the marbles and&lt;br /&gt;*         check adjacent cells (right, left, above and underneath cells)&lt;br /&gt;*         with the value. If the marble found in any adjacent cell than&lt;br /&gt;*         GAME is NOT OVER&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM CHECK_GAME_OVER .&lt;br /&gt;STATICS: L_TOT_HALF TYPE I.&lt;br /&gt;DATA: L_ITAB     LIKE ITAB,&lt;br /&gt;L_ITAB_TMP LIKE ITAB.&lt;br /&gt;DATA: L_TMP_FIELD(20),&lt;br /&gt;L_SEL_COL(1),&lt;br /&gt;L_TMP_COL(2),&lt;br /&gt;L_OK       TYPE FLAG,&lt;br /&gt;L_LINE     TYPE I,&lt;br /&gt;L_TMP_LINE TYPE I.&lt;br /&gt;CLEAR: L_OK.&lt;br /&gt;FIELD-SYMBOLS: &amp;lt;F1&amp;gt; TYPE ANY,&lt;br /&gt;&amp;lt;F2&amp;gt; TYPE ANY.&lt;br /&gt;CHECK W_ON IS INITIAL.&lt;br /&gt;L_TOT_HALF = ABS( W_TOTAL / 2 ).&lt;br /&gt;CHECK W_REM &amp;lt; L_TOT_HALF.&lt;br /&gt;LOOP AT ITAB INTO L_ITAB.&lt;br /&gt;L_LINE = SY-TABIX.&lt;br /&gt;L_ITAB_TMP = L_ITAB.&lt;br /&gt;DO P_NUM TIMES.&lt;br /&gt;L_ITAB = L_ITAB_TMP.&lt;br /&gt;L_SEL_COL = SY-INDEX.&lt;br /&gt;CONV_I_C SY-INDEX L_NO_C.&lt;br /&gt;CLEAR L_NAME.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_NO_C INTO L_NAME.&lt;br /&gt;ASSIGN (L_NAME) TO &amp;lt;F1&amp;gt;.&lt;br /&gt;IF &amp;lt;F1&amp;gt; IS INITIAL&lt;br /&gt;OR &amp;lt;F1&amp;gt; = '0'.&lt;br /&gt;CONTINUE.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*      IF &amp;lt;F1&amp;gt; = '1'.&lt;br /&gt;*        l_ok = 'X'.&lt;br /&gt;*        exit.&lt;br /&gt;*      ENDIF.&lt;br /&gt;*     right neighbour&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      L_TMP_COL = L_SEL_COL + 1.&lt;br /&gt;IF L_TMP_COL &amp;lt; 9.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '1'.&lt;br /&gt;L_TMP_COL = L_SEL_COL + 2.&lt;br /&gt;IF L_TMP_COL &amp;lt; 9.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     Check left&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      L_TMP_COL = L_SEL_COL - 1.&lt;br /&gt;IF L_TMP_COL &amp;gt; 0.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '1'.&lt;br /&gt;L_TMP_COL = L_SEL_COL - 2.&lt;br /&gt;IF L_TMP_COL &amp;gt; 0.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_TMP_COL INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;CONCATENATE 'L_ITAB-C' L_NO_C INTO L_TMP_FIELD.&lt;br /&gt;CONDENSE L_TMP_FIELD.&lt;br /&gt;ASSIGN (L_TMP_FIELD) TO &amp;lt;F2&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     check Above&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      L_TMP_LINE = L_LINE - 1.&lt;br /&gt;IF L_TMP_LINE &amp;gt; 0.&lt;br /&gt;CLEAR L_ITAB.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '1'.&lt;br /&gt;L_TMP_LINE = L_LINE - 2.&lt;br /&gt;IF L_TMP_LINE &amp;gt; 0.&lt;br /&gt;CLEAR L_ITAB.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     Check underneath&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      L_TMP_LINE = L_LINE + 1.&lt;br /&gt;IF L_TMP_LINE &amp;lt; 9.&lt;br /&gt;CLEAR L_ITAB.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '1'.&lt;br /&gt;L_TMP_LINE = L_LINE + 2.&lt;br /&gt;IF L_TMP_LINE &amp;lt; 9.&lt;br /&gt;CLEAR L_ITAB.&lt;br /&gt;READ TABLE ITAB INTO L_ITAB INDEX L_TMP_LINE.&lt;br /&gt;IF &amp;lt;F2&amp;gt; = '0'.&lt;br /&gt;L_OK = 'X'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDDO.&lt;br /&gt;IF L_OK = 'X'.&lt;br /&gt;EXIT.&lt;br /&gt;ENDIF.&lt;br /&gt;ENDLOOP.&lt;br /&gt;IF L_OK IS INITIAL.&lt;br /&gt;W_GAME_OVER = 'X'.&lt;br /&gt;MESSAGE S398(00) WITH 'Game Over. Socre:' W_REM.&lt;br /&gt;PERFORM EXPORT_HIGH_SCORE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*    leave program.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDIF.&lt;br /&gt;ENDFORM.                    " check_game_over&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  export_high_score&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Export High Score to memory when the game is over&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM EXPORT_HIGH_SCORE .&lt;br /&gt;DATA: L_TIME TYPE I.&lt;br /&gt;CHECK W_EXPORTED IS INITIAL.&lt;br /&gt;GET TIME FIELD W_END_TIME.&lt;br /&gt;L_TIME = W_END_TIME - W_ST_TIME.&lt;br /&gt;W_SCORE-UNAME = SY-UNAME.&lt;br /&gt;W_SCORE-SCORE = W_REM.&lt;br /&gt;W_SCORE-TIME  = L_TIME.&lt;br /&gt;APPEND W_SCORE TO IT_SCORE.&lt;br /&gt;SORT IT_SCORE BY SCORE TIME.&lt;br /&gt;LOOP AT IT_SCORE INTO W_SCORE.&lt;br /&gt;W_SCORE-SRL = SY-TABIX.&lt;br /&gt;MODIFY IT_SCORE FROM W_SCORE.&lt;br /&gt;CLEAR  W_SCORE.&lt;br /&gt;ENDLOOP.&lt;br /&gt;DELETE IT_SCORE WHERE SRL &amp;gt; 5.&lt;br /&gt;EXPORT IT_SCORE = IT_SCORE TO DATABASE INDX(ZZ)&lt;br /&gt;ID 'ZGAME_MAR'.&lt;br /&gt;W_EXPORTED = 'X'.&lt;br /&gt;ENDFORM.                    " export_high_score&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  write_5_high_score&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Write 5 high scores&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM WRITE_5_HIGH_SCORE .&lt;br /&gt;IMPORT IT_SCORE = IT_SCORE FROM DATABASE INDX(ZZ)&lt;br /&gt;ID 'ZGAME_MAR'.&lt;br /&gt;WRITE: /(12) 'User',&lt;br /&gt;(10) 'Score' RIGHT-JUSTIFIED ,&lt;br /&gt;(10) 'Time'  RIGHT-JUSTIFIED.&lt;br /&gt;WRITE: /(34) SY-ULINE.&lt;br /&gt;LOOP AT IT_SCORE INTO W_SCORE.&lt;br /&gt;WRITE: /(12) W_SCORE-UNAME,&lt;br /&gt;(10) W_SCORE-SCORE,&lt;br /&gt;(10) W_SCORE-TIME.&lt;br /&gt;ENDLOOP.&lt;br /&gt;ENDFORM.                    " write_5_high_score&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Don't forget to share your high-scores in the comment. &lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-9160984577031979898?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/9160984577031979898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/03/marbles-game-in-abap.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/9160984577031979898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/9160984577031979898'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/03/marbles-game-in-abap.html' title='Marbles Game in ABAP'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/SbcCIY1nR5I/AAAAAAAAA28/k6gxOp3Tngc/s72-c/Marbles_ABAP.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4526553991573298481</id><published>2009-03-10T18:52:00.003-05:00</published><updated>2009-03-10T19:35:26.433-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Games'/><category scheme='http://www.blogger.com/atom/ns#' term='ABAP Fun'/><title type='text'>Fun with ABAP</title><content type='html'>&lt;div class="subtitle"&gt;In this section, you will find some Fun stuff with ABAP&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class='subtitle' name="GAMES"&gt;ABAP Games&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;&lt;a href="http://help-abap.blogspot.com/2009/03/marbles-game-in-abap.html"&gt;Marbles Game in ABAP&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Truly, addictive Marbles Game created in ABAP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4526553991573298481?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4526553991573298481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/03/fun-with-abap.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4526553991573298481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4526553991573298481'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/03/fun-with-abap.html' title='Fun with ABAP'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-8763033607644409336</id><published>2009-03-08T21:47:00.004-05:00</published><updated>2009-03-08T21:57:11.160-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Classical ALV'/><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Classical ALV: Change Subtotal - II for Print</title><content type='html'>&lt;div class="subtitle"&gt;Change in the ALV Subtotal for the display &amp; print&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the post, &lt;a href="http://help-abap.blogspot.com/2008/09/classical-alv-change-subtotal.html"&gt;Classical ALV: Change Subtotal&lt;/a&gt; we have seen how we can change the Subtotal on the Classical ALV. Today, we will see how we can set the subtotal in the ALV display and the print function - Print Preview &amp; Print.&lt;br /&gt;&lt;br /&gt;We will use the event TOP_OF_LIST to perform this steps:&lt;br /&gt;&lt;p&gt;1. we need to get the ALV object form the ALV function module. We can use the FM GET_GLOBALS_FROM_SLVC_FULLSCR to get the Global data of the ALV. From this FM we will get the ALV object. &lt;/p&gt;&lt;p&gt;2. After getting the ALV object, we need to get the subtotal using the method GET_SUBTOTALS of the ALV object. We will get the first level subtotal using the parameter EP_COLLECT01. &lt;/p&gt;&lt;p&gt;3. Now, we need to modify the subtotal. Here we need to take help of Field-symbols since the EP_COLLECT01 is reference to data. &lt;/p&gt;&lt;p&gt;4. We need to refresh the Sub total in the print. For this purpose we will use the field-symbol to get an access the table (SAPLKKBL)IT_COLLECT01[]&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Code snippet is like:&lt;br /&gt;&lt;table style="MARGIN: 10px" bordercolor="#c3d9ff" cellspacing="0" cellpadding="3" width="568" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#c3d9ff"&gt;&lt;b&gt;Code Snippet to change the Subtotal for Display &amp; Print&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" style="background-color:#eeeeee;"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  zalv_subtot_change.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZALV_SUBTOT_CHANGE.&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Program shows how to change the Subtotal of the classical ALV&lt;br /&gt;*&amp; check subroutine TOP_OF_PAGE&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPE-POOLS: slis.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: BEGIN OF ty_bkpf,&lt;br /&gt;       belnr TYPE bkpf-belnr,&lt;br /&gt;       buzei TYPE bseg-buzei,&lt;br /&gt;       dmbtr TYPE bseg-dmbtr,&lt;br /&gt;       per   TYPE bseg-dmbtr,&lt;br /&gt;       per1  TYPE char10,&lt;br /&gt;       mode  TYPE bapi_change_mode,&lt;br /&gt;       END   OF ty_bkpf.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: it_bkpf TYPE STANDARD TABLE OF ty_bkpf,&lt;br /&gt;      it_bkpf1 TYPE STANDARD TABLE OF ty_bkpf,&lt;br /&gt;      wa_bkpf TYPE ty_bkpf.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: t_fieldcat   TYPE slis_t_fieldcat_alv.&lt;br /&gt;DATA:  wa_fieldcat   TYPE slis_fieldcat_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  SELECT belnr buzei dmbtr&lt;br /&gt;         INTO TABLE it_bkpf&lt;br /&gt;         FROM  bseg&lt;br /&gt;         UP TO 20 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT it_bkpf INTO wa_bkpf.&lt;br /&gt;    wa_bkpf-per = 0.&lt;br /&gt;    wa_bkpf-mode = 'O'.&lt;br /&gt;    MODIFY it_bkpf FROM wa_bkpf.&lt;br /&gt;    CLEAR  wa_bkpf.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PERFORM create_field_catalog.&lt;br /&gt;  PERFORM create_alv_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  create_field_catalog&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM create_field_catalog .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PERFORM add_field_catalog USING :&lt;br /&gt;    '01' 'BELNR'     'Doc'         '10'  '',&lt;br /&gt;    '02' 'BUZEI'     'Line'        '3'  '',&lt;br /&gt;    '03' 'DMBTR'     'Amount'      '17'  'X',&lt;br /&gt;    '04' 'PER'       'Percentage'      '17'  'X',&lt;br /&gt;    '05' 'PER1'      'Percentage'     '17'  '',&lt;br /&gt;    '06' 'MODE'      'Mode'        '4'   ''.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " create_field_catalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  add_field_catalog&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Adds field details into field catalog&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM add_field_catalog  USING    p_colpos&lt;br /&gt;                                 p_fldname&lt;br /&gt;                                 p_fldtext&lt;br /&gt;                                 p_outlen&lt;br /&gt;                                 p_sum..&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  wa_fieldcat-row_pos       = '1'.&lt;br /&gt;  wa_fieldcat-col_pos       = p_colpos.&lt;br /&gt;  wa_fieldcat-fieldname     = p_fldname.&lt;br /&gt;  wa_fieldcat-tabname       = 'IT_BKPF'.&lt;br /&gt;  wa_fieldcat-reptext_ddic  = p_fldtext.&lt;br /&gt;  wa_fieldcat-outputlen     = p_outlen.&lt;br /&gt;  wa_fieldcat-no_zero       = 'X'.  " &amp;lt;&amp;lt;&lt;br /&gt;  wa_fieldcat-do_sum        = p_sum.&lt;br /&gt;  IF wa_fieldcat-fieldname = 'MODE'.&lt;br /&gt;    wa_fieldcat-rollname      = 'BAPI_CHANGE_MODE'.&lt;br /&gt;  ENDIF.&lt;br /&gt;  APPEND  wa_fieldcat TO t_fieldcat.&lt;br /&gt;  CLEAR : wa_fieldcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " add_field_catalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  create_alv_output&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Generate ALV Grid output&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM create_alv_output .&lt;br /&gt;  DATA: l_repid LIKE sy-repid,&lt;br /&gt;        l_layout TYPE slis_layout_alv,&lt;br /&gt;        l_print  TYPE  slis_print_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: it_sort TYPE slis_t_sortinfo_alv,&lt;br /&gt;        ls_sort TYPE slis_sortinfo_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: it_filter TYPE slis_t_filter_alv,&lt;br /&gt;        ls_filter TYPE slis_filter_alv.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: it_event_exit TYPE slis_t_event_exit,&lt;br /&gt;        ls_event_exit TYPE slis_event_exit.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: t_event      TYPE slis_t_event,&lt;br /&gt;        wa_event      TYPE slis_alv_event.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_repid = sy-repid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_layout-no_totalline = 'X'.&lt;br /&gt;  l_layout-colwidth_optimize = ' '.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ls_sort-spos = '1'.&lt;br /&gt;  ls_sort-fieldname = 'BUZEI'.&lt;br /&gt;  ls_sort-tabname = 'IT_BKPF'.&lt;br /&gt;  ls_sort-up = 'X'.&lt;br /&gt;  ls_sort-subtot = 'X'.&lt;br /&gt;  APPEND ls_sort TO it_sort.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ls_event_exit-ucomm = '&amp;ILT'.&lt;br /&gt;  ls_event_exit-after = 'X'.&lt;br /&gt;  APPEND ls_event_exit TO it_event_exit.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CLEAR wa_event.&lt;br /&gt;  wa_event-name = 'USER_COMMAND'.&lt;br /&gt;  wa_event-form = 'USER_COMMAND'.&lt;br /&gt;  APPEND wa_event TO t_event.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CLEAR wa_event.&lt;br /&gt;  wa_event-name = 'TOP_OF_PAGE'.&lt;br /&gt;  wa_event-form = 'TOP_OF_PAGE'.&lt;br /&gt;  APPEND wa_event TO t_event.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CLEAR wa_event.&lt;br /&gt;  wa_event-name = 'TOP_OF_LIST'.&lt;br /&gt;  wa_event-form = 'TOP_OF_LIST'.&lt;br /&gt;  APPEND wa_event TO t_event.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_callback_program     = l_repid&lt;br /&gt;      i_callback_top_of_page = 'TOP_OF_PAGE'&lt;br /&gt;      is_layout              = l_layout&lt;br /&gt;      is_print               = l_print&lt;br /&gt;      it_sort                = it_sort&lt;br /&gt;      it_filter              = it_filter&lt;br /&gt;      it_fieldcat            = t_fieldcat[]&lt;br /&gt;      it_events              = t_event&lt;br /&gt;    TABLES&lt;br /&gt;      t_outtab               = it_bkpf&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      program_error          = 1&lt;br /&gt;      OTHERS                 = 2.&lt;br /&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;br /&gt;*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " create_alv_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  TOP_OF_PAGE&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM top_of_page.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lo_grid TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* get the global reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'&lt;br /&gt;    IMPORTING&lt;br /&gt;      e_grid = lo_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* get the subtotal&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: it_01 TYPE REF TO data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL METHOD lo_grid-&amp;gt;get_subtotals&lt;br /&gt;    IMPORTING&lt;br /&gt;      ep_collect01 = it_01.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* change the data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  FIELD-SYMBOLS: &amp;lt;ft_tab&amp;gt; TYPE ANY TABLE,&lt;br /&gt;                 &amp;lt;fs_tab&amp;gt; TYPE ANY,&lt;br /&gt;                 &amp;lt;ff_field&amp;gt; TYPE ANY.&lt;br /&gt;  ASSIGN it_01-&amp;gt;* TO &amp;lt;ft_tab&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT &amp;lt;ft_tab&amp;gt; ASSIGNING &amp;lt;fs_tab&amp;gt;.&lt;br /&gt;    ASSIGN COMPONENT 'PER' OF STRUCTURE &amp;lt;fs_tab&amp;gt; TO &amp;lt;ff_field&amp;gt;.&lt;br /&gt;    &amp;lt;ff_field&amp;gt; = '100'.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Refresh the table display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL METHOD lo_grid-&amp;gt;refresh_table_display&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_soft_refresh = 'X'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " top_of_page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  TOP_OF_LIST&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM top_of_list.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lo_grid TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* FOR Print out:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CHECK sy-ucomm = 'PRIN'            " Print&lt;br /&gt;  OR    sy-ucomm = '&amp;RNT_PREV'.      " Print Preview&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* get the global reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'&lt;br /&gt;    IMPORTING&lt;br /&gt;      e_grid = lo_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* get the subtotal&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: it_01 TYPE REF TO data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL METHOD lo_grid-&amp;gt;get_subtotals&lt;br /&gt;    IMPORTING&lt;br /&gt;      ep_collect01 = it_01.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* change the data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  FIELD-SYMBOLS: &amp;lt;ft_tab&amp;gt; TYPE ANY TABLE,&lt;br /&gt;                 &amp;lt;fs_tab&amp;gt; TYPE ANY,&lt;br /&gt;                 &amp;lt;ff_field&amp;gt; TYPE ANY.&lt;br /&gt;  ASSIGN it_01-&amp;gt;* TO &amp;lt;ft_tab&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT &amp;lt;ft_tab&amp;gt; ASSIGNING &amp;lt;fs_tab&amp;gt;.&lt;br /&gt;    ASSIGN COMPONENT 'PER' OF STRUCTURE &amp;lt;fs_tab&amp;gt; TO &amp;lt;ff_field&amp;gt;.&lt;br /&gt;    &amp;lt;ff_field&amp;gt; = '100'.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set the subtotal for the Print / Print preview&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  FIELD-SYMBOLS: &amp;lt;fs_tab1&amp;gt; TYPE ANY TABLE.&lt;br /&gt;  DATA: l_tab_name TYPE string.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_tab_name = '(SAPLKKBL)IT_COLLECT01[]'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ASSIGN (l_tab_name) TO &amp;lt;fs_tab1&amp;gt;.&lt;br /&gt;  IF &amp;lt;fs_tab1&amp;gt; IS ASSIGNED.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    &amp;lt;fs_tab1&amp;gt; = &amp;lt;ft_tab&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " top_of_list&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-8763033607644409336?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/8763033607644409336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/03/classical-alv-change-subtotal-ii-for.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/8763033607644409336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/8763033607644409336'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/03/classical-alv-change-subtotal-ii-for.html' title='Classical ALV: Change Subtotal - II for Print'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2377176169612719771</id><published>2009-02-10T20:18:00.002-06:00</published><updated>2009-02-10T20:24:11.875-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel Formatting'/><title type='text'>ABAP and Excel - Formatted Files with XML</title><content type='html'>This is one of my published blogs on the &lt;a class='ahover' href="https://www.sdn.sap.com/irj/scn" rel="nofollow"&gt;SAP Community Network&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This blog show a way to generate the formatted excel files using the XML. From release 620, ABAP has provided us a way to transform our data using the XML transformation. We can very use the XML to generate the formatted Excel File.&lt;br /&gt;&lt;br /&gt;Follow:&lt;br /&gt;&lt;a class='ahover' href="https://weblogs.sdn.sap.com/pub/wlg/13092" rel="nofollow"&gt;ABAP and Excel - Create Formatted Excel using XML&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2377176169612719771?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2377176169612719771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/02/abap-and-excel-formatted-files-with-xml.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2377176169612719771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2377176169612719771'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/02/abap-and-excel-formatted-files-with-xml.html' title='ABAP and Excel - Formatted Files with XML'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-3527288581333488536</id><published>2009-02-09T19:45:00.003-06:00</published><updated>2009-02-09T20:00:13.619-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 5 : Get Note attachment contents</title><content type='html'>&lt;div class="subtitle"&gt;Shows how to get the contents of the NOTE attachements&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the previous post of this series we have seen:&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html"&gt;Generic Object Services (GOS) Part 1 : Add New Option in the Toolbar&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/11/generic-object-services-gos-toolbar.html"&gt;Generic Object Services (GOS) Part 2 : Handle added Service in the Toolbar &lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar.html"&gt;Generic Object Services (GOS) Part 3 : Add toolbar in Z program&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar_03.html"&gt;Generic Object Services (GOS) Part 4 : Get Attachements&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today, we will see how to get the contents of the NOTE attachements.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sometimes, we need to give the options for the attachement List when we design the some application with GOS toolbar. We will use the static method READ_LINKS from the class CL_BINARY_RELATION.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Read the GOS attachments&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_GOS_ATT&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Read the GOS attachments&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_gos_note.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selection Screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;PARAMETERS: p_matnr TYPE mara-matnr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*---------&lt;br /&gt;* Get all the NOTE attached to Business object&lt;br /&gt;*---------&lt;br /&gt;*&lt;br /&gt;* buseinss object key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: gs_lpor TYPE sibflporb.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  gs_lpor-instid = p_matnr.&lt;br /&gt;  gs_lpor-typeid = 'BUS1001006'.&lt;br /&gt;  gs_lpor-catid  = 'BO'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* attachment type selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lt_relat TYPE obl_t_relt,&lt;br /&gt;        la_relat LIKE LINE OF lt_relat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_relat-sign = 'I'.&lt;br /&gt;  la_relat-option = 'EQ'.&lt;br /&gt;  la_relat-low = 'NOTE'.&lt;br /&gt;  APPEND la_relat TO lt_relat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Read the links&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: t_links TYPE obl_t_link,&lt;br /&gt;        la_links LIKE LINE OF t_links.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lo_root TYPE REF TO cx_root.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  TRY.&lt;br /&gt;      CALL METHOD cl_binary_relation=&amp;gt;read_links&lt;br /&gt;        EXPORTING&lt;br /&gt;          is_object           = gs_lpor&lt;br /&gt;          it_relation_options = lt_relat&lt;br /&gt;        IMPORTING&lt;br /&gt;          et_links            = t_links.&lt;br /&gt;    CATCH cx_root INTO lo_root.&lt;br /&gt;  ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*---------&lt;br /&gt;* Read NOTE contents&lt;br /&gt;*---------&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA l_folder_id TYPE soodk.&lt;br /&gt;  DATA l_object_id TYPE soodk.&lt;br /&gt;  DATA document_id       TYPE sofmk.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get document id&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  READ TABLE t_links INTO la_links INDEX 1.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  document_id = la_links-instid_b.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set folder&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_folder_id-objtp = document_id-foltp.&lt;br /&gt;  l_folder_id-objyr = document_id-folyr.&lt;br /&gt;  l_folder_id-objno = document_id-folno.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set Object&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_object_id-objtp = document_id-doctp.&lt;br /&gt;  l_object_id-objyr = document_id-docyr.&lt;br /&gt;  l_object_id-objno = document_id-docno.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Read the document content&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA document_content  TYPE STANDARD TABLE OF soli.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'SO_OBJECT_READ'&lt;br /&gt;    EXPORTING&lt;br /&gt;      folder_id                  = l_folder_id&lt;br /&gt;      object_id                  = l_object_id&lt;br /&gt;    TABLES&lt;br /&gt;      objcont                    = document_content&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      active_user_not_exist      = 1&lt;br /&gt;      communication_failure      = 2&lt;br /&gt;      component_not_available    = 3&lt;br /&gt;      folder_not_exist           = 4&lt;br /&gt;      folder_no_authorization    = 5&lt;br /&gt;      object_not_exist           = 6&lt;br /&gt;      object_no_authorization    = 7&lt;br /&gt;      operation_no_authorization = 8&lt;br /&gt;      owner_not_exist            = 9&lt;br /&gt;      parameter_error            = 10&lt;br /&gt;      substitute_not_active      = 11&lt;br /&gt;      substitute_not_defined     = 12&lt;br /&gt;      system_failure             = 13&lt;br /&gt;      x_error                    = 14&lt;br /&gt;      OTHERS                     = 15.&lt;br /&gt;  IF sy-subrc NE 0.&lt;br /&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;br /&gt;To test this program:&lt;br /&gt;Go to MM02&lt;br /&gt;Enter Material and go to Basic data view 1&lt;br /&gt;In GOS toolbar, Create &gt; Note&lt;br /&gt;&lt;br /&gt;Now, run the above program to get the attached NOTE contents.&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-3527288581333488536?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/3527288581333488536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar_09.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3527288581333488536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/3527288581333488536'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar_09.html' title='Generic Object Services (GOS) Toolbar Part 5 : Get Note attachment contents'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2533188178828958292</id><published>2009-02-03T18:18:00.004-06:00</published><updated>2009-02-03T18:23:55.118-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 4 : Get Attachements</title><content type='html'>&lt;div class="subtitle"&gt;Shows how to get the Attachement details attached to the GOS toolbar&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the previous post of this series we have seen:&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html"&gt;Generic Object Services (GOS) Part 1 : Add New Option in the Toolbar&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/11/generic-object-services-gos-toolbar.html"&gt;Generic Object Services (GOS) Part 2 : Handle added Service in the Toolbar &lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar.html"&gt;Generic Object Services (GOS) Part 3 : Add toolbar in Z program&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Today, we will see how to get the attachement details. &lt;br /&gt;&lt;br /&gt;We will use the static method READ_LINKS from the class CL_BINARY_RELATION. We have to pass what kind of the objects we want to get back from the all the attachements like Notes, Attachment, External document etc.&lt;br /&gt;&lt;br /&gt;This code will show how to get the NOTES attachments from the GOS toolbar.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to get the GOS attachments NOTES&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_GOS_ATT&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Read the GOS attachments&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_gos_note.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selection Screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;PARAMETERS: p_matnr TYPE mara-matnr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*---------&lt;br /&gt;* Get all the NOTE attached to Business object&lt;br /&gt;*---------&lt;br /&gt;*&lt;br /&gt;* buseinss object key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: gs_lpor TYPE sibflporb.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  gs_lpor-instid = p_matnr.&lt;br /&gt;  gs_lpor-typeid = 'BUS1001006'.&lt;br /&gt;  gs_lpor-catid  = 'BO'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* attachment type selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lt_relat TYPE obl_t_relt,&lt;br /&gt;        la_relat LIKE LINE OF lt_relat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_relat-sign = 'I'.&lt;br /&gt;  la_relat-option = 'EQ'.&lt;br /&gt;  la_relat-low = 'NOTE'. "For notes&lt;br /&gt;  APPEND la_relat TO lt_relat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Read the links&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: t_links TYPE obl_t_link,&lt;br /&gt;        la_links LIKE LINE OF t_links.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lo_root TYPE REF TO cx_root.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  TRY.&lt;br /&gt;      CALL METHOD cl_binary_relation=&amp;gt;read_links&lt;br /&gt;        EXPORTING&lt;br /&gt;          is_object           = gs_lpor&lt;br /&gt;          it_relation_options = lt_relat&lt;br /&gt;        IMPORTING&lt;br /&gt;          et_links            = t_links.&lt;br /&gt;    CATCH cx_root INTO lo_root.&lt;br /&gt;  ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;To test this program:&lt;br /&gt;Go to MM02&lt;br /&gt;Enter Material and go to Basic data view 1&lt;br /&gt;In GOS toolbar, Create &gt; Note&lt;br /&gt;&lt;br /&gt;Now, run the above program to get the attachment details.&lt;br /&gt;&lt;br /&gt;The same way we can select attachements by adding the relation option ATTA.&lt;br /&gt;Like:&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to get the GOS attachments&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_relat-sign = 'I'.&lt;br /&gt;  la_relat-option = 'EQ'.&lt;br /&gt;  la_relat-low = 'ATTA'.     "Attachements&lt;br /&gt;  APPEND la_relat TO lt_relat.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2533188178828958292?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2533188178828958292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar_03.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2533188178828958292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2533188178828958292'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar_03.html' title='Generic Object Services (GOS) Toolbar Part 4 : Get Attachements'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-2514430462401036566</id><published>2009-02-02T17:41:00.004-06:00</published><updated>2009-02-02T17:46:05.776-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 3 : Add toolbar in Custom Program</title><content type='html'>&lt;div class="subtitle"&gt;Shows the code for how to add Generic Object service Toolbar in the Z program&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the previous post of this series we have seen:&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html"&gt;Generic Object Services (GOS) Part 1 : Add New Option in the Toolbar&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/11/generic-object-services-gos-toolbar.html"&gt;Generic Object Services (GOS) Part 2 : Handle added Service in the Toolbar &lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Today, we will see how to get the GOS toolbar in the custom Report. &lt;br /&gt;&lt;br /&gt;GOS toolbar works on the Business Object. To be able get GOS toolbar, we need to have a Business Object and Business Object Key. For example, to get the GOS toolbar for the customer, we need Business object KNA1 and customer number as the key. So, if we want to have a GOS toolbar in our custom transaction than we need to have a key before generating that. This is the reason; we don’t have the GOS toolbar option in the standard SAP Create transactions like: XD01, VA01, MM01 and so on.&lt;br /&gt;&lt;br /&gt;This test program will provide us the GOS toolbar for the Customer in our custom program (Z program). This will provide us all the functionality of the GOS toolbar which are available in the XD02, XD03 transaction.&lt;br /&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Add GOS toolbar to Custom program&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_GOS&lt;br /&gt;*&amp;&lt;br /&gt;*&amp; To Generate GOS toolbar in the Custom Transaction&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_gos.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lo_manager  TYPE REF TO cl_gos_manager,&lt;br /&gt;      la_obj      TYPE borident.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;PARAMETERS: p_kunnr TYPE kna1-kunnr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set object Key&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_obj-objtype = 'KNA1'.&lt;br /&gt;  la_obj-objkey  = p_kunnr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* GOS toolbar&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_manager&lt;br /&gt;    EXPORTING&lt;br /&gt;      is_object    = la_obj&lt;br /&gt;      ip_no_commit = space&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      OTHERS = 1.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* To generate output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  WRITE: 'GOS test for Customer'.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Now, we will get the GOS toolbar which will look like this:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SYeFInlLQ2I/AAAAAAAAA2M/o7Xg5Qv93RE/s1600-h/31+GOS+in+custom.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 255px; height: 221px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SYeFInlLQ2I/AAAAAAAAA2M/o7Xg5Qv93RE/s400/31+GOS+in+custom.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5298349869735035746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-2514430462401036566?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/2514430462401036566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2514430462401036566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/2514430462401036566'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2009/02/generic-object-services-gos-toolbar.html' title='Generic Object Services (GOS) Toolbar Part 3 : Add toolbar in Custom Program'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Pj9z40ys5GI/SYeFInlLQ2I/AAAAAAAAA2M/o7Xg5Qv93RE/s72-c/31+GOS+in+custom.png' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-484888022518935112</id><published>2008-12-23T20:32:00.005-06:00</published><updated>2008-12-23T20:49:48.985-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic ITAB'/><title type='text'>Dynamic Internal Table</title><content type='html'>&lt;div class="subtitle"&gt;Describes a way to create a dynamic internal table from coding. This is also can be used when RTTS is not supported or class CL_ALV_TABLE_CREATE is not available.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Previously, we have seen:&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table Creation using RTTS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/10/dynamic-internal-table-with-deep.html"&gt;Dynamic Internal Table with Deep structure using RTTS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/11/dynamic-internal-table-creation-using.html"&gt;Dynamic Internal Table creation using class CL_ALV_TABLE_CREATE&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Recently, one of my friends asked me for the solution to create Internal Table. The problem was his system was not able to support the RTTS nor it has the class CL_ALV_TABLE_CREATE. Actually, I had developed this solution in early days when I was working on system 4.6B where I haven't RTTS nor the ALV class.&lt;br /&gt;&lt;br /&gt;Here is the solution:&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Generate Dynamic ITAB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZDYN_ITAB_OLD&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Fill the Subroutine Pool source&lt;br /&gt;*&amp; Generate Subroutine Pool&lt;br /&gt;*&amp; Call the Sobroutine to create ITAB&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  zdyn_itab_old.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: dy_table TYPE REF TO data,&lt;br /&gt;      dy_line  TYPE REF TO data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;dyn_table&amp;gt; TYPE STANDARD TABLE,&lt;br /&gt;               &amp;lt;dyn_wa&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;fs&amp;gt; TYPE ANY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* To generate the Dyanmic table with the COLOR&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: ls_source TYPE string.&lt;br /&gt;DATA: lt_source LIKE STANDARD TABLE OF ls_source WITH HEADER LINE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: l_name LIKE sy-repid.&lt;br /&gt;DATA: l_message(240) TYPE c,&lt;br /&gt;      l_line TYPE i,&lt;br /&gt;      l_word(72) TYPE c.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: l_form(30) TYPE c VALUE 'TABLE_CREATE'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*.....................................................................&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Subroutine definition&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lt_source = 'REPORT ZTEST_SUBROUTINE_POOL.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* From Begin&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lt_source = 'FORM  TABLE_CREATE USING I_FS TYPE ANY.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Table definition begin&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lt_source = 'DATA: BEGIN OF LT_GENTAB OCCURS 0.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'DATA: BUKRS TYPE BUKRS. '.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'DATA: BKTXT TYPE BKTXT. '.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'DATA: END OF LT_GENTAB.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'DATA: POINTER TYPE REF TO DATA.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'CREATE DATA POINTER LIKE STANDARD TABLE OF LT_GENTAB.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;  lt_source = 'I_FS = POINTER.'.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Form End&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lt_source = 'ENDFORM. '.&lt;br /&gt;  APPEND lt_source.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Subroutine Pool name&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_name = 'ZTEST_SUBROUTINE_POOL'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Generate Subroutine&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CATCH SYSTEM-EXCEPTIONS generate_subpool_dir_full = 9.&lt;br /&gt;    GENERATE SUBROUTINE POOL lt_source NAME l_name&lt;br /&gt;             MESSAGE l_message LINE l_line WORD l_word."#EC CI_GENERATE&lt;br /&gt;  ENDCATCH.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Error handling&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF NOT l_message IS INITIAL.&lt;br /&gt;    MESSAGE e000(0k) WITH l_message l_line l_word.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* data reference&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ASSIGN dy_table TO &amp;lt;fs&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Call the subroutine&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PERFORM (l_form) IN PROGRAM (l_name) USING &amp;lt;fs&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Get the reference of the data and assign to field symbol&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ASSIGN dy_table-&amp;gt;* TO &amp;lt;dyn_table&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Create dynamic work area and assign to FS&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE DATA dy_line LIKE LINE OF &amp;lt;dyn_table&amp;gt;.&lt;br /&gt;  ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-484888022518935112?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/484888022518935112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/12/dynamic-internal-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/484888022518935112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/484888022518935112'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/12/dynamic-internal-table.html' title='Dynamic Internal Table'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4252218869233885827</id><published>2008-12-02T20:31:00.005-06:00</published><updated>2008-12-23T21:18:26.260-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SALV Tutorial'/><title type='text'>SALV Table 10 - Editable SALV Model (Overcome the restriction of SALV Model)</title><content type='html'>This is one of my published blog on the &lt;a class='ahover' href="https://www.sdn.sap.com/irj/scn" rel="nofollow"&gt;SAP Community Network&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In this blog, I described a way to overcome the restrictions of SALV models.&lt;br /&gt;&lt;br /&gt;Follow:&lt;br /&gt;&lt;a class='ahover' href="https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/12187" rel="nofollow"&gt;Power of ABAP Objects: Overcome the Restrictions of SALV Model&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is only possible because of the power of the ABAP objects which gives us the access to the protected attributes in the derived child class.&lt;br /&gt;&lt;br /&gt;Warning: Here I am trying to overcome the restriction and accessing the SALV attributes which SAP has not intented to expose to outside world and it made it protected. Read Thomas Jung's warning below the post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4252218869233885827?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4252218869233885827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/12/salv-table-10-editable-salv-model.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4252218869233885827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4252218869233885827'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/12/salv-table-10-editable-salv-model.html' title='SALV Table 10 - Editable SALV Model (Overcome the restriction of SALV Model)'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-614074380842660801</id><published>2008-11-24T19:14:00.007-06:00</published><updated>2008-12-23T21:48:14.094-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Others'/><title type='text'>Google Search Wiki - Suggestion &amp; Comment about help-abap.blogspot.com</title><content type='html'>&lt;div class="subtitle"&gt;Google SearchWiki allows users to give Suggestion and Votes to the Webpages&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Google has started a new service called &lt;a href="http://googlesystem.blogspot.com/2008/10/google-searchwiki.html" rel="nofollow"&gt;Google SearchWiki&lt;/a&gt; to give suggestion, votes annonate the web pages. &lt;br /&gt;&lt;br /&gt;This is the screenshot generated by searching &lt;a href="http://www.google.com/search?q=help-abap.blogspot.com" rel="nofollow"&gt;help-abap.blogspot.com&lt;/a&gt; in google.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SStU3SemSNI/AAAAAAAAAv4/QWmX0vJyA9U/s1600-h/google_wiki.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 204px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SStU3SemSNI/AAAAAAAAAv4/QWmX0vJyA9U/s400/google_wiki.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5272401097597012178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Log in to your google account and test Google SearchWiki &lt;a href="http://www.google.com/search?q=help-abap.blogspot.com" rel="nofollow"&gt;here&lt;/a&gt; for help-abap.blogspot.com and vote for your favourite blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-614074380842660801?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/614074380842660801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/11/google-search-wiki-suggestion-comment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/614074380842660801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/614074380842660801'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/11/google-search-wiki-suggestion-comment.html' title='Google Search Wiki - Suggestion &amp; Comment about help-abap.blogspot.com'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Pj9z40ys5GI/SStU3SemSNI/AAAAAAAAAv4/QWmX0vJyA9U/s72-c/google_wiki.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4106599672139048016</id><published>2008-11-19T22:02:00.003-06:00</published><updated>2008-11-19T22:16:48.767-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic ITAB'/><title type='text'>Dynamic Internal Table Creation using class CL_ALV_TABLE_CREATE</title><content type='html'>&lt;div class="subtitle"&gt;Describes how to show the Dynamic Internal Table Creation using class CL_ALV_TABLE_CREATE&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In the post &lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table creation&lt;/a&gt; and &lt;a href="http://help-abap.blogspot.com/2008/10/dynamic-internal-table-with-deep.html"&gt;Dynamic Internal Table with Deep Structure&lt;/a&gt;, we have seen how we can use the RTTS - Run Time Type Services to create dynamic internal table.&lt;br /&gt;&lt;br /&gt;Today we will eloborate another way of creating the dynamic internal table. We will see how we can use the class CL_ALV_TABLE_CREATE to create a dynamic internal table for ALV.&lt;br /&gt;&lt;br /&gt;Basic pricipal would be, we need to fill the field catalog table and pass it to static method CREATE_DYNAMIC_TABLE from class CL_ALV_TABLE_CREATE.&lt;br /&gt;&lt;br /&gt;We will use the same example as the reference in the post &lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table creation&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Here is the code snippet:&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Display ALV output on the Selection Screen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;br /&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZTEST_NP_DYN&lt;br /&gt;*&amp; This Code snippet shows how to&lt;br /&gt;*&amp;   Create Dynamic Internal Table using the fieldcatalog and &lt;br /&gt;*&amp;     class CL_ALV_TABLE_CREATE&lt;br /&gt;*&amp;   Dynamic Selection of data&lt;br /&gt;*&amp;   Accessing Dynamic data selection&lt;br /&gt;*&amp;   Displaying Dynamic internal table in ALV&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_np_dyn.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lt_fieldcat TYPE lvc_t_fcat,&lt;br /&gt;      la_fieldcat TYPE lvc_s_fcat,&lt;br /&gt;      lo_table    TYPE REF TO data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lf_months  TYPE monat,&lt;br /&gt;      lf_run_mon TYPE monat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Dynamic Selection fields&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPES: BEGIN OF ty_fields,&lt;br /&gt;       field TYPE char30,&lt;br /&gt;       END   OF ty_fields.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA:  lt_fields TYPE STANDARD TABLE OF ty_fields,&lt;br /&gt;       la_fields TYPE ty_fields.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* field symbols to access the dynamic table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FIELD-SYMBOLS: &amp;lt;f_tab&amp;gt;   TYPE ANY TABLE,&lt;br /&gt;               &amp;lt;f_line&amp;gt;  TYPE ANY,&lt;br /&gt;               &amp;lt;f_field&amp;gt; TYPE ANY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selection Screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;PARAMETERS: p_mon_fr TYPE monat,&lt;br /&gt;            p_mon_to TYPE monat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* 1. Adding fields in the field catalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_fieldcat-fieldname = 'KSTAR'.&lt;br /&gt;  la_fieldcat-datatype  = 'CHAR'.&lt;br /&gt;  la_fieldcat-outputlen = 10.&lt;br /&gt;  APPEND la_fieldcat TO lt_fieldcat.&lt;br /&gt;  CLEAR  la_fieldcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* 2. Adding required fields based on the selection months&lt;br /&gt;* Determining Number of fields&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lf_months = ( p_mon_to - p_mon_fr ) + 1.&lt;br /&gt;  lf_run_mon = p_mon_fr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DO lf_months TIMES.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   Field name&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CONCATENATE 'WTG0' lf_run_mon INTO la_fieldcat-fieldname.&lt;br /&gt;    la_fieldcat-datatype  = 'CURR'.&lt;br /&gt;    la_fieldcat-outputlen = 17.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Filling the fieldcatalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    APPEND la_fieldcat TO lt_fieldcat.&lt;br /&gt;    CLEAR  la_fieldcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lf_run_mon = lf_run_mon + 1.&lt;br /&gt;  ENDDO.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Calling method to generate the dynamic internal table based on&lt;br /&gt;* ALV field catalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  cl_alv_table_create=&amp;gt;create_dynamic_table(&lt;br /&gt;    EXPORTING&lt;br /&gt;      it_fieldcatalog = lt_fieldcat&lt;br /&gt;    IMPORTING&lt;br /&gt;      ep_table = lo_table ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ASSIGN lo_table-&amp;gt;* TO &amp;lt;f_tab&amp;gt;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*...............Dynamic Selection.............................*$*$*&lt;br /&gt;* Filling up the table for the Selection fields of Select Query&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT lt_fieldcat INTO la_fieldcat.&lt;br /&gt;    la_fields-field = la_fieldcat-fieldname.&lt;br /&gt;    APPEND la_fields TO lt_fields.&lt;br /&gt;    CLEAR: la_fieldcat, la_fields.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selecting data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  SELECT (lt_fields)&lt;br /&gt;         INTO  TABLE &amp;lt;f_tab&amp;gt;&lt;br /&gt;         FROM  cosp&lt;br /&gt;         UP TO 10 ROWS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*...............Accessing dynamic table.......................*$*$*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT &amp;lt;f_tab&amp;gt; ASSIGNING &amp;lt;f_line&amp;gt;.&lt;br /&gt;    ASSIGN COMPONENT 'WTG004' OF STRUCTURE &amp;lt;f_line&amp;gt; TO &amp;lt;f_field&amp;gt;.&lt;br /&gt;    &amp;lt;f_field&amp;gt; = '100.00'.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*$*$*...............Displaying using SALV model...................*$*$*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lo_alv TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  TRY.&lt;br /&gt;      cl_salv_table=&amp;gt;factory(&lt;br /&gt;        EXPORTING&lt;br /&gt;          list_display = abap_false&lt;br /&gt;        IMPORTING&lt;br /&gt;          r_salv_table = lo_alv&lt;br /&gt;        CHANGING&lt;br /&gt;          t_table      = &amp;lt;f_tab&amp;gt; ).&lt;br /&gt;    CATCH cx_salv_msg .&lt;br /&gt;  ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;I would suggest to use the RTTS to create dynamic internal table as depicted in posts:&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table Creation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/10/dynamic-internal-table-with-deep.html"&gt;Dynamic Internal Table with Deep structure&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4106599672139048016?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4106599672139048016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/11/dynamic-internal-table-creation-using.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4106599672139048016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4106599672139048016'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/11/dynamic-internal-table-creation-using.html' title='Dynamic Internal Table Creation using class CL_ALV_TABLE_CREATE'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-341898501185689732</id><published>2008-11-18T19:35:00.010-06:00</published><updated>2009-12-15T12:46:11.583-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 2 : Handle added Service in the Toolbar</title><content type='html'>&lt;div class="subtitle"&gt;Describes the way to handle the added service in the Generic Object service Toolbar&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As discussed in the post &lt;a href="http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html"&gt;Generic Object Services (GOS) Toolbar Part 1 : Add New Option in the Toolbar&lt;/a&gt;, today we will see how to call our custom business logic in the added new Service in GOS Toolbar. To be able to process custom logic in the GOS toolbar service, we need to inherit out service class from the GOS generic service class &lt;strong&gt;CL_GOS_SERVICE&lt;/strong&gt; and put our logic in the inherited class.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Steps to follow:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;1. &lt;/strong&gt;Inherit a class from the CL_GOS_SERVICE:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SSNuxpZA04I/AAAAAAAAAvA/Cvh_r-0H6_w/s1600-h/10+Class+SO+List.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 207px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SSNuxpZA04I/AAAAAAAAAvA/Cvh_r-0H6_w/s400/10+Class+SO+List.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270177788157023106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. &lt;/strong&gt;Maintain the Entry in the Table SGOSATTR as discussed in the &lt;a href="http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html"&gt;Generic Object Services (GOS) Toolbar Part 1 : Add New Option in the Toolbar&lt;/a&gt;: &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNvFs0NAVI/AAAAAAAAAvI/G4fMi7pxMGA/s1600-h/10_1+EntrySM30.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNvFs0NAVI/AAAAAAAAAvI/G4fMi7pxMGA/s400/10_1+EntrySM30.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270178132673757522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. &lt;/strong&gt;Redefine the Method EXECUTE to process our custom business logic. Redefine the Method and activate it. For demo purpose, we will not implement any logic in this but you can create a ALV or kind of list as we get in the Attachement List.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SSNvarN8dMI/AAAAAAAAAvQ/tMudYf4VYBA/s1600-h/11+Redefin+Execute.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 126px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SSNvarN8dMI/AAAAAAAAAvQ/tMudYf4VYBA/s400/11+Redefin+Execute.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270178493022106818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, when we access the GOS toolbar, you will see the option “Sales Order List”. &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNv0-aoknI/AAAAAAAAAvY/Hpc_YHLag14/s1600-h/12+GOS+option.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 236px; height: 247px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNv0-aoknI/AAAAAAAAAvY/Hpc_YHLag14/s400/12+GOS+option.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270178944852202098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By accessing this option, you will get the empty screen like this:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SSNv7_7GJ2I/AAAAAAAAAvg/V3RSdiwPUSc/s1600-h/13+Empty+Controller.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 165px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SSNv7_7GJ2I/AAAAAAAAAvg/V3RSdiwPUSc/s400/13+Empty+Controller.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270179065515878242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You may have noticed that this Option is coming in all the GOS toolbars i.e. Toolbar in XD02 and XK02 and so on. To restrict the GOS toolbar service to only particular transaction, we need to redefine the method CHECK_STATUS.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNwW9M0ohI/AAAAAAAAAvo/51BQ7Rm3LeQ/s1600-h/14+Redefine+Check_Status.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 31px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SSNwW9M0ohI/AAAAAAAAAvo/51BQ7Rm3LeQ/s400/14+Redefine+Check_Status.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270179528641389074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Code snippet for the CHECK_STATUS method:&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Redefine CHECK_STATUS&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Redefinition of the Method CHECK_STATUS&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;METHOD CHECK_STATUS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Service active for customer &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  IF IS_LPORB-TYPEID = 'KNA1'.&lt;br /&gt;    EP_STATUS = MP_STATUS_ACTIVE.&lt;br /&gt;  ELSE.&lt;br /&gt;    EP_STATUS = MP_STATUS_INVISIBLE.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDMETHOD.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Now, we will only get the service only in the XD02 and XD03 transactions.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-341898501185689732?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/341898501185689732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/11/generic-object-services-gos-toolbar.html#comment-form' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/341898501185689732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/341898501185689732'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/11/generic-object-services-gos-toolbar.html' title='Generic Object Services (GOS) Toolbar Part 2 : Handle added Service in the Toolbar'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Pj9z40ys5GI/SSNuxpZA04I/AAAAAAAAAvA/Cvh_r-0H6_w/s72-c/10+Class+SO+List.png' height='72' width='72'/><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-6295457972975497599</id><published>2008-10-30T18:37:00.013-05:00</published><updated>2008-12-23T21:46:28.956-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic Object Service (GOS)'/><title type='text'>Generic Object Services (GOS) Toolbar Part 1 : Add New Option in the Toolbar</title><content type='html'>&lt;div class="subtitle"&gt;Eloborates the option to add a new Menu Entry in the GOS toolbar&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Generic Object Services (GOS) Toolbar offers the functions which are common to many SAP applications. This powerful toolbar provides much functionality like create attachments, notes, mails; send mails; list attachments and many more. You can find more functionality on Generic Object Services at SAP Help on &lt;a href="http://help.sap.com/saphelp_46c/helpdata/en/be/3fe63659241157e10000009b38f889/frameset.htm" target="_blank" rel="nofollow"&gt;Generic Object Services&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The default GOS toolbar options are somewhat like this:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQpGsDcVAcI/AAAAAAAAAtM/hJwhzXB_tQ4/s1600-h/0+GOS+toolbar.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 230px; height: 211px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQpGsDcVAcI/AAAAAAAAAtM/hJwhzXB_tQ4/s400/0+GOS+toolbar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263096837188157890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sometimes, we need to add some new toolbar entries to facilitate the business requirement. For example, in the Generic object toolbar add the new option like "Document List" which is generic to all business objects and of course we need to handle that. In this post, we will see the steps and rules to be followed to add a new Entry in the toolbar. In the next, post we will see how we can handle the added menu option to fulfill our custom requirement.&lt;br /&gt;&lt;br /&gt;To be more specific in explaining the requirement, we will take a business requirement to add a new menu "Sales Orders List" for the GOS toolbar for Customer Master. At first we will see how we can just bring this menu option at very last position. Like:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpHCF1P-TI/AAAAAAAAAtU/Ah1-AxRZIYs/s1600-h/3+new+at+last.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 230px; height: 246px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpHCF1P-TI/AAAAAAAAAtU/Ah1-AxRZIYs/s400/3+new+at+last.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263097215786678578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To bring the new entry (menu option) in this GOS toolbar, we need to maintain that in the table &lt;strong&gt;SGOSATTR&lt;/strong&gt;. This table can be maintained using SM30. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpHTkwk3pI/AAAAAAAAAtc/tvk_FBBzGuY/s1600-h/1+New+entry.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 222px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpHTkwk3pI/AAAAAAAAAtc/tvk_FBBzGuY/s400/1+New+entry.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263097516146351762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Class for Gen. Services&lt;/strong&gt;: This is the driver class when we select the object service (menu option) from the GOS toolbar. For time being we will keep this as the CL_GOS_SRV_ATTACHMENT_LIST.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Service Type:&lt;/strong&gt; We will select 1 because we want Single entry menu option on the GOS toolbar. There are options to create a main menu entry and submenus under that main menu by selecting proper service type.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Next Service:&lt;/strong&gt; We will clear the value in this since we want our button at very last level. This next service field must be set when we need to put the custom option in between other options.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; We will select this, since we want to generate our output in the Custom Container.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Commit Work:&lt;/strong&gt; We will not select this option because we don’t want to commit the work.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Along with creating a new entry this way, we need to set this service as next service of the previous service. In this case, our new service will come just under the "Help for object services" we need to modify that service like this:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpH3Lprh4I/AAAAAAAAAtk/n_Gqt4Q0RSY/s1600-h/2+modify+upper+entry.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 230px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpH3Lprh4I/AAAAAAAAAtk/n_Gqt4Q0RSY/s400/2+modify+upper+entry.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263098127881832322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By selecting this option Sales Orders list from the GOS toolbar, we will see the attachment list being generated by the class CL_GOS_SRV_ATTACHMENT_LIST:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQpIQnlzjcI/AAAAAAAAAts/IHPGrZjdS7A/s1600-h/5+output.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 247px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQpIQnlzjcI/AAAAAAAAAts/IHPGrZjdS7A/s400/5+output.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263098564878503362" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;NOTE:&lt;/em&gt; You might see the option grayed out if you don’t have any attachment created for that particular customer. To create: Select the Create.. &gt; Create Attachment. Select any file from your PC to add as attachment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To be able to bring that option in between of others, we need to play around with the Next Service value of the buttons. For example, I want to put my button just under the "Attachment List" option and above "Private Note". &lt;br /&gt;For this we need to:&lt;br /&gt;&lt;strong&gt;1.&lt;/strong&gt;Set the new option as the next Service for the "Attachment List"&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpI3mIkBBI/AAAAAAAAAt0/kQhOPRP5AqE/s1600-h/4+1+attach.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 347px; height: 205px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpI3mIkBBI/AAAAAAAAAt0/kQhOPRP5AqE/s400/4+1+attach.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263099234502312978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.&lt;/strong&gt;Set the “Private Note” as the next service for the new option&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpI_2V4IBI/AAAAAAAAAt8/s3buJu-YXko/s1600-h/4+2+new+option.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 324px; height: 206px;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SQpI_2V4IBI/AAAAAAAAAt8/s3buJu-YXko/s400/4+2+new+option.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263099376292077586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3.&lt;/strong&gt;Remove the next service from the option which will come at last. This is very &lt;em&gt;important&lt;/em&gt;. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpJGuQ0C_I/AAAAAAAAAuE/02E0Loq1vUA/s1600-h/4+3+last+service.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 312px; height: 206px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpJGuQ0C_I/AAAAAAAAAuE/02E0Loq1vUA/s400/4+3+last+service.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263099494382439410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After following these steps, the toolbar options will look like:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpJQVSxeFI/AAAAAAAAAuM/jAb6fVWrlAQ/s1600-h/4+4+output.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 231px; height: 233px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQpJQVSxeFI/AAAAAAAAAuM/jAb6fVWrlAQ/s400/4+4+output.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263099659478464594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the next post, we will see how we can use our custom class to generate our fully customized code i.e. Instead of the class CL_GOS_SRV_ATTACHMENT_LIST, we will use custom class ZCL_SO_LIST.&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-6295457972975497599?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/6295457972975497599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6295457972975497599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6295457972975497599'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/generic-object-services-gos-toolbar-add.html' title='Generic Object Services (GOS) Toolbar Part 1 : Add New Option in the Toolbar'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/SQpGsDcVAcI/AAAAAAAAAtM/hJwhzXB_tQ4/s72-c/0+GOS+toolbar.png' height='72' width='72'/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-365849213166659289</id><published>2008-10-23T07:19:00.008-05:00</published><updated>2008-12-23T21:44:59.446-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Output on Selection Screen'/><title type='text'>Display ALV report output in the SAME Selection Screen</title><content type='html'>&lt;div class="subtitle"&gt;Shows the way to dispaly the report output in the same selection screen using Docking Container and SLAV 2D Table display with minimal coding&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I was searching for the option to display the report output on the same selection-screen from quite a long time. SDN Forum thread &lt;a href="https://forums.sdn.sap.com/thread.jspa?threadID=1059161&amp;tstart=0" rel="nofollow"&gt;How can i display output in the same selection screen&lt;/a&gt; reminded me again to research on this topic.&lt;br /&gt;&lt;br /&gt;After a lot of analysis (and of course Trials-&amp;-Errors), I found the solution which requires minimal development. Before giving the solution, check out how it looks-&lt;br /&gt;&lt;br /&gt;When we start running the report, it will be a normal Selection Screen:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQBshnn6H1I/AAAAAAAAAmc/DLW98omuNg0/s1600-h/1+initial+screen.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 180px;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SQBshnn6H1I/AAAAAAAAAmc/DLW98omuNg0/s400/1+initial+screen.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260323689596591954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After executing the report, our output will overlay on the Selection Screen. And it will look like this:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQBsuBd7vRI/AAAAAAAAAmk/Gi_CWvoy4P4/s1600-h/2+with+output_s+2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 276px;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SQBsuBd7vRI/AAAAAAAAAmk/Gi_CWvoy4P4/s400/2+with+output_s+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260323902692506898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Doesn't it look good ?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Journey to find the solution:&lt;/strong&gt;&lt;br /&gt;After reading the problem in the thread, suddenly I got a strike: Why not to create a Docking Container and place the ALV inside it..!! &lt;br /&gt;&lt;br /&gt;I have started with placing the docking container in the INITIALIZATION event and the code to generate the ALV in the START-OF-SELECTION event. In this try, I got the docking container on the selection screen but no ALV inside of that docking container. Than I realize that I missed on of the basics of report programming - as soon as control goes to INITALIZATION all memory allocation will be destroyed and global data will be initialized. That's why I was not getting the ALV in the docking container. Selection screen was looking like this:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SQBtAqJ0KqI/AAAAAAAAAms/D3Hi9MT_yEU/s1600-h/3+Only+Dock.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 194px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SQBtAqJ0KqI/AAAAAAAAAms/D3Hi9MT_yEU/s400/3+Only+Dock.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260324222851623586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, I moved the ALV logic in the INITALIZATION event. After this try, I got the Docking container with the empty ALV - ALV with the field catalog but no Data. Here again, I have the same problem - all my data allocation got destroyed as soon as control come to INITALIZATION event. To overcome this I used the ABAP local memory. I exported my output table and imported back it into the INITALIZATION to initialize my ALV. Selection-screen was looking like this:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SQBtW9K7_fI/AAAAAAAAAm0/-bla7IS2na4/s1600-h/4+Empty+ALV.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 170px;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SQBtW9K7_fI/AAAAAAAAAm0/-bla7IS2na4/s400/4+Empty+ALV.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260324605913726450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is the code which will generate the output as shown in the second picture.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Display ALV output on the Selection Screen&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Generates the ALV on the Selection Screen itself&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  zalv_on_sel_screen.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*  Local class for report&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: t_data   TYPE STANDARD TABLE OF sflight,  " Output dat&lt;br /&gt;          r_carrid TYPE RANGE OF sflight-carrid.    " Select Option&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      get_data,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: lo_report TYPE REF TO lcl_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: w_carrid TYPE sflight-carrid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;** Selection Screen&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.&lt;br /&gt;SELECT-OPTIONS: s_carrid FOR w_carrid.&lt;br /&gt;SELECTION-SCREEN: END   OF BLOCK blk1.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;** Initialization&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;INITIALIZATION.&lt;br /&gt;  aaa = 'Selection Criteria'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* object for the report&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT lo_report.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* generate output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;generate_output( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;** Start of Selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Get data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  lo_report-&amp;gt;r_carrid = s_carrid[].&lt;br /&gt;  lo_report-&amp;gt;get_data( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;* Local Class Implementation&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_report IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD get_data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   data selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    SELECT * FROM sflight&lt;br /&gt;           INTO  TABLE me-&amp;gt;t_data&lt;br /&gt;           WHERE carrid IN s_carrid.&lt;br /&gt;    IF sy-dbcnt IS INITIAL.&lt;br /&gt;      MESSAGE s398(00) WITH 'No data selected'.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   export to memory&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    EXPORT data = me-&amp;gt;t_data TO MEMORY ID sy-cprog.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "get_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD generate_output.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   local data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_dock TYPE REF TO cl_gui_docking_container,&lt;br /&gt;          lo_cont TYPE REF TO cl_gui_container,&lt;br /&gt;          lo_alv  TYPE REF TO cl_salv_table.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   import output table from the memory and free afterwards&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    IMPORT data = me-&amp;gt;t_data FROM MEMORY ID sy-cprog.&lt;br /&gt;    FREE MEMORY ID sy-cprog.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Only if there is some data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CHECK me-&amp;gt;t_data IS NOT INITIAL.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Create a docking control at bottom&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CHECK lo_dock IS INITIAL.&lt;br /&gt;    CREATE OBJECT lo_dock&lt;br /&gt;      EXPORTING&lt;br /&gt;        repid     = sy-cprog&lt;br /&gt;        dynnr     = sy-dynnr&lt;br /&gt;        ratio     = 80&lt;br /&gt;        side      = cl_gui_docking_container=&amp;gt;dock_at_bottom&lt;br /&gt;        name      = 'DOCK_CONT'.&lt;br /&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;br /&gt;      MESSAGE 'Error in the Docking control' TYPE 'S'.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Create a SALV for output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CHECK lo_alv IS INITIAL.&lt;br /&gt;    TRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*       Narrow Casting: To initialize custom container from&lt;br /&gt;*       docking container&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;        lo_cont ?= lo_dock.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*       SALV Table Display on the Docking container&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;        CALL METHOD cl_salv_table=&amp;gt;factory&lt;br /&gt;          EXPORTING&lt;br /&gt;            list_display   = if_salv_c_bool_sap=&amp;gt;false&lt;br /&gt;            r_container    = lo_cont&lt;br /&gt;            container_name = 'DOCK_CONT'&lt;br /&gt;          IMPORTING&lt;br /&gt;            r_salv_table   = lo_alv&lt;br /&gt;          CHANGING&lt;br /&gt;            t_table        = me-&amp;gt;t_data.&lt;br /&gt;      CATCH cx_salv_msg .&lt;br /&gt;    ENDTRY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   Pf status&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: lo_functions TYPE REF TO cl_salv_functions_list.&lt;br /&gt;    lo_functions = lo_alv-&amp;gt;get_functions( ).&lt;br /&gt;    lo_functions-&amp;gt;set_default( abap_true ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   output display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    lo_alv-&amp;gt;display( ).&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "generate_output&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_report IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Steps to create an ALV on the Selection Screen, in summary :&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;Create docking container in the INITALIZATION event&lt;/li&gt;&lt;li&gt;Create ALV on that Docking container&lt;/li&gt;&lt;li&gt;After selecting all the data, export output table to ABAP memory&lt;/li&gt;&lt;li&gt;Before generating the output, import the output table from the memroy&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-365849213166659289?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/365849213166659289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/dispaly-alv-report-output-in-same.html#comment-form' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/365849213166659289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/365849213166659289'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/dispaly-alv-report-output-in-same.html' title='Display ALV report output in the SAME Selection Screen'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Pj9z40ys5GI/SQBshnn6H1I/AAAAAAAAAmc/DLW98omuNg0/s72-c/1+initial+screen.png' height='72' width='72'/><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-4133439795426201358</id><published>2008-10-22T19:26:00.001-05:00</published><updated>2008-10-22T20:18:24.674-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standard Table Display'/><title type='text'>Call a New Standard Table Display (SE16N) from Report</title><content type='html'>&lt;div class="subtitle"&gt;Shows another way to call the new Standard Table Display (SE16N), more efficient than calling SE16&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As we have seen in the previous post, how easy it is to call the &lt;a href="http://help-abap.blogspot.com/2008/10/call-standard-table-display-se16-from.html"&gt;Standard Table Display from a report&lt;/a&gt; program. Today, we will see the more powerful and more efficient way to call the Table Display from the Report. &lt;br /&gt;&lt;br /&gt;We will call the function module SE16N_INTERFACE to call the new standard table display.  &lt;br /&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to call SE16N from Report&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;  &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Describes a way to call the SE16n with the Selection from report.&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_tmp.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* data declaration for the FM&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: l_tab      TYPE se16n_tab,&lt;br /&gt;        t_sel      TYPE se16n_or_t,&lt;br /&gt;        la_sel     LIKE LINE OF t_sel,&lt;br /&gt;        t_sel_tab  TYPE se16n_or_seltab_t,&lt;br /&gt;        la_sel_tab LIKE LINE OF t_sel_tab.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Table name&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_tab = 'VBAK'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selection for VBELN&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_sel_tab-field   = 'VBELN'.&lt;br /&gt;  la_sel_tab-sign    = 'I'.&lt;br /&gt;  la_sel_tab-option  = 'BT'.&lt;br /&gt;  la_sel_tab-low     = '0000001000'.&lt;br /&gt;  la_sel_tab-high    = '0000002000 '.&lt;br /&gt;  APPEND la_sel_tab TO t_sel_tab.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Selection for ERDAT&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_sel_tab-field   = 'ERDAT'.&lt;br /&gt;  la_sel_tab-sign    = 'I'.&lt;br /&gt;  la_sel_tab-option  = 'BT'.&lt;br /&gt;  la_sel_tab-low     = '20081001'.&lt;br /&gt;  la_sel_tab-high    = sy-datum.&lt;br /&gt;  APPEND la_sel_tab TO t_sel_tab.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Fill the main selection table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_sel-pos = 1.&lt;br /&gt;  la_sel-seltab = t_sel_tab.&lt;br /&gt;  APPEND la_sel TO t_sel.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Function module for the SE16N&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'SE16N_INTERFACE'&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_tab                  = l_tab&lt;br /&gt;      i_clnt_dep             = 'X'&lt;br /&gt;    TABLES&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     IT_OUTPUT_FIELDS       =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      it_or_selfields        = t_sel&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      no_values              = 1&lt;br /&gt;      OTHERS                 = 2&lt;br /&gt;            .&lt;br /&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;br /&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The output would be like: &lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP6DrH_HCKI/AAAAAAAAAmU/y-HhwHn0QA4/s1600-h/SE16N.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP6DrH_HCKI/AAAAAAAAAmU/y-HhwHn0QA4/s400/SE16N.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259786191716681890" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;As we can from the code, here we have passed the Actual Field name instead of the parameter name of the report program. This makes it more powerful and more efficient compare to standard table display using SE16.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-4133439795426201358?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/4133439795426201358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/call-new-standard-table-display-se16n.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4133439795426201358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/4133439795426201358'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/call-new-standard-table-display-se16n.html' title='Call a New Standard Table Display (SE16N) from Report'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Pj9z40ys5GI/SP6DrH_HCKI/AAAAAAAAAmU/y-HhwHn0QA4/s72-c/SE16N.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-1373751750168210593</id><published>2008-10-21T20:08:00.004-05:00</published><updated>2008-10-21T20:30:15.996-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Standard Table Display'/><title type='text'>Call Standard Table Display (SE16) from Report</title><content type='html'>&lt;div class="subtitle"&gt;Eloborates the easiest way to call the Standard table display (SE16) from a Program&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Sometimes, we need to call the Standard Table display (SE16) from our report program. In option of this we can create a Small ALV program using the &lt;a href="http://help-abap.blogspot.com/2008/09/tutorials.html#SALVTAB"&gt;New SALV model&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;To call the Standard Table display, we can Submit the underlying program from our report. SAP creates a table dispaly report for all the database tables which can be viewed using the SE16. So, We can find that program name and Submit the program to call the Standard Table Display. This option does not seem to be the easiet way, as we have to find the underlying report name to call the SE16.&lt;br /&gt;&lt;br /&gt;Let's explore another option. Trasaction SE16 internally calls the function module RS_TABLE_LIST_CREATE to generate the output. Why not we also call that from our program to call the SE16.&lt;br /&gt;&lt;br /&gt;Here is the code snippet to call the SE16 using above said FM:&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to call SE16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Describes a way to call the SE16 with the Selection from report.&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT  ztest_tmp.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;  DATA: t_sel TYPE STANDARD TABLE OF rsparams  WITH HEADER LINE.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* VBELN&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  t_sel-selname = 'I1'.&lt;br /&gt;  t_sel-kind    = ' '.&lt;br /&gt;  t_sel-sign    = 'I'.&lt;br /&gt;  t_sel-option  = 'BT'.&lt;br /&gt;  t_sel-low     = '0000001000'.&lt;br /&gt;  t_sel-high    = '0000002000'.&lt;br /&gt;  APPEND t_sel.&lt;br /&gt;  CLEAR  t_sel.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* ERDAT&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  t_sel-selname = 'I2'.&lt;br /&gt;  t_sel-kind    = ' '.&lt;br /&gt;  t_sel-sign    = 'I'.&lt;br /&gt;  t_sel-option  = 'BT'.&lt;br /&gt;  t_sel-low     = '20081001'.&lt;br /&gt;  t_sel-high    = sy-datum.&lt;br /&gt;  APPEND t_sel.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Function module to call the SE16 list&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'RS_TABLE_LIST_CREATE'&lt;br /&gt;    EXPORTING&lt;br /&gt;      table_name               = 'VBAK'&lt;br /&gt;      action                   = 'ANZE'&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     WITHOUT_SUBMIT           = ' '&lt;br /&gt;*     GENERATION_FORCED        =&lt;br /&gt;*     NEW_SEL                  =&lt;br /&gt;*     NO_STRUCTURE_CHECK       = ' '&lt;br /&gt;*     DATA_EXIT                = ' '&lt;br /&gt;*   IMPORTING&lt;br /&gt;*     PROGNAME                 =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    TABLES&lt;br /&gt;      seltab                   = t_sel&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      table_is_structure       = 1&lt;br /&gt;      table_not_exists         = 2&lt;br /&gt;      db_not_exists            = 3&lt;br /&gt;      no_permission            = 4&lt;br /&gt;      no_change_allowed        = 5&lt;br /&gt;      OTHERS                   = 6&lt;br /&gt;            .&lt;br /&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;br /&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;It will generate an output somewhat like:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SP6CDapzEhI/AAAAAAAAAmM/vox6mHp8riI/s1600-h/se16.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SP6CDapzEhI/AAAAAAAAAmM/vox6mHp8riI/s400/se16.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259784410021171730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Disadvantages of SE16:&lt;/strong&gt;&lt;br /&gt;As we can see in the example code, instead of the Field name in the Selection Criteria table (T_SEL) we have to pass the Select Option name of the table selection screen. E.g. I1 for the Sales Document (VBELN) and I2 for the Creation Date (ERDAT). Sometimes, this Select-options may not present on the Selection screen when we call the SE16 and in that case we will not get the accurate result.&lt;br /&gt;&lt;br /&gt;So, we will explore on how to call SE16N for the Standard Table display.&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-1373751750168210593?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/1373751750168210593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/call-standard-table-display-se16-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1373751750168210593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/1373751750168210593'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/call-standard-table-display-se16-from.html' title='Call Standard Table Display (SE16) from Report'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Pj9z40ys5GI/SP6CDapzEhI/AAAAAAAAAmM/vox6mHp8riI/s72-c/se16.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-7734306900611415048</id><published>2008-10-20T21:04:00.008-05:00</published><updated>2008-10-20T21:31:59.389-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Table Control'/><title type='text'>Print Table Control data (with header)</title><content type='html'>&lt;div class="subtitle"&gt;Shows how to give an option to get a printout of the table control Data.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In SAP, we have a table control to give a felixibility to enter more than one record at a time. User enters the data and save it, inturn we save that data into the database - by direct update, or by using the BAPI or some data transfer mechanism.&lt;br /&gt;&lt;br /&gt;Today we will show easy it is to give an option to print the data in the table control. Users will definatly like the option and you will get good Return-on-Investment. For this purpose, we will use the FM FITRV_PRINT_TABLE_CONTROL_DATA to get the print out. This FM internally calls the ALV FM go generate an output. So, by using this FM, we are not only getting the print option but we are getting all the standard ALV functionality like Filtering, Excel download, layout settings etc.&lt;br /&gt;&lt;br /&gt;For my example, I have created a small table control which selects the data from the database and dispalys in the table control. I have provided an option to print that data by adding activating the GUI button of Print.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Pj9z40ys5GI/SP07Wc9Vu8I/AAAAAAAAAlk/Tw0bVGq41r0/s1600-h/5+print+button.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Pj9z40ys5GI/SP07Wc9Vu8I/AAAAAAAAAlk/Tw0bVGq41r0/s400/5+print+button.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259425196755237826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have added my code which uses the FM FITRV_PRINT_TABLE_CONTROL_DATA to generate the ALV output which can be printed.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet for printing Table Control Data&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;  Shows how to print the data from the table control&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Prints the Table control data&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM print_table_control_data .&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: l_callback TYPE sy-repid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  l_callback = sy-repid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'FITRV_PRINT_TABLE_CONTROL_DATA'&lt;br /&gt;    EXPORTING&lt;br /&gt;      table_control                        = tc_data&lt;br /&gt;      callback_program                     = l_callback&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     CALLBACK_TOP_OF_LIST                 =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      callback_top_of_page                 = 'TOP_OF_PAGE'&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     CALLBACK_END_OF_PAGE                 =&lt;br /&gt;*     CALLBACK_END_OF_LIST                 =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      optimize_column_width                = 'X'&lt;br /&gt;      get_curr_quan_fields_from_ddic       = 'X'&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*     WINDOW_TITLE                         =&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;      print_immediately                    = ' '&lt;br /&gt;    TABLES&lt;br /&gt;      print_data                           = itab&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      column_information_missing           = 1&lt;br /&gt;      printing_not_possible                = 2.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    " print_table_control_data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*    Generates the Top of page&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM top_of_page.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*** Top of page Report&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  WRITE: / 'Sales Order report'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    "top_of_page&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;When we press the button for the Print, it asks for the choice:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_Pj9z40ys5GI/SP08IyryTVI/AAAAAAAAAls/RFSU46ROT38/s1600-h/4+Print+option.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_Pj9z40ys5GI/SP08IyryTVI/AAAAAAAAAls/RFSU46ROT38/s400/4+Print+option.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259426061580651858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And by pressing the "Print Preview", we will get the output in ALV:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP08W7sNbYI/AAAAAAAAAl0/uTq5rSykQ-4/s1600-h/2+Table+control.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP08W7sNbYI/AAAAAAAAAl0/uTq5rSykQ-4/s400/2+Table+control.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259426304516517250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oops, we don't have the header for this ALV output. I have debugged the FM FITRV_PRINT_TABLE_CONTROL_DATA and found out that this FM only determines the Field heading if we have created our table control with reference to the "Dictionary Table" !!! Since, we have already created a screen with appropriate logic, it is not advisable to change the table control to refer to the dictionary table. So, we need to find a way to change the Fieldcatalog when we call this FM with the table control created with reference to internal table.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP0-8qGSlBI/AAAAAAAAAmE/SqZ6uOG5VZg/s1600-h/1+tab+selection.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Pj9z40ys5GI/SP0-8qGSlBI/AAAAAAAAAmE/SqZ6uOG5VZg/s400/1+tab+selection.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259429151652353042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To add the header in this output, we will use the FM REUSE_ALV_LIST_LAYOUT_INFO_GET to get the fieldcatalog of the ALV. We will modify that field catalog and use the FM REUSE_ALV_LIST_LAYOUT_INFO_SET to set the modified field catalog. We will use this logic in the subroutine which generates the TOP_OF_PAGE event.&lt;br /&gt;&lt;br /&gt;Here is the code which we will use in the TOP_OF_PAGE subroutine to change the fieldcatalog of the ALV.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet for the TOP-OF-PAGE to modify the field catalog&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt; &lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*    Generates the Top of page for the print&lt;br /&gt;*    Also creates the column header in the print&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM top_of_page.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*** Top of page Report&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  WRITE: / 'Sales Order report'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*** Modify column headers&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA:   lt_slis_fcat TYPE slis_t_fieldcat_alv,&lt;br /&gt;          la_fcat      LIKE LINE OF lt_slis_fcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* get the ALV field catalog from the ALV generated by the print&lt;br /&gt;* FM FITRV_PRINT_TABLE_CONTROL_DATA&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_GET'&lt;br /&gt;    IMPORTING&lt;br /&gt;      et_fieldcat   = lt_slis_fcat&lt;br /&gt;    EXCEPTIONS&lt;br /&gt;      no_infos      = 1&lt;br /&gt;      program_error = 2&lt;br /&gt;      OTHERS        = 3.&lt;br /&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;br /&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Modify the Field catalog&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  LOOP AT lt_slis_fcat INTO la_fcat.&lt;br /&gt;    case la_fcat-fieldname.&lt;br /&gt;      when 'VBELN'.  la_fcat-reptext_ddic = 'Sales Order'.&lt;br /&gt;      when 'ERDAT'.  la_fcat-reptext_ddic = 'Create date'.&lt;br /&gt;      when 'ERNAM'.  la_fcat-reptext_ddic = 'Created by'.&lt;br /&gt;      when 'NETWR'.  la_fcat-reptext_ddic = 'Net Value'.&lt;br /&gt;                     la_fcat-DATATYPE = 'DEC'.&lt;br /&gt;    endcase.&lt;br /&gt;    modify lt_slis_fcat from la_fcat.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set the field catalog information back to ALV&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_SET'&lt;br /&gt;    EXPORTING&lt;br /&gt;      it_fieldcat = lt_slis_fcat.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    "top_of_page&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;It will generate the output like:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_Pj9z40ys5GI/SP0-bKOfJfI/AAAAAAAAAl8/SVCxLOzlbvQ/s1600-h/3+output+with+header.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_Pj9z40ys5GI/SP0-bKOfJfI/AAAAAAAAAl8/SVCxLOzlbvQ/s400/3+output+with+header.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5259428576161113586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-7734306900611415048?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/7734306900611415048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/print-table-control-data-with-header.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7734306900611415048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/7734306900611415048'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/print-table-control-data-with-header.html' title='Print Table Control data (with header)'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Pj9z40ys5GI/SP07Wc9Vu8I/AAAAAAAAAlk/Tw0bVGq41r0/s72-c/5+print+button.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-8312491733421379534</id><published>2008-10-18T19:21:00.002-05:00</published><updated>2008-10-18T19:43:54.430-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Classical ALV'/><title type='text'>ALV: Disable DELETE key on Keyboard in Classical ALV Grid</title><content type='html'>&lt;div class="subtitle"&gt;Catch the event generated by DELETE-key on Keyboard &amp; disable it in editable ALV generated using FM REUSE_ALV_GRID_DISPLAY&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We have seen in the previous post how to &lt;a href="http://help-abap.blogspot.com/2008/10/oo-alv-disable-delete-key-on-keyboard.html"&gt;Disable the DELETE-key in the keyboard in the editable ALV using the OO ALV class CL_GUI_ALV_GRID&lt;/a&gt;. Today, we will see how we can implement the same functionality using the classical ALV generated using the function module REUSE_ALV_GRID_DISPLAY.&lt;br /&gt;&lt;br /&gt;As discussed in the previous post, to implement this we need to implement the DATA_CHANGED and the DATA_CHANGED_FINISHED event. The hurdle here is, we don't have a event similar to DATA_CHANGED_FINISHED in OOALV in the Classical FM REUSE_ALV_GRID_DISPLAY ALV.&lt;br /&gt;&lt;br /&gt;Whenever we generate an ALV with the FM REUSE_ALV_GRID_DISPLAY, it internally creates a object reference fo the CL_GUI_ALV_GRID. We will get that object in our program to overcome the hurdle of not having the DATA_CHANGED_FINISHED event. We will get the OO ALV object from this ALV using the FM GET_GLOBALS_FROM_SLVC_FULLSCR. We will implement the event handler class for that ALV object.&lt;br /&gt;&lt;br /&gt;Here I am giving the full example code snippet to implement this functionality.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to Disable DELETE key in the Classical ALV&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Code snippet for diabling the delete key on the keyboard in the&lt;br /&gt;*&amp;   ALV created using FM REUSE_ALV_GRID_DISPLAY&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;REPORT ZALV_DIS_DEL_KEY.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;TYPE-POOLS: slis.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Data to be displayed&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: gt_sflight     TYPE TABLE OF sflight.&lt;br /&gt;DATA: gt_sflight1    TYPE TABLE OF sflight,&lt;br /&gt;      gs_layout      TYPE slis_layout_alv,&lt;br /&gt;      l_deleted      TYPE flag.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: o_grid TYPE REF TO cl_gui_alv_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;* Event Handler class for ALV Events&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_handle DEFINITION.&lt;br /&gt;  PUBLIC SECTION.&lt;br /&gt;    METHODS handle_data_changed&lt;br /&gt;      FOR EVENT data_changed OF cl_gui_alv_grid&lt;br /&gt;      IMPORTING er_data_changed.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    METHODS:&lt;br /&gt;      handle_changed_finished FOR EVENT data_changed_finished&lt;br /&gt;                             OF cl_gui_alv_grid&lt;br /&gt;                             IMPORTING e_modified&lt;br /&gt;                              et_good_cells.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_event_handle DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: o_event_h TYPE REF TO lcl_event_handle.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;START-OF-SELECTION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*---------------------------------------------------------------------*&lt;br /&gt;* Selection&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Edit&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  gs_layout-edit = 'X'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Event for Top-of-page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA: lt_events TYPE slis_t_event.&lt;br /&gt;  DATA: la_events LIKE LINE OF lt_events.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_events-name = 'TOP_OF_PAGE'.&lt;br /&gt;  la_events-form = 'TOP_OF_PAGE'.&lt;br /&gt;  APPEND la_events TO lt_events.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Call ABAP List Viewer (ALV)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_callback_program      = 'ZALV_DIS_DEL_KEY'&lt;br /&gt;      i_callback_user_command = 'USER_COMMAND'&lt;br /&gt;      i_structure_name        = 'SFLIGHT'&lt;br /&gt;      is_layout               = gs_layout&lt;br /&gt;      it_events               = lt_events&lt;br /&gt;    TABLES&lt;br /&gt;      t_outtab                = gt_sflight.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*      TOP-OF-PAGE. Also used to get the Object reference&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM top_of_page.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA : lt_comment TYPE slis_t_listheader,&lt;br /&gt;         la_comment TYPE slis_listheader.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Top of page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  la_comment-typ  = 'H'.&lt;br /&gt;  la_comment-info = 'Disabled Delete Key'.&lt;br /&gt;  APPEND la_comment TO lt_comment.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Commenty write&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'&lt;br /&gt;    EXPORTING&lt;br /&gt;      it_list_commentary = lt_comment.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Get the ALV object&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'&lt;br /&gt;    IMPORTING&lt;br /&gt;      e_grid = o_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Register the Modified event ... Important&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL METHOD o_grid-&amp;gt;register_edit_event&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_modified.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set Event handler&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT o_event_h.&lt;br /&gt;  SET HANDLER o_event_h-&amp;gt;handle_data_changed FOR o_grid.&lt;br /&gt;  SET HANDLER o_event_h-&amp;gt;handle_changed_finished FOR o_grid.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDFORM.                    "top_of_page&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       User Command&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;FORM user_command USING r_ucomm TYPE sy-ucomm&lt;br /&gt;                        rs_selfield TYPE slis_selfield.&lt;br /&gt;  IF r_ucomm = '&amp;DATA_SAVE'.&lt;br /&gt;    MESSAGE 'You pressed the save button' TYPE 'I'.&lt;br /&gt;  ENDIF.&lt;br /&gt;ENDFORM.                    "user_command&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;* Event Handler Class implementation&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_handle IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD handle_data_changed.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: ls_deleted_rows LIKE LINE OF er_data_changed-&amp;gt;mt_deleted_rows.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   data is deleted or not. If yes, than fill the temporary table&lt;br /&gt;*     to its copy&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DESCRIBE TABLE er_data_changed-&amp;gt;mt_deleted_rows LINES sy-index.&lt;br /&gt;    IF sy-index IS NOT INITIAL.&lt;br /&gt;      l_deleted = 'X'.&lt;br /&gt;      gt_sflight1[] = gt_sflight[].&lt;br /&gt;      CLEAR er_data_changed-&amp;gt;mt_deleted_rows.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "handle_data_changed&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD  handle_changed_finished.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   data has been deleted than set the temp data back to the main table&lt;br /&gt;*   and refresh the table display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    IF l_deleted = 'X'.&lt;br /&gt;      gt_sflight[] = gt_sflight1[].&lt;br /&gt;      CLEAR: l_deleted, gt_sflight1.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   message&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    MESSAGE 'You can not delete any record' TYPE 'I'.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   refresh the list display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD o_grid-&amp;gt;refresh_table_display&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        finished = 1&lt;br /&gt;        OTHERS   = 2.&lt;br /&gt;    IF sy-subrc NE 0.&lt;br /&gt;      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "handle_changed_finished&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_event_handle IMPLEMENTATION&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Related post using FM GET_GLOBALS_FROM_SLVC_FULLSCR&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/09/moving-cursor-to-next-row-by-pressing.html"&gt;Moving Cursor to Next row by pressing Enter in Classical ALV&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://help-abap.blogspot.com/2008/09/classical-alv-change-subtotal.html"&gt;Classical ALV: Change Subtotal&lt;/a&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-8312491733421379534?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/8312491733421379534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/alv-disable-delete-key-on-keyboard-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/8312491733421379534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/8312491733421379534'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/alv-disable-delete-key-on-keyboard-in.html' title='ALV: Disable DELETE key on Keyboard in Classical ALV Grid'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-6312937235670586843</id><published>2008-10-16T20:25:00.010-05:00</published><updated>2008-10-18T19:39:36.822-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OO ALV'/><title type='text'>OO ALV: Disable DELETE key on Keyboard in ALV Grid</title><content type='html'>&lt;div class="subtitle"&gt;Catch the event generated by DELETE-key on Keyboard &amp; disable it in OO ALV using CL_GUI_ALV_GRID&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;From ABAP 6.20, SAP has provided many options with the ALV Grid created using the OO ALV using class CL_GUI_ALV_GRID. In the editable ALV, we can insert a new record, delete the record, modify the record and Save those records into database. Ofcourse, we have to write logic more all the process, expect the Delete record. Because records from the ALV grid can be deleted using the DELETE key on the keyboard..!!&lt;br /&gt;&lt;br /&gt;Once in a while, we need to restrict this deletion. For this, we need to remove the option of delete from the ALV toolbar. This code will remove the option of Delete as well as the Insert from the toolbar.&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Code snippet for removing the delete button from the ALV toolbar in&lt;br /&gt;*&amp;   OO ALV created using CL_GUI_ALV &lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*  Set the layout option to disable the option to insert or delete a&lt;br /&gt;*  new row in from the input enable ALV&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  data: ls_layout type LVC_S_LAYO.&lt;br /&gt;  ls_layout-NO_ROWINS = 'X'.&lt;br /&gt;  call method g_grid-&amp;gt;SET_FRONTEND_LAYOUT&lt;br /&gt;    exporting&lt;br /&gt;      is_layout = ls_layout.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But still, records can be deleted with the DELETE key on keyboard. To avoid this we need to disable the DELETE key on the keyboard.&lt;br /&gt;&lt;br /&gt;The solution, which I am going to provide will let the user delete the record, but we will give the message to user like "You can not delete..." and restore the data back. In order to achieve implement this solution, we need to:&lt;br /&gt;&lt;strong&gt;1. &lt;/strong&gt;Register the MODIFIED event for the Grid&lt;br /&gt;&lt;strong&gt;2. &lt;/strong&gt;Set the event handler for the events of the Grid DATA_CHANGED and DATA_CHANGED_FINISHED. We need to implement them also to get the deleted rows and insert them back into the main output table.&lt;br /&gt;&lt;br /&gt;In the DATA_CHANGED event, we will be able to find if there are any records being deleted. In the DATA_CHANGED_FINISHED, we will set the data back from the temporary output table to main output table and Refresh the output.&lt;br /&gt;&lt;br /&gt;Check out the code snippet:&lt;br /&gt;&lt;strong&gt;1. Data declaration in the Global section &lt;/strong&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to add the deep component in Dynamic Itab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Code snippet for diabling the delete key on the keyboard in the&lt;br /&gt;*&amp;   OO ALV created using CL_GUI_ALV&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*1. Declare this data in global:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* My existing table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;gt_outtab   TYPE gs_outtab OCCURS 0 WITH HEADER LINE,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;* Copy to hold temp data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;gt_outtab1  TYPE gs_outtab OCCURS 0 WITH HEADER LINE.  "New copy table&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;DATA: l_deleted TYPE flag.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Implement the Events: DATA_CHANGED &amp; DATA_CHANGED_FINISHED.&lt;/strong&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to add the deep component in Dynamic Itab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Event Handler Defintion and Implementation&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;* Defintion of the Events: DATA_CHANGED &amp; DATA_CHANGED_FINISHED.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_receiver DEFINITION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  PUBLIC SECTION.&lt;br /&gt;    methods:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*    data change event&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;     handle_data_changed  FOR EVENT data_changed&lt;br /&gt;                          OF cl_gui_alv_grid&lt;br /&gt;                          IMPORTING er_data_changed,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*    data change finished event&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;     handle_changed_finished FOR EVENT data_changed_finished&lt;br /&gt;                           OF cl_gui_alv_grid&lt;br /&gt;                           IMPORTING e_modified&lt;br /&gt;                            et_good_cells.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.                    "lcl_event_receiver DEFINITION&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Implementation of events&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;CLASS lcl_event_receiver IMPLEMENTATION.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* This method gives us the data before delete.&lt;br /&gt;* Parameter er_data_changed has the table which has the rows which are&lt;br /&gt;* marked for delete or trying to delete it by pressing the delete button&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD  handle_data_changed.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DATA: ls_deleted_rows LIKE LINE OF er_data_changed-&amp;gt;mt_deleted_rows.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*   data is deleted or not. If yes, than fill the temporary table to its copy&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    DESCRIBE TABLE er_data_changed-&amp;gt;mt_deleted_rows LINES sy-index.&lt;br /&gt;    IF sy-index IS NOT INITIAL.&lt;br /&gt;      l_deleted = 'X'.&lt;br /&gt;      gt_outtab1[] = gt_outtab[].&lt;br /&gt;      CLEAR er_data_changed-&amp;gt;mt_deleted_rows.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "handle_data_changed&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;*&lt;br /&gt;* data has been deleted than set the temp data back to the main table&lt;br /&gt;* and refresh the table display&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  METHOD handle_changed_finished.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   restore data&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    IF l_deleted = 'X'.&lt;br /&gt;      gt_outtab[] = gt_outtab1[].&lt;br /&gt;      CLEAR: l_deleted, gt_outtab1.&lt;br /&gt;      REFRESH gt_outtab1.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*   refresh&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;    CALL METHOD g_grid-&amp;gt;refresh_table_display&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        finished = 1&lt;br /&gt;        OTHERS   = 2.&lt;br /&gt;    IF sy-subrc  0.&lt;br /&gt;      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;br /&gt;                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  ENDMETHOD.                    "handle_changed_finished&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;ENDCLASS.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Set Handler for those events before you set the table for display&lt;/strong&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to add the deep component in Dynamic Itab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Set Event Handler for the ALV Grid&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;* Register the method&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CALL METHOD g_grid-&amp;gt;register_edit_event&lt;br /&gt;    EXPORTING&lt;br /&gt;      i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_modified.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* Set event handler&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  CREATE OBJECT g_event_receiver.&lt;br /&gt;  SET HANDLER g_event_receiver-&amp;gt;handle_data_changed FOR g_grid.&lt;br /&gt;  SET HANDLER g_event_receiver-&amp;gt;handle_changed_finished FOR g_grid.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the next post, we will see how to implement this functionality in the ALV Grid created using the Function module.&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5905076148757900899-6312937235670586843?l=help-abap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://help-abap.blogspot.com/feeds/6312937235670586843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://help-abap.blogspot.com/2008/10/oo-alv-disable-delete-key-on-keyboard.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6312937235670586843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5905076148757900899/posts/default/6312937235670586843'/><link rel='alternate' type='text/html' href='http://help-abap.blogspot.com/2008/10/oo-alv-disable-delete-key-on-keyboard.html' title='OO ALV: Disable DELETE key on Keyboard in ALV Grid'/><author><name>Naimesh Patel</name><uri>http://www.blogger.com/profile/01571575122099513430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_Pj9z40ys5GI/SMXU4D2mycI/AAAAAAAAAcA/SRehEHfXnj8/S220/Naimesh+Patel.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5905076148757900899.post-5145544236899496032</id><published>2008-10-15T19:29:00.004-05:00</published><updated>2008-10-15T20:26:59.785-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamic ITAB'/><title type='text'>Dynamic Internal Table with Deep structure</title><content type='html'>We have seen how we can use Run Time Type Services (RTTS) to create a dynamic internal table in the post: &lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table Creation&lt;/a&gt;. On the other day, after publishing the post &lt;a href="http://help-abap.blogspot.com/2008/10/salv-table-9-apply-colors.html"&gt;SALV Table 9 - Apply Colors&lt;/a&gt;, I was thinking how I can apply these color settings when I have a Dynamic Internal Table. As we have seen into that post, we require an internal table for Color in our Output table means a dynamic internal table with deep structure.&lt;br /&gt;&lt;br /&gt;Dyanmic internal table with deep structure is specially useful when we have to create an ALV with Colors or Style etc. Since we have CL_ABAP_TABLEDESCR class from RTTS, it is also possible to create a dynamic internal table with the deep structure. To create an internal table with deep structure, we need to first get the object definition of the table type. Than we have to add that as a component of our table definition and that's it.&lt;br /&gt;&lt;br /&gt;This code snippet is in the continuation with the code given in the post &lt;a href="http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html"&gt;Dynamic Internal Table Creation&lt;/a&gt;. You can put this code just after the DO..ENDO and before 3. Create a New Type.&lt;br /&gt;&lt;br /&gt;&lt;table class="codetable" style="MARGIN: 10px" cellspacing="0" cellpadding="3" width="568"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="cellhead"&gt; Code Snippet to add the deep component in Dynamic Itab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="cellcode"&gt;&lt;pre&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt; &lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report ZNP_DYNAMIC_DEEP_TABLE.&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Shows how to create dynamic internal table with deep strcuture&lt;br /&gt;*&amp;   which can be used in the ALV to have Sytle table, Color table&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;* 2.1 Creating the Deep strcuture field&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;"&gt;  DATA:  lo_tab TYPE REF TO cl_abap_tabledescr.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial monospaced for SAP;color:#0000ff;"&gt;*&lt;br /&gt;&lt
