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

<channel>
	<title>Max Titov IV @ TechSplice</title>
	<atom:link href="http://www.blog.techsplice.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blog.techsplice.com</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Thu, 24 Jan 2013 20:00:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>ABAP: SAP EP Communication between iViews via BSP &amp; WD</title>
		<link>http://www.blog.techsplice.com/archives/730</link>
		<comments>http://www.blog.techsplice.com/archives/730#comments</comments>
		<pubDate>Thu, 24 Jan 2013 19:27:41 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[SAP/ABAP]]></category>
		<category><![CDATA[bsp]]></category>
		<category><![CDATA[sap]]></category>
		<category><![CDATA[webdynpro]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=730</guid>
		<description><![CDATA[In the SAP Enterprise Portal, we can process different application types in special iViews on the same portal page. Here, iViews can be included using different technologies (such as Web Dynpro ABAP, Java, or BSP). The communication between these iViews takes place through an event function &#8211; portal eventing (or client-side eventing). A WD or [...]]]></description>
				<content:encoded><![CDATA[<p>In the SAP Enterprise Portal, we can process different application types in special iViews on the same portal page. Here, iViews can be included using different technologies (such as Web Dynpro ABAP, Java, or BSP). The communication between these iViews takes place through an event function &#8211; portal eventing (or client-side eventing).<br />
A WD or BSP can be registered for portal events. In this way, the WD or BSP can react to an event that was triggered in another iView in the portal. Therefore, it does not matter what technique you used to set up the application that is the basis for the other iView. The assignment as to which event handler is to be called when this event occurs is stored in the WD or BSP that has registered itself on the portal event.</p>
<p><span id="more-730"></span></p>
<p>Similarly to registration, a WD or BSP application can trigger any portal event. In this case, the event is passed to the portal by the respective iView. The portal passes the event to all iViews that have registered for this event. The application that finally handles this event can, in turn, have been set up with a different technique than the WD or BSP application triggering it.</p>
<p>Portal eventing functions only between iViews that are on the same browser window. Events between iViews in different browser windows cannot be transported.</p>
<p>All participating iViews must also belong to the same domain. Otherwise portal eventing cannot work due to JavaScript restrictions.</p>
<p>Syntax for Namespace and Names of Events:</p>
<p>Valid characters: &#8220;A&#8221;"Z&#8221;,&#8221;a&#8221;"z&#8221;,&#8221;0&#8243;&#8221;9&#8243;,&#8221;",&#8221;_&#8221;,&#8221;-&#8221;,&#8221;.&#8221;</p>
<p>Namespaces com.sapportals.portal.* and com.sapportals.* are reserved by sap, normally we used the company namespace.</p>
<p>Namespaces and event are case sensitive so be careful on the typing, because there is no syntax check.</p>
<p>In my tutorial I trigger and register the WD or BSP from different systems into one portal IView.</p>
<h5>WebDynpro Event Sender</h5>
<p>Goto SE80 create z_portal_event_sender component and application with default.view and default.window.</p>
<p>In the context of default view add context node main and 3 attributes: text_area_1 and text_area_2, text_area_3. In the layout of default view add 3 input fields: input_1, input_2, input_3 which bind respectively to the context attributes: text_area_1, text_area_2, text_area_3, 1 button btn with action trigger_event.</p>
<p>In the event method onactiontrigger_event on view I only want to send input_1 and input_2 to the portal. The data has be concatenated into one parameter on the server side before triggering the portal event</p>
<pre class="wp-code-highlight prettyprint">method onactiontrigger_event .
  data:
    node_main                           type ref to if_wd_context_node,
    elem_main                           type ref to if_wd_context_element,
    stru_main                           type if_default=&gt;element_main ,
		item_text_area_1                    like stru_main-text_area_1,
		item_text_area_2                    like stru_main-text_area_2,
		item_text_area_3                    like stru_main-text_area_3.
* navigate from &lt;CONTEXT&gt; to &lt;MAIN&gt; via lead selection
  node_main = wd_context-&gt;get_child_node(wd_this-&gt;wdctx_main ).
* get element via lead selection
  elem_main = node_main-&gt;get_element(  ).
* get single attribute
  elem_main-&gt;get_static_attributes(
    exporting
      name =  `TEXT_AREA_1`
    importing
      value = item_text_area_1 ).

	elem_main-&gt;get_static_attributes(
    exporting
      name =  `TEXT_AREA_2`
    importing
      value = item_text_area_2 ).

	elem_main-&gt;get_static_attributes(
    exporting
      name =  `TEXT_AREA_3`
    importing
      value = item_text_area_3 ).</pre>
<h5>WebDynpro Event receiver</h5>
<p>Goto SE80 create z_portal_event_receiver component and application with default.view and default.window.</p>
<p>In the context of default view add context node main and 3 attributes: text_area_1 and text_area_2, text_area_3. In the layout of default view add 3 input fields: input_1, input_2, input_3 which bind respectively to the context attributes: text_area_1, text_area_2, text_area_3, 1 button btn with action catch_event</p>
<p>Register default view to the portal event Framework, in the wddoinit of default I registered the portal manager, on the server side after receiving the portal parameter, I split the parameter again into different field.</p>
<pre class="wp-code-highlight prettyprint">method wddoinit .

  data l_api_component  type ref to if_wd_component.
  data l_portal_manager type ref to if_wd_portal_integration.
  l_api_component = wd_comp_controller-&gt;wd_get_api( ).
  l_portal_manager = l_api_component-&gt;get_portal_manager( ).
  data l_wd_view type ref to if_wd_view_controller.

  l_wd_view ?= wd_this-&gt;wd_get_api( ).
  l_portal_manager-&gt;subscribe_event(
      portal_event_namespace = &#039;com.xiaohong&#039;
      portal_event_name      = &#039;test_event&#039;
      view                   = l_wd_view
      action                 = &#039;CATCH_EVENT&#039; ).

Endmethod.

Method onactioncatch_event.

	data: EVT_NAME type STRING,
        evt_parameter type string,
        wa_string type string,
        it_string like table of wa_string.

  EVT_NAME = WDEVENT-&gt;GET_STRING( NAME = &#039;PORTAL_EVENT_NAME&#039; ).

  if EVT_NAME = &#039;test_event&#039;.
		evt_parameter = WDEVENT-&gt;GET_STRING( NAME = &#039;PORTAL_EVENT_PARAMETER&#039; ).
		Split evt_parameter at &quot;*&quot; into table lt_string.

	  DATA:
	    node_main                           TYPE REF TO if_wd_context_node,
	    elem_main                           TYPE REF TO if_wd_context_element,
	    stru_main                           TYPE if_default=&gt;element_main ,
	    item_text_reciever                  LIKE stru_main-text_reciever.

* 	navigate from &lt;CONTEXT&gt; to &lt;MAIN&gt; via lead selection
  	node_main = wd_context-&gt;get_child_node( name = `MAIN` ).
* 	get element via lead selection
  	elem_main = node_main-&gt;get_element(  ).
 		Read table it_string into wa_string index 1.
* 	get single attribute
  	elem_main-&gt;set_attribute(
  	  EXPORTING
  	    name =  `TEXT_AREA_1`
  	    value = wa_string ). 
  	
		Clear wa_string.
  	
		Read table it_string into wa_string index 2.
  	
		Elem_main-&gt;set_attribute(
  	          Exporting name = &#039;TEXT_AREA_2&#039;
  	            Value = wa_string). 
		)
  endif.
endmethod. </pre>
<h5>BSP application event sender</h5>
<p>Goto SE80, create bsp application z_portal_bsp_sender, page event_sender.htm with page flow logic, it has 3 input fields and 1 button. When the button is pressed, we trigger the portal event using javascript on the browser instead of server event to avoid the respect/response cycle, technically HTML DOM can read the value of each UI element, so I read the data before triggering the portal event.</p>
<p>Layout of event_sender.htm</p>
<pre class="wp-code-highlight prettyprint">&lt;%@page language=&quot;abapljavascript&quot; %&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		function alertValue(){
			x = document.getElementById(&quot;input_field_1&quot;).value + &quot;*&quot; + 
					document.getElementById(&quot;input_field_2&quot;).value;
			portalFireEvent(&#039;com.testNamespace&#039;,&#039;test_event&#039;,x);
		}
	&lt;/script&gt;</pre>
<pre class="wp-code-highlight prettyprint">&lt;%@extension name=&quot;htmlb&quot; prefix=&quot;htmlb&quot; %&gt;
&lt;htmlb:content design=&quot;design2003&quot;&gt;
	&lt;htmlb:page title=&quot;&quot;&gt;
		&lt;htmlb:form&gt;
			&lt;htmlb:label 			for=&quot;input_field_1&quot; text=&quot;Event Message:&quot; /&gt;
			&lt;htmlb:inputField id=&quot;input_field_1&quot;	type=&quot;STRING&quot; value=&quot;&lt;%= EVENT_TEXT_1 %&gt;&quot; /&gt;
			&lt;htmlb:label 			for=&quot;input_field_2&quot; text=&quot;Event Message:&quot; /&gt;
			&lt;htmlb:inputField id=&quot;input_field_2&quot;	type=&quot;STRING&quot; value=&quot;&lt;%= EVENT_TEXT_2 %&gt;&quot; /&gt;
			&lt;htmlb:label 			for=&quot;input_field_3&quot; text=&quot;Event Message:&quot; /&gt;
			&lt;htmlb:inputField id=&quot;input_field_3&quot;	type=&quot;STRING&quot; value=&quot;&lt;%= EVENT_TEXT_3 %&gt;&quot; /&gt;
			&lt;htmlb:button 		text=&quot;Trigger Portal Event&quot; onClientClick=&quot;alertValue();&quot; /&gt;
		&lt;/htmlb:form&gt;
	&lt;/htmlb&gt;
&lt;/htmlb:content&gt;</pre>
<h5>BSP application event receiver</h5>
<p>The portal event send the data to the server, then I split the portal content in the server side.</p>
<p>Goto SE80 and create bsp application z_portal_bsp_receiver. Page event_receiver.htm</p>
<p>Layout of event_receiver.htm</p>
<pre class="wp-code-highlight prettyprint">&lt;%@page language=&quot;abap&quot; %&gt;
&lt;%@extension name=&quot;htmlb&quot; prefix=&quot;htmlb&quot; %&gt;
&lt;%@extension name=&quot;bsp&quot; 	prefix=&quot;bsp&quot; %&gt;

&lt;htmlb:content design=&quot;design2003&quot;&gt;
	&lt;htmlb:page title=&quot;&quot;&gt;
		&lt;htmlb:form&gt;
			&lt;bsp:portalEvent name=&quot;test_event&quot; namespace=&quot;com.testNamespace&quot; /&gt;
			&lt;htmlb:label 		for=&quot;text1&quot; text=&quot;Event Text:&quot; /&gt;
			&lt;htmlb:textView id=&quot;text1&quot;  text=&quot;&lt;%= event_text_1 %&gt;&quot; /&gt;
			&lt;htmlb:textView id=&quot;text2&quot;  text=&quot;&lt;%= event_text_2 %&gt;&quot; /&gt;
		&lt;/htmlb:form&gt;
	&lt;/htmlb&gt;
&lt;/htmlb&gt;</pre>
<pre class="wp-code-highlight prettyprint">OnInputProcessing Event Handler
	data: event type ref to if_htmlb_data.
	data: event_dataobject type string.
	data: event_sourceid type string.
	data: event_namespace type string.
	data: event_name type string.
	Data: wa_string type string.
	Data:lt_string like table of wa_string.
	
	event = cl_htmlb_manager=&gt;get_event_ex(
		runtime-&gt;server-&gt;request ).
	
	if event is bound.
	  if event-&gt;event_name eq &#039;portalEvent&#039;.
	    event_dataobject = event-&gt;event_server_name.
	    event_sourceid = event-&gt;event_defined.
	    split event-&gt;event_id at &#039;:&#039;  into event_namespace event_name.
	    if event_namespace = &#039;com.xiaohong&#039; and
	       event_name = &#039;test_event&#039;.
	   		 Split event_dataobject at &#039;*&#039; into table lt_string.
	 			 Read table lt_string into wa_string index 1.
				 event_text_1 = wa_string.
	 			 Clear wa_String.
 				 Read table lt_string into wa_string index 2.
  			 Event_text_2 = wa_string.
    	endif.
	  endif.
	endif.</pre>
<p>First we have to configure the different system into Portal using Single Sign On(SSO). </p>
<h4>Configure systems into portal</h4>
<h5>Configure system landscape</h5>
<p style="overflow: auto"><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_2.jpg"><img src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_2-300x270.jpg" alt="sso_2" width="300" height="270" class="alignleft size-medium wp-image-733" style="padding-right: 10px" /></a>Logon the portal as administrator ->system administration->system configuration->system landscape->create folder name and id. Under new folder  create system and choose dedicated Application server for R/3 system and name and id, You have to configure each systems you used in the portal. </p>
<p style="overflow: auto"><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_6.jpg"><img src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_6-300x163.jpg" alt="sso_6" width="300" height="163" class="alignleft size-medium wp-image-736" style="padding-right: 10px" /></a>Open the new system and modify the property editor, enter all the system technical information: host, port, client, system id; system number. Editor system alias for the new system, alias is used to identify the backend system.</p>
<h5>Configure single sign on(SSO) to portal and abap system</h5>
<p style="overflow:auto"><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_1.jpg"><img src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_1-150x150.jpg" alt="sso_1" width="150" height="150" class="alignleft size-thumbnail wp-image-741" style="padding-right: 10px" /></a>Logon the portal as administrator->system administration->system configuration->keystore administration->download SAPLogonTicketKeypair verify.der into local pc and unzip it. Logon to ABAP system user, go to STRUSTSSO2 and import verify.der</p>
<h5>Configure user and role on portal</h5>
<p>Logon the portal as administrator->user administration->users->create user.</p>
<p>Enter the same user as backend ABAP system.</p>
<p>Content administration->portal content->new role->create role ->open the object for setting->navigation->entry point</p>
<p>User Administration->Roles->edit, assign the user to the role</p>
<h5>Configure iview</h5>
<p><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_10.jpg"><img src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/sso_10-150x150.jpg" alt="sso_10" width="150" height="150" class="alignleft size-thumbnail wp-image-742" style="padding-right: 10px" /></a>Logon portal as administrator->content administration->portal content-></p>
<p>Create Iview, add all the four BSP and WDA application into Iview<br />
create page:  add all the iview into page by delta link<br />
Portal content->folder ->add iView to role->Delta Link</p>
<p>Add page to the role by Delta Link </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/730/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABAP: Web Dynpro &#8211; dynamic context &amp; UI manipulation</title>
		<link>http://www.blog.techsplice.com/archives/725</link>
		<comments>http://www.blog.techsplice.com/archives/725#comments</comments>
		<pubDate>Thu, 24 Jan 2013 17:45:05 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[SAP/ABAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[webdynpro]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=725</guid>
		<description><![CDATA[A good example of the dynamic modifications can be viewed via Web Dynpro component DEMODYNAMIC. Creating new context node METHOD handlefrom_select_view . * Get information about selected table DATA: lo_nd_tabledata TYPE REF TO if_wd_context_node, lo_el_tabledata TYPE REF TO if_wd_context_element, ls_tabledata TYPE wd_this-&#62;element_tabledata, lv_tabname TYPE string. * navigate from to via lead selection lo_nd_tabledata = wd_context-&#62;get_child_node( name [...]]]></description>
				<content:encoded><![CDATA[<p>A good example of the dynamic modifications can be viewed via Web Dynpro component DEMODYNAMIC.</p>
<h5>Creating new context node</h5>
<pre class="wp-code-highlight prettyprint">METHOD handlefrom_select_view .

* Get information about selected table
  DATA: lo_nd_tabledata TYPE REF TO if_wd_context_node,
        lo_el_tabledata TYPE REF TO if_wd_context_element,
        ls_tabledata TYPE wd_this-&gt;element_tabledata,
        lv_tabname TYPE string.
* navigate from  to  via lead selection
  lo_nd_tabledata = wd_context-&gt;get_child_node( name = wd_this-&gt;wdctx_tabledata ).
* get element via lead selection
  lo_el_tabledata = lo_nd_tabledata-&gt;get_element( ).
* get single attribute
  lo_el_tabledata-&gt;get_attribute(
    EXPORTING
      name =  `TABNAME`
    IMPORTING
      value = lv_tabname ).
  TRANSLATE lv_tabname TO UPPER CASE.

* build new context data
  DATA: lo_nd_info_root     TYPE REF TO if_wd_context_node_info,
        lo_nd_info_dbtb     TYPE REF TO if_wd_context_node_info.

  lo_nd_info_root = wd_context-&gt;get_node_info( ).
  lo_nd_info_dbtb = lo_nd_info_root-&gt;add_new_child_node(
                      name                   = &#039;DB_TABLE&#039;
                      static_element_type    = lv_tabname
                      is_mandatory           = abap_false
                      is_mandatory_selection = abap_false
                      is_multiple            = abap_true ).

* create a reference to data table
  DATA: lr_db_tab TYPE REF TO data.
  FIELD-SYMBOLS: &lt;fs_db_tab&gt; TYPE ANY TABLE.
  CREATE DATA lr_db_tab TYPE TABLE OF (lv_tabname).
  ASSIGN lr_db_tab-&gt;* TO &lt;fs_db_tab&gt;.

* read contents of the database
  SELECT * FROM (lv_tabname)
           INTO CORRESPONDING FIELDS OF TABLE &lt;fs_db_tab&gt;
           UP TO 100 ROWS.

* bind the table to context
  DATA: lo_nd_dyn     TYPE REF TO if_wd_context_node.
  lo_nd_dyn = wd_context-&gt;get_child_node( name = &#039;DB_TABLE&#039; ).
  lo_nd_dyn-&gt;bind_table( new_items = &lt;fs_db_tab&gt; ).

ENDMETHOD.</pre>
<p>&nbsp;</p>
<h5>Adding a new table based on a dynamically created context node</h5>
<pre class="wp-code-highlight prettyprint">METHOD wddomodifyview .

  DATA: lo_group TYPE REF TO cl_wd_group,
        lo_table TYPE REF TO cl_wd_table,
        lo_nd_dn TYPE REF TO if_wd_context_node.

  IF first_time EQ abap_true.
    lo_group ?= view-&gt;get_element( id = &#039;GROUP_1&#039; ).
    lo_nd_dn  = wd_context-&gt;get_child_node( name = &#039;DB_TABLE&#039; ).
    lo_table  = cl_wd_dynamic_tool=&gt;create_table_from_node(
                    ui_parent = lo_group
                    table_id  = &#039;TABLE_DB_TABLE&#039;
                    node      = lo_nd_dn ).

    lo_table-&gt;set_visible_row_count( value = 20 ).

  ENDIF.

ENDMETHOD.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/725/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cooking: Steak, Mashed potatoes with Mushrooms</title>
		<link>http://www.blog.techsplice.com/archives/719</link>
		<comments>http://www.blog.techsplice.com/archives/719#comments</comments>
		<pubDate>Mon, 21 Jan 2013 03:27:39 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[mashed potatoes]]></category>
		<category><![CDATA[mushrooms]]></category>
		<category><![CDATA[steak]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=719</guid>
		<description><![CDATA[&#160; The dish is composed of tree different components. Mashed Potatoes Potatoes Butter Milk Garlic powder Salt Pepper Instructions Cut in to large chunks and boil the potatoes until soft Drain the water Mash the potatoes while adding butter, garlic powder, salt &#38; pepper Add milk depending on the desired softness Mushrooms Mushrooms Onion Garlic [1 [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/steak_mashed_mushrooms.jpg"><img class="alignnone  wp-image-720" style="border: 0px; margin-left: 10px; margin-right: 10px;" alt="steak_mashed_mushrooms" src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/steak_mashed_mushrooms-1024x682.jpg" width="614" height="409" /></a></p>
<p>&nbsp;</p>
<p>The dish is composed of tree different components.</p>
<h3>Mashed Potatoes</h3>
<ul>
<li>Potatoes</li>
<li>Butter</li>
<li>Milk</li>
<li>Garlic powder</li>
<li>Salt</li>
<li>Pepper</li>
</ul>
<h5>Instructions</h5>
<ol>
<li>Cut in to large chunks and boil the potatoes until soft</li>
<li>Drain the water</li>
<li>Mash the potatoes while adding butter, garlic powder, salt &amp; pepper</li>
<li>Add milk depending on the desired softness</li>
</ol>
<h4>Mushrooms</h4>
<ul>
<li>Mushrooms</li>
<li>Onion</li>
<li>Garlic [1 or 2 cloves]</li>
<li>Olive oil</li>
<li>Red wine</li>
<li>Worcestershire sauce</li>
</ul>
<h5>Instructions</h5>
<ol>
<li>Chop up onions, mushrooms &amp; garlic</li>
<li>Add oil garlic and mushrooms to a pan and cook on low heat</li>
<li>After a few minutes when the veggies have sweated a bit add a red wine and Worcestershire sauce for flavour and colouring</li>
<li>Wait until the liquid reduces</li>
</ol>
<h4>Steak</h4>
<p>There are many variations of how to cook a steak.  I&#8217;ve followed a typical approach of seasoning the meat on both sides with salt and pepper.  Then on a hot pan flash the meat on both sides [2 minute each] add some butter and give another 2-5 minutes on low heat for the meat to cook [depending on how rear you want it].  Let the steak rest for another 3-5 minutes.</p>
<p>&nbsp;</p>
<p>When all the components are done put everything together and serve.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/719/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABAP: create a table from scratch using RTTS</title>
		<link>http://www.blog.techsplice.com/archives/709</link>
		<comments>http://www.blog.techsplice.com/archives/709#comments</comments>
		<pubDate>Thu, 17 Jan 2013 20:05:32 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[SAP/ABAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[RTTC]]></category>
		<category><![CDATA[RTTI]]></category>
		<category><![CDATA[sap]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=709</guid>
		<description><![CDATA[RTTS: RunTime Type Services &#8211; allows to get the definition of variables or to create them during program execution. RTTS is made of 2 components: RTTI: RunTime Type Identification &#8211; is used to get the definition of existing variables or existing types RTTC: RunTime Type Creation &#8211; is used to create new variables with any definition; [...]]]></description>
				<content:encoded><![CDATA[<p>RTTS: RunTime Type Services &#8211; allows to get the definition of variables or to create them during program execution. RTTS is made of 2 components:</p>
<ul>
<li><span style="line-height: 13px;">RTTI: RunTime Type Identification &#8211; is used to get the definition of existing variables or existing types<br />
</span></li>
<li>RTTC: RunTime Type Creation &#8211; is used to create new variables with any definition; they must be followed by the ABAP statement CREATE DATA &#8230; TYPE HANDLE &#8230; to create the variable</li>
</ul>
<p>RTTI and RTTC may be called using methods in CL_ABAP_*DESCR classes. Each class have both RTTI and RTTC methods.</p>
<p>Here is a quick example that illustrates the power and elegance of creating a table:</p>
<pre class="wp-code-highlight prettyprint">DATA: lo_lineType   TYPE REF TO cl_abap_structdescr,
      lo_tableType  TYPE REF TO cl_abap_tabledescr,
      lt_key        TYPE abap_keydescr_tab.

lo_lineType ?= cl_abap_typedescr=&gt;describe_by_name( &#039;SPFLI&#039; ).
APPEND &#039;CARRID&#039; TO lt_key.
APPEND &#039;CONNID&#039; TO lt_key.

lo_tableType = cl_abap_tabledescr=&gt;create(
                  p_line_type   = lo_lineType
                  p_table_kind  = cl_abap_tabledescr=&gt;tablekind_sorted
                  p_unique      = abap_true
                  p_key         = lt_key ).

* now lets create some data
DATA: lo_itab TYPE REF TO data.
CREATE DATA lo_itab TYPE HANDLE lo_tableType.</pre>
<p>As you can see the steps are quite simple and the result is a standard SPFLI table.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/709/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cooking: Fish, potatoe, and leek soup</title>
		<link>http://www.blog.techsplice.com/archives/703</link>
		<comments>http://www.blog.techsplice.com/archives/703#comments</comments>
		<pubDate>Thu, 17 Jan 2013 05:50:32 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[fish]]></category>
		<category><![CDATA[leek]]></category>
		<category><![CDATA[potatoes]]></category>
		<category><![CDATA[soup]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=703</guid>
		<description><![CDATA[Very simple to make recipe. Ingredients 2 basa fillets, cut into bite-sized pieces 2 leeks, chopped 6 small potatoes, diced 1 tsp minced garlic 300 mL 2% milk 500 mL low sodium chicken broth 2 tbsp butter 1 onion, chopped pinch of black pepper Instructions In chicken broth, boil potatoes till tender (~ 30 min).  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/fish_potatoe_leek_soup.jpg"><img class="alignnone  wp-image-704" style="border: 0px; margin: 0px 10px;" alt="fish_potatoe_leek_soup" src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/fish_potatoe_leek_soup-1024x683.jpg" width="614" height="410" /></a></p>
<p>Very simple to make recipe.</p>
<h3>Ingredients</h3>
<ul>
<li>2 basa fillets, cut into bite-sized pieces</li>
<li>2 leeks, chopped</li>
<li>6 small potatoes, diced</li>
<li>1 tsp minced garlic</li>
<li>300 mL 2% milk</li>
<li>500 mL low sodium chicken broth</li>
<li>2 tbsp butter</li>
<li>1 onion, chopped</li>
<li>pinch of black pepper</li>
</ul>
<h3>Instructions</h3>
<ol>
<li>In chicken broth, boil potatoes till tender (~ 30 min).  Then add milk.</li>
<li>Sauté onion and garlic in butter (~ 3 min).</li>
<li>Add leeks; simmer (~3 min).</li>
<li>Add fish and pepper; simmer (~10 min).</li>
<li>Once potatoes are mashed, combine mixture; stir well until desired consistency.  Serve.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/703/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cooking: Chicken Noodle soup</title>
		<link>http://www.blog.techsplice.com/archives/693</link>
		<comments>http://www.blog.techsplice.com/archives/693#comments</comments>
		<pubDate>Sun, 06 Jan 2013 23:03:33 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[chicken]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[noodle]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[soup]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=693</guid>
		<description><![CDATA[I&#8217;ve picked one of the first google search results [recipe].  Used the ingredients and cooked the contents based on my personal observations &#38; taste. Ingredients olive oil 2 medium onions, chopped 3 medium carrots, cut into 1/4-inch rounds 3 celery ribs, cut into 1/4-inch thick slices 1 (6- to 7-pound) chicken 2 quarts chicken broth [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.blog.techsplice.com/wp-content/uploads/2013/01/chickenNoodle.jpg"><img class="alignnone  wp-image-694" style="margin-left: 10px; margin-right: 10px;" alt="chickenNoodle" src="http://www.blog.techsplice.com/wp-content/uploads/2013/01/chickenNoodle-1024x1024.jpg" width="614" height="614" /></a></p>
<p>I&#8217;ve picked one of the first google search results [<a title="Cooking: Chicken Noodle Soup" href="http://homecooking.about.com/od/soups/r/blss69.htm">recipe</a>].  Used the ingredients and cooked the contents based on my personal observations &amp; taste.</p>
<h3>Ingredients</h3>
<ul>
<li>olive oil</li>
<li>2 medium onions, chopped</li>
<li>3 medium carrots, cut into 1/4-inch rounds</li>
<li>3 celery ribs, cut into 1/4-inch thick slices</li>
<li>1 (6- to 7-pound) chicken</li>
<li>2 quarts chicken broth or canned low-sodium broth</li>
<li>1 quart cold water, or as needed</li>
<li>4 sprigs of fresh parsley</li>
<li>3 sprigs of fresh thyme or 1/2 teaspoon dried thyme</li>
<li>1 bay leaf</li>
<li>Salt and freshly ground black pepper</li>
<li>2 cups egg noodles</li>
</ul>
<p>I&#8217;ve started by chopping the vegetables, then browned them slightly in the bot.  That followed by adding chicken broth, water and boiling the contents for a good hour. I&#8217;ve concluded the dish by adding the noodles for 10 minutes and adding pre made chicken bits.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/693/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABAP: cl_salv_table = simple AVL</title>
		<link>http://www.blog.techsplice.com/archives/679</link>
		<comments>http://www.blog.techsplice.com/archives/679#comments</comments>
		<pubDate>Tue, 04 Dec 2012 04:19:03 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[SAP/ABAP]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[alv]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[simple]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=679</guid>
		<description><![CDATA[A really simple snippet that will get you an alv grid on the screen without using the CL_GUI_ALV_GRID class. DATA: gt_itab TYPE SOME_TABLE. DATA: go_salv TYPE REF TO cl_salv_table. ... TRY . cl_salv_table=&#62;factory( EXPORTING list_display = if_salv_c_bool_sap=&#62;false IMPORTING r_salv_table = go_salv CHANGING t_table = gt_itab ). CATCH cx_salv_msg. ENDTRY. go_salv-&#62;display( ).]]></description>
				<content:encoded><![CDATA[<p>A really simple snippet that will get you an alv grid on the screen without using the CL_GUI_ALV_GRID class.</p>
<pre class="wp-code-highlight prettyprint">  DATA: gt_itab       TYPE SOME_TABLE.
  DATA: go_salv       TYPE REF TO cl_salv_table.
  ...
  TRY .
      cl_salv_table=&gt;factory(
        EXPORTING
          list_display    = if_salv_c_bool_sap=&gt;false
        IMPORTING
          r_salv_table    = go_salv
        CHANGING
          t_table         = gt_itab ).
    CATCH cx_salv_msg.

  ENDTRY.

  go_salv-&gt;display( ).</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/679/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cooking: Macaroni in Bolognaise sauce</title>
		<link>http://www.blog.techsplice.com/archives/672</link>
		<comments>http://www.blog.techsplice.com/archives/672#comments</comments>
		<pubDate>Tue, 27 Nov 2012 04:51:34 +0000</pubDate>
		<dc:creator>maxtmax</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[bolognaise]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[macaroni]]></category>
		<category><![CDATA[sauce]]></category>

		<guid isPermaLink="false">http://www.blog.techsplice.com/?p=672</guid>
		<description><![CDATA[I followed the recipe of the Bolognese sauce outlined here by one of Gordon Ramsay&#8217;s recipes.  The end result was a deliciousness creamy texture of the sauce that really uplifted the flavour of the dish.  Relatively simple process resulting in complicated flavour. Ingredients 1 onion [which I have to admit I forgot to add] 1 large carrot 2 cloves of garlic Dried oregano [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.blog.techsplice.com/wp-content/uploads/2012/11/macaroniInBolognaiseSause_01.jpg"><img class="alignnone  wp-image-673" style="margin-left: 10px; margin-right: 10px;" title="macaroniInBolognaiseSause_01" alt="" src="http://www.blog.techsplice.com/wp-content/uploads/2012/11/macaroniInBolognaiseSause_01-1024x1024.jpg" width="614" height="614" /></a></p>
<p>I followed the recipe of the Bolognese sauce outlined <a title="Gordon Ramsay How To Make Bolognaise" href="http://www.youtube.com/watch?feature=endscreen&amp;v=UgoRy9PtivM&amp;NR=1">here</a> by one of Gordon Ramsay&#8217;s recipes.  The end result was a deliciousness creamy texture of the sauce that really uplifted the flavour of the dish.  Relatively simple process resulting in complicated flavour.</p>
<p><strong>Ingredients</strong></p>
<ul>
<li>1 onion [which I have to admit I forgot to add]</li>
<li>1 large carrot</li>
<li>2 cloves of garlic</li>
<li>Dried oregano</li>
<li>Ground beef</li>
<li>Ragu pasta sauce</li>
<li>Red wine</li>
<li>Milk</li>
<li>Worcester sauce</li>
</ul>
<div><strong>Instructions </strong>[the steps are very similar to what is found on the youtube channel]</div>
<div>
<ol>
<li>Grade onion &amp; carrot</li>
<li>Add olive oil, onion, carrot, seasoning, garlic &amp; dried oregano to a hot pan</li>
<li>Lightly sweat the veggies [don't get them to brown up]</li>
<li>Add the ground beef to the pot, brown it up</li>
<li>Add red wine &amp; reduce until it turns to a syrup texture</li>
<li>Add Ragu/Tomatoe sause &amp; a touch of Worcester sauce</li>
<li>Turn the gas down and let it simmer for 5 to 7 minutes</li>
<li>Finally add a bit of milk</li>
</ol>
<p>The macaroni can be prepared separately and then mixed in to the sauce.
</p></div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.techsplice.com/archives/672/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
