<?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>David Lai&#039;s Business Intelligence Blog &#187; Tips and Tricks</title>
	<atom:link href="http://davidlai101.com/blog/category/xcelsius/tips-and-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidlai101.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 27 Jan 2012 03:02:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Using Xcelsius and Webservices to insert comments into a database</title>
		<link>http://davidlai101.com/blog/2012/01/26/using-xcelsius-and-webservices-to-insert-comments-into-a-database/</link>
		<comments>http://davidlai101.com/blog/2012/01/26/using-xcelsius-and-webservices-to-insert-comments-into-a-database/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 03:02:41 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Workarounds]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[Comments]]></category>
		<category><![CDATA[SAP BusinessObjects Dashboards]]></category>
		<category><![CDATA[Web Service]]></category>
		<category><![CDATA[Xcelsius 2008]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=551</guid>
		<description><![CDATA[A common request that I have seen with my clients, is the ability to enter comments into a dashboard and then view those comments when they re-open the dashboard in the future. Unfortunately Xcelsius does not have a native mechanism to send data back to the database, as a dashboard&#8217;s main purpose to read data [...]]]></description>
			<content:encoded><![CDATA[<p>A common request that I have seen with my clients, is the ability to enter comments into a dashboard and then view those comments when they re-open the dashboard in the future.</p>
<p>Unfortunately Xcelsius does not have a native mechanism to send data back to the database, as a dashboard&#8217;s main purpose to read data and not write back to the database.  However, I do see the value in being able to persist comments so that we can go back later and be able to look at documentation on why certain things happened, etc.</p>
<p>In this article I will give step by step instructions on how to use web services and Xcelsius to accomplish the task of inserting comments.  However you will have to write your own web service code <img src='http://davidlai101.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2012/01/lifecycle.png"><img class="aligncenter size-full wp-image-560" title="lifecycle" src="http://davidlai101.com/blog/wp-content/uploads/2012/01/lifecycle.png" alt="Web Service Comments life cycle" width="664" height="781" /></a></p>
<h1><span id="more-551"></span></h1>
<h1>Preparation</h1>
<p>In order to facilitate the ability to create comments from Xcelsius we must have a mechanism to do so and a place to persist the comments.</p>
<p>You will need to store the comments in a database.</p>
<p>Thus you will need the following:</p>
<ul>
<li>Database</li>
<li>Database table that will house the comments and additional parameters such as user, dashboard, etc</li>
</ul>
<p>To allow Xcelsius to send comments to the database, we will need to create a <em>Web Service</em> and then call that <em>Web Service</em> from Xcelsius while sending in the appropriate parameters (comments, user, dashboard, etc).</p>
<p>To facilitate the ability to use Web Services, you must have a .NET or Java application server available.</p>
<h1>Pseudo steps to create the Web Service</h1>
<ol>
<li>Start creating your web service using the programming language of choice (VB .NET or Java)</li>
<li>Create a method that will house your “insert comment” code</li>
<li>Method will need to have input parameters that contains your comment text and any other parameters such as user, dashboard, etc</li>
</ol>
<p><span style="color: #99ccff;"><strong>       Steps in the method</strong></span></p>
<ol>
<li><span style="color: #99ccff;">Log into database</span></li>
<li><span style="color: #99ccff;">Begin Transaction</span></li>
<li><span style="color: #99ccff;">Create insert statement that will insert the input parameters (comment text, etc)</span></li>
<li><span style="color: #99ccff;">Make sure that there is some sort of rollback mechanism to handle errors</span></li>
<li><span style="color: #99ccff;">End transaction</span></li>
<li><span style="color: #99ccff;">Close database connection</span></li>
</ol>
<p>When you are finished coding, you will then need to deploy the Web Service onto your .NET or Java application server.</p>
<h1>Useful Resources to help you code your Web Service</h1>
<p>1.  Introduction on what a Web Service is</p>
<p><a href="http://en.wikipedia.org/wiki/Web_service">http://en.wikipedia.org/wiki/Web_service</a></p>
<p><a href="http://www.w3schools.com/webservices/ws_intro.asp">http://www.w3schools.com/webservices/ws_intro.asp</a></p>
<p>2.  Example of creating a simple VB . NET Web Service for a .NET application server</p>
<p><a href="http://www.w3schools.com/webservices/ws_example.asp">http://www.w3schools.com/webservices/ws_example.asp</a><br />
3.  Example of creating a simple java based Web Service that runs on a Java server</p>
<p><a href="http://www.roseindia.net/webservices/buildingsimplewebservice.shtml">http://www.roseindia.net/webservices/buildingsimplewebservice.shtml</a></p>
<p>4.  Java code to connect to a DB, create a table, insert into table, and retrieve from a table (you are only interested in inserting) Start on step 22 if you are interested in the code</p>
<p><a href="http://www.java2s.com/Code/Java/Database-SQL-JDBC/AccessMySQLDatabaseopenconnectioncreatetableinsertandretrieve.htm">http://www.java2s.com/Code/Java/Database-SQL-JDBC/AccessMySQLDatabaseopenconnectioncreatetableinsertandretrieve.htm</a></p>
<h1>Xcelsius Steps</h1>
<p>In the Xcelsius example, we will walk through the steps on creating an input/output comment box; and creating a web service connection that inserts a user&#8217;s comment into the database.</p>
<p>1.  Drag an <em>Input Text Area</em> and <em>Label </em>component onto the canvas.  Users will enter their comments into the input text area and the label component contain existing comments.</p>
<p>&nbsp;</p>
<p>2.  Bind the <em>Input Text </em>Area to the cell highlighted in yellow.  The web service connection will use this as one of the inputs.</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2012/01/bind_input_text.png"><img class="aligncenter size-full wp-image-558" title="bind_input_text" src="http://davidlai101.com/blog/wp-content/uploads/2012/01/bind_input_text.png" alt="Bind input text" width="908" height="574" /></a></p>
<p>3.  Now let&#8217;s setup our Web Service Connection.  On the data manager, add a <em>Web Service Connection</em> and enter the WSDL url into the <em>WSDL URL: input box</em>.</p>
<p>4.  Bind the input values to the cells of your spreadsheet.  (In our example we bind to 3 input values. Note that the output value is optional so we will skip that part.  In addition we will skip creating a Web Service Connection that retreives prior comments since it uses the same concept of what we are doing here)</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2012/01/datamanager.png"><img class="aligncenter size-full wp-image-559" title="datamanager" src="http://davidlai101.com/blog/wp-content/uploads/2012/01/datamanager.png" alt="Data Manager" width="1116" height="627" /></a></p>
<p>5.  Insert a <em>Connection Refresh Button</em> component onto the canvas.  Make sure the <em>Web Service Connection</em> is checked.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2012/01/comment_button.png"><img class="aligncenter size-full wp-image-563" title="comment_button" src="http://davidlai101.com/blog/wp-content/uploads/2012/01/comment_button.png" alt="Connection Refresh Button" width="969" height="359" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2012/01/26/using-xcelsius-and-webservices-to-insert-comments-into-a-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>All you need to know about Open Document (opendoc) Part 2</title>
		<link>http://davidlai101.com/blog/2011/09/29/all-you-need-to-know-about-open-document-opendoc-part-2/</link>
		<comments>http://davidlai101.com/blog/2011/09/29/all-you-need-to-know-about-open-document-opendoc-part-2/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 18:11:18 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Business Objects]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[Open Document]]></category>
		<category><![CDATA[opendoc]]></category>
		<category><![CDATA[SAP BusinessObjects Dashboards]]></category>
		<category><![CDATA[Xcelsius 2008]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=472</guid>
		<description><![CDATA[I&#8217;ve been getting a lot of emails lately on how to setup opendocument (opendoc), so I&#8217;d like to post this tutorial on how to do so which works for Business Objects XI 3.1. Unfortunately my previous tutorial at http://davidlai101.com/blog/2008/11/04/all-you-need-to-know-about-opendoc/ only works with Business Objects XI R2 Please note that the tutorial was taken from SAP BusinessObjects [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been getting a lot of emails lately on how to setup opendocument (opendoc), so I&#8217;d like to post this tutorial on how to do so which works for Business Objects XI 3.1.</p>
<p>Unfortunately my previous tutorial at <a href="http://davidlai101.com/blog/2008/11/04/all-you-need-to-know-about-opendoc/">http://davidlai101.com/blog/2008/11/04/all-you-need-to-know-about-opendoc/</a> only works with Business Objects XI R2</p>
<p>Please note that the tutorial was taken from <a title="SAP BusinessObjects Dashboard 4.0 Cookbook" href="http://link.packtpub.com/fWXghv" target="_blank">SAP BusinessObjects Dashboards 4.0 Cookbook</a> so if you are interested in more useful Xcelsius recipes, be sure to purchase a copy <img src='http://davidlai101.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>If you only need the Excel Template for setting up OpenDocument calls, you can download it <a title="OpenDoc 3.1 Excel Template" href="http://davidlai101.com/blog/wp-content/uploads/2011/09/OpenDoc_Template-XI31.xls" target="_blank">here</a></p>
<p>If you are interested in getting detailed information on OpenDocument Parameters please download the official SAP OpenDocument documentation <a href="http://help.sap.com/businessobject/product_guides/boexir3/en/xi3-1_url_reporting_opendocument_en.pdf" title="SAP OpenDocument Documentation" target="_blank">here</a></p>
<p>Otherwise continue reading for the Tutorial<span id="more-472"></span></p>
<h2>Getting ready</h2>
<p>A WEBI report with a prompt must be setup first.  In our example, the WEBI report will ask for a Region parameter.</p>
<p>You can download the example XLF source file from <a title="XLF Source" href="http://davidlai101.com/blog/wp-content/uploads/2011/09/c3r12.zip" target="_blank">here</a></p>
<h2>How to do it&#8230;</h2>
<p>1.            Drag a <strong>Combo Box</strong> selector onto the canvas and bind the label values to the list of Regions on the Excel spreadsheet as shown below. Set <strong>Label</strong> as the <strong>Insertion Type </strong>and bind the <strong>Destination</strong> to the cell highlighted in yellow, which will be the input parameter passed to the opendoc call.</p>
<p> <a href="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_63.png"><img class="aligncenter size-full wp-image-474" title="1780EN_03_63" src="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_63.png" alt="" width="608" height="452" /></a></p>
<p>2.            Log into <strong>BI Launch Pad</strong> (Formerly<strong> Infoview</strong>), go to the location of where the Web Intelligence report is located. Right click and select properties.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_64.png"><img class="aligncenter size-full wp-image-475" title="1780EN_03_64" src="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_64.png" alt="" width="768" height="298" /></a></p>
<p>3.            Copy the <strong>CUID</strong></p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_65.png"><img class="aligncenter size-full wp-image-476" title="1780EN_03_65" src="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_65.png" alt="" width="560" height="259" /></a></p>
<p>4.            On cell <strong>B14</strong> shown below, an opendoc url is constructed. Paste the <strong>CUID</strong> from Step 3 onto Cell<strong> B23 highlighted in grey</strong>. Cell <strong>C23</strong> equals the <strong>Selected Region</strong> cell <strong>C2</strong> from Step 1.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_66.png"><img class="aligncenter size-full wp-image-477" title="1780EN_03_66" src="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_66.png" alt="" width="963" height="488" /></a></p>
<p>5.            Drag a <strong>URL Button</strong> component onto the canvas from the<strong> Web Connectivity</strong> section of the <strong>Components</strong> window. In the<strong> URL Button</strong> properties change the <strong>Label</strong> text to<strong> Open WEBI report</strong>, and bind the URL to the opendoc url cell <strong>B14</strong> from Step 2.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_67.png"><img class="aligncenter size-full wp-image-478" title="1780EN_03_67" src="http://davidlai101.com/blog/wp-content/uploads/2011/09/1780EN_03_67.png" alt="" width="656" height="340" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2011/09/29/all-you-need-to-know-about-open-document-opendoc-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Charles to help you debug!</title>
		<link>http://davidlai101.com/blog/2011/03/18/using-charles-to-help-you-debug/</link>
		<comments>http://davidlai101.com/blog/2011/03/18/using-charles-to-help-you-debug/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 17:28:19 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Business Objects]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[charles]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[fiddler]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=375</guid>
		<description><![CDATA[In this article I would like to state the importance of how useful it is to use a traffic monitoring tool such as Charles or Fiddler when debugging connection type errors. In this example, we&#8217;ll go through a quick scenario on solving a crossdomain.xml related issue. You will need to Install Charles on your machine [...]]]></description>
			<content:encoded><![CDATA[<p>In this article I would like to state the importance of how useful it is to use a traffic monitoring tool such as Charles or Fiddler when debugging connection type errors.</p>
<p>In this example, we&#8217;ll go through a quick scenario on solving a crossdomain.xml related issue.</p>
<p>You will need to Install <strong>Charles </strong>on your machine and install the <strong>Charles addon</strong> for <strong>Firefox</strong>.</p>
<p><span id="more-375"></span></p>
<p>In the image below, I&#8217;m receiving &#8220;Cannot Access External Data&#8221; error. I&#8217;m scratching my head wondering what could be wrong.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/error.png"><img class="alignnone size-medium wp-image-377" style="margin-left: 150px; margin-right: 150px;" title="error" src="http://davidlai101.com/blog/wp-content/uploads/2011/03/error-300x228.png" alt="" width="300" height="228" /></a></p>
<p>So what I&#8217;ll do to analyze the problem is to first <strong>Enable Charles</strong> by clicking on <strong>Tools -&gt; Charles -&gt; Enable Charles</strong></p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/enable_charles.png"><img class="alignnone size-medium wp-image-378" style="margin-left: 150px; margin-right: 150px;" title="enable_charles" src="http://davidlai101.com/blog/wp-content/uploads/2011/03/enable_charles-300x144.png" alt="" width="300" height="144" /></a></p>
<p>Then start the Charles program and <strong>Start Recording</strong></p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/start_recording.png"><img class="alignnone size-full wp-image-379" style="margin-left: 150px; margin-right: 150px;" title="start_recording" src="http://davidlai101.com/blog/wp-content/uploads/2011/03/start_recording.png" alt="" width="294" height="147" /></a></p>
<p>Then reopen the link where the error occurred.  In our example, I tried putting a swf on an external website that grabs data from another Business Objects Enterprise server.</p>
<p>Once you get the error again, stop recording on Charles and take a look at the <strong>Overview</strong>.</p>
<p>As you can see, the <strong>Overview </strong>contains a Response Code of 404.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/charles_overview.png"><img class="alignnone size-medium wp-image-380" style="margin-left: 100px; margin-right: 100px;" title="charles_overview" src="http://davidlai101.com/blog/wp-content/uploads/2011/03/charles_overview-300x244.png" alt="" width="341" height="277" /></a></p>
<p>So we&#8217;ll go take a look at the <strong>Response</strong>.</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/charles_response.png"></a><a href="http://davidlai101.com/blog/wp-content/uploads/2011/03/charles_response.png"><img class="alignnone size-large wp-image-381" title="charles_response" src="http://davidlai101.com/blog/wp-content/uploads/2011/03/charles_response-1024x267.png" alt="" width="1024" height="267" /></a></p>
<p>Now we know what the error is.  It&#8217;s trying to look for crossdomain.xml which is missing from the root.  To fix the problem we&#8217;ll need to setup crossdomain.xml and place it in the root of the Business Objects Enterprise application server.</p>
<p>Please post on the comments section if you would like to share other ideas of when to use Charles/Fiddler when debugging Business Objects related development.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2011/03/18/using-charles-to-help-you-debug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Embedded Charts inside an Xcelsius Spreadsheet Table</title>
		<link>http://davidlai101.com/blog/2011/02/08/embedded-charts-inside-an-xcelsius-spreadsheet-table/</link>
		<comments>http://davidlai101.com/blog/2011/02/08/embedded-charts-inside-an-xcelsius-spreadsheet-table/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 04:15:32 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Workarounds]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[Business Objects Dashboards]]></category>
		<category><![CDATA[Embedded Charts]]></category>
		<category><![CDATA[spreadsheet table]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=344</guid>
		<description><![CDATA[One of the important features that Xcelsius lacks right now is to be able to embed charts in a table. This is a very powerful feature as we are able to present a lot of meaningful information with little real estate when embedding charts inside a table as shown. In this example I will give [...]]]></description>
			<content:encoded><![CDATA[<p>One of the important features that Xcelsius lacks right now is to be able to embed<br />
charts in a table. This is a very powerful feature as we are able to present a<br />
lot of meaningful information with little real estate when embedding charts inside<br />
a table as shown.</p>
<div id="attachment_347" class="wp-caption aligncenter" style="width: 312px"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/embed_bar_chart.png"><img class="size-medium wp-image-347 " title="Embedded Bar Chart" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/embed_bar_chart-300x117.png" alt="" width="302" height="117" /></a><p class="wp-caption-text">Embedded Bar Chart in Table</p></div>
<p><span id="more-344"></span></p>
<p>In this example I will give step by step instructions on embedding a horizontal bar<br />
chart into a table. This will allow end users to be able to compare values on the<br />
bar making each row visually comparable which adds great value as well as being able<br />
to see other misc table values very easily.</p>
<p>A big thanks goes to Michael Thompson for coming up with a WEBI solution to accomplish<br />
this task if we are using live office.  You can visit his blog post <a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/21193" target="_blank">here</a>.</p>
<div id="attachment_347" class="wp-caption aligncenter" style="width: 310px"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/embed_bar_chart.png"><img class="size-medium wp-image-347" title="Embedded Bar Chart" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/embed_bar_chart-300x117.png" alt="" width="300" height="117" /></a><p class="wp-caption-text">Embedded Bar Chart in Table</p></div>
<p>The first option is if the number of rows are static.  If this is the case, we can<br />
simply put a bar chart underneath the table so it looks like it&#8217;s part of the table. We<br />
can then easily bind the chart to the appropriate values.</p>
<p>However this only works if the number of rows are static, the reason being that we<br />
cannot control the synchronization of bar size and spacing with a table that has a<br />
dynamic number of rows.</p>
<p>So now we&#8217;ll show how to accomplish this if we are using Live Office or QAAWS.<br />
<em>Note that you can create an object in the universe that will get the same value as the bar length calculation<br />
we will be performing below. But I&#8217;ll show you the other options so that you will have a variety of<br />
solutions to choose from.</em></p>
<p><strong>If using Live Office:</strong><br />
1. Create an emulated bar using a filler character. To get your filler character<br />
ready, Open up Microsoft Word, then Insert -&gt; Symbol. Make sure the Font is (normal text)<br />
and select Character code &#8220;2588&#8243; from &#8220;Unicode (hex)&#8221;</p>
<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/word_symbol.png"><img class="size-medium wp-image-350 alignnone" style="margin-left: 150px; margin-right: 150px;" title="Bar Character" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/word_symbol-300x231.png" alt="" width="300" height="231" /></a></p>
<p>2. Now let&#8217;s create a new Web Intelligence document.<br />
Choose the eFashion 1998 Universe.<br />
I&#8217;ve just chosen a set of lines, sales revenue measure in my query.<br />
For our table we will have the lines, sales revenue and sales revenue chart as columns</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/lo_query.png"><img class="size-medium wp-image-351 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="WEBI Query" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/lo_query-300x229.png" alt="" width="300" height="229" /></a></p>
<p>3. Create a variable called &#8220;length of bar&#8221;<br />
The formula for the variable will be &#8220;=Round(([Sales revenue]/(max([Sales revenue]) forall ([Lines]))*40;0)&#8221;<br />
We&#8217;ll use a multiple of 40 because with 100 the bar is too long.</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/lob_variable.png"><img class="size-medium wp-image-352 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="Length of Bar Variable" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/lob_variable-300x164.png" alt="" width="300" height="164" /></a></p>
<p>4. Go back to your temporary Word document and copy the symbol that you inserted.</p>
<p>Now on the Sales revenue column put the formula shown below<br />
&#8220;=fill(pasted symbol from Word;[length of bar])&#8221;</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/fill_formula.png"><img class="size-medium wp-image-353 aligncenter" style="margin-left: 100px; margin-right: 100px;" title="Fill Formula" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/fill_formula-300x62.png" alt="" width="350" height="72" /></a></p>
<p>5. In Xcelsius setup your live office connection and bind the values to a spreadsheet table object and you are done!</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/lo_embedded_final.png"><img class="size-medium wp-image-354 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="Live Office Embedded Chart" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/lo_embedded_final-300x177.png" alt="" width="300" height="177" /></a></p>
<p><strong>If using QWAAS:</strong><br />
Since we can&#8217;t do the logic in WEBI, we&#8217;ll need to do it in Excel to construct the emulated bar.<br />
The logic is very similar.<br />
1. Create a QAAWS object using the same query that we used in the Live Office Example</p>
<p>2. On a cell above the QAAWS values that come in let&#8217;s get the max sales revenue.  We will assume that there are a dynamic<br />
range of rows ranging from 1 to 50 &#8220;=max(B4:B54)&#8221;</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_max.png"><img class="size-medium wp-image-355 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="Get Max Value for denominator" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_max-300x242.png" alt="" width="300" height="242" /></a></p>
<p>3. Copy the symbol from Word</p>
<p>Now on each row from C5 to C54 put the formula =&#8221;rept(&#8220;pasted symbol from Word&#8221;, round((B5/$C$2)*40,0))&#8221;<br />
The rept function is just like the fill function in webi.<br />
Also we are using *40 because with 100 the bar will be too long.</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_bar.png"><img class="size-medium wp-image-356 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="Qaaws Excel Formula" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_bar-294x300.png" alt="" width="294" height="300" /></a></p>
<p>4. Now copy the columns appropriately so that when we bind to the spreadsheet, the formatting looks nice.</p>
<p style="text-align: center;"><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_embedded_final.png"><img class="size-medium wp-image-357 aligncenter" style="margin-left: 150px; margin-right: 150px;" title="QaaWS version of Embedded Chart" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/qaaws_embedded_final-300x238.png" alt="" width="300" height="238" /></a></p>
<p>That&#8217;s it,<br />
Now that you are familiar with how to emulate a bar, you can try creating a bar length object in the universe so you keep<br />
all data manipulations logic in the data layer for best practices <img src='http://davidlai101.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You can download the source files for the 3 examples <a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/Embedded-Chart-Examples.zip">here for reference</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2011/02/08/embedded-charts-inside-an-xcelsius-spreadsheet-table/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SAP Crystal Dashboard and Presentation Design (Xcelsius) Cookbook Coming Soon!</title>
		<link>http://davidlai101.com/blog/2011/02/07/sap-crystal-dashboard-and-presentation-design-xcelsius-cookbook-coming-soon/</link>
		<comments>http://davidlai101.com/blog/2011/02/07/sap-crystal-dashboard-and-presentation-design-xcelsius-cookbook-coming-soon/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 19:51:13 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Design Practices]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Workarounds]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[Business Objects Dashboards]]></category>
		<category><![CDATA[Cookbook]]></category>
		<category><![CDATA[sap crystal dashboard design]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=332</guid>
		<description><![CDATA[I hope that everyone has had a great start to 2011! 2010 was a huge year but 2011 looks to be even bigger! I&#8217;m very pleased to announce that the Xcelsius Cookbook, which Xavier Hacking and I have been working very hard on, is scheduled to be released in it&#8217;s final format on May 2011. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://davidlai101.com/blog/wp-content/uploads/2011/02/cookbook-cover.jpg"><img class="alignleft size-full wp-image-334" title="cookbook cover" src="http://davidlai101.com/blog/wp-content/uploads/2011/02/cookbook-cover.jpg" alt="" width="240" height="296" /></a><strong>I hope that everyone has had a great start to 2011!</strong><br />
<strong>2010 was a huge year but 2011 looks to be even bigger!</strong></p>
<p>I&#8217;m very pleased to announce that the Xcelsius Cookbook, which <a href="http://www.hackingsap.com/blog/">Xavier Hacking</a> and I have been working very hard on, is scheduled to be released in it&#8217;s final format on May 2011.</p>
<p>The book will be structured like a cookbook where we will go through step by step on accomplishing different tasks (recipes) in Xcelsius.</p>
<p>In addition we will be showcasing some of the more popular 3rd party addons, provide best practices for development, as well as provide some real life dashboard examples built using recipes learned from the cookbook.</p>
<p>The book is currently available as RAW (Read as we write) format since it is currently under development, so feel free to check it out at the <a href="https://www.packtpub.com/sap-crystal-dashboard-and-presentation-design-cookbook/book">Packt Publishing website</a> for more information.  In addition, since SAP is re-branding Xcelsius yet again, the book name will most likely change to SAP Business Objects Dashboards Cookbook.  Stay Tuned for updates!</p>
<p>Thanks for all your support!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2011/02/07/sap-crystal-dashboard-and-presentation-design-xcelsius-cookbook-coming-soon/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trick to synchronize the hovering/selection of multiple scorecards</title>
		<link>http://davidlai101.com/blog/2010/12/08/trick-to-synchronize-the-hoveringselection-of-multiple-scorecards/</link>
		<comments>http://davidlai101.com/blog/2010/12/08/trick-to-synchronize-the-hoveringselection-of-multiple-scorecards/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 00:51:36 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Workarounds]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[hovering]]></category>
		<category><![CDATA[scorecard]]></category>
		<category><![CDATA[syncronize]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=313</guid>
		<description><![CDATA[Recently for one of my clients, I had to figure out a way to synchronize the selection of multiple scorecard components. The tables needed to be separated but at the same time we needed to make sure that when hover over a row on one table, that the other tables would have the same row [...]]]></description>
			<content:encoded><![CDATA[<p>Recently for one of my clients, I had to figure out a way to synchronize the selection of multiple scorecard components.  The tables needed to be separated but at the same time we needed to make sure that when hover over a row on one table, that the other tables would have the same row highlighted.</p>
<p>The easiest way to accomplish this is to have a separator column to separate each table, and then overlay a background or rectangle on the blank column.  However the rectangle/background looks very ugly as what I have shown on the video.</p>
<p>Please watch the video for a detailed example on how to accomplish the synchronization trick with multiple scorecards.</p>
<p><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="355" src="http://www.youtube.com/embed/9lDCYXT_5Jw?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=9lDCYXT_5Jw"><img src="http://img.youtube.com/vi/9lDCYXT_5Jw/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=9lDCYXT_5Jw">www.youtube.com/watch?v=9lDCYXT_5Jw</a></p></p>
<p>I&#8217;ve also outlined the steps to accomplish this if you click on &#8220;More&#8221;<br />
<span id="more-313"></span><br />
<strong> Step 1:</strong> Have 2 or more scorecards lined up side by side on the canvas</p>
<p><strong>Step 2:</strong> Stretch the scorecards to the maximum vertical length that you think will be possible. For example it might be a maximum of 20 rows. The reason why we have to do this is because the table doesn&#8217;t automatically shrink even if we ignore blank row cells.</p>
<p><strong>Step 3:</strong> Put the scorecards inside a canvas of your desired vertical length. Make sure that &#8220;vertical scrollbar&#8221; is automatic and &#8220;horizontal scrollbar&#8221; is Off for the Scroll Bar Options of the Canvas container.</p>
<p><strong>Step 4:</strong> On the scorecard components, uncheck the rows selectable option and column sorting</p>
<p><strong>Step 5:</strong> Overlay a list box selector on top of the scorecards and make it the same size and length starting from after the header.  It is important to make sure that the text in both the list box selector and the scorecard components are the same.</p>
<p><strong>Step 6: </strong>Set the transparency on the list box selector to about 80-85% and create a dummy column that has a &#8220;.&#8221; if there exists a value for the scorecard and blank if there is none.  Right justify the list box selector text so we don&#8217;t see the &#8220;.&#8221;</p>
<p>There you go! now when you hover over one scorecard row, it looks like all the scorecard rows are being hovered in sync!</p>
<p>You can download the example xlf file from <a href="http://davidlai101.com/blog/wp-content/uploads/2010/12/sync-scorecard.zip">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2010/12/08/trick-to-synchronize-the-hoveringselection-of-multiple-scorecards/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xcelisius Dashboards outside of Infoview with the help of CELogonToken</title>
		<link>http://davidlai101.com/blog/2010/11/18/xcelisius-dashboards-outside-of-infoview-with-the-help-of-celogontoken/</link>
		<comments>http://davidlai101.com/blog/2010/11/18/xcelisius-dashboards-outside-of-infoview-with-the-help-of-celogontoken/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 21:21:12 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Workarounds]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[CELogonToken]]></category>
		<category><![CDATA[connectivity]]></category>
		<category><![CDATA[Dashboards outside Infoview]]></category>
		<category><![CDATA[external web application]]></category>
		<category><![CDATA[Infoview]]></category>
		<category><![CDATA[Single Sign On]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=279</guid>
		<description><![CDATA[Not all corporations want their employees to access dashboards through Infoview as some may want to access dashboards through a 3rd party website or portal such as Sharepoint. On top of that, users generally don’t want a login pop-up to appear whenever dashboard data is first refreshed. So we’ll need some sort of hidden login [...]]]></description>
			<content:encoded><![CDATA[<p>Not all corporations want their employees to access dashboards through Infoview as some may want to access dashboards through a 3rd party website or portal such as Sharepoint. On top of that, users generally don’t want a login pop-up to appear whenever dashboard data is first refreshed.</p>
<p>So we’ll need some sort of hidden login mechanism that bypasses the pop-up and allows data to be refreshed on the dashboard.</p>
<p>Thanks to <strong>Ryan Goodman</strong> for de-mystifying the CELogonToken @ <a href="http://ryangoodman.net/blog/index.php/2008/01/21/xcelsius_single_sign_on_with_celogontoke" target="_blank">http://ryangoodman.net/blog/index.php/2008/01/21/xcelsius_single_sign_on_with_celogontoke</a><br />
and thanks to <strong>William Sees</strong> for posting his code in the SDN network @ <a href="http://forums.sdn.sap.com/thread.jspa?threadID=1544768&amp;tstart=30" target="_blank">http://forums.sdn.sap.com/thread.jspa?threadID=1544768&amp;tstart=30</a></p>
<p>In this article we will go step by step through the solution on how to retrieve a Business Objects Logon token and insert it into the CELogonToken Flash variable.</p>
<p><span id="more-279"></span></p>
<p>First let&#8217;s talk about the CELogonToken and what it does</p>
<p><strong>What is the CELogonToken and what happens during dashboard run time?</strong></p>
<p>The CELogonToken is a Flash Variable that is passed into the Xcelsius Dashboard whenever an Xcelsius Dashboard is opened up from Infoview. The token is populated with a session token that BOE creates when a person is logged into Infoview and any Xcelsius Dashboard using Query as a Web Service or Live Office connections will automatically use the CELogonToken to perform authentication.  With each transaction to Business Objects, the token is passed back to Business Objects for authentication.  If the CELogonToken does not exist (ie: if we opened the dashboard swf outside of Infoview), the login pop-up asking for authentication will show up when the data is trying to refresh.</p>
<p><strong>How does Xcelsius consume the CELogonToken?</strong><br />
If you look at the &lt;OBJECT&gt; tag in the code below, you will see that the CELogonToken Flash Variable is populated with a Business Objects session token.  From there authentication can take place transparently when the Query as a Web Service or Live Office connection is executed from the dashboard.</p>
<p><code>&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"<br />
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="100%" HEIGHT="100%" VIEWASTEXT&gt;<br />
&lt;PARAM VALUE="../../../../opendoc/documentDownload?iDocID=10000&amp;sKind=Flash"&gt;<br />
&lt;PARAM VALUE=high&gt;<br />
&lt;PARAM VALUE=#FFFFFF&gt;<br />
&lt;PARAM VALUE="<strong>CELogonToken=servername.domain%4066270JJ45M1Ox2XibIf2B66268JUPcDiNQd2vGZEBe&amp;CEWebServiceURL=http%3A%2F%2Fservername %3Aportnumber%2Fdswsbobje%2Fservices%2Fsession</strong>"&gt;<br />
&lt;EMBED src="../../../../opendoc/documentDownload?iDocID=10000&amp;sKind=Flash" flashVars="<strong>CELogonToken=servername.domain%4066270JJ45M1Ox2XibIf2B66268JUPcDiNQd2vGZEBe&amp;CEWebServiceURL=http%3A%2F%2Fservername%3Aportnumber8443%2Fdswsbobje%2Fservices%2Fsession</strong>" quality=high bgcolor=#FFFFFF WIDTH="100%" HEIGHT="100%" ALIGN="" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt;<br />
&lt;/EMBED&gt;<br />
&lt;/OBJECT&gt;</code></p>
<h2>Instructions</h2>
<p>Now that we have a better understanding of what the CELogonToken does, lets go through the steps on getting the transparent authentication to work.</p>
<p><strong>Step 1:</strong></p>
<p>Make sure your dashboard is complete with a QAAWS or Live Office Connection.</p>
<p><strong>Step 2:</strong></p>
<p>Create a jsp (dashboardTest.jsp) that your tomcat webapp server can access and store that in a directory.  For testing purposes just create the following directory &lt;BO Installation&gt;\Tomcat55\webapps\InfoViewApp\DashboardTest</p>
<p>This will ensure that the jsp can access all the required packages.  You can customize which directory you want to put the jsp but you will need to make sure the BOE sdks are accessible.</p>
<p><strong>Step 3:</strong></p>
<p>Again for testing purposes, export the swf file as Test.swf in &lt;BO Installation&gt;\Tomcat55\webapps\InfoViewApp\DashboardTest</p>
<p><strong>Step 4:</strong></p>
<p>Insert the code snippet at the end of the article into the dashboardTest.jsp file.  Note that everything I have highlighted in blue you will need to change according to your specific settings.</p>
<p><strong>Step 5:</strong></p>
<p>Open up the URL in your browser http://server:port/InfoViewApp/DashboardTest/dashboardTest.jsp and verify that the data connection refreshes without the login pop-up coming up.</p>
<h2>Explanation of jsp Code</h2>
<p>The first part of the code imports the required libraries from the Business Objects SDK to retrieve the logon token.</p>
<p><code>&lt;%@ page import="com.crystaldecisions.sdk.exception.SDKException,<br />
com.crystaldecisions.sdk.framework.*,<br />
com.crystaldecisions.sdk.occa.infostore.*,<br />
com.crystaldecisions.sdk.occa.security.*,<br />
java.net.*,<br />
com.crystaldecisions.Enterprise.*,<br />
com.crystaldecisions.sdk.plugin.admin.*,<br />
com.businessobjects.webutil.Encoder"<br />
%&gt;<br />
&lt;%@ page import="java.sql.*"%&gt;</code></p>
<p>The second part of the code sets the server, username and password. We can use a hard coded username/password if for example we want one universal Dashboard user that has view access to a set of dashboards which would make maintenance easier. If you are interested in single sign on you will have to write some extra code to grab the appropriate username and password. Finally you can create a method that returns the username/password in an external class if you don’t want to hardcode the username/password. The code bolded in the try block retrieves the Business Objects logon token.</p>
<p><code>//-------------------------------------------------------------------Create BO Session and redirect to Infoview<br />
IEnterpriseSession enterpriseSession;<br />
/* * Set Enterprise Logon credentials. */<br />
final String BO_CMS_NAME = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a></strong>";<br />
final String BO_AUTH_TYPE = "secEnterprise";<br />
final String BO_USERNAME = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">username</a></strong>";<br />
final String BO_PASSWORD = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">password</a></strong>";<br />
</code><br />
<code>ILogonTokenMgr logonTokenMgr;<br />
String defaultToken = "";<br />
final String INFOVIEW_URL = "http://<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a>:<a href="http://forums.sdn.sap.com/" target="_newWindow">port</a></strong>/InfoViewApp/logon/start.do";<br />
/*<br />
* Log onto Enterprise<br />
*/<br />
boolean loggedIn = true;<br />
try {<br />
<strong>enterpriseSession = CrystalEnterprise.getSessionMgr().logon(BO_USERNAME,BO_PASSWORD, BO_CMS_NAME,<br />
BO_AUTH_TYPE);</strong><br />
<strong>logonTokenMgr = enterpriseSession.getLogonTokenMgr();</strong><br />
<strong>defaultToken = logonTokenMgr.createWCAToken("", 20, 1);</strong><br />
}</code></p>
<p>The third part of the code does a check to see if the token generated above was valid and generates the appropriate output which will call the dashboard with the appropriate CELogonToken variable.</p>
<p><code>//-------------------------------------------------------------------If login successful<br />
if(loggedIn) {<br />
String Flashvars="&amp;CELogonToken=" + Encoder.encodeURL(defaultToken);<br />
Flashvars += "&amp;CEWebServiceURL=" + Encoder.encodeURL("http://<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a>:<a href="http://forums.sdn.sap.com/" target="_newWindow">port</a></strong>/dswsbobje/services/session");<br />
String output = "";<br />
output = output + "&lt;OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' id='myMovieName' style='width: 355px; height: 237px'&gt; \r\r";<br />
output = output + "&lt;PARAM VALUE='<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">Test.swf</a>'&gt; \r\r"; //( \r = carriage return to make output more legible )<br />
output = output + "&lt;PARAM VALUE=high&gt; \r\r";<br />
output = output + "&lt;PARAM value=\"" + Flashvars + "\"&gt;\r\r";<br />
output = output + "&lt;EMBED src='<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">Test.swf</a>' flashvars=\" " + Flashvars + "\" quality=high bgcolor=#FFFFFF WIDTH='1000' HEIGHT='600' NAME='myMovieName' ALIGN=\"\" TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/go/getflashplayer'&gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;\r\r";<br />
out.println(output);<br />
}<br />
//-------------------------------------------------------------------If login failed<br />
else {<br />
out.println("Login to Business Objects Failed.");<br />
}</strong></strong></code></p>
<h2>Full JSP Code (Sections highlighted need to be changed)</h2>
<p><code>&lt;%@ page import="com.crystaldecisions.sdk.exception.SDKException,<br />
com.crystaldecisions.sdk.framework.*,<br />
com.crystaldecisions.sdk.occa.infostore.*,<br />
com.crystaldecisions.sdk.occa.security.*,<br />
java.net.*,<br />
com.crystaldecisions.Enterprise.*,<br />
com.crystaldecisions.sdk.plugin.admin.*,<br />
com.businessobjects.webutil.Encoder"<br />
%&gt;<br />
&lt;%@ page import="java.sql.*"%&gt;<br />
&lt;%<br />
//-------------------------------------------------------------------Create BO Session and redirect to Infoview<br />
IEnterpriseSession enterpriseSession;<br />
/* * Set Enterprise Logon credentials. */<br />
final String BO_CMS_NAME = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a></strong>";<br />
final String BO_AUTH_TYPE = "secEnterprise";<br />
final String BO_USERNAME = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">username</a></strong>";<br />
final String BO_PASSWORD = "<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">password</a></strong>";<br />
ILogonTokenMgr logonTokenMgr;<br />
String defaultToken = "";<br />
final String INFOVIEW_URL = "http://<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a>:<a href="http://forums.sdn.sap.com/" target="_newWindow">port</a></strong>/InfoViewApp/logon/start.do";<br />
/*<br />
* Log onto Enterprise<br />
*/<br />
boolean loggedIn = true;<br />
try {<br />
enterpriseSession = CrystalEnterprise.getSessionMgr().logon(BO_USERNAME,BO_PASSWORD, BO_CMS_NAME,<br />
BO_AUTH_TYPE);<br />
logonTokenMgr = enterpriseSession.getLogonTokenMgr();<br />
defaultToken = logonTokenMgr.createWCAToken("", 20, 1);<br />
}<br />
catch (Exception error)<br />
{<br />
loggedIn = false;<br />
}<br />
//-------------------------------------------------------------------If login successful<br />
if(loggedIn) {<br />
String Flashvars="&amp;CELogonToken=" + Encoder.encodeURL(defaultToken);<br />
Flashvars += "&amp;CEWebServiceURL=" + Encoder.encodeURL("http://<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">server</a>:<a href="http://forums.sdn.sap.com/" target="_newWindow">port</a></strong>/dswsbobje/services/session");<br />
String output = "";<br />
output = output + "&lt;OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' id='myMovieName' style='width: 355px; height: 237px'&gt; \r\r";<br />
output = output + "&lt;PARAM VALUE='<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">Test.swf</a>'&gt; \r\r"; //( \r = carriage return to make output more legible )<br />
output = output + "&lt;PARAM VALUE=high&gt; \r\r";<br />
output = output + "&lt;PARAM value=\"" + Flashvars + "\"&gt;\r\r";<br />
output = output + "&lt;EMBED src='<strong><a href="http://forums.sdn.sap.com/" target="_newWindow">Test.swf</a>' flashvars=\" " + Flashvars + "\" quality=high bgcolor=#FFFFFF WIDTH='1000' HEIGHT='600' NAME='myMovieName' ALIGN=\"\" TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/go/getflashplayer'&gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;\r\r";<br />
out.println(output);<br />
}<br />
//-------------------------------------------------------------------If login failed<br />
else {<br />
out.println("Login to Business Objects Failed.");<br />
}<br />
%&gt;</strong></strong></code></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2010/11/18/xcelisius-dashboards-outside-of-infoview-with-the-help-of-celogontoken/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Xcelsius Push Button</title>
		<link>http://davidlai101.com/blog/2010/05/29/xcelsius-push-button/</link>
		<comments>http://davidlai101.com/blog/2010/05/29/xcelsius-push-button/#comments</comments>
		<pubDate>Sat, 29 May 2010 22:05:31 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[push button]]></category>
		<category><![CDATA[Xcelsius 2008]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=255</guid>
		<description><![CDATA[The Push Button is a powerful new feature in Xcelsius SP3 that allows developers to transfer source data from an arbitrary sized cell block to a destination cell block of the same size. This gives us a triggering type mechanism where we needed to jump through hoops in order to accomplish before. I&#8217;ve attached a [...]]]></description>
			<content:encoded><![CDATA[<p>The <strong>Push Button</strong> is a powerful new feature in Xcelsius SP3 that allows developers to transfer source data from an arbitrary sized cell block to a destination cell block of the same size.  This gives us a triggering type mechanism where we needed to jump through hoops in order to accomplish before.</p>
<p>I&#8217;ve attached a video and the example xlf source file which shows how to use the push button as a default/reset button.</p>
<p><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="355" src="http://www.youtube.com/embed/p2ECKzjfb5g?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=p2ECKzjfb5g"><img src="http://img.youtube.com/vi/p2ECKzjfb5g/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=p2ECKzjfb5g">www.youtube.com/watch?v=p2ECKzjfb5g</a></p></p>
<p>If you have any additional examples that you would like to share, please post them on the comments section below.</p>
<p>Please download the source file <a href="http://www.davidlai101.com/blog/media/blogs/bobj/push_button/pushbutton_example.xlf">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2010/05/29/xcelsius-push-button/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Xcelsius Dynamic Color Binding</title>
		<link>http://davidlai101.com/blog/2010/04/06/xcelsius-dynamic-color-binding/</link>
		<comments>http://davidlai101.com/blog/2010/04/06/xcelsius-dynamic-color-binding/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 05:05:40 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[Dynamic Color Binding]]></category>

		<guid isPermaLink="false">http://davidlai101.com/blog/?p=245</guid>
		<description><![CDATA[Dynamic Color Binding is a great new feature in Xcelsius SP3 that allows developers to dynamically bind colors. This gives developers total flexibility on dynamically customizing their coloring schema during run time. I&#8217;ve attached a video which shows a couple examples on using dynamic color binding. www.youtube.com/watch?v=oCEnMUwdrUw If you have any additional examples that you [...]]]></description>
			<content:encoded><![CDATA[<p>Dynamic Color Binding is a great new feature in Xcelsius SP3 that allows developers to dynamically bind colors.  This gives developers total flexibility on dynamically customizing their coloring schema during run time.</p>
<p>I&#8217;ve attached a video which shows a couple examples on using dynamic color binding.</p>
<p><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="355" src="http://www.youtube.com/embed/oCEnMUwdrUw?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=oCEnMUwdrUw"><img src="http://img.youtube.com/vi/oCEnMUwdrUw/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=oCEnMUwdrUw">www.youtube.com/watch?v=oCEnMUwdrUw</a></p></p>
<p>If you have any additional examples that you would like to share, please post them on the comments section.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2010/04/06/xcelsius-dynamic-color-binding/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Simulating Excel Conditional Formatting in Xcelsius</title>
		<link>http://davidlai101.com/blog/2009/08/09/simulating-excel-conditional-formatting/</link>
		<comments>http://davidlai101.com/blog/2009/08/09/simulating-excel-conditional-formatting/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:04:11 +0000</pubDate>
		<dc:creator>David Lai</dc:creator>
				<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[conditional formatting]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[grid component]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Conditional formatting in Excel is a feature that is very commonly used and very useful in displaying how well a set of values in a table are doing. Unfortunately we can not transfer the dynamic nature of conditional formatting from Excel to Xcelsius if we were to just insert the table selector object. Basically if [...]]]></description>
			<content:encoded><![CDATA[<p>Conditional formatting in Excel is a feature that is very commonly used and very useful in displaying how well a set of values in a table are doing.  Unfortunately we can not transfer the dynamic nature of conditional formatting from Excel to Xcelsius if we were to just insert the table selector object.  Basically if the initial binding color of a cell was <b>&#8220;Green&#8221;</b>, it would stay green even though it were to change to <b>&#8220;Red&#8221;</b> when the value changes.</p>
<p>Please view my video on how to simply accomplish this using a grid component in Xcelsius</p>
<p><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="355" src="http://www.youtube.com/embed/2oxXZrvxOb4?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;modestbranding=1&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=2oxXZrvxOb4"><img src="http://img.youtube.com/vi/2oxXZrvxOb4/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=2oxXZrvxOb4">www.youtube.com/watch?v=2oxXZrvxOb4</a></p></p>
<p>Please visit my post on <a href="http://myxcelsius.com/2009/07/27/simulated-conditional-formatting-part-2/" target="_blank">&#8220;MyXcelsius&#8221;</a> for a more advanced example of conditional formatting in Xcelsius involving dynamic sliders and charts.</p>
<p>You can download the source file for the example <a href="http://www.davidlai101.com/blog/media/blogs/bobj/simulated_conditional_formatting/conditional%20formatting%20part%202.zip" title="">here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://davidlai101.com/blog/2009/08/09/simulating-excel-conditional-formatting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

