<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>SharePoint Magazine &#187; Featured</title>
	<atom:link href="http://sharepointmagazine.net/category/featured/feed" rel="self" type="application/rss+xml" />
	<link>http://sharepointmagazine.net</link>
	<description>SharePoint Magazine is an online Magazine dedicated to the world of SharePoint</description>
	<lastBuildDate>Fri, 12 Mar 2010 12:38:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SPoint.me &#8211; The SharePoint Social Network</title>
		<link>http://sharepointmagazine.net/featured/spoint-me-the-sharepoint-social-network</link>
		<comments>http://sharepointmagazine.net/featured/spoint-me-the-sharepoint-social-network#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:50:13 +0000</pubDate>
		<dc:creator>Arno Nel</dc:creator>
				<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=3897</guid>
		<description><![CDATA[It gives me great pleasure to introduce you to SPoint.me . SPoint is aiming to become the premier Social Network for people in the SharePoint Industry. Its a little bit of Facebook, Twitter, LinkedIn, Digg, and Wordpress, all rolled into one.]]></description>
			<content:encoded><![CDATA[<h2><a title="SPoint.me" href="http://spoint.me" target="_blank"><img class="alignnone size-full wp-image-3898" title="Spoint" src="http://sharepointmagazine.net/wp-content/uploads/2010/03/header_splash_blue.jpg" alt="" width="573" height="248" /></a></h2>
<p>It gives me great pleasure to introduce you to <a href="http://spoint.me" target="_blank">SPoint.me</a> . SPoint is aiming to become the premier Social Network for people in the SharePoint Industry. Its a little bit of Facebook, Twitter, LinkedIn, Digg, and Wordpress, all rolled into one.</p>
<ul>
<li>Differentiate yourself</li>
<li>Create a User Group</li>
<li>Launch your products</li>
<li>Provide Support</li>
<li>Engage</li>
<li>Connect</li>
</ul>
<p>Some of the features are listed below, but the best way to understand, is to sign up <img src='http://sharepointmagazine.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  More details in the next few weeks.</p>
<h2>Blogging</h2>
<p>Start a blog built on the best blogging software in the world. Even allow each of your users to start their own full powered WordPress blog. Track new posts and comments across your site.</p>
<p><img src="http://spoint.me/email/blog.gif" alt="" /></p>
<p><img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Groups</h2>
<p>Powerful public, private or hidden groups allow your users to break the discussion down into specific topics</p>
<p><img src="http://spoint.me/email/group.gif" alt="" /><br />
<img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Friends</h2>
<p>Let your users make connections so they can track the activity of others, or filter on only those users they care about the most.<br />
<img src="http://spoint.me/email/friends.gif" alt="" /></p>
<p><img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Messaging</h2>
<p>Private messaging will allow your users to talk to each other directly, and in private. Not just limited to one on one discussions, your users can send messages to multiple recipients.<br />
<img src="http://spoint.me/email/messaging.gif" alt="" /></p>
<p><img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Activity Streams</h2>
<p>Global, personal and group activity streams with threaded commenting, direct posting, favoriting and @mentions. All with full RSS feed and email notification support..</p>
<p><img src="http://spoint.me/email/activity.gif" alt="" /></p>
<p><img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Profiles</h2>
<p>LinkedIn style profiles fields allow members to describe themselves..</p>
<p><img src="http://spoint.me/email/profile.gif" alt="" /></p>
<p><img src="http://spoint.me/email/hr_small.gif" alt="" width="400" height="21" /></p>
<h2>Forums</h2>
<p>Full powered discussion forums built directly into groups allow for more conventional in-depth conversations..</p>
<p><img src="http://spoint.me/email/forums.gif" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/featured/spoint-me-the-sharepoint-social-network/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Everything You Need to Know about BDC: Part 8 of 8</title>
		<link>http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-8-of-8</link>
		<comments>http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-8-of-8#comments</comments>
		<pubDate>Mon, 08 Feb 2010 10:53:04 +0000</pubDate>
		<dc:creator>Wen He</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[BDC]]></category>
		<category><![CDATA[BI]]></category>
		<category><![CDATA[Business Data Catalog]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Dashboards]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=3838</guid>
		<description><![CDATA[An action is simply an operation upon a selected item. The operation can retrieve information about the selected item, or it can launch a program or Web page with the selected item as a parameter.]]></description>
			<content:encoded><![CDATA[<p>Welcome back to Part 8 of our 8-part series on the Business Data Catalog (BDC). From the previous 7 installments, we have covered everything about BDC, from BDC architecture, ADF, BDC Web parts, BDC search and profile, to the BDC object model in details.  We also touched the surface of BDC actions in <a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-4-of-8">Part 4</a> and <a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-5-of-8">Part 5</a>. As promised, we’ll dedicate this final article to actions. We’ll explain what the BDC actions are and what they can do for you.  We’ll then walk you through how to create custom actions and how to perform these actions by using custom Web parts and InfoPath forms. As you will soon learn, this is another power capability of BDC because it extends the ability to link content to Web sites.  This allows you to quickly create mashups that are item-specific so that you can take actions in context, such as write back to your LOB systems.</p>
<p>For your reference, these are our previous seven articles:</p>
<ol>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-1-of-8">Part 1</a>, BDC Purpose and technical architecture</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-2-of-8">Part 2</a>, Application Definition File (ADF) and its Development</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-3-of-8">Part 3</a>, Developing an ADF to Connect to Web Services</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-4-of-8">Part 4</a>, Consuming Business Data through Web Parts and SharePoint Lists</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-5-of-8">Part 5</a>, Implementing Enterprise Search with Business Data</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-6-of-8">Part 6</a>, Integrating User Profiles with Business Data</li>
<li><a href="http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-7-of-8">Part 7</a>, Working with the BDC Object Model</li>
</ol>
<p>With that, let’s dive into BDC actions and start by asking what is an action.</p>
<h3>What is an action?</h3>
<p>An action is simply an operation upon a selected item. The operation can retrieve information about the selected item, or it can launch a program or Web page with the selected item as a parameter. The operation is a predefined URL link in each BDC item that enables you to act on the item, such as editing, or mapping it using Live Search as we demonstrated in Part 4.<br />
An action is composed of a URL target where the action is to occur, and the matching parameters in the URL QueryString format. When we associate an action with an entity, we can pass parameters to that action based on the contents of one or more fields. For example, in the Live Search example in Part 4, we associate the Live Search page’s URL with a customer and provide the customer’s address to parameterize the search.</p>
<p>From the above, major characteristics of actions are as follows:</p>
<ol>
<li>URL-based, parameter-driven</li>
<li>Actions on any entity and appear everywhere an entity goes</li>
<li>User can take action in ECB menu</li>
<li>Custom actions means custom code</li>
</ol>
<p>A perfect example of action is the default View Profile action, as shown in <strong>Figure 1</strong>.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb.png" border="0" alt="image" width="644" height="331" /></a><br />
Figure 1  View Profile action in a Business Data Actions Web Part</p>
<p>Through a View Profile action we can navigate to the profile page of an entity. Clicking the View Profile action in a Business Data Actions Web Part as shown in Figure 1 above, as well as in a Business Data column, or in a Business Data List Web Part, lets us view the details of an item on that item&#8217;s profile page. <strong>Figure 2</strong> shows that a Profile page that displays employee details.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image1.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="299" height="484" /></a><br />
Figure 2  A Profile page that displays employee details</p>
<h4>What is a Profile page?</h4>
<p>A profile page is automatically generated for each entity that has a SpecificFinder method after BDC imports an ADF file, a profile page can display all the information from a record in the BDC.  As we’ve seen in <strong>Figure 2</strong>, a profile page can display all the fields in a record for a specific employee. The default profile page contains a BDC Item Web Part for that entity.<br />
If we put the profile page in Edit mode, there are actually two Web parts: a Business Data Item Builder and a Business Data Item that connect together. The Item Builder parses the querystring (<a href="http://win7:10001/ssp/admin/Content/Employee.aspx?EmployeeID=1)">http://win7:10001/ssp/admin/Content/Employee.aspx?EmployeeID=1)</a> and passes the EmployeeID value to the Business Data Item, which then executes the SpecificFinder method and returns a record of Employee data.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image2.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="543" height="484" /></a><br />
Figure 3  Profile page components</p>
<h4>Default Profile Page and default action</h4>
<p>As we have seen from above section, the default action (View Profile) along with the default Profile page is automatically created when the entity has a SpecificFinder method.  To provide an ECB menu user experience, we can also add actions in a Business Data List Web part without using the Business Data Actions Web Part.</p>
<h4>Defining an Action</h4>
<p>There are three ways to add an action: 1) defining it in the ADF, 2) adding it in the BDC admin page after the ADF has been imported into BDC, and 3) through the BDC Object Model. Here we’re focus the first two.</p>
<h5>Defining it in the ADF</h5>
<p>To define an Action for the specified BDC entity, we’ll first locate the &lt;Actions&gt; section within the &lt;Entities&gt; and &lt;Entity&gt; hierarchy.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image3.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="644" height="241" /></a><br />
Figure 4  Actions is nested within the Entities/Entity in ADF</p>
<p>And insert the &lt;action&gt; portion like this one:</p>
<p>&lt;Actions&gt;<br />
&lt;Action Name=&#8221;Update Employee&#8221; Position=&#8221;1&#8243; IsOpenedInNewWindow=&#8221;false&#8221; Url=&#8221;pages/editemployee.aspx?EmployeeID={0}&#8221; ImageUrl=&#8221;"&gt;<br />
&lt;ActionParameters&gt;<br />
&lt;ActionParameter Name=&#8221;EmployeeID&#8221; Index=&#8221;0&#8243; /&gt;<br />
&lt;/ActionParameters&gt;<br />
&lt;/Action&gt;</p>
<h5>Adding an action in the BDC admin page</h5>
<p>In the SSP administration page (View Application –&gt; View Entity), the action is defined below and the URL that takes EmployeeID as a parameter: <a href="http://dpm:10001/ssp/admin/Content/Employee.aspx?EmployeeID={0}">http://dpm:10001/ssp/admin/Content/Employee.aspx?EmployeeID={0}</a></p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image4.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb4.png" border="0" alt="image" width="644" height="277" /></a><br />
Figure 5  Add an action the SSP Admin page</p>
<h4>Custom Actions</h4>
<p>We also can create custom actions for entities in BDC. Among other things, custom actions allow users to navigate to any custom page to manipulate business data.<br />
Here are some scenarios that custom actions can do:</p>
<ol>
<li>Parameterize custom search</li>
<li>Update employee in HR system</li>
<li>Customize profile page for an entity</li>
<li>Integrate BDC search into enterprise report center</li>
</ol>
<p>We’ll be creating custom actions in the last part the article.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image5.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb5.png" border="0" alt="image" width="644" height="313" /></a><br />
Figure 6 Enable View Profile action in a Business Data List Web part</p>
<p>This enables the ECB-style action, we will specify a Title property and add the following in the ADF:<br />
&lt;Entity EstimatedInstanceCount=&#8221;0&#8243; Name=&#8221;Employee&#8221;&gt;<br />
&lt;Properties&gt;<br />
&lt;Property Name=&#8221;Title&#8221; Type=&#8221;System.String&#8221;&gt;LastName&lt;/Property&gt;<br />
&lt;/Properties&gt;<br />
&lt;/Entity&gt;</p>
<p>It specifies which column in the Business Data List/Related List Web part displays the Actions menu. It also specifies the name of the TypeDescriptor that corresponds to the column you want to display as the default column in Business Data lists.</p>
<p>In the Business Data Column scenario, we can also display the action menu and link the column to the business data profile in a Business Data list.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image6.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb6.png" border="0" alt="image" width="644" height="160" /></a><br />
Figure 7  View Profile action in Business Data Column</p>
<p>This is default behavior OOB for a Business Data column.  When adding the column, just make sure the following two are checked:</p>
<ul>
<li>Display the actions menu</li>
<li>Link this column to the profile page to</li>
</ul>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image7.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb7.png" border="0" alt="image" width="644" height="410" /></a><br />
Figure 7  Enable the actions menu and profile page in Business Data list</p>
<p>These profile pages are used and being indexed by BDC Search. The following search results display the profile pages that contain the search keyword (s).  Notice in Figure 8 how a search for Great Lakes will display the profile pages for both this customer and their orders.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image8.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb8.png" border="0" alt="image" width="543" height="480" /></a><br />
Figure 8  BDC Search Results in Profile Pages</p>
<h4>Enhancing the Profile Page</h4>
<p>By default, the profile page is hosted on the Shared Services Provider site collection where the BDC administration site is located. The search result (that is, the URL) links back to the Shared Services Administration site collection address that is not scalable when you extend the Web application. In real world, we may not want to give end users access to the SSP Admin site for security reason. A better practice is to create our own profile pages and host them in any site that is not part of the SSP site collection.<br />
In this example, we’ve created a dashboard page in Report Center to replace the default Profile Page. The Report Center provides enterprise reporting capabilities that are scalable and centralized.  We can direct users to custom profile pages by updating the View Profile action.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image9.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb9.png" border="0" alt="image" width="644" height="446" /></a><br />
Figure 9  Replace the default Profile Page with Custom Report Center</p>
<p>As an alternative, we can also replace the default the URL in Action element in ADF with the path to the Profile.aspx page:</p>
<p>&lt;Actions&gt;<br />
&lt;Action Position=&#8221;1&#8243; IsOpenedInNewWindow=&#8221;false&#8221; Url=&#8221;<a href="http://reportcenter/Pages/Profile.aspx?EmployeeID={0">http://reportcenter/Pages/Profile.aspx?EmployeeID={0}&#8221;</a> ImageUrl=&#8221;/_layouts/1033/images/viewprof.gif&#8221; Name=&#8221;View Profile&#8221;&gt;<br />
&lt;ActionParameters&gt;<br />
&lt;ActionParameter Index=&#8221;0&#8243; Name=&#8221;EmployeeID&#8221; /&gt;<br />
&lt;/ActionParameters&gt;<br />
&lt;/Action&gt;<br />
&lt;/Actions&gt;</p>
<p>An action to call the Profile.aspx page for each Employee ID has been defined. This action will be the default action provides in the search result.</p>
<p>Now let’s create Profile page to display information about the Employee entity in Report Center. (The Report Center is a site that provides a central location for business-intelligence-related information.)</p>
<ol>
<li>In the <a href="http://reportcenter">http://reportcenter</a> site, create a new Blank Web Part Page called “Profile.aspx”.</li>
<li>Add the following two web parts: Query String (URL) Filter Web Part and Report Viewer Web Part.</li>
<li>Configure the Query String (URL) Filter Web Part to pickup parameter “EmployeeID” from the URL query string.</li>
<li>Configure the Report Viewer Web Part to display the employee profile report called “Employee Profile”.</li>
<li>Connect the Query String (URL) Filter Web Part parameter to the SQL Server Reporting Services Report Viewer Web Part parameter “EmployeeID”.</li>
</ol>
<blockquote><p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image10.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb10.png" border="0" alt="image" width="644" height="67" /></a><br />
Figure 10  SQL Server Reporting Services Report Viewer</p>
<p>Note: Please make sure you use this Web Part and not the OOB Report Viewer Web Part.</p></blockquote>
<p>Test that the page is picking up the URL string parameter “EmployeeID” correctly by typing the following URL: <a href="http://reportcenter/Pages/Profile.aspx?EmployeeID=108">http://reportcenter/Pages/Profile.aspx?EmployeeID=108</a></p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image11.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb11.png" border="0" alt="image" width="644" height="218" /></a><br />
Figure 11  Custom Profile Page in Report Center</p>
<h4>Creating Custom Actions</h4>
<p>Creating custom actions requires custom code. The approach we take is to treat the BDC source simply as a data reader, and to build our CRUD (create/read/update/delete) logic in custom code. The BDC object model provides the means to retrieve collections, list items and enumerators, and we can use GenericInvoker to perform CRUD, which has been extensively covered in Part 7. We get the Web Parts to display data, and then we can use custom actions to create and update records by using Web parts and InfoPath Forms.</p>
<h4>Creating Web Parts</h4>
<p>We have created and deployed two Web Parts using the Object Model as shown below, with one inserting a record and one updating an existing record. (Special thanks to Lightning Tools! I’ve used <a href="http://www.lightningtools.com/bdc-meta-man/default.aspx">BDC Meta Man</a> to help with creating the Web parts.)</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image12.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb12.png" border="0" alt="image" width="467" height="480" /></a><br />
Figure 12  The two Custom Web Parts can be used to add and update employee records</p>
<p>Add these two actions in the SSP Admin page:</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image13.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb13.png" border="0" alt="image" width="644" height="166" /></a><br />
Figure 13  Adding actions in the SSP Admin page</p>
<p>Now you can access the two actions from the content menu in the Employee List:</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image14.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb14.png" border="0" alt="image" width="644" height="241" /></a><br />
Figure 14  Custom Actions Add Employee and Update Employee in the context menu</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image15.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb15.png" border="0" alt="image" width="644" height="342" /></a><br />
Figure 15  Add Employee Web Part</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image16.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb16.png" border="0" alt="image" width="561" height="484" /></a><br />
Figure 16  Update Employee Web Part</p>
<h4>Creating InfoPath Form</h4>
<p>MSDN has a great article titled Using Business Data Catalog Actions to Pass Parameters to InfoPath 2007 Browser Forms that walks you through this in detail.  So I’ve created our InfoPath Form and added the action using the Form Template path:<br />
<a href="http://dpm/_layouts/FormServer.aspx?XsnLocation=http://dpm/FormServerTemplates/EmployeeUpdate.xsn&amp;DefaultItemOpen=1&amp;EmployeeID={0}&amp;FirstName={1}&amp;LastName={2}">http://dpm/_layouts/FormServer.aspx?XsnLocation=http://dpm/FormServerTemplates/EmployeeUpdate.xsn&amp;DefaultItemOpen=1&amp;EmployeeID={0}&amp;FirstName={1}&amp;LastName={2}</a><br />
<a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image17.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb17.png" border="0" alt="image" width="644" height="277" /></a><br />
Figure 17  Adding Custom Action that uses InfoPath Form</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2010/02/image18.png"><img style="border-width: 0px;" src="http://sharepointmagazine.net/wp-content/uploads/2010/02/image_thumb18.png" border="0" alt="image" width="644" height="475" /></a><br />
Figure 18  Update Employee in InfoPath Form</p>
<h4>Conclusion</h4>
<p>In this final article, we have focused on actions that users can take on the business entities. We can define actions in ADF or add it “after the fact”. We have also created custom actions using the BDC object model by using custom Web parts and InfoPath forms to enable CRUD (create/read/update/delete) operation support. Once added, actions can be performed from within the list, which becomes relatively transparent to the user where the data comes from. [The statement that the BDC data is read-only is not true anymore as we have just demonstrated.] As you have learned from our 8-part series, BDC enables user interaction in business intelligence, enterprise content management, collaboration and social features, and enterprise search.</p>
<h4>Looking Forward to SharePoint Server 2010</h4>
<p>BDC has evolved to what is now called BCS (business connectivity services) in SharePoint 2010. Even though we can use BDC to enable connectivity to external systems, it was difficult to create solutions because of the lack of a designer and it was not so simple to create a solution that enabled users to make changes and write that data back to the external store. BCS now enables you to integrate LOB data into SharePoint and Office with full CRUD support, tighter integration with Office client applications, and better tools for modeling business entities. BCS is all about connecting to external data. We look forward to sharing with you the exciting new features in BCS and what they can do for you in the near future. Until then, aloha!</p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/administration/everything-you-need-to-know-about-bdc-part-8-of-8/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SharePoint&#8217;s Branding Limitations, Part 4</title>
		<link>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4</link>
		<comments>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4#comments</comments>
		<pubDate>Fri, 24 Jul 2009 07:51:47 +0000</pubDate>
		<dc:creator>Diantha van Marion</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Date picker]]></category>
		<category><![CDATA[Design Decisions]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML-mark up]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[My site]]></category>
		<category><![CDATA[Paging]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Search results]]></category>
		<category><![CDATA[Sifr]]></category>
		<category><![CDATA[Stylesheet]]></category>
		<category><![CDATA[Styling]]></category>
		<category><![CDATA[Tabs]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=3056</guid>
		<description><![CDATA[Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design.

This article will give the graphical designers more insight into the effect of these design decisions.]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>As a Front-end Developer with a background in designing I&#8217;ll show you how to make a graphical design that works for a default SharePoint-environment. If you want to take control over the front-end, don&#8217;t use any themes. Create your art by using style sheets!</p>
<p>Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design. For example, if a Graphical Designer puts a border on an element like a table, that will take him about 3 minutes to design, but this simple border could take the Front-end Developer a few hours to implement.</p>
<p>It&#8217;s really important that the Graphical Designer and the Front-end Developer work together and have a clear communication about the graphical design. Making a graphical design specifically for a MOSS environment could save you days on the implementation! This article will give the Graphical Designers more insight into the effect of these design decisions.</p>
<p>This article assumes that the reader has SharePoint and basic HTML knowledge.</p>
<h2>Search</h2>
<p>There are multiple search interface within a SharePoint portal. One of them is the search interface in the header. Part 1 of &#8220;The art of SharePoint, how to make a graphical design work for SharePoint&#8221; discusses that one.</p>
<p>The search result page has it&#8217;s own page layout. If you take a look at  the search results page you will see that the search interface is no longer in the header but is now onto the content area. It is not another web part, because it has kept it&#8217;s ID <span style="color: #ff6600;">#1</span>, that is reserved for the search interface.</p>
<pre><a rel="attachment wp-att-3102" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search11"></a><a rel="attachment wp-att-3610" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search1-2"><img class="alignnone size-medium wp-image-3610" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search1-300x226.jpg" alt="search1" width="300" height="226" /></a></pre>
<h2>Page layout</h2>
<p>There is a specific page layout for the search results. If you take a closer look at the Black Search Page (Welcome page)  you can identify the following page elements:</p>
<p>• Tabs</p>
<p>• Input fields</p>
<p>• Results bar</p>
<p>• Search results</p>
<p>• Paging (only visible when there are more then 10 item found)</p>
<pre><a rel="attachment wp-att-3611" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search15"><img class="alignnone size-full wp-image-3611" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search15.jpg" alt="search15" width="600" height="353" /></a></pre>
<p>The next section discusses all page elements in detail.</p>
<h2>Tabs</h2>
<p>The code in the following image shows that the tabs are rendered inside a table, the<span style="color: #ff6600;"> .ms-ptabarea</span>, which is rendered inside the <span style="color: #ff6600;">.ms-pagetitleareaframe</span> of the web part</p>
<pre><a rel="attachment wp-att-3612" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search2-2"><img class="alignnone size-full wp-image-3612" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search2.jpg" alt="search2" width="769" height="292" /></a></pre>
<p>This table has one more cell as there are tabs. In this case there are two tabs, so there are three cells. The last cell of the table has only one function; it makes sure that the whole table has a bottom border all the way to the right.</p>
<p>The &lt;td&gt;&#8217;s with a tab all contain the class name <span style="color: #ff6600;">.ms-sctabcf</span>, or if the tab is selected, the class name is <span style="color: #ff6600;">.ms-sctabcn</span>. This makes it possible to style the selected tab different from the others. The last&lt;td&gt;, the one for the border, has the class name <span style="color: #ff6600;">.ms-sctabrx</span>.</p>
<p>You can make the tabs look like textual links by removing the background color and the borders of the &lt;td&gt;&#8217;s. Make sure that the selected item will be styled a bit different so that it is still visible that it&#8217;s the one selected. Also make sure you style the rollover state of them. Every class name will get &#8220;hover&#8221; behind the usual class name (except for the<span style="color: #ff6600;"> .ms-sctabrx</span>). For example <span style="color: #ff6600;">.ms-sctabcfhover</span> and <span style="color: #ff6600;">.ms-sctabcnhover</span>.</p>
<pre><a rel="attachment wp-att-3104" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search31"></a><a rel="attachment wp-att-3613" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search3-2"><img class="alignnone size-full wp-image-3613" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search3.jpg" alt="search3" width="406" height="38" /></a></pre>
<h2>Input fields</h2>
<p>Another web part on the search result page is where the input fields are. The table the input fields are in, has a cell for every element, plus one.</p>
<p>All the &lt;td&gt;&#8217;s have the class name <span style="color: #ff6600;">.ms-sbcell</span>, except for the last cell, that is empty. This one is called <span style="color: #ff6600;">.ms-slLastcel</span><span style="color: #ff6600;">l</span>. The cell that has the search button in it, has two class names, the <span style="color: #ff6600;">.ms-sbcell</span> and the <span style="color: #ff6600;">.ms-sbgo</span>. You can style this area by using these class names.</p>
<pre><a rel="attachment wp-att-3614" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search4-2">
<img class="alignnone size-full wp-image-3614" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search4.jpg" alt="search4" width="446" height="402" /></a></pre>
<h2>Results bar</h2>
<p>The results bar is located just above the search results. It has it&#8217;s own web part zone called <span style="color: #ff6600;">#MidUpperLeftCell</span>. This web part has a table with three &lt;<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">tr</span>&gt;&#8217;s. The first ans the second &lt;<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">tr</span>&gt;&#8217;s are empty. The third one has a &lt;td&gt; with a web part that is responcible for showing the result text. The text and the sort-links have a classname, you can use to style it.</p>
<pre><a rel="attachment wp-att-3616" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search51-2">
<img class="alignnone size-full wp-image-3616" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search51.jpg" alt="search51" width="868" height="628" /></a></pre>
<p>The second results-row, is an other web part, in the web part zone <span style="color: #ff6600;">#MidLowerLeftCell</span>. Inside the <span style="color: #ff6600;">.ms-WPBody</span> is a div.srch-WPBody. In there is the div<span style="color: #ff6600;"> .srch-stats</span> in where the text is located.</p>
<p>Inside the <span style="color: #ff6600;">#MidLowerRightCell</span> is the upper paging positioned.</p>
<pre><a rel="attachment wp-att-3619" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search6-2"><img class="alignnone size-full wp-image-3619" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search6.jpg" alt="search6" width="519" height="283" /></a></pre>
<h2>Search results</h2>
<p>The search results are positioned in the web part zone<span style="color: #ff6600;"> #BottomCell</span>. The div inside this web part does have class name:<span style="color: #ff6600;"> .srch-results</span>. All the search results are positioned inside that div. For every search result there is a <span style="color: #ff6600;">.srch-Icon</span>,<span style="color: #ff6600;"> .srch-Title</span>, .<span style="color: #ff6600;">srch-Descriptio</span>n and a <span style="color: #ff6600;">.srch-Metadata</span>, so every element can get its own styling.</p>
<pre><a rel="attachment wp-att-3317" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search11-2"></a><a rel="attachment wp-att-3622" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search111"><img class="alignnone size-full wp-image-3622" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search111.jpg" alt="search111" width="544" height="361" /></a></pre>
<p>All the elements inside a search result have a class name. It is, for example, possible to hide the icon of the document, or give the search title, description or url another color. I advise you to only style the colors and fonts and leave the position of the element as they are, which leaves as much space as possible for the search results.</p>
<h2>Paging</h2>
<p>Inside the <span style="color: #ff6600;">#MidLowerRightCell</span> is the upper paging positioned. The paging at the bottom of the screen is also positioned in the <span style="color: #ff6600;">#BottomCell</span>. Inside the paging div, the .srch-Page there is an &lt;a&gt;-tag for every link. The page that is being visited at the moment does not have a link, nor a classname. So when styling the numbers, first style every element inside the<span style="color: #ff6600;"> .srch-Page</span>, then restyle every &lt;a&gt;-tag inside the <span style="color: #ff6600;">.srch-Page</span>.</p>
<pre><a rel="attachment wp-att-3319" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search13"></a><a rel="attachment wp-att-3623" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search131"><img class="alignnone size-full wp-image-3623" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search131.jpg" alt="search131" width="543" height="371" /></a></pre>
<h1><span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;"><br />
</span>My Site</h1>
<p>The My Site is a bit different then the other sites of SharePoint. First of all it uses another master page, which is composed out of different files. If you want to make changes in the master page or page layout of the My Site, there&#8217;s no easy way to do it. How you can edit the master page will not be discussed in this article. Just stick to the existing layout and only change the style sheet. It is possible to make a beautiful my site.</p>
<p><a rel="attachment wp-att-3101" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/mysite21"><img class="alignnone size-full wp-image-3101" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/mysite21.jpg" alt="mysite21" width="922" height="575" /></a></p>
<p>Because the master page of the My Site is a bit different, it does not contain a reference to your style sheet you created. Ask a developer or architect to add the reference for you, or if that is not possible paste the css code underneath the rest of the styiling in the portal.css. This is not the best way to go, because you really want to separate the default styles from the new one&#8217;s. And you do not want to make changes in the style sheet twice (once in your custom stylesheet and once in the portal.css). So, it is better to make the master page of the My Site work with your style sheet by adding the reference to it.<br />
<a rel="attachment wp-att-3320" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/search14"><img class="alignnone size-full wp-image-3320" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/search14.jpg" alt="search14" width="702" height="410" /></a></p>
<p>If you apply the layout style sheet for the portal onto the<em> My Site, </em>you will see that your graphical design is implemented for about 90%. I advise to double check all the items and make sure every element is styled correctly. Pay special attention to the blog and wiki, the calendar and the colleague tracker.</p>
<h1>SIFR</h1>
<p>Scalable Inman Flash Replacement (SIFR) is ment to replace short pieces of text (for example a title or header) by any particular font. Users of the portal do not need to have the font installed on their machine. SIFR works with javascript, flash and css and replaces the particular piece of text in a split second.</p>
<p>In the configuration file of SIFR you can refer to a class name or ID, so that the text inside that element will be replaced by a SIFR object. It is very easy to use. There is one thing you need to consider before using SIFR on a portal.</p>
<p>SIFR replaces the text with a flash object, a swf. This object is placed on top of the text, while the text that is being replaced is made invisible. It is possible to edit some of the object styles, for example the color and the padding.</p>
<p>What if the text you are replacing with SIFR is a link? Like for example a news header? In the news overview page the header is a link. SIFR replaces the text by a swf-object, but the object does not copy the reference the link had. So be careful where to use SIFR on a SharePoint Portal, because, if what you are replacing  a link with SIFR, which has the same class name/ID as referred to in the configuration file, you cannot use SIFR. Make sure your Graphical Designer knows this, and prevent him from designing a fancy menu with spiffy fonts.</p>
<h1>Calendar and date picker</h1>
<p>The calendar has its own style sheet. Just like the date picker. When you style the calendar, you should also style the date  picker, because those two have the same table-like structure and use the same colors. I advise you to only style the colors and fonts of the calendar and use the layout default.</p>
<p>Because there already is a special calendar style sheet, the calendar.css, it is very easy to style the calendar.</p>
<p>1 First of all, find an element you would like to style.</p>
<p>2 Search in the style sheet for its color and/or background image or -color.</p>
<p>3 Copy all the class names and ID&#8217;s that have that particular color or background image.</p>
<p>4 Make a separate calendar section in the exsisting style sheet, for example after the last line, at the end of the other styling in the calendar.css.</p>
<p>5 Paste the class names and ID&#8217;s in there and give them the color and background images you would like to give them.</p>
<p>This way, you can end up by changing a handfull color codes, and it can be done pretty easy. You can work the same way for the date picker, and you can use the same colors as you did for the calendar.</p>
<p>Here are some examples:</p>
<pre><a rel="attachment wp-att-3098" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/calendar11"></a><a rel="attachment wp-att-3321" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/calendar1-2"><img class="alignnone size-full wp-image-3321" src="http://sharepointmagazine.net/wp-content/uploads/2009/06/calendar1.jpg" alt="calendar1" width="554" height="340" /></a>

<a rel="attachment wp-att-3099" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/attachment/calendar21"><img class="alignnone size-full wp-image-3099" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/calendar21.jpg" alt="calendar21" width="514" height="437" /></a></pre>
<p>Make sure you have checked the day, week and month view. Also check a short appointment, an appointment over a few days and an all day appoint.</p>
<h1>Summary</h1>
<p>Here&#8217;s a small overview with highlights of all four parts of the article &#8220;The art of SharePoint, how to make a graphical design work for SharePoint&#8221;.</p>
<ul>
<li>Styling elements will work best on elements that have a class name, ID or a combination of both.</li>
<li>Always double check if you haven&#8217;t forgotten to style any elements.</li>
<li>The calendar and the date picker have their own style sheet.</li>
<li>The look and feel is well manageable when making custom master pages and page layouts. This gives you the opportunity to find the boundaries and give it all a bit more exciting looking.</li>
<li>Most of the time, adjusting the height, width or colors of an element, text or image is not that hard. It is more difficult to style the position, the location of the page elements. Because you cannot change the order in which elements are rendered, you will need style sheets to edit the location on the page where the elements are shown.</li>
<li>Changing an elements position can cause some trouble on other pages on the portal, because class names and ID&#8217;s are used through the whole portal. Changing one of them will cause another element on another page to change also.</li>
</ul>
<h2>Resources</h2>
<p><a href="http://www.heathersolomon.com/content/sp07cssreference.htm" target="_blank">CSS Reference Chart for SharePoint 2007</a></p>
<p>By Heather Solomon</p>
<p><a href="http://www.mikeindustries.com/blog/sifr/" target="_blank">SIFR</a></p>
<p>By Mike Davidson<a href="http://www.sifrgenerator.com/" target="_blank"></a></p>
<p><a href="http://blogs.tamtam.nl/Diantha/" target="_blank">Tamtam blog Diantha van Marion</a></p>
<p>By Diantha van Marion</p>
<h1>Thank You Tam Tam !</h1>
<p>A big thank you to Diantha and Tam Tam from Arno at SharePoint Magazine. This post is from the SharePoint Magazine <a href="../announcements/sharepoint-magazine-partner-spotlight">Partner Spotlight</a> Week, where our featued partner was <a href="../companies/partner-spotlight-tam-tam">Tam Tam. </a></p>
<p>If you would like to be featured on the <a href="../announcements/sharepoint-magazine-partner-spotlight" target="_blank">SharePoint Magazine Partner Spotlight</a>, please <a href="../contactus.php" target="_blank">contact us</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-4/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<series:name><![CDATA[Partner Spotlight: Tam Tam]]></series:name>
	</item>
		<item>
		<title>SharePoint&#8217;s Branding Limitations, Part 3</title>
		<link>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-3</link>
		<comments>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-3#comments</comments>
		<pubDate>Thu, 23 Jul 2009 08:04:48 +0000</pubDate>
		<dc:creator>Diantha van Marion</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Design Decisions]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML-mark up]]></category>
		<category><![CDATA[lists]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[News article]]></category>
		<category><![CDATA[Page layout]]></category>
		<category><![CDATA[Pagelayout]]></category>
		<category><![CDATA[Stylesheet]]></category>
		<category><![CDATA[Styling]]></category>
		<category><![CDATA[Tables]]></category>
		<category><![CDATA[web parts]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=2810</guid>
		<description><![CDATA[Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design.
This article will give the graphical designers more insight into the effect of these design decisions.]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>As a Front-end Developer with a background in designing I&#8217;ll show you how to make a graphical design that works for a default SharePoint-environment. If you want to take control over the front-end, don&#8217;t use any themes. Create your art by using style sheets!</p>
<p>Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design. For example, if a Graphical Designer puts a border on an element like a table, that will take him about 3 minutes to design, but this simple border could take the Front-end Developer a few hours to implement.</p>
<p>It&#8217;s really important that the Graphical Designer and the Front-end Developer work together and have a clear communication about the graphical design. Making a graphical design specifically for a MOSS environment could save you days on the implementation! This article will give the Graphical Designers more insight into the effect of these design decisions.</p>
<p>This article assumes that the reader has SharePoint and basic HTML knowledge.</p>
<h1>Web parts</h1>
<p>This section is all about SharePoint&#8217;s web parts. First the display mode of the web parts will be the point of interest, then the Edit mode, and after that the Article page layouts will be discussed.</p>
<p>The &lt;td&gt; with class name <span style="color: #ff6600;">.ms-bodyareacell </span>is the overall container for the content. Inside this &lt;td&gt; is a table with class <span style="color: #ff6600;">.ms-propertysheet</span>, and a td<span style="color: #ff6600;">.ms-bodyareaframe</span> inside that there is another table. These  are the containers for the content on a page and are being defined in the page layout. Inside the <span style="color: #ff6600;">.ms-bodyareaframe</span> are a few nested tables and one of these tables is the table of a web part.</p>
<pre><img class="alignnone size-full wp-image-2811" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-table.jpg" alt="wp-table" width="790" height="387" /></pre>
<h2>Web part ID&#8217;s</h2>
<p>If a web part is placed inside a web part zone, it will get an ID. Depending on the amount of already placed web parts on that page, and the order in which they are placed, the ID will get its tracking number. It does not change when you change the order of the web part zones. So therefore, the ID of the web part actually isn&#8217;t unique, it is just unique for that page.</p>
<pre><img class="alignnone size-full wp-image-2817" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-id.jpg" alt="wp-id" width="445" height="211" /></pre>
<p>The web part in this example is the third web part of the page and as you can see, it carries number 3 in the ID. The search interface in the header is always the first web part of the page. In this case there were two web parts placed on the page, which together with the search makes three: the ID number of the last placed web part. If you want to style the web part in its entirety, you can only list all the web part ID&#8217;s and add styling to them. This nasty solution is the only solution to styling every web part on itself. A better solution would be for example to style the elements inside the web parts, such as the<span style="color: #ff6600;"> .ms-WPBody</span>.</p>
<pre>..
#MSOZoneCell_WebPartWPQ27,
#MSOZoneCell_WebPartWPQ28,
#MSOZoneCell_WebPartWPQ29,
#MSOZoneCell_WebPartWPQ30{
     Border:1px #f2f2f2 solid;
}</pre>
<p>Because every web part has a &lt;td&gt; and inside that a table as a container, it is possible to style the background of the web part with two background images, but it is very tricky an I advice you not to do so. Make sure every &lt;td&gt; with ID <span style="color: #ff6600;">#MSOZoneCell_WebPartWPQ2</span> (a web part ID of your choice) has a background image.  Then style every table inside the &lt;td&gt; with those ID&#8217;s with another background image. Secondly, hide every background image on every second or more nested table inside the &lt;td&gt; with the web part ID.</p>
<p>Here&#8217;s an example of how, just for web part ID 3:</p>
<pre>#MSOZoneCell_WebPartWPQ3{
     Background:transparent url(images/webparttop.jpg) repeat-x left top;
}
#MSOZoneCell_WebPartWPQ3 table{
     Background:transparent url(images/webpartbottom.jpg) repeat-x left top;
}
#MSOZoneCell_WebPartWPQ3 table table{
     Background:transparent none;
}</pre>
<p>Which means &#8220;only apply if table is the first element inside <span style="color: #ff6600;">#MSOZoneCell_</span><span style="color: #ff6600;">WebPart</span><span style="color: #ff6600;">WPQ3</span>&#8220;, because it is not supported in Internet Explorer 6 and older versions.</p>
<p>Unfortunately you cannot use</p>
<pre>#MSOZoneCell_WebPartWPQ3 &gt; table {
     ..
}</pre>
<p>Make sure the images you use are repeatable on the x-axis. If they are not, you will need to make a new page layout where the web part zones have a static width (set in the style sheet of course). This way you can control the width of the web parts in a particular web part zone, and make your background images as wide as the web parts.</p>
<pre><a rel="attachment wp-att-3146" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-3/attachment/wp-bg"><img class="alignnone size-full wp-image-3146" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/wp-bg.jpg" alt="wp-bg" width="281" height="148" /></a></pre>
<h2>Web part headers</h2>
<p>Inside the &lt;td&gt; with the web part ID is always a table with two &lt;tr&gt;&#8217;s. The first one is for the header of the web part, the second one is for the content of the web part.</p>
<pre><img class="alignnone size-full wp-image-2818" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-2trs.jpg" alt="wp-2trs" width="540" height="387" /></pre>
<p>The first class you can use to style the header is the<span style="color: #ff6600;"> tr.ms-WPHeader</span>. This &lt;tr&gt; has two &lt;td&gt;&#8217;s, one for the title of the header, and another one for the little arrow on the right pointing down. Only the first &lt;td&gt; has an ID, which has the same ID-number as the web part-ID.  To style the background and the borders of the header, you can style every &lt;td&gt; inside the <span style="color: #ff6600;">.ms-WPHeader</span>.</p>
<pre><a rel="attachment wp-att-3147" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-3/attachment/wp-header"><img class="alignnone size-full wp-image-3147" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/wp-header.jpg" alt="wp-header" width="494" height="446" /></a></pre>
<pre>.ms-WPHeader td {
     border-bottom:1px solid #4E7CB7;
}</pre>
<p>To style the text of the header, style the<span style="color: #ff6600;"> .ms-WPTitle</span>. Be aware that some web part titles contain a hyperlink. The little arrow is also a link, and to style that you can style the &lt;a&gt;-tag inside the &lt;td&gt;, and then overrule the styling for the header text. Like this:</p>
<pre>/*This styles every link in the header*/
.ms-WPHeader td a{
	background-color:#000000;
}</pre>
<pre>/*This styles every textual link in the header*/
.ms-WPHeader .ms-WPTitle,
.ms-WPHeader .ms-WPTitle a:link,
.ms-WPHeader .ms-WPTitle a:visited{
	color:#4F3B2F;
}</pre>
<pre><img class="alignnone size-full wp-image-2813" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-wph.jpg" alt="wp-wph" width="448" height="256" /></pre>
<p>It is possible to hide the header by changing the settings of the web part. Choose &#8220;appearance&#8221; and in the &#8220;chrome type&#8221; drop down and choose &#8220;none&#8221;. The &lt;tr&gt; with the header will not be rendered then.</p>
<pre><img class="alignnone size-full wp-image-2821" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-chrome.jpg" alt="wp-chrome" width="127" height="107" /></pre>
<h2>Content Editor Web parts</h2>
<p>The &lt;td&gt; of the second &lt;tr&gt; of the<span style="color: #ff6600;"> </span><span style="color: #ff6600;">#MSOZoneCell_WebPartWPQ </span>contains a &lt;div&gt; with a web part ID that has the ID number related to the amount of web parts on the page, like <span style="color: #ff6600;">#WebPartWPQ3</span>. It also has a class called <span style="color: #ff6600;">.ms-WPBody</span>. The core.css uses this class to set the font family and size.</p>
<pre><img class="alignnone size-full wp-image-2822" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-txt.jpg" alt="wp-txt" width="448" height="299" /></pre>
<p>When using a Content Editor Web part, text is placed directly in the <span style="color: #ff6600;">.ms-WPBody</span>. The color of the text is set by the styling in the core.css, on the<span style="color: #ff6600;"> .ms-propertysheet</span> and the body tag. The same goes for the hyper links in the text.</p>
<pre><img class="alignnone size-full wp-image-2823" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-txthyperlink.jpg" alt="wp-txthyperlink" width="544" height="169" /></pre>
<h2>Lists</h2>
<p>In a list web part, there is a <span style="color: #ff6600;">table.ms-summarycustombody</span> class, in where all the links are positioned. Every &lt;td&gt; has a class.</p>
<pre><img class="alignnone size-full wp-image-2829" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-list.jpg" alt="wp-list" width="817" height="488" /></pre>
<p>Depending on what list with hyper links you use, the &lt;td&gt;&#8217;s will have one of the following class:</p>
<pre>.ms-vh,
.ms-vh2,
.ms-vh-icon,
.ms-vh-icon-empty,
.ms-vhImage,
.ms-gb,
.ms-gb2,
.ms-gbload,
.ms-vb,
.ms-vb2,
.ms-vb-tall,
.ms-GRFont,
.ms-vb-user,
table.ms-disc td,
.ms-vh2-nofilter,
.ms-vh2-nograd,
.ms-vh3-nograd,
.ms-vh2-nograd-icon,
.ms-vh2-nofilter-icon,
.ms-pb,
.ms-pb-selected,
.ms-ph {
     font-family:tahoma,sans-serif;
     font-size:8pt;
}</pre>
<p>The first two of this list are for example also used for list headers. Most graphical designs will have the same styling for all hyper links on the portal, so you can add your styling to the above classes and their &lt;a&gt;-tags.  The &#8220;add new&#8221; (add new announcement, add new event, add new link, etc. ) hyper links can be styled with their own class, for example:<span style="color: #ff6600;"> a.ms-addnew</span>. Here&#8217;s an example of how you could style the lists.</p>
<pre><img class="alignnone size-full wp-image-2830" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-linksintxt.jpg" alt="wp-linksintxt" width="262" height="263" /></pre>
<pre><img class="alignnone size-full wp-image-2831" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-linklist.jpg" alt="wp-linklist" width="202" height="131" /></pre>
<h2>Data table</h2>
<p>SharePoint uses tables and lists to display its data. The Document Center is one of those &#8216;data tables&#8217;. The Document Center uses another page layout, because the purpose of the page is to show a big list with data and no text like articles. Therefore the Document Center has one web part zone that uses the whole width of the page.  When styling the web parts, make sure the lists of the Document Center (Documents, Announcements, Tasks) are styled correctly. Pay special attention to the list headers here and make sure the fly outs of the top navigation are positioned above the list headers. If they are, make sure you position the <span style="color: #ff6600;">.ms-vh div</span> and <span style="color: #ff6600;">.ms-vh2 div <span style="color: #000000;">s</span></span><span style="color: #000000;">tati</span>cally.</p>
<pre><img class="alignnone size-full wp-image-2832" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-doccenter.jpg" alt="wp-doccenter" width="718" height="247" /></pre>
<h2>Width</h2>
<p>Sharepoint comes with a set of page layouts. These page layouts have middle and right zones, but they do not always have an ID or class name for those zones. If you want to control the width of the web parts in either the middle or the right column, you need to create new ones, based on the existing page layouts. Make sure every web part zone has an ID or class, so you can set the width of those in the style sheet.</p>
<p><img class="alignnone size-full wp-image-2833" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-setwidth.jpg" alt="wp-setwidth" width="467" height="327" /></p>
<h1>Edit mode</h1>
<p>In edit mode the styling is usually  kept default. Most of the classes and ID&#8217;s of the content are different when in edit mode, so the styling of elements inside web parts is rather easy to separate, but the web parts themselves aren&#8217;t. When editing a page, some web part zones and web parts will get other class.</p>
<pre><img class="alignnone size-full wp-image-2834" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-spzone.jpg" alt="wp-spzone" width="601" height="456" /></pre>
<p>System pages like the &#8220;site settings&#8221;-page and the &#8220;all site content&#8221;-page only contain the same header elements. The rest of the page has classes that are not used on the front-end. Therefore you can style those pages differently. I advise to only change the colors and fonts and leave the layout and the positioning the way it is by default. This way you won&#8217;t corrupt the usability of the system pages.</p>
<pre><img class="alignnone size-full wp-image-2835" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/wp-siteinstellingen.jpg" alt="wp-siteinstellingen" width="400" height="236" /></pre>
<h1>News articles</h1>
<p>When creating a news article, it is possible to choose between several news article layouts; the page layouts. The first page layout for an article page is the &#8220;article page with body only&#8221;. Other page layouts are the &#8220;article page with image on left&#8221;, &#8220;article page with image on right&#8221; and the &#8220;article page with summary links&#8221;.</p>
<h2>Article page with body only</h2>
<p>This page contains a page content zone and a roll up image. When publishing the page, all the content will be inside the <span style="color: #ff6600;">#MSO_ContentTable</span>. Inside that is the <span style="color: #ff6600;">d</span><span style="color: #ff6600;">iv.pageContent</span>.</p>
<pre><img class="alignnone size-full wp-image-2846" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-1.jpg" alt="ap-1" width="669" height="275" /></pre>
<pre><img class="alignnone size-full wp-image-2849" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-1a1.jpg" alt="ap-1a1" width="818" height="356" /></pre>
<p>Since the <span style="color: #ff6600;">d</span><span style="color: #ff6600;">iv.pageContent </span>is an element of every news article page layout, you cannot set the width of the element. Styling this element will cause other page layouts also to be adjusted.</p>
<pre><img class="alignnone size-full wp-image-2848" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-vb1.jpg" alt="ap-vb1" width="329" height="116" /></pre>
<h2>Article page with image on left</h2>
<p>The second page layout is the &#8220;Article page with image on left&#8221;.</p>
<pre><img class="alignnone size-full wp-image-2850" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-2.jpg" alt="ap-2" width="669" height="275" /></pre>
<p>This page layout has the following elements:</p>
<ul>
<li>Page image</li>
<li>Article date</li>
<li>Byline</li>
<li>Page content</li>
<li>Image caption</li>
<li>Roll up image</li>
</ul>
<p><strong>Page image</strong></p>
<p>The <span style="color: #ff6600;">.bodyareaframe</span> contains two tables and some &lt;div&gt;&#8217;s. The first table has the property<span style="color: #ff6600;"> float:left</span>. This makes the image positioned to the left of the text.</p>
<pre><img class="alignnone size-full wp-image-2851" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-2a.jpg" alt="ap-2a" width="816" height="568" /></pre>
<p><strong>Article line and byline</strong></p>
<p><strong></strong>The second table of the <span style="color: #ff6600;">.bodyareaframe </span>is the header. It contains two cells, one for the article date (<span style="color: #ff6600;">.dateLine</span>) and one for the &#8220;byline&#8221;.</p>
<pre><img class="alignnone size-full wp-image-2852" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-2b.jpg" alt="ap-2b" width="428" height="126" /></pre>
<p>Page content</p>
<p>The <span style="color: #ff6600;">di</span><span style="color: #ff6600;">v.pageContent</span> contains a<span style="color: #ff6600;"> div#ctl00_PlaceHolderMain_Content__ControlWrapper_RichHtmlField</span>, which contains the text. The ID is not unique for this piece of page content, it is only unique on this page.</p>
<p>Other page layouts use the same ID, so by styling this element, the text looks the same, no matter what article page layout is chosen.</p>
<pre><img class="alignnone size-full wp-image-2853" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-vb2.jpg" alt="ap-vb2" width="352" height="138" /></pre>
<h2>Article page with image on right</h2>
<p>The &#8220;article page with image on right&#8221; has got the same fields and controls as the &#8220;Article page with image on left&#8221;. The only difference is the floating. Where in the &#8220;Article page with image on left&#8221; the table was floating left, here the table has no floating, but a &lt;div&gt; around it has a right floating. There&#8217;s an extra container div, the<span style="color: #ff6600;"> .articleLayout </span>that was not in the &#8220;Article page with image on left&#8221;.</p>
<pre><img class="alignnone size-full wp-image-2854" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-3.jpg" alt="ap-3" width="669" height="275" /></pre>
<pre><img class="alignnone size-full wp-image-2855" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap3a.jpg" alt="ap3a" width="791" height="587" /></pre>
<pre><img class="alignnone size-full wp-image-2856" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-vb3.jpg" alt="ap-vb3" width="396" height="201" /></pre>
<h2>Article page with summary links</h2>
<p>The &#8220;Article page with summary links&#8221; has, instead of the page image and image caption, a Summary Links control. These links are positioned inside a table that is floated to the right.</p>
<pre><img class="alignnone size-full wp-image-2859" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-4.jpg" alt="ap-4" width="669" height="275" /></pre>
<pre><img class="alignnone size-full wp-image-2858" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-4a.jpg" alt="ap-4a" width="655" height="355" /></pre>
<pre><img class="alignnone size-full wp-image-2857" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ap-vb4.jpg" alt="ap-vb4" width="270" height="136" /></pre>
<h1>Next time in &#8220;SharePoint&#8217;s Branding Limitations&#8221;</h1>
<p>Next time in part four of &#8220;the Art of SharePoint, how to make a graphical design work for SharePoint&#8221;, I will discuss some design decisions for search pages and the My Site. Other points of interest are the styling of the calendar and date picker and the use of SIFR.</p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-3/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[Partner Spotlight: Tam Tam]]></series:name>
	</item>
		<item>
		<title>SharePoint&#8217;s Branding Limitations, Part 2</title>
		<link>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2</link>
		<comments>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2#comments</comments>
		<pubDate>Wed, 22 Jul 2009 07:27:58 +0000</pubDate>
		<dc:creator>Diantha van Marion</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Design Decisions]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML-mark up]]></category>
		<category><![CDATA[Menu items]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[Mysite]]></category>
		<category><![CDATA[Navigation]]></category>
		<category><![CDATA[Quicklaunch]]></category>
		<category><![CDATA[Stylesheet]]></category>
		<category><![CDATA[Styling]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=2534</guid>
		<description><![CDATA[Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design.
This article will give the graphical designers more insight into the effect of these design decisions.]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>As a Front-end Developer with a background in designing I&#8217;ll show you how to make a graphical design that works for a default SharePoint-environment. If you want to take control over the front-end, don&#8217;t use any themes. Create your art by using style sheets!</p>
<p>Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design. For example, if a Graphical Designer puts a border on an element like a table, that will take him about 3 minutes to design, but this simple border could take the Front-end Developer a few hours to implement.</p>
<p>It&#8217;s really important that the Graphical Designer and the Front-end Developer work together and have a clear communication about the graphical design. Making a graphical design specifically for a MOSS environment could save you days on the implementation! This article will give the Graphical Designers more insight into the effect of these design decisions.</p>
<p>This article assumes that the reader has SharePoint and basic HTML knowledge.</p>
<h1>Navigation</h1>
<p>This section is all about SharePoint&#8217;s navigation elements. First the meta navigation is discussed, secondly the top navigation with a focus on it’s fly outs. Thirdly, the quick launch navigation is discussed and last but not least the site actions menu.</p>
<h2>Meta navigation</h2>
<p>The meta navigation contains a set of links: Sign In/Welcome, My Links, etc.  The meta navigation is positioned at the upper right top of the page.  It has three textual links and a help icon as you can see in the image below.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-navigation.jpg"><img class="size-full wp-image-2535 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-navigation.jpg" alt="" width="315" height="22" /></a></pre>
<p>The meta navigation begins with the <span style="color: #ff9900;">table.ms-globalright. </span>The table is floated to the right which causes the menu to be positioned at the right of the page.  This table has five &lt;td&gt;&#8217;s and they all contain the class name <span style="color: #ff9900;">.ms-globallinks</span>.</p>
<ol>
<li>The first &lt;td&gt; is empty.</li>
<li>The second &lt;td&gt; contains the welcome text and a fly out.</li>
<li>The third &lt;td&gt; contains the vertical line.</li>
<li>The fourth &lt;td&gt; contains a new table.This table contains the &#8220;My Site&#8221; link, separator, &#8220;My Links&#8221; link and separator.</li>
<li>The last &lt;td&gt; contains the help icon.</li>
</ol>
<p>Every &lt;td&gt; of the meta navigation has the class name<span style="color: #ff9900;"> .ms-globallinks</span>. Unfortunately you cannot give this class and every &lt;A&gt; inside a color to change the color of all the links in the meta navigation. The Welcome link doesn&#8217;t change after applying a color to the <span style="color: #ff9900;">.ms-globallinks</span> and it&#8217;s &lt;a&gt;-tags. Because this &lt;td&gt; contains a &lt;div&gt; <span style="color: #ff9900;">.<span style="color: #ff9900;">m</span></span><span style="color: #ff9900;">s-SPLink. </span>Every link inside that &lt;div&gt; has a different color specified in the core.css style sheet. An other link that won&#8217;t change color is the My Links link.</p>
<pre><a rel="attachment wp-att-3129" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2/attachment/meta-red"><img class="alignnone size-full wp-image-3129" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/meta-red.jpg" alt="meta-red" width="967" height="411" /></a></pre>
<p>When coloring all the links of the meta navigation add the declaration to the &lt;a&gt;-tags in the class name <span style="color: #ff6600;">.ms-SPLink</span>, like this:</p>
<pre>.ms-SPLink a:link,
.ms-SPLink a:visited,
.ms-globallinks,
.ms-globallinks a{
    color:green;
}</pre>
<p>This will overrule the styles for the links in the<span style="color: #ff9900;"> .ms-SPLink</span>, as defined in the core.css, the master style sheet which takes care of the default styling on a SharePoint portal.</p>
<h3>Welcome &#8216;Your Name&#8217; and &#8216;My Links&#8217;</h3>
<p>The &lt;td&gt; of these links contains two spans. The first one, which is hidden, contains the fly out. The second span contains a &lt;div&gt; which contains the &lt;a&gt;-tag. Within the &lt;a&gt;-tag the little arrow pointing down is positioned as well, as seen in the next picture.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-welcome.jpg"><img class="size-full wp-image-2536 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-welcome.jpg" alt="" width="500" height="372" /></a></pre>
<p>The graphical behavior of the Welcome and &#8220;My Links&#8221; link is the same. When hovering the link, there&#8217;s a background-color and a border, suggesting it is a button. For consistent use of the graphical design you probably want to style the &#8220;My site&#8221; link the same as the other buttons.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-rollover.jpg"><img class="alignnone size-full wp-image-2537" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-rollover.jpg" alt="" width="149" height="20" />
</a></pre>
<p>Here&#8217;s the code to remove the background-color and border. Add the underline on hovering, to make it look like a textual link instead of a button:</p>
<pre>.ms-HoverCellActive,
.ms-SpLinkButtonActive,
.ms-HoverCellActiveDark{
    background-image:none;
    border:0px none;
    background-color:transparent;
}
.ms-HoverCellActive a:hover,
.ms-SpLinkButtonActive a:hover,
.ms-HoverCellActiveDark a:hover{
    text-decoration:underline;
}</pre>
<h3>My site</h3>
<p>The <em>My Site</em> link is the only link (in the meta navigation) that does not contain a fly out. Therefore, this link will respond to any styling assigned to .ms-globallinks a. The hover state of the .ms-globallinks a is not defined in the core.css style sheet, and therefore overridden by .ms-globalbreadcrumb a:hover. Style the .ms-globallinks a:hover to change the hover state.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-msml.jpg"><img class="alignnone size-full wp-image-2539" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-msml.jpg" alt="" width="500" height="372" /></a></pre>
<h3>Help icon</h3>
<p>The help icon is an image inside an &lt;a&gt;-tag. Because the image itself does not have a class name or ID, it is not specific enough to hide all the images inside the <span style="color: #ff9900;">.ms-globallinks</span>. That is because then the separators would also be effected. Therefor, you can use the &lt;a&gt;-tag (with an ID) in where the image is, to hide the help icon (by hiding the &lt;a&gt;-tag, the image will also be hidden). It is not recommended to hide the help icon because it&#8217;s function is to help the user. It is possible to show another image here. To do this you need to hide the image inside the &lt;a&gt;-tag and make the &lt;a&gt;-tag behave like a block. Then give it dimensions and place the new image of the icon as a background image.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-help.jpg"><img class="alignnone size-full wp-image-2806" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/meta-help.jpg" alt="meta-help" width="496" height="394" />
</a></pre>
<p>An example:</p>
<pre>.ms-globallinks a#ctl00_PlaceHolderGlobalNavigation_TopHelpLink img{
    display:none;
}
.ms-globallinks a#ctl00_PlaceHolderGlobalNavigation_TopHelpLink{
    display:block;
    background:transparent url(/_layouts/images/new_help_icon.gif) no-repeat left center;
    width:10px;
    height:10px;
}</pre>
<h3>Separators</h3>
<p>It is possible to make the separators of the meta navigation hidden, because these are the only non-hyper links in the<span style="color: #ff9900;"> .ms-globallinks</span>. Because they don&#8217;t have any class names or ID&#8217;s that are unique within the meta navigation, you need to style it all. Afterwards you can style the links differently. Giving all the items in the <span style="color: #ff9900;">.ms-globallinks </span>a visibility:invisible or a display:none, and the links a visibility:visible or a display:block, will cause your links to disappear, but only in Internet Explorer. The only way to hide them for all browsers is by giving them the same color as the background color of the meta menu, which off course should have a solid background color.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-separator.jpg"><img class="size-full wp-image-2541 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-separator.jpg" alt="" width="500" height="372" /></a></pre>
<p>The steps are as follows: give the <span style="color: #ff6600;">.ms-globallinks</span> the same color as the background color (or any other color you wish), and give the links in the .ms-globallinks a of your choice. Like this:</p>
<pre>.ms-globallinks{
    color:#FFFFFF !important;
}
.ms-SPLink a:link,
.ms-SPLink a:visited,
.ms-globallinks,
.ms-globallinks a{
    color:green;
}</pre>
<p>You can remove some padding of the <span style="color: #ff6600;">.ms-globallinks</span> to make the spaces between the hyper links less wide.</p>
<pre><a href="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-noseparator.jpg"><img class="alignnone size-full wp-image-2543" src="http://sharepointmagazine.net/wp-content/uploads/2009/02/meta-noseparator.jpg" alt="" width="313" height="21" /></a></pre>
<p>It is not possible to style the links on multiple lines, because the &#8216;welcome&#8217;-link and the &#8216;my site&#8217;-link have the same class names, and will react the same.</p>
<h2>Top navigation with fly outs</h2>
<p>The top navigation is the horizontal navigation bar at the top of every page (inside the <span style="color: #ff6600;">bannercontainer</span>). The top navigation shows the sites or pages from the first level. This first level contains every page or site made from the homepage. The homepage is always level 0. SharePoint enables users to rename, remove or add a link.</p>
<p>The top navigation has a lot of nested tables. The table of the banner frame contains four &lt;td&gt;&#8217;s.</p>
<ol>
<li>The first is empty.</li>
<li>The second &lt;td&gt; contains the top navigation menu.</li>
<li>The third &lt;td&gt; is empty.</li>
<li>The fourth contains the site actions menu.</li>
</ol>
<p>The site actions will be discussed later. First I want to focus on the top navigation menu. In the ideal world and maybe in the future it will by default, the menu would look like this:</p>
<pre>&lt;ul class="ms-bannerframe"&gt;
	&lt;li&gt;&lt;/li&gt;
	&lt;li class="ms-banner"&gt;
		&lt;ul class="ms-topNavContainer"&gt;
			&lt;li&gt; .. &lt;/li&gt;
			&lt;li&gt; .. &lt;/li&gt;
			&lt;li&gt; .. &lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;/li&gt;
	&lt;li&gt;siteactions menu goes here &lt;/li&gt;
&lt;/ul&gt;</pre>
<p>The second &lt;td&gt; contains a table, the <span style="color: #ff6600;">.ms-topNavContainer</span>, which contains multiple &lt;td&gt;&#8217;s. The first &lt;td&gt; is the home menu item, the menu item of level 0. The rest of the &lt;td&gt;&#8217;s are empty or contain other items of the top navigation.</p>
<pre><img class="alignnone size-full wp-image-2765" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-container.jpg" alt="topnav-container" width="625" height="573" /></pre>
<h3>Home, the first menu item</h3>
<p>The home menu item is placed into another table, the <span style="color: #ff6600;">.ms-topnav</span>. Every menu item of the top navigation is placed inside a table with the same class name. When the menu item is active, it gets another class name added, the <span style="color: #ff6600;">.ms-topnavselected</span>. By using this class name in your style sheet, it is possible to style the active menu items different. Another element contains the class name <span style="color: #ff6600;">.ms-topnav</span> as well: the &lt;a&gt;-tagtable.ms-topnav or a.ms-topnav, or use just .ms-topnav for giving them both the sames styling. The same goes for the .ms-topnavselected. of the menu item. Be sure to style the right item by styling the</p>
<pre><img class="size-full wp-image-2768 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-mstopnav.jpg" alt="topnav-mstopnav" width="597" height="324" /></pre>
<p>It is not possible to style the home menu-item differently then the other menu items, because they all have the same class names. If you want to do it anyway, you need to edit the HTML that is rendered for this menu.</p>
<h3>Other first level menu items</h3>
<p>The &lt;td&gt; with the other menu items, contains a table with two cells. The first cell is empty, the next cell contains a table, the .ms-topnav. If the menu item does not contain any pages or sites at second level, the &lt;td&gt; only contains the &lt;a&gt;-tag, just like the home button.</p>
<pre><img class="alignnone size-full wp-image-2769" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-no2ndlevel.jpg" alt="topnav-no2ndlevel" width="544" height="438" /></pre>
<h4>Background images</h4>
<p>To style the menu items, you can use the class <span style="color: #ff6600;">table.ms-topnav</span>. You can give it a background color or background image. Be aware that the image must be repeatable on the x-axis unless the menu items have a fixed width. You cannot use an image that is different on the left and right side when the images have variable widths. This is because items with no second level have only one &lt;td&gt;. So you cannot use an image for the left side and another image for the right side.</p>
<p>If the <span style="color: #ff6600;">table.ms-topnav</span> has a fixed width, you can use one background image on the table, but be aware that menu items with a long text can be bigger then the set width. The styling of the menu item will fail.</p>
<p>The first image shows a menu item that has no arrow on the right. The second image shows the menu item when it does have an arrow on the right.</p>
<pre><img class="size-full wp-image-2767 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-firstlevel.jpg" alt="topnav-firstlevel" width="354" height="280" /></pre>
<p>An example of how you could style the first level of the top navigation:</p>
<pre>.ms-topnav {
     background-color:#70C8D4;
     background-image:none;
     border:0px none;
     color:#FFF;
}</pre>
<pre>.ms-topnavselected {
     background:#2B9AAE url(/_layout/images/topnavselected.gif) repeat-x fixed left bottom;
     border:0px none;
}</pre>
<p>Hide the little arrow pointing down by:</p>
<pre>table.ms-topnav td img{
     visibility:hidden;
}</pre>
<h3>Second level menu items (fly outs)</h3>
<p>The second level menu items are the sub menu items that will become visible when you hover a top navigation menu item. In the HTML, the sub menu items are positioned underneath the overall table that contains the first level menu items. The whole fly out is rendered as a &lt;div&gt;, that contains a lot of nested &lt;div&gt;&#8217;s and tables, for every sub menu item and sub sub menu item.</p>
<pre><img class="alignnone size-full wp-image-2794" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-flyoutcontainer.jpg" alt="topnav-flyoutcontainer" width="897" height="328" /></pre>
<p>Every sub menu item is rendered inside the table with class name<span style="color: #ff6600;"> .ms-topNavFlyOuts.</span> This table contains a &lt;td&gt; with the link to the concerning page. When there are sub sub menu items, there are two &lt;td&gt;&#8217;s. The first one contains the &lt;a&gt;-tag. Only when there is a third level in the menu, the second one contains the little arrow image, pointing to the right.</p>
<pre><img class="alignnone size-full wp-image-2793" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-flyout.jpg" alt="topnav-flyout" width="686" height="290" /></pre>
<pre><a rel="attachment wp-att-3134" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2/attachment/topnav-arrow-2"><img class="alignnone size-full wp-image-3134" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/topnav-arrow.jpg" alt="topnav-arrow" width="202" height="126" /></a></pre>
<p>The top navigation fly outs can be styled by referring to the &lt;td&gt;&#8217;s of the <span style="color: #ff6600;">.</span><span style="color: #ff6600;">ms-topNavFlyOuts</span> table.  The arrows are not that easy to style, because the image is not on the file system, but it is generated by code. To alter this image, you need to change a property of the AspMenu in your master page. How to do this is not discussed in these articles.</p>
<p>Reset the styling of the rollover of the menu items:</p>
<pre>.ms-topNavFlyOutsHover,
.ms-topNavFlyOutsHover a{
     background-color:#000000;
}</pre>
<p>Reset the styling of the background of the flyout items:</p>
<pre>.ms-topNavFlyOuts{
     background-color:white;
}</pre>
<p>The border that comes around the whole fly out area still has a blue border. This is set on the class name of the <span style="color: #ff6600;">.zz1_TopNavigationMenu</span>. Every fly out menu has it&#8217;s own class name, with a number. The number is variable and depends on the number of menu items on that page. You will never know which numbers will be used, since you do not know how many menu items there are. This for example will only work on one of the fly outs:</p>
<pre>.zz1_TopNavigationMenu_8 {
     background-color:#F2F3F4;
     border:1px solid #A7B4CE;
}</pre>
<p>When you look closer, you see that besides this class name, every fly out area has the same class name: <span style="color: #ff6600;">zz1_TopNavigationMenu_0</span>. So, to style the border of the fly out menu, you can change the border of this class name, like this:</p>
<pre>div.zz1_TopNavigationMenu_0{
     border:1px #000000 solid;
}</pre>
<p>Do check the fly out menu on a listpage, and double check if the list header is not visible on top of the fly out menu. This could happen when the the list header (<span style="color: #ff6600;">.ms-vh </span>or <span style="color: #ff6600;">.ms-vh2</span>) is relatively positioned. The solution for this is to make it static, it will not influence the styling of the menu.</p>
<pre>.ms-vh div,
.ms-vh2 div{
     position:static !important;
}</pre>
<pre><img class="alignnone size-full wp-image-2795" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-flyoutunder.jpg" alt="topnav-flyoutunder" width="157" height="201" /></pre>
<pre><img class="alignnone size-full wp-image-2796" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/topnav-flyoutup.jpg" alt="topnav-flyoutup" width="154" height="196" /></pre>
<h2>Quick Launch navigation</h2>
<p>The quick launch navigation is also known as the left menu. The quick launch has three parts.</p>
<p>• Quick Launch header</p>
<p>• Menu items</p>
<p>• Recycle Bin</p>
<pre><img class="alignnone size-full wp-image-2780" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-quicklaunch.jpg" alt="ql-quicklaunch" width="148" height="239" /></pre>
<p>The set of the three items together are rendered into two containers, the <span style="color: #ff6600;">div.ms-quickLaunchouter</span> and inside that is the <span style="color: #ff6600;">div.ms-quickLaunch</span>. Because the quick launch has two containers, it is possible to give the top of the menu another background image then the bottom, for example.</p>
<pre><img class="alignnone size-full wp-image-2781" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-quicklaunchouter.jpg" alt="ql-quicklaunchouter" width="338" height="133" /></pre>
<h3>Hiding the quick launch menu</h3>
<p>Some customers like the portal homepage to be without the left menu. There are several ways to do this. I&#8217;ll discuss three of them.</p>
<p>1: The first is to make a special page layout for the homepage. Make sure the control for the quick launch menu is inside the page layout and not in the master page. For that you have to edit all the other page layouts. Now make sure the left menu on the page layout you made for the homepage isn&#8217;t showed or even isn&#8217;t rendered at all, by removing the menu control. This solution will cost you the most effort and time.</p>
<p>2: The second way is to give the homepage page layout an extra reference to a style sheet. That would be a style sheet you make specially for the homepage and in where you add styles to hide the left menu.</p>
<p>3: Another solution to hide the left menu on the homepage is by adding styles that will make the menu disappear. It can be done in the style sheet, so the left menu will be hidden in every page, or it can be done by adding a Content Editor Web part on the page you wouldn&#8217;t want the left menu on.</p>
<pre><img class="size-full wp-image-2773 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-cew.jpg" alt="ql-cew" width="317" height="79" /></pre>
<p>First, add a Content Editor Web part to the particular page. Open the tool pane, and add some source code that will hide the left menu:</p>
<pre>&lt;style type="text/css"&gt;
.ms-navframe{
     display:none;
}
&lt;/style&gt;</pre>
<p>This way the quick launch outer is hidden and the left area is also gone, so that the content in the middle will have more space. The <span style="color: #ff6600;">.ms-navframe</span> is responsible for the width of the area the menu is in.</p>
<pre><img class="alignnone size-full wp-image-2779" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-noleftmenu.jpg" alt="ql-noleftmenu" width="741" height="338" /></pre>
<p>Next thing is to make sure the web part with the styling is not visible on the front end. For that, choose Chrome type &#8220;none&#8221;, in the Appearance menu and under the layout section check the check box for hiding the web part header.  The menu (and the web part that is hiding the menu) is now hidden on only this page.</p>
<pre><img class="alignnone size-full wp-image-2774" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-chrome.jpg" alt="ql-chrome" width="127" height="107" /></pre>
<h3>Quick Launch header</h3>
<p>The header of the quick launch is a &lt;H3&gt; with a &lt;LABEL&gt; and a &lt;SPAN&gt;.</p>
<pre><img class="alignnone size-full wp-image-2775" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-header.jpg" alt="ql-header" width="431" height="531" /></pre>
<p>The label contains the text &#8220;Quick Launch&#8221;, but is invisible because it is absolute positioned and placed out of sight by the core.css. The span contains a &lt;div&gt; with class name <span style="color: #ff6600;">.</span><span style="color: #ff6600;">ms-quickLaunchheader</span>. This &lt;div&gt; has a background image and background color. There&#8217;s also font-color defined here, but the text inside this &lt;div&gt; is always a link. So if you want to style that, it&#8217;s more efficient to style the &lt;a&gt;-tag.</p>
<pre><img class="alignnone size-full wp-image-2776" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-headera.jpg" alt="ql-headera" width="920" height="76" /></pre>
<h3>Quick Launch menu items</h3>
<p>The second part in the quick launch is the &lt;div&gt; with ID <span style="color: #ff6600;">ctl00_PlaceHolderLeftNavBar_QuickLaunchNavigationManager</span>. Inside this is a table with class name <span style="color: #ff6600;">.ms-navSubMenu1</span>. The 1 indicates the level of the menu items, The first level menu items. For every menu item there&#8217;s a &lt;td&gt; in this table.</p>
<p>Every menu item is positioned inside it&#8217;s own table, the <span style="color: #ff6600;">.ms-navheader</span>. Only the menu items on the first level are called navheader. Besides that, the &lt;td&gt;inside the table has an &lt;a&gt;-tag containing a class name <span style="color: #ff6600;">.ms-navheader</span>. So when styling the whole area of the menu item, or just the link itself, make sure you use <span style="color: #ff6600;">table.ms-navheader</span> or <span style="color: #ff6600;">a.ms-navheader</span>.</p>
<h4>Sub menu items of the quick launch</h4>
<p>As there is a &lt;td&gt; for every first level menu item, there is also a &lt;td&gt; for a collection of second level menu items. Inside that &lt;td&gt; is another table, the <span style="color: #ff6600;">.ms-subNavMenu2 </span>and every sub menu item has it&#8217;s own &lt;td&gt; in there.</p>
<pre><img class="alignnone size-full wp-image-2785" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-subnavmenu.jpg" alt="ql-subnavmenu" width="441" height="542" /></pre>
<p>Changing the background of the sub menu items can be done very easily, because of the<span style="color: #ff6600;"> .ms-navSubMenu2</span> class name. By default the &lt;td&gt; of this table has the bullet background image.</p>
<pre><img class="alignnone size-full wp-image-2778" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-navitem.jpg" alt="ql-navitem" width="752" height="482" /></pre>
<p>Removing this bullet can be done like this:</p>
<pre>table.ms-navitem td, span.ms-navitem {
	Background-image:none;
	Padding-left:0px;
}</pre>
<p>Every sub menu item has it&#8217;s own table and only one &lt;td&gt;. Therefore it is possible to use two background images underneath the text of the &lt;a&gt;-tag of a second level menu item. One image for the left and one for the right side.</p>
<pre><img class="alignnone size-full wp-image-2786" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-vb.jpg" alt="ql-vb" width="189" height="346" /></pre>
<h3>Recycle bin</h3>
<p>The recycle bin is the third item inside the quick launch. This table contains another table named <span style="color: #ff6600;">.ms-recyclebin</span>. Inside this table is the &lt;a&gt;-tag, containing the icon and the text &#8220;recycle bin&#8221;.</p>
<pre><img class="size-full wp-image-2783 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-recyclebinvb.jpg" alt="ql-recyclebinvb" width="116" height="23" /><img class="size-full wp-image-2784 alignnone" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-recyslebinvb2.jpg" alt="ql-recyslebinvb2" width="140" height="34" /></pre>
<p>It is possible to hide the trash bin icon, because it is the only image inside the &lt;a&gt;-tag. There&#8217;s no padding on the &lt;a&gt;-tag, so by removing the image like this, the &lt;a&gt;-tag should automatically align with the other menu items.</p>
<pre>.ms-recyclebin a img{
	display:none;
}</pre>
<pre><img class="alignnone size-full wp-image-2782" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/ql-recyclebin.jpg" alt="ql-recyclebin" width="743" height="336" /></pre>
<h2>Site Actions navigation</h2>
<p>If you have at least editor rights, you will find the site actions button on the right top of your screen.</p>
<pre><a rel="attachment wp-att-3128" href="http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2/attachment/sa-siteactions-2"><img class="alignnone size-full wp-image-3128" src="http://sharepointmagazine.net/wp-content/uploads/2009/04/sa-siteactions.jpg" alt="sa-siteactions" width="106" height="20" /></a></pre>
<p>The site actions button has a few nested tables and &lt;div&gt;&#8217;s. Only a few of them have ID&#8217;s or class names. From the outside to the inside:</p>
<ol>
<li>Table.ms-siteaction</li>
<li>Td#siteactiontd.ms-siteactionsmenu</li>
<li>Div</li>
<li>Div</li>
<li>Span</li>
<li>Div  (on hover it does have a class name:  .ms-siteactionsmenuhover)</li>
<li>a</li>
</ol>
<p>The &lt;a&gt;-tag for example does have an ID, but since it is an index number that points to the number of menu items, it is not wise to use this ID, because it could change per page or after a menu item was added.</p>
<p>When changing the background image of the button, refer to <span style="color: #ff6600;">.ms-siteactionsmenu div div div</span> and <span style="color: #ff6600;">.ms-siteactionsmenu div div div.ms-siteactionsmenuhover</span>.</p>
<p>Here&#8217;s some css to clear up the button and undo it from it&#8217;s (background-)colors, so that it looks like it is a textual link:</p>
<pre>.ms-siteactionsmenu div div div,
.ms-siteactionsmenu div div div.ms-siteactionsmenuhover{
    background-color:transparent;
    background-image:none;
    background-repeat:no-repeat;
    border:0px none;
}</pre>
<h3>The secret of the little arrow</h3>
<p>What is up with the little arrow in the site actions button? As you can see in the code, there is a blank.gif, which is not the image of the arrow. And there is no background image on it whatsoever. The arrow isn&#8217;t a background image of the &lt;a&gt;-tag either. So, where does this arrow come from then? It looks like it&#8217;s the &lt;a&gt;-tag&#8217;s parent &lt;div&gt;, but that one only has a background image that is responsible for the blue background.  The answer is closer than you think, because there is an image next to the &lt;a&gt;-tag, which is called whitearrow.gif. The question I cannot answer is why it is not inside the &lt;a&gt;-tag, since it should also be click-able, right? Well, it does explains why at first sight I couldn&#8217;t find the image. Mystery solved.</p>
<pre><img class="alignnone size-full wp-image-2788" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/sa-arrow.jpg" alt="sa-arrow" width="506" height="194" /></pre>
<h3>The site actions fly outs</h3>
<p>The site action button had also a fly out menu when you have clicked on it. This menu is hidden in the span by an in-line <span style="color: #ff6600;">display:none</span>.</p>
<pre><img class="alignnone size-full wp-image-2791" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/sa-span.jpg" alt="sa-span" width="391" height="213" /></pre>
<p>This menu is a bit different from the other menu&#8217;s. It has a &lt;menu&gt;tag and a &lt;ie:menuitem&gt; for each sub menu item. These objects cannot be styled in the style sheet.</p>
<pre><img class="alignnone size-full wp-image-2789" src="http://sharepointmagazine.net/wp-content/uploads/2009/03/sa-flyout.jpg" alt="sa-flyout" width="250" height="150" /></pre>
<h1>Next time in &#8220;SharePoint&#8217;s Branding Limitations&#8221;</h1>
<p>Next part of this article will contain information about web parts with text zones, lists and tables. Other topics are the graphical possibility&#8217;s of the edit mode and the news articles. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-2/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<series:name><![CDATA[Partner Spotlight: Tam Tam]]></series:name>
	</item>
		<item>
		<title>SharePoint&#8217;s Branding Limitations, Part 1</title>
		<link>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-1</link>
		<comments>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-1#comments</comments>
		<pubDate>Tue, 21 Jul 2009 14:40:38 +0000</pubDate>
		<dc:creator>Diantha van Marion</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Customization]]></category>
		<category><![CDATA[Design Decisions]]></category>
		<category><![CDATA[Front-end]]></category>
		<category><![CDATA[Functional Designer]]></category>
		<category><![CDATA[Graphical Design]]></category>
		<category><![CDATA[Graphical Designer]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML-mark up]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[Stylesheet]]></category>
		<category><![CDATA[Styling]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=678</guid>
		<description><![CDATA[Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design.
This article will give the graphical designers more insight into the effect of these design decisions.]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>As a Front-end Developer with a background in designing I&#8217;ll show you how to make a graphical design that works for a default SharePoint-environment. If you want to take control over the front-end, don&#8217;t use any themes. Create your art by using style sheets!</p>
<p>Not all graphical designs for a portal will work in a SharePoint environment. There are a couple of limitations the Graphical Designer must know. A Graphical designer needs to know the scope of the graphical design. For example, if a Graphical Designer puts a border on an element like a table, that will take him about 3 minutes to design, but this simple border could take the Front-end Developer a few hours to implement.</p>
<p>It&#8217;s really important that the Graphical Designer and the Front-end Developer work together and have a clear communication about the graphical design. Making a graphical design specifically for a MOSS environment could save you days on the implementation! This article will give the Graphical Designers more insight into the effect of these design decisions.</p>
<p>This article assumes that the reader has SharePoint and basic HTML knowledge.</p>
<h2>Process description</h2>
<h3>Communication flows</h3>
<p>The communication between the Graphical Designer and the Front-end Developer is all about the graphical design for SharePoint and the ways to implement it.  The Graphical Designer discusses the design he wants to make with the Front-end Developer to check if his design ideas are implementable on a SharePoint environment. After the Graphical Designer has a first version of the graphical design, the Front-end Developer determines if it can be implemented in the available time. If the actual costs are higher than the estimated costs, the Graphical Designer and the Front-end Developer could look for another elaboration of the customers idea, one that is easier to implement, and more predictable.</p>
<p>The communication between the Graphical Designer and the Front-end Developer will continue like this until the graphical design is approved by the customer and the implementation can start. The communication between the Graphical DesignerGraphical Designer has in mind for its design. Decisions concerning the colors, fonts, margins, menu&#8217;s and links are transferred by a style guide. However, if there&#8217;s a lack of time frequently the style guide isn&#8217;t fully developed, so the Graphical Designer needs to explain the Front-end Developer about the styling guides. Disadvantage of this is that the Front-end Developer co and the Front-end Developer will change and will all be about the transfer of knowledge about what can be implemented and what can&#8217;t. It is important that the Front-end Developer knows exactly what the uld forget information or interpret it differently than the Graphical Designer has in mind, and the Front-end Developer cannot check it in the style guide. Therefore, be sure that there is always a style guide that is as extended as possible.</p>
<p>What can happen after the graphical design is implemented is that the customer decides to change a component in the graphical design. Depending on the change, the Graphical Designer must be consulted again, or the Front-end Developer can modify it, in consultation with the Graphical Designer. The ideal situation is to adapt the style guide too.</p>
<p>The style guide is made by the Graphical Designer. Since he has made the design and knows exactly how the design should look like and elements graphically should behave. Beside the style guide the Front-end Developer also needs the design files of the Graphical Designer to be able to implement the Graphical Designer, for example the PSD files.</p>
<div id="attachment_2061" class="wp-caption alignnone" style="width: 310px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/defaulthome.jpg"><img class="size-medium wp-image-2061" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/defaulthome-300x142.jpg" alt="" width="300" height="142" /></a><p class="wp-caption-text">Image of default homepage</p></div>
<h3>Knowledge transfer</h3>
<p>The graphical design is based on the requirements of the customer and its company, depending on the browsers to use and its users, and of course the estimated capacity and the creative ideas of the Graphical Designer. Graphical Designers which design for MOSS must have knowledge of SharePoint. Most Graphical Designer&#8217;s will catch the default (blue) graphical design of a MOSS portal as a basis for the graphical design. They can take the default or frequently used elements of MOSS and use them for their graphical design. They keep the location of the elements approximately the same to what they see on the default portal, their example. This is the most common way to start a graphical design for MOSS.</p>
<p>The Graphical Designer also needs to have some knowledge about how the designed elements of the graphical design will be implemented. He needs to know how the Front-end Developer will implement a graphical design. Because the Graphical Designer does not know of every table, div and so, it is important that the Front-end Developer informs the Graphical Designer about the possibilities of implementation, however the Front-end Developer does need to have this knowledge of course. Even if the Graphical Designer used a default MOSS portal for making the graphical design, it is possible that there are elements in the graphical design that cannot be implemented on a default MOSS portal, because the default HTML won&#8217;t let you. That&#8217;s why it is very important to communicate a lot and involve the Front-end Developer at an early stage of the graphic design.</p>
<h2>Design decisions</h2>
<p>In this part I will evaluate some design decisions. I will comment on a number of standard components of a SharePoint publishing portal and indicate per component how the element&#8217; HTML has been rendered and the possibilities for implementing a design on that HTML.</p>
<h3>Scaling pages</h3>
<p>The Graphical Designer needs to know how the page will behave if the visitor of the portal gives another format to the browser window. In case of a portal the Graphical Designer will generally recommend to use the complete width of the browser window, because portals are all about displaying lots of information. It is desirable to be able to use the full width to place as much information on the page as needed/possible, and make it liquid. This is default by MOSS, when widening the browser window, the middle column will become wider and more space for content will be available. The left column with the menu will keep its width, just like the right column.</p>
<p>However it is possible that the customer chooses to let the scaling behave differently. For example by dividing the available space to the left and right column. In this case the fixed width of the right column is put on a certain percentage in the style sheet instead of a fixed number of pixels, mostly 20 or 30%. The middle column should also get a width in a certain percentage. For making another partitioning it is desirable to make a custom page layout.</p>
<div id="attachment_1173" class="wp-caption alignnone" style="width: 250px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-31.jpg"><img class="size-medium wp-image-1173" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-31-300x180.jpg" alt="" width="240" height="144" /></a><p class="wp-caption-text">Example of page with variable width</p></div>
<div id="attachment_1172" class="wp-caption alignnone" style="width: 250px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-31.jpg"><img class="size-medium wp-image-1172" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-21-300x180.jpg" alt="" width="240" height="144" /></a><p class="wp-caption-text">Example of page with variable width</p></div>
<div id="attachment_968" class="wp-caption alignnone" style="width: 250px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-11.jpg"><img class="size-medium wp-image-968" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-11-300x180.jpg" alt="" width="240" height="144" /></a><p class="wp-caption-text">Example of page with variable width</p></div>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-31.jpg"></a></p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/verdeling-31.jpg"></a></p>
<h3>Header</h3>
<p>The area positioning on a page consists out of several rows. First there is the header, then a content area and then the footer. All visual elements of SharePoint are in one of those zones. The elements of the edit console are underneath the header, they will be discussed later.</p>
<p>The header itself is also built out of rows, with in every row a few SharePoint elements. In the header every row has a class name or unique ID name. The header is built with tables, and nested tables, who together are responsible for the area positioning.</p>
<h4>Global breadcrumb</h4>
<p>The global breadcrumb, which is the first row of the header, contains two tables, each with its own class name. This aligns the text to the left and the meta menu to the right. Therefore the global links on the left side and the global links on the right side can be styled and positioned differently.</p>
<div id="attachment_1179" class="wp-caption alignnone" style="width: 613px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/globalbreadcrumb.jpg"><img class="size-full wp-image-1179" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/globalbreadcrumb.jpg" alt="" width="603" height="142" /></a><p class="wp-caption-text">Global breadcrumb</p></div>
<p>The menu items of the meta menu can be styled separately. However, frequently it is desirable to style all meta menu items the same. The styling can be done by using the class name of the common parent element. This way the styling isn&#8217;t influenced by any nested tables or divs that may be in the menu table.</p>
<div id="attachment_1182" class="wp-caption alignnone" style="width: 157px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/help-icon.jpg"><img class="size-full wp-image-1182" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/help-icon.jpg" alt="" width="147" height="28" /></a><p class="wp-caption-text">Customized metamenu</p></div>
<pre>.ms-SPLink a:link,
.ms-SPLink a:visited {
                color:green;
}</pre>
<p>The icon that is used for the help function can be styled too. Just keep the width and height of the new image the same as the original, so that a replacement can be done easily. Always keep a copy of the original image, for back-up.</p>
<h4>Global title area</h4>
<p>The global title area is the second row of the header. It contains a table with three cells, the global title area image, the site title and the search function.</p>
<div id="attachment_1180" class="wp-caption alignnone" style="width: 613px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/globaltitlearea.jpg"><img class="size-full wp-image-1180" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/globaltitlearea.jpg" alt="" width="603" height="142" /></a><p class="wp-caption-text">Global title area </p></div>
<p>The global title area image can be used to display the logo, because this element has a link with a reference to home. Therefore it is important to hide the image, stretch the a-tag to the dimensions of the logo and make the logo disappear as the background image of the &lt;a&gt;-tag. Then, the text of the &lt;a&gt;-tag will be placed outside the view of the browser with a negative indent. This way the logo will still have a textual link for users that use screen readers.</p>
<div id="attachment_1181" class="wp-caption alignnone" style="width: 44px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/globaltitleareaimage.jpg"><img class="size-full wp-image-1181" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/globaltitleareaimage.jpg" alt="" width="34" height="30" /></a><p class="wp-caption-text">Global Title Area Image</p></div>
<pre>.ms-globalTitleArea {
    background:blue url(/_layouts/images/logo.gif) no-repeat left top;
}</pre>
<pre> .ms-globalTitleArea #GlobalTitleAreaImage img{
    visibility:hidden;
}</pre>
<pre>.ms-sitetitle h1 a{
    display:block;
    height:30px;
    width:100px;
    text-indent:-2000px;
}</pre>
<p>The last cell with the search functionality doesn&#8217;t have a class name or ID. To style the search function you&#8217;ll need to dig deeper into the HTML-structure. It is possible to style the search function in the header differently than the other search functions that could appear on the portal, even if they are built the same way. That&#8217;s why you&#8217;ll need to find a unique class name combination or unique ID name or a combination of both. It is possible to style the search function in the header differently, but the other search functions, in the content zone will be styled the same, since they have the same structure. Do not style the search engine absolute, since the search engine needs to come down in the content zone when searching advanced.</p>
<pre>#SRSB{
	position:relative;
	top:100px;
}</pre>
<p>The icon that is used to start the search request can also be styled. Keep the width and height of the new image the same as the original, so that a replacement can be done easily. Always keep a copy of the original image, for back-up. The easiest way to style the icon is to replace the default one on the file server. A result of this is that all search icons will change, through the whole portal. As mentioned above, it is possible to style the search icon in the header differently, but the other search icons will be styled the same, since they have the same structure.</p>
<div id="attachment_1184" class="wp-caption alignnone" style="width: 399px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/search-icon.jpg"><img class="size-full wp-image-1184" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/search-icon.jpg" alt="" width="389" height="28" /></a><p class="wp-caption-text">Customized search engine</p></div>
<h4>Banner Container</h4>
<p>The third row from above is the banner container or oneidtopnavbar container. In here is the banner frame wherein there is a section for the top navigation menu, the banner and the site actions menu.</p>
<h5>Top navigation menu</h5>
<p>The top navigation menu is built out of a table, whereof the first cell contains the first menu item and the second cell contains a set of other menu items. In each of these cells is a table with a class name that marks it as topnav and if selected, it marks it also as selected. In the first cell of this table is the a-tag, the link. If the menu item contains any child elements, there is a second cell in this table to place the little arrow pointing down. This arrow is an indicator for any child menu items available, the fly outs.</p>
<p>The &lt;td&gt;&#8217;s of this table do not have a unique class name combination or ID. This means the &lt;td&gt; of the text link cannot be styled differently than the &lt;td&gt; of the arrow. This could lead to difficulties when implementing background images on the menu items. A background image cannot be placed on the &lt;td&gt;, because this will cause it to disappear twice. Once for the text link &lt;td&gt; and once for the arrow td. The image must be placed as a background image on the table. This means the image will be visible underneath the text link all the way to the arrow on the right. So there can only be one background image on a menu item. It isn&#8217;t possible to use two images, like when the left side of the menu item has a different ending as the right side of the menu item, when the image isn&#8217;t repeatable on the x axis. It isn&#8217;t possible to make two images out of one, so make it a background image of the table. It is always unsure how wide the menu item will be, and so how wide the background image must be. The arrow is rendered by the code, so you cannot style the arrow or replace it with an image, though.</p>
<p>It is possible to give the first menu item a different styling then the others, because this menu item is considered as the top level menu item and is rendered a bit different then the other menu items. For this menu item also counts that you do not know how wide the menu item will be, so be cautious about it when making the graphical design.</p>
<p>If you need to use background images on the top navigation menu, use images that are repeatable on the x axis and have the same pattern at the outer left pixels and at the outer right pixels. This of course also counts for the hover states and active states of the menu items.</p>
<p>Next thing to style are the fly outs. These child menu items are inside a table, and there is one table, &lt;tr&gt; and &lt;td&gt; for every child menu item. Only the table has a class name, so all the &lt;td&gt;&#8217;s, that is all the child menu items will have the same styling. The menu item that has a mouse hover can be styled differently though. For the fly outs there is the same rule, you do not know how wide the content inside it will become. Use that information wisely when making the graphical design. You can use these class names to style the fly outs:</p>
<pre>.ms-topNavFlyOutsContainer{}
.ms-topNavFlyOuts{}
.ms-topNavFlyOuts a{}
.ms-topNavFlyOutsHover{}
.ms-topNavFlyOutsHover a{}
.zz1_TopNavigationMenu_8 {}</pre>
<h5>Banner</h5>
<p>The banner &lt;td&gt; is empty, and does not contain anything. Therefore, it will not be discussed here.</p>
<h5>Site actions menu</h5>
<p>The cell that contains the site action button has a table with a class name for its own. Inside that, there is one cell wherein there are different kinds of nested &lt;div&gt;&#8217;s. The a-tag inside does not have a class name or ID, just like the nested &lt;div&gt;&#8217;s. But it could be referenced using this declaration:</p>
<div id="attachment_2041" class="wp-caption alignnone" style="width: 104px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/siteactions.jpg"><img class="size-full wp-image-2041" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/siteactions.jpg" alt="Default siteactions button" width="94" height="22" /></a><p class="wp-caption-text">Default siteactions button</p></div>
<pre>.ms-siteactionsmenu div div div a {...}</pre>
<p>The site action button usually isn&#8217;t restyled, but only made blank, by removing its colors and background image. Most of the time it is repositioned by giving the table a relative or absolute position. This button is only visible for users with editor rights, so only a select group of users will see the site actions button.</p>
<div id="attachment_2040" class="wp-caption alignnone" style="width: 104px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/siteactions1.jpg"><img class="size-full wp-image-2040" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/siteactions1.jpg" alt="" width="94" height="30" /></a><p class="wp-caption-text">Customized site actions button</p></div>
<pre>.ms-siteactionsmenu div div div,
.ms-siteactionsmenu div div div.ms-siteactionsmenuhover{
    background-color:transparent;
    background-image:none;
    background-repeat:no-repeat;
    border:0px none;
}</pre>
<p>The fly out of the site actions button is a default SharePoint fly out, and usually isn&#8217;t styled. This fly out is reused throughout the whole portal, so styling it could give some unwanted results. In the next part, I&#8217;ll tell more about the menu&#8217;s and fly outs.</p>
<h3>Web part zones</h3>
<p>Underneath the header is the content part. In here are the left menu and the content container. The number of web part zones in the content container depends on which <span class="__mozilla-findbar-search" style="inherit;">page layout</span> is chosen when creating the page. Most of the <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s contain two columns, a wide one in the middle and a smaller one on the right. Other <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s do not contain a left or right column, just one big zone for the content.</p>
<h4>Page layout</h4>
<p>The partitioning of the web part zones depends on the <span class="__mozilla-findbar-search" style="inherit;">page layout</span> that is chosen. There are a few default <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s in SharePoint, but these can easily be made custom.</p>
<p>Not all the default <span class="__mozilla-findbar-search" style="inherit;">page  layout</span>s have got a left and right separation; some <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s use the whole width to show the content. The <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s that do have a partitioning, not always do have a class name or ID on the &lt;td&gt; that separates the zones. The page is then partitioned by a table with two or more columns, were for example the first cell has a hard coded width of 70% and the second cell a hard coded width of 30%. If the cells do not contain a class name or ID, you cannot overrule the width and it makes it impossible to style them separately or give them another width.</p>
<div id="attachment_2048" class="wp-caption alignnone" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/variable_width.jpg"><img class="size-full wp-image-2048" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/variable_width.jpg" alt="" width="500" height="338" /></a><p class="wp-caption-text">Example of page layout with variable widths</p></div>
<p>Since these class names and ID&#8217;s are the hand dishes for the styling, it makes it difficult to style a particular column or web part zone. Not only the width but also the other styling like headers, links and content could need to be styled differently, dependent on which column or zone they are in. Creating a custom page layout has the advantage that you can style the columns or web part zones differently.</p>
<h4>Web part zone</h4>
<p>Except the fact that a columns separation can be made easily when creating custom <span class="__mozilla-findbar-search" style="inherit;">page layout</span>s, web part zones can be added if wished. It is possible to provide every web part zone width a class name or ID, which means that the web parts can be styled differently depending on the web part zone they are in. If web parts are dragged to another web part zone, they will adjust to the styling of that particular web part zone.</p>
<div id="attachment_2051" class="wp-caption alignnone" style="width: 280px"><img class="size-medium wp-image-2051" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/top-bottom-separation-300x227.jpg" alt="" width="270" height="204" /><p class="wp-caption-text">Two column page with two web part zones in the right zone</p></div>
<p>This cannot be done with SharePoint&#8217;s default page layouts. So if there&#8217;s no budget for creating page layouts, the Graphical Designer should take notice of that and style all the web parts the same. By default there&#8217;s no way to separate styling for particular web parts or web parts in particular columns.</p>
<div id="attachment_2049" class="wp-caption alignnone" style="width: 280px"><img class="size-medium wp-image-2049" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/tp-300x213.jpg" alt="" width="270" height="192" /><p class="wp-caption-text">Two column page with one web part zone in the right zone</p></div>
<h3>Footer</h3>
<p>The content container contains the columns with web part zones and the menu and is as wide as the whole page. Underneath this container is the footer. By default, SharePoint does not have a real footer. Actually there are a few table cells, which make the optical margin, just like the left and right margin of the page. These cells can be used to create a footer.</p>
<h4>Position of the footer</h4>
<p>The lower down cells of the page, the footer, always are down under on the page. Even if the page does not contain a lot of content and the content does not fill the page, the footer is always at the bottom of the page, against your browser window. It speaks for itself that the footer is also on the bottom of the page when there is a lot of content and the used needs to scroll.</p>
<div id="attachment_2052" class="wp-caption alignnone" style="width: 218px"><img class="size-medium wp-image-2052" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/low-footer-300x150.jpg" alt="" width="208" height="104" /><p class="wp-caption-text">The footer sticks to the browser</p></div>
<p>The footer is built like this:</p>
<div id="attachment_2056" class="wp-caption alignnone" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommarginleft.jpg"><img class="size-full wp-image-2056" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommarginleft.jpg" alt="" width="500" height="149" /></a><p class="wp-caption-text">Page Bottom Margin Left</p></div>
<div id="attachment_2055" class="wp-caption alignnone" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommargin.jpg"><img class="size-full wp-image-2055" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommargin.jpg" alt="" width="500" height="149" /></a><p class="wp-caption-text">Page Bottom margin</p></div>
<div id="attachment_2054" class="wp-caption alignnone" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/bodyareapagemargin.jpg"><img class="size-full wp-image-2054" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/bodyareapagemargin.jpg" alt="" width="500" height="149" /></a><p class="wp-caption-text">Body Area Page Margin</p></div>
<div id="attachment_2057" class="wp-caption alignnone" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommarginright.jpg"><img class="size-full wp-image-2057" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/pagebottommarginright.jpg" alt="" width="500" height="149" /></a><p class="wp-caption-text">Page Bottom Margin Right</p></div>
<p>When you remove the background color and image of these cells, you&#8217;ll keep an empty space, which is a nice margin for the bottom of the page. It is also possible to use these cells for a footer image.</p>
<div id="attachment_2059" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-2059" src="http://sharepointmagazine.net/wp-content/uploads/2008/12/footer-with-code.jpg" alt="" width="500" height="251" /><p class="wp-caption-text">Example of footer with rounded corners</p></div>
<p>Since every cell has its own class name, it is possible to make a colored bar for example with small rounded corners. Such a footer can be placed underneath the menu and content, or just underneath the content. The width of the image depends on the cells you use to display the image in, as a background image. The height of the footer is also adjustable. To place text in the footer, the master page must be edited. Making the master page custom allows you to make the custom footer instead of using the default margin cells at the bottom of the page.</p>
<h1><strong>Next time in &#8220;SharePoint&#8217;s Branding Limitations&#8221;</strong></h1>
<p>Part two of this article will contain information about the menus. The meta menu and the top navigation with fly outs in the header and the quick launch menu and site actions menu. What are the possibilities for styling this menu&#8217;s? And how is it implemented? Stay tuned!</p>
<p>This post is from the SharePoint Magazine <a href="http://sharepointmagazine.net/announcements/sharepoint-magazine-partner-spotlight">Partner Spotlight</a> Week, where our featued partner is <a href="http://sharepointmagazine.net/companies/partner-spotlight-tam-tam">Tam Tam</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/sharepoints-branding-limitations-part-1/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<series:name><![CDATA[Partner Spotlight: Tam Tam]]></series:name>
	</item>
		<item>
		<title>Partner Spotlight : Tam Tam</title>
		<link>http://sharepointmagazine.net/companies/partner-spotlight-tam-tam</link>
		<comments>http://sharepointmagazine.net/companies/partner-spotlight-tam-tam#comments</comments>
		<pubDate>Mon, 20 Jul 2009 13:04:32 +0000</pubDate>
		<dc:creator>Arno Nel</dc:creator>
				<category><![CDATA[Companies]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Magazine Partners]]></category>
		<category><![CDATA[Microsoft Partners]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[E-business]]></category>
		<category><![CDATA[Enterprise Search]]></category>
		<category><![CDATA[innovation lab]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Online Communications]]></category>
		<category><![CDATA[operational services]]></category>
		<category><![CDATA[search engine advertising]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Selfservice]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[Smartsite]]></category>
		<category><![CDATA[Tam Tam]]></category>
		<category><![CDATA[Umbraco]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=3728</guid>
		<description><![CDATA[Tam Tam is a full-service internetbureau.We link concept, design and technique such way that online questions of our customers are filled in successfully. In this we are ambitious, but also simply complete Dutch. We are proud of our top position in the Netherlands, our employees AND customers.]]></description>
			<content:encoded><![CDATA[<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>CompanyName</strong> : Tam Tam</p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Company Website URL</strong>: <a href="http://www.tamtam.nl" target="_blank">http://www.tamtam.nl</a></p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> Company Blog</strong>:  <a href="http://www.tamtam.nl/blogs.aspx" target="_blank">http://www.tamtam.nl/blogs.aspx</a></p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> Public Email</strong>:      info@tamtam.nl</p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Social Sphere</strong>: <a href="http://www.twitter.com/tamtamdelft" target="_blank"><img class="alignnone" title="twitter" src="http://sharepointmagazine.net/images/icons/twitter_32.png" alt="" width="32" height="32" /></a><a href="http://www.facebook.com/home.php#/pages/TamTam/97362236359" target="_blank"><img class="alignnone" title="facebook" src="http://sharepointmagazine.net/images/icons/facebook_32.png" alt="" width="32" height="32" /></a><a href="http://www.linkedin.com/groups?gid=61313&amp;trk=hb_side_g" target="_blank"><img class="alignnone" title="linkedin" src="http://sharepointmagazine.net/images/icons/linkedin_32.png" alt="" width="32" height="32" /></a></p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Address</strong>:  Tam Tam Patrijsweg 80, Rijswijk, Zuid-Holland 2289 EX, Netherlands<br />
<img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> Phone: </strong>+31 (0)15 750 2000<br />
<img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> No. of employees</strong>: 50-250<br />
<img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> Microsoft Partner Status: </strong>Gold<br />
<img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong> Capability </strong></p>
<ul>
<li> Communications and Collaboration</li>
<li> Enterprise Content Management</li>
<li> Enterprise Search</li>
<li> Unified Communications</li>
<li> Other</li>
</ul>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Company History</strong>:</p>
<p><img class="alignnone" title="comment" src="http://sharepointmagazine.net/images/icons/comment_48.png" alt="" width="48" height="48" />&#8220;<em>In 1996, Tam Tam has been set up by Paul and Bart Manuel. Paul and Bart are linked as partners to Tam Tam and have an important role in daily business. Ever since, Tam Tam has been establishment profitable with a solvency of 40%. (Mainly hours) 8.4 millions euro convert were in 2008. For customers and employees all figures are public. Financial statements can be find at the KvK under the next number: 27239483. General director at TamTam is: Arjan Nataraj (06-55888776, arjan.nataraj@tamtam.nl). You can contact him for general questions concerning Tam Tam.</em>&#8221;</p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Company Description</strong>:</p>
<p>Tam Tam is a full-service internetbureau.We link concept, design and technique such way that online questions of our customers are filled in successfully. In this we are ambitious, but also simply complete Dutch. We are proud of our top position in the Netherlands, our employees AND customers.<br />
Questions about the next topic, which we gladly fill in: cooperate, communication and e-business. We also give these solutions beautiful user experience.<br />
With our online solutions we improve in connection with customers, employees and the world. With these we are able to improve and develop more rapidly than other organizations.<br />
Solutions or Services *</p>
<ul>
<li>Online communication: ranging from marketing sites, corporate sites, and visual identities, to social networking solutions.</li>
<li>Online marketing: search engine optimisation and marketing, email marketing, bannering, websurveys</li>
<li>Customer Selfservice: eBusiness and eCommerce solutions, Selfservice, Custom made solutions</li>
<li>Information Worker Solutions/collaboration: intranet portals, document management, knowledge sharing and customer specific applications</li>
<li>Website optimization and site management: website statistics and analysis, application management, hosting and support</li>
</ul>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /><strong>SharePoint Based Websites built</strong>:</p>
<ul>
<li><a href="http://www.amphia.nl" target="_blank">www.amphia.nl</a></li>
<li><a href="http://www.nucletron.com" target="_blank">www.nucletron.com</a></li>
<li><a href="http://www.grontmij.nl" target="_blank">www.grontmij.nl</a></li>
<li><a href="http://www.cnb.nl" target="_blank">www.cnb.nl</a></li>
<li><a href="http://www.loopbaantrajectbouw.nl" target="_blank">www.loopbaantrajectbouw.nl</a></li>
<li><a href="http://www.watdoejijmorgen.nl" target="_blank">www.watdoejijmorgen.nl</a></li>
<li><a href="http://www.evc-centra.nl" target="_blank">www.evc-centra.nl</a></li>
<li><a href="http://www.isala.nl" target="_blank">www.isala.nl</a></li>
<li><a href="http://www.bsn.eu" target="_blank">www.bsn.eu</a></li>
<li><a href="http://www.britishschool.nl" target="_blank">www.britishschool.nl</a></li>
<li><a href="http://www.caop.nl" target="_blank">www.caop.nl</a></li>
<li><a href="http://www.deltapsy.nl" target="_blank">www.deltapsy.nl</a></li>
<li><a href="http://www.tebodin.com" target="_blank">www.tebodin.com</a></li>
<li><a href="http://www.nibc.com" target="_blank">www.nibc.com</a></li>
<li><a href="http://www.gvb.nl" target="_blank">www.gvb.nl</a></li>
<li><a href="http://www.woonbron.nl" target="_blank">www.woonbron.nl</a></li>
<li><a href="http://www.triant.nl" target="_blank">www.triant.nl</a></li>
<li><a href="http://www.huiskopenmetkorting.nl" target="_blank">www.huiskopenmetkorting.nl</a></li>
</ul>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>Tags (Keywords) :</strong><br />
Tam Tam, full-service internetbureau, SharePoint, Online Communications, Selfservice, Search Engine Optimization, search engine advertising, collaboration, enterprise search, E-business, operational services, innovation lab, Microsoft, Smartsite, Umbraco</p>
<p><img title="bullet green" src="../wp-content/uploads/2009/07/bullet-green.png" alt="bullet green" width="16" height="16" /> <strong>SharePoint Magazine Articles :</strong></p>
<ul>
<li>
<h4><a title="Permalink to: SharePoint’s Branding Limitations, Part 1" href="../technical/development/sharepoints-branding-limitations-part-1">SharePoint’s Branding Limitations, Part 1</a></h4>
</li>
<li>
<h4><a title="Permalink to: SharePoint’s Branding Limitations, Part 2" href="../technical/development/sharepoints-branding-limitations-part-2">SharePoint’s Branding Limitations, Part 2</a></h4>
</li>
<li>
<h4><a title="Permalink to: SharePoint’s Branding Limitations, Part 3" href="../technical/development/sharepoints-branding-limitations-part-3">SharePoint’s Branding Limitations, Part 3</a></h4>
</li>
<h4><a title="Permalink to: SharePoint’s Branding Limitations, Part 4" href="../technical/development/sharepoints-branding-limitations-part-4">SharePoint’s Branding Limitations, Part 4</a></h4>
</ul>
<p><a title="Permalink to: SharePoint’s Branding Limitations, Part 1" href="../technical/development/sharepoints-branding-limitations-part-1"></a></p>
<p>If you would like to be featured on the <a href="http://sharepointmagazine.net/announcements/sharepoint-magazine-partner-spotlight" target="_blank">SharePoint Magazine Partner Spotlight</a>, please <a href="http://sharepointmagazine.net/contactus.php" target="_blank">contact us</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/companies/partner-spotlight-tam-tam/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<series:name><![CDATA[Partner Spotlight: Tam Tam]]></series:name>
	</item>
		<item>
		<title>SharePoint Magazine Partner Spotlight</title>
		<link>http://sharepointmagazine.net/announcements/sharepoint-magazine-partner-spotlight</link>
		<comments>http://sharepointmagazine.net/announcements/sharepoint-magazine-partner-spotlight#comments</comments>
		<pubDate>Fri, 17 Jul 2009 11:30:41 +0000</pubDate>
		<dc:creator>Arno Nel</dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[SharePoint Magazine]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=3719</guid>
		<description><![CDATA[SharePoint Magazine is excited to introduce a new program for Microsoft Partners]]></description>
			<content:encoded><![CDATA[<p>SharePoint Magazine is excited to introduce a new program for Microsoft Partners. The idea is simple:</p>
<p><img class="alignnone" title="Tick" src="http://sharepointmagazine.net/images/icons/tick.png" alt="" width="16" height="16" /> Full focus on the magazine for 1 week, Monday to Friday.</p>
<p><img title="Tick" src="../images/icons/tick.png" alt="" width="16" height="16" /> Free advertising on the magazine for 1 week</p>
<p><img title="Tick" src="../images/icons/tick.png" alt="" width="16" height="16" /> Monday = Full Partner Profile and Biography</p>
<p><img title="Tick" src="../images/icons/tick.png" alt="" width="16" height="16" /> Tuesday to Friday = 4 part article series on a SharePoint topic</p>
<p>I dont want to say more than that at this point. Why not tune in on Monday to view our first Partner:</p>
<p><a href="http://www.tamtam.nl/" target="_blank"><img class="alignnone size-full wp-image-3724" title="TamTam Logo" src="http://sharepointmagazine.net/wp-content/uploads/2009/07/TamTamLogo.jpg" alt="TamTam Logo" width="170" height="170" /></a></p>
<p><img class="alignnone" title="Comment" src="http://sharepointmagazine.net/images/icons/comment.png" alt="" width="44" height="44" /><em>&#8220;Tam Tam is a full-service internetbureau.We link concept, design and technique such way that online questions of our customers are filled in successfully. In this we are ambitious, but also simply complete Dutch. We are proud of our top position in the Netherlands, our employees AND customers.<br />
Questions about the next topic, which we gladly fill in: cooperate, communication and e-business. We also give these solutions beautiful user experience.<br />
With our online solutions we improve in connection with customers, employees and the world. With these we are able to improve and develop more rapidly than other organizations.&#8221;</em></p>
<p>If you are a partner and want to be on the spotlight, please <a href="http://sharepointmagazine.net/contactus.php">contact us</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/announcements/sharepoint-magazine-partner-spotlight/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creating a SharePoint Web Part that hosts a data binding Silverlight application</title>
		<link>http://sharepointmagazine.net/technical/development/creating-a-sharepoint-web-part-that-hosts-a-data-binding-silverlight-application</link>
		<comments>http://sharepointmagazine.net/technical/development/creating-a-sharepoint-web-part-that-hosts-a-data-binding-silverlight-application#comments</comments>
		<pubDate>Tue, 11 Nov 2008 10:25:46 +0000</pubDate>
		<dc:creator>Karine Bosch</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[CreateChildControls]]></category>
		<category><![CDATA[HttpWebRequest]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UpdateListItems]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=1106</guid>
		<description><![CDATA[In the beginning of this year I started working on the Silverlight BluePrint for SharePoint together with my mentor Patrick Tisseghem who suddenly passed away. I dedicate this article to him.]]></description>
			<content:encoded><![CDATA[<div class="mceTemp mceIEcenter">In the beginning of this year I started working on the <strong>Silverlight BluePrint for SharePoint</strong> together with my mentor Patrick Tisseghem who suddenly passed away recently. I dedicate this article to him.</div>
<p>With Silverlight you can really light up your SharePoint user interfaces. It can be used in different SharePoint domains like web parts, application pages, navigation, content management, custom fields, editor parts, etc.</p>
<p>In this tutorial I&#8217;m going to explain how you can host a <strong>Silverlight 2 beta 2</strong> application from within a SharePoint Web Part. The Web Part will pass the URL of the SharePoint site together with the name of the list for which the Silverlight application will show the data. The retrieval of the data will be done by the Silverlight application using the <strong>HttpWebRequest</strong> technique for calling the <strong>SharePoint web services</strong>. As the SharePoint web services return a chunk of XML the XML will be handled by using <strong>LINQ for XML</strong>. The data will be bound to the Silverlight controls.</p>
<p>When the Web Part loads the complete list of AdventureWorks products will be loaded. In the Topic box you can enter a part of a product number and click the Search button. Based on that search string a restricted list of products will be returned. You can select  a product from the list to view its details.</p>
<div id="attachment_1126" class="wp-caption aligncenter" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-listbox3.png"><img class="size-full wp-image-1126" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-listbox3.png" alt="AdventureWorks listbox" width="500" height="450" /></a><p class="wp-caption-text">AdventureWorks listbox</p></div>
<p>You can also modify its list price if you want and update the AdventureWorks products list. This will again use the <strong>HttpWebRequest</strong> technique to call the <strong>UpdateListItems</strong> method of the Lists.asmx web service.</p>
<div id="attachment_1127" class="wp-caption aligncenter" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-details2.png"><img class="size-full wp-image-1127" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-details2.png" alt="AdventureWorks product details control" width="500" height="209" /></a><p class="wp-caption-text">AdventureWorks product details control</p></div>
<p>The Silverlight application will be deployed as an embedded resource of the SharePoint Web Part.</p>
<p>You can download the source code of this tutorial from here. The zip contains the sources for the SharePoint Web Part and the Silverlight application, together with two SharePoint list templates for the AdventureWorks Products and the AdventureWorks Product Pictures.</p>
<h2>Creating the Web Part</h2>
<p>I created the sample Web Part using the <strong>Visual Studio 2008 extenstions for WSS 3.0</strong>. It creates the necessary infrastructure for the deployment afterwards.</p>
<div id="attachment_1128" class="wp-caption aligncenter" style="width: 271px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-web-part-project2.png"><img class="size-full wp-image-1128" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/adventureworks-web-part-project2.png" alt="AdventureWorks Web Part project" width="261" height="114" /></a><p class="wp-caption-text">AdventureWorks Web Part project</p></div>
<p>Before you can start coding you need to add a reference to the System.Web.Silverlight.dll (version 2.0.5.0) and to the System.Web.Extensions.dll (version 3.5.0.0).</p>
<p>Open the <strong>AdventureWorksProducts.cs</strong> file in Code View and declare a class level variable for the silverlight control that will host the silverlight application:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">System.<span style="color: #0000FF;">Web</span>.<span style="color: #0000FF;">UI</span></span>.<span style="color: #0000FF;">SilverlightControls</span>.<span style="color: #0000FF;">Silverlight</span> silverlightControl <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span></pre></div></div>

<p>Override the <strong>OnLoad</strong> method in which you need to check whether a script manager already exists on the page. If not, you have to add one at the first position of the <strong>Controls</strong> collection:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> OnLoad<span style="color: #000000;">&#40;</span>EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">OnLoad</span><span style="color: #000000;">&#40;</span>e<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #008080; font-style: italic;">// Script manager instance may appear only once on a page</span>
      ScriptManager scriptManager <span style="color: #008000;">=</span> ScriptManager.<span style="color: #0000FF;">GetCurrent</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Page</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>scriptManager <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
          scriptManager <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ScriptManager<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
          <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Controls</span>.<span style="color: #0000FF;">AddAt</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span>, scriptManager<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Within the <strong>CreateChildControls</strong> method that is already prepared for you, you have to instantiate the Silverlight control and set its properties. One of these properties is the <strong>Source</strong> property. The setting depends on where you are going to deploy your silverlight application. In this sample I will deploy the Silverlight application as an embedded resource of my SharePoint Web Part so the <strong>Source</strong> property has to point to that location. I will come back to this property once the Silverlight application is created. Don&#8217;t forget to specify a <strong>Width</strong> and <strong>Height</strong>, otherwise the Silverlight application will not be visible. Another property that is worth mentioning is the <strong>InitParameters</strong> property. I use this property to pass the URL to the SharePoint site and the name from the list that needs to be queried. The retrieval of the data, and thus the communication with SharePoint, will be done from within the Silverlight application. Notice that this property is a string. You can pass data in it by respecting the syntax <strong>name1=value1,name2=value2,&#8230;</strong> Within the Silverlight application this data will be unpacked in a dictionary. But more on this in next section.</p>
<p>Don&#8217;t forget to add the Silverlight control to the Controls collection of the Web Part.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> CreateChildControls<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
      <span style="color: #0600FF;">base</span>.<span style="color: #0000FF;">CreateChildControls</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #008080; font-style: italic;">// instantiation of the silverlight control</span>
      silverlightControl <span style="color: #008000;">=</span>
            <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Web</span>.<span style="color: #0000FF;">UI</span></span>.<span style="color: #0000FF;">SilverlightControls</span>.<span style="color: #0000FF;">Silverlight</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      silverlightControl.<span style="color: #0000FF;">ID</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;SLAdventureWorks&quot;</span><span style="color: #008000;">;</span>
      silverlightControl.<span style="color: #0000FF;">MinimumVersion</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;2.0.30523&quot;</span><span style="color: #008000;">;</span>
      silverlightControl.<span style="color: #0000FF;">Width</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Unit<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">750</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      silverlightControl.<span style="color: #0000FF;">Height</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Unit<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">600</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      silverlightControl.<span style="color: #0000FF;">Source</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #008080; font-style: italic;">// parameters passed are the the URL of the SharePoint site and the</span>
      <span style="color: #008080; font-style: italic;">// name of the list that contains the AdventureWorks products</span>
      silverlightControl.<span style="color: #0000FF;">InitParameters</span> <span style="color: #008000;">=</span>
         <span style="color: #666666;">&quot;siteurl=&quot;</span> <span style="color: #008000;">+</span> SPContext.<span style="color: #0000FF;">Current</span>.<span style="color: #0000FF;">Web</span>.<span style="color: #0000FF;">Url</span>
          <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;,listname=AdventureWorks Products&quot;</span><span style="color: #008000;">;</span>
&nbsp;
      <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Controls</span>.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>silverlightControl<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now override the <strong>RenderContents</strong> method to render the Silverlight control:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">protected</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> RenderContents<span style="color: #000000;">&#40;</span>HtmlTextWriter writer<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>silverlightControl <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
         silverlightControl.<span style="color: #0000FF;">RenderControl</span><span style="color: #000000;">&#40;</span>writer<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>That&#8217;s all for the Web Part code.</p>
<h2>Creating the Silverlight application</h2>
<p>The development of the Silverlight application is a bit harder, certainly if you are a normal ASP.NET or SharePoint developer. Add a new project to the solution using the <strong>Silverlight Application</strong> template. This template comes with a standard <strong>Page.xaml</strong> and an <strong>App.xaml</strong>. The <strong>App.xaml</strong> file inherits from the <strong>System.Windows.Application</strong> class which represents the Silverlight application while the <strong>Page</strong> represents a Silverlight control.</p>
<p>Before designing the Silverlight controls you will have to retrieve the parameters that have been passed by the SharePoint Web Part. Open the <strong>App.xaml.cs</strong> file and locate the <strong>Application_Startup</strong> method. The second incoming argument is of type <strong>StartUpEventArgs</strong> and contains in its <strong>InitParams</strong> property the data you passed in via the Web Part. At this side of the Silverlight application it is a dictionary of key-value pairs.</p>
<p>To be able to use this data from within the Silverlight application you have to pass the data to constructor of the Page control.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> Application_Startup<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, StartupEventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     <span style="color: #FF0000;">string</span> siteUrl <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
     <span style="color: #FF0000;">string</span> listName <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
&nbsp;
     <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>e.<span style="color: #0000FF;">InitParams</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">&amp;</span>amp<span style="color: #008000;">;&amp;</span>amp<span style="color: #008000;">;</span> e.<span style="color: #0000FF;">InitParams</span>.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">2</span><span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
         siteUrl <span style="color: #008000;">=</span> e.<span style="color: #0000FF;">InitParams</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;siteurl&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
         listName <span style="color: #008000;">=</span> e.<span style="color: #0000FF;">InitParams</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;listname&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
&nbsp;
     <span style="color: #008080; font-style: italic;">// Load the main control</span>
     <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">RootVisual</span> <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Page<span style="color: #000000;">&#40;</span>siteUrl, listName<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Open the Page.xaml.cs code behind file and modify the constructor:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> Page<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> siteUrl, <span style="color: #FF0000;">string</span> listName<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The Silverlight application also contains a class that defines the Product object. The different text boxes in the Silverlight controls will be bound to the properties of this type of objects. The class inherits from <strong>INotifyPropertyChanged</strong>, to enable the object to be notified when the data changes. This interface requires only one thing: that the class has an event of type <strong>PropertyChangedEventHandler</strong>, named <strong>PropertyChanged</strong>.  This event is fired when any property that is tied to a UI control is changed. In this case the Product object will be notified when the user tries to update the product price.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Product <span style="color: #008000;">:</span> INotifyPropertyChanged
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Id <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> ProductId <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> ProductNumber <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> ProductName <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Description <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">double</span> listPrice<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">double</span> ListPrice <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> listPrice<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
           set <span style="color: #000000;">&#123;</span> listPrice <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span> OnPropertyChanged<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ListPrice&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Color <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Size <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Weight <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> ThumbNail <span style="color: #000000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#region INotifyPropertyChanged Members</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">event</span> PropertyChangedEventHandler PropertyChanged<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> OnPropertyChanged<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> name<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>PropertyChanged <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
                PropertyChanged<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>, <span style="color: #008000;">new</span> PropertyChangedEventArgs<span style="color: #000000;">&#40;</span>name<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080;">#endregion</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>Now it is time to design the Silverlight controls.</p>
<p>The Silverlight application consists of 3 controls: the main control that displays a search box with a button and a ListBox for displaying the list of AdventureWorks products. The second control displays the details of the product selected from the list. In the details control you will also be able to update the product price and save your changes to the SharePoint site. The third control is a rotator control that is only shown when data is retrieved from the SharePoint web service with the purpose to show the user that the application is busy.</p>
<p>The XAML for the main Silverlight control is not much:</p>
<pre>&lt;UserControl x:Class="SL.XAML.AdventureWorksProducts.Page"</pre>
<pre>    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</pre>
<pre>    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"</pre>
<pre>    xmlns:my="clr-namespace:SL.XAML.AdventureWorksProducts"</pre>
<pre>    Width="750" Height="600"&gt;</pre>
<pre>    &lt;Grid x:Name="LayoutRoot" Background="White"&gt;</pre>
<pre>        &lt;Grid.RowDefinitions&gt;</pre>
<pre>            &lt;RowDefinition Height="40"/&gt;</pre>
<pre>            &lt;RowDefinition Height="*"/&gt;</pre>
<pre>        &lt;/Grid.RowDefinitions&gt;</pre>
<pre>        &lt;Grid Style="{StaticResource Header}"&gt;</pre>
<pre>            &lt;Grid.ColumnDefinitions&gt;</pre>
<pre>                &lt;ColumnDefinition Width="*"/&gt;</pre>
<pre>                &lt;ColumnDefinition Width="250"/&gt;</pre>
<pre>                &lt;ColumnDefinition Width="80"/&gt;</pre>
<pre>            &lt;/Grid.ColumnDefinitions&gt;</pre>
<pre>            &lt;Border Style="{StaticResource TitleBorder}"&gt;</pre>
<pre>                &lt;TextBlock Text="AdventureWorks Product Search"</pre>
<pre>                           Style="{StaticResource TitleText}"  /&gt;</pre>
<pre>            &lt;/Border&gt;</pre>
<pre>            &lt;TextBox x:Name="SearchTextBox" Text="Topic..."</pre>
<pre>                     FontFamily="Trebuchet MS" Grid.Column="1"</pre>
<pre>                     FontSize="12" Padding="1,3,1,1"/&gt;</pre>
<pre>            &lt;Button x:Name="SearchButton"</pre>
<pre>                    Content="Search"</pre>
<pre>                    Click="SearchButton_Click"</pre>
<pre>                    Style="{StaticResource SearchButton}" /&gt;</pre>
<pre>        &lt;/Grid&gt;</pre>
<pre>        &lt;ListBox x:Name="ProductsList" Style="{StaticResource ProductsList}"</pre>
<pre>                 SelectionChanged="ProductsList_SelectionChanged"&gt;</pre>
<pre>            &lt;ListBox.ItemTemplate&gt;</pre>
<pre>                &lt;DataTemplate&gt;</pre>
<pre>                    &lt;StackPanel Orientation="Horizontal"&gt;</pre>
<pre>                        &lt;!-- Product Thumbnail --&gt;</pre>
<pre>                        &lt;Image Source="{Binding ThumbNail}"</pre>
<pre>                               Style="{StaticResource ThumbNailPreview}" /&gt;</pre>
<pre>                        &lt;!-- Product Number--&gt;</pre>
<pre>                        &lt;StackPanel Orientation="Vertical"&gt;</pre>
<pre>                            &lt;TextBlock Text="{Binding ProductNumber}"</pre>
<pre>                               Margin="5"</pre>
<pre>                               Style="{StaticResource TitleBlock}"</pre>
<pre>                               FontWeight="Bold" /&gt;</pre>
<pre>                            &lt;TextBlock Text="{Binding ProductName}"</pre>
<pre>                               Margin="5"</pre>
<pre>                               Style="{StaticResource TitleBlock}" /&gt;</pre>
<pre>                        &lt;/StackPanel&gt;</pre>
<pre>                        &lt;!-- List Price--&gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding ListPrice, Mode=TwoWay}"</pre>
<pre>                               Margin="5"</pre>
<pre>                               Style="{StaticResource PriceBlock}"/&gt;</pre>
<pre>                    &lt;/StackPanel&gt;</pre>
<pre>                &lt;/DataTemplate&gt;</pre>
<pre>            &lt;/ListBox.ItemTemplate&gt;</pre>
<pre>        &lt;/ListBox&gt;</pre>
<pre>        &lt;TextBlock x:Name="MessageTextBlock" Grid.RowSpan="2"</pre>
<pre>                   Visibility="Collapsed" Text="No items found" /&gt;</pre>
<pre>        &lt;my:ProductDetails x:Name="DetailsView" Grid.RowSpan="2"</pre>
<pre>                    Visibility="Collapsed" /&gt;</pre>
<pre>        &lt;my:Rotator x:Name="LoadRotator" Grid.RowSpan="2"</pre>
<pre>                    Visibility="Collapsed" /&gt;</pre>
<pre>    &lt;/Grid&gt;</pre>
<pre>&lt;/UserControl&gt;</pre>
<p>The main grid contains two rows: one for the search text box and button, and one for the products list box.</p>
<p>The first row of the main grid contains a second grid with a border and 3 columns: one for the Title, one for the search text and one for the search button. It applies a style that is defined as resource in the <strong>App.xaml</strong> file defining the margin:</p>
<pre>&lt;Style x:Key="Header" TargetType="Grid"&gt;</pre>
<pre>       &lt;Setter Property="Margin" Value="7" /&gt;</pre>
<pre>       &lt;Setter Property="Grid.Row" Value="0"/&gt;</pre>
<pre>&lt;/Style&gt;</pre>
<p>Also the border, the title and the button apply a style that is defined as resource in the App.xaml. The button has an event handler attached to it, which will be explained later in the article.</p>
<p>The second row of the main grid contains the list box for the AdventureWorks products. The list box contains a number of stack panels for the layout of the product data. Besides styles the individual text boxes also bind to properties of the product object. For the list price text block, the binding mode is set to <strong>TwoWay</strong>.</p>
<p>At the end of the Page control you see the XAML for the <strong>ProductDetails</strong> control. Initially this control is hidden. It is only when the user selects a product that this controls is populated with the selected product and that the controls is made visible.</p>
<p>The rotator control will only be shown when data is retrieved from the SharePoint web service.</p>
<p>The <strong>ProductDetails</strong> control contains a main grid that contains a rectangle and border element defining the background. The controls displaying the details of the selected product are drawn within grids and stack panels for a good positioning on the control. Most of the controls apply styles defined in the App.xaml. The text blocks displaying the data are bound to a property of the product object. The XAML for the control looks as follows:</p>
<pre>&lt;UserControl x:Class="SL.XAML.AdventureWorksProducts.ProductDetails"</pre>
<pre>    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</pre>
<pre>    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"</pre>
<pre>    Width="600" Height="250"&gt;</pre>
<pre>    &lt;Grid&gt;</pre>
<pre>        &lt;Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch"</pre>
<pre>              Opacity="0.765" Fill="#FF8A8A8A" /&gt;</pre>
<pre>         &lt;Border CornerRadius="20" Background="#FF5C7590" Width="600" Height="250"&gt;</pre>
<pre>             &lt;StackPanel Margin="5, 7, 0, 5"&gt;</pre>
<pre>                &lt;!-- Top Right Close Button --&gt;</pre>
<pre>                &lt;Button Content="Close" Style="{StaticResource CloseButton}" Click="Button_Click"/&gt;</pre>
<pre>                 &lt;Grid&gt;</pre>
<pre>                    &lt;Grid.RowDefinitions&gt;</pre>
<pre>                        &lt;RowDefinition Height="150"/&gt;</pre>
<pre>                        &lt;RowDefinition Height="*"/&gt;</pre>
<pre>                    &lt;/Grid.RowDefinitions&gt;</pre>
<pre>                     &lt;Grid.ColumnDefinitions&gt;</pre>
<pre>                        &lt;ColumnDefinition Width="180"/&gt;</pre>
<pre>                        &lt;ColumnDefinition Width="150" /&gt;</pre>
<pre>                        &lt;ColumnDefinition Width="*" /&gt;</pre>
<pre>                    &lt;/Grid.ColumnDefinitions&gt;</pre>
<pre>                     &lt;!-- Left: Large Picture --&gt;</pre>
<pre>                    &lt;Image Source="{Binding ThumbNail}" Style="{StaticResource DetailsThumbNailPreview}"/&gt;</pre>
<pre>                     &lt;!-- Center: Product Details --&gt;</pre>
<pre>                    &lt;StackPanel Orientation="Vertical" Grid.Column="1" &gt;</pre>
<pre>                        &lt;TextBlock Text="Product number:" Style="{StaticResource DetailBlock}" FontWeight="Bold"  Height="30"/&gt;</pre>
<pre>                        &lt;TextBlock Text="Product name:" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="Color:" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="Size:" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="Weight:" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="List price in $:" Style="{StaticResource DetailBlock}" Height="30" /&gt;</pre>
<pre>                        &lt;TextBlock Text="Description:" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                    &lt;/StackPanel&gt;</pre>
<pre>                    &lt;StackPanel Orientation="Vertical" Grid.Column="2" &gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding ProductNumber}" Style="{StaticResource DetailBlock}" FontWeight="Bold" Height="30"/&gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding ProductName}" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding Color}" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding Size}" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock Text="{Binding Weight}" Style="{StaticResource DetailBlock}" /&gt;</pre>
<pre>                        &lt;TextBlock x:Name="ListPriceTextBlock" Text="{Binding ListPrice, Mode=TwoWay }" Style="{StaticResource DetailBlock}" Height="30" /&gt;</pre>
<pre>                        &lt;TextBox x:Name="ListPriceTextBox" Text="" Width="200" Visibility="Collapsed" HorizontalAlignment="Left" /&gt;</pre>
<pre>                    &lt;/StackPanel&gt;</pre>
<pre>                     &lt;TextBlock Text="{Binding Description}" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"</pre>
<pre>                         Style="{StaticResource DetailBlock}" FontStyle="Italic" /&gt;</pre>
<pre>                &lt;/Grid&gt;</pre>
<pre>                 &lt;Button x:Name="EditButton" Width="80" Content="Edit Price" HorizontalAlignment="Right" Margin="20" Click="EditButton_Click"/&gt;</pre>
<pre>             &lt;/StackPanel&gt;</pre>
<pre>         &lt;/Border&gt;</pre>
<pre>    &lt;/Grid&gt;</pre>
<pre>&lt;/UserControl&gt;</pre>
<p>Now to the code behind of both Silverlight controls. When the Silverlight application loads, all products of the AdventureWorks Products list are retrieved using the <strong>HttpWebRequest</strong> for calling the <strong>GetListItems</strong> method of the <strong>Lists.asmx</strong> web service.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>WebRequest.<span style="color: #0000FF;">Create</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Uri<span style="color: #000000;">&#40;</span>siteUrl <span style="color: #008000;">+</span>
     <span style="color: #666666;">&quot;/_vti_bin/Lists.asmx&quot;</span>, UriKind.<span style="color: #0000FF;">Absolute</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
request.<span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;POST&quot;</span><span style="color: #008000;">;</span>
request.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;application/soap+xml; charset=utf-8&quot;</span><span style="color: #008000;">;</span>
request.<span style="color: #0000FF;">Headers</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;ClientType&quot;</span><span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Silverlight&quot;</span><span style="color: #008000;">;</span>
request.<span style="color: #0000FF;">BeginGetRequestStream</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>RequestCallback<span style="color: #000000;">&#41;</span>, request<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>The call to the Request is asynchronous an thus needs a callback method. In that callback method the soap envelope is build. If you don&#8217;t know the correct envelope of a web service method you have to browse to that web service and check the method of your choice. You will get a page with the necessary information of the envelope.</p>
<p>The envelope contains the necessary XML to execute the <strong>GetListItems</strong> method on the AdventureWorks Products list passed in via the Web Part. If the user entered a string in the Search text box a CAML query is build to retrieve only the products containing that string.  The body of the request is retrieved by calling the <strong>EndGetRequestStream</strong> method of the <strong>HttpWebRequest</strong> object. Then the envelope is written to the body and the request is send back to the server.</p>
<p>Also the <strong>Response</strong> is asynchronous so you need to define another callback method for <strong>HttpWebRequest</strong> when coming back from the server.</p>
<p>The envelope is constructed as follows:</p>
<div id="attachment_1159" class="wp-caption aligncenter" style="width: 604px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/getlistitems-envelope.png"><img class="size-full wp-image-1159" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/getlistitems-envelope.png" alt="GetListItems envelope" width="594" height="337" /></a><p class="wp-caption-text">GetListItems envelope</p></div>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> RequestCallback<span style="color: #000000;">&#40;</span>IAsyncResult asyncResult<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     <span style="color: #0600FF;">try</span>
     <span style="color: #000000;">&#123;</span>
         <span style="color: #FF0000;">string</span> envelope <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;see image&quot;</span><span style="color: #008000;">;</span>
&nbsp;
         <span style="color: #FF0000;">string</span> query <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span>
         <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #008000;">!</span><span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #000000;">&#40;</span>searchstring<span style="color: #000000;">&#41;</span> <span style="color: #008000;">&amp;</span>amp<span style="color: #008000;">;&amp;</span>amp<span style="color: #008000;">;</span> searchstring <span style="color: #008000;">!=</span> <span style="color: #666666;">&quot;Topic...&quot;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             query <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;{0}&quot;</span><span style="color: #008000;">;</span>
             query <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>query, searchstring<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>
         envelope <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>envelope, listName, query<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>asyncResult.<span style="color: #0000FF;">AsyncState</span><span style="color: #008000;">;</span>
         body <span style="color: #008000;">=</span> request.<span style="color: #0000FF;">EndGetRequestStream</span><span style="color: #000000;">&#40;</span>asyncResult<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span>.<span style="color: #0000FF;">UTF8Encoding</span> encoding <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span>.<span style="color: #0000FF;">UTF8Encoding</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> formBytes <span style="color: #008000;">=</span> encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;">&#40;</span>envelope<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         body.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>formBytes, <span style="color: #FF0000;">0</span>, formBytes.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         body.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         request.<span style="color: #0000FF;">BeginGetResponse</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>ResponseCallback<span style="color: #000000;">&#41;</span>,
            request<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
     <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>WebException ex<span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
         <span style="color: #FF0000;">string</span> s <span style="color: #008000;">=</span> ex.<span style="color: #0000FF;">Message</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Both the Request and the Response are started asynchronously on another thread. When the response comes back from the server, it is not on the worker thread. So the data is stored in a class level variable and the <strong>ProcessResponse</strong> method on the worker thread is called.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ResponseCallback<span style="color: #000000;">&#40;</span>IAsyncResult asyncResult<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     LoadRotator.<span style="color: #0000FF;">Visibility</span> <span style="color: #008000;">=</span> Visibility.<span style="color: #0000FF;">Collapsed</span><span style="color: #008000;">;</span>
&nbsp;
     HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>asyncResult.<span style="color: #0000FF;">AsyncState</span><span style="color: #008000;">;</span>
     HttpWebResponse response <span style="color: #008000;">=</span>
        <span style="color: #000000;">&#40;</span>HttpWebResponse<span style="color: #000000;">&#41;</span>request.<span style="color: #0000FF;">EndGetResponse</span><span style="color: #000000;">&#40;</span>asyncResult<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>response.<span style="color: #0000FF;">StatusCode</span> <span style="color: #008000;">==</span> HttpStatusCode.<span style="color: #0000FF;">OK</span><span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
        products <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ObservableCollection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        Stream content <span style="color: #008000;">=</span> response.<span style="color: #0000FF;">GetResponseStream</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>StreamReader reader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StreamReader<span style="color: #000000;">&#40;</span>content<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            responsestring <span style="color: #008000;">=</span> reader.<span style="color: #0000FF;">ReadToEnd</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">try</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Dispatcher</span>.<span style="color: #0000FF;">BeginInvoke</span><span style="color: #000000;">&#40;</span>ProcessResponse<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>
     <span style="color: #0600FF;">else</span>
     <span style="color: #000000;">&#123;</span>
         MessageTextBlock.<span style="color: #0000FF;">Visibility</span> <span style="color: #008000;">=</span> Visibility.<span style="color: #0000FF;">Visible</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>The <strong>ProcessResponse</strong> method parses the XML into a collection of Product objects using <strong>LINQ to XML</strong>. For this purpose a reference to the <strong>System.Xml.Linq</strong> assembly is added. All products are added to the Products collection and then assigned to the <strong>ItemSource</strong> property of the products list box in order to enable the data binding.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProcessResponse<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    LoadRotator.<span style="color: #0000FF;">Visibility</span> <span style="color: #008000;">=</span> Visibility.<span style="color: #0000FF;">Collapsed</span><span style="color: #008000;">;</span>
    products <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ObservableCollection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    XDocument results <span style="color: #008000;">=</span> XDocument.<span style="color: #0000FF;">Parse</span><span style="color: #000000;">&#40;</span>responsestring<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    var query <span style="color: #008000;">=</span> from item <span style="color: #0600FF;">in</span> results.<span style="color: #0000FF;">Descendants</span><span style="color: #000000;">&#40;</span>XName.<span style="color: #0000FF;">Get</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;row&quot;</span>,
        <span style="color: #666666;">&quot;#RowsetSchema&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
    select <span style="color: #008000;">new</span> Product<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        Id <span style="color: #008000;">=</span> <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Convert</span>.<span style="color: #0000FF;">ToInt32</span><span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_ID&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span>,
            CultureInfo.<span style="color: #0000FF;">InvariantCulture</span><span style="color: #000000;">&#41;</span>,
        ProductNumber <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Title&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;_&quot;</span>,
        ProductName <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_ProductName&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span>,
        ListPrice <span style="color: #008000;">=</span>
            <span style="color: #000000;">System</span>.<span style="color: #0000FF;">Convert</span>.<span style="color: #0000FF;">ToDouble</span><span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_ListPrice&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span>,
            CultureInfo.<span style="color: #0000FF;">InvariantCulture</span><span style="color: #000000;">&#41;</span>,
        Description <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Description&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span>
            item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Description&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>,
        Color <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Color&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span>
            item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Color&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>,
        Size <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Size&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span>
            item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Size&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>,
        Weight <span style="color: #008000;">=</span> item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Weight&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span>
            item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Weight&quot;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Value</span> <span style="color: #008000;">:</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span>,
        ThumbNail <span style="color: #008000;">=</span> GetThumbnailUrl<span style="color: #000000;">&#40;</span>item.<span style="color: #0000FF;">Attribute</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;ows_Thumbnail&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Product p <span style="color: #0600FF;">in</span> query.<span style="color: #0000FF;">ToList</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
        products.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>p<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
    ProductsList.<span style="color: #0000FF;">ItemsSource</span> <span style="color: #008000;">=</span> products<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>When the user selects a product in the list, a box containing the detailed information is shown to the user. This is triggered by the <strong>SelectionChanged</strong> event of the list box. The selected product is retrieved from the list box and assigned to the <strong>ProductDetails</strong> control, which is then made visible.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProductsList_SelectionChanged<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender,
     SelectionChangedEventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
     Product product <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Product<span style="color: #000000;">&#41;</span>ProductsList.<span style="color: #0000FF;">SelectedItem</span><span style="color: #008000;">;</span>
&nbsp;
     <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>product <span style="color: #008000;">!=</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
         DetailsView.<span style="color: #0000FF;">DataContext</span> <span style="color: #008000;">=</span> product<span style="color: #008000;">;</span>
         DetailsView.<span style="color: #0000FF;">SiteUrl</span> <span style="color: #008000;">=</span> siteUrl<span style="color: #008000;">;</span>
         DetailsView.<span style="color: #0000FF;">ListName</span> <span style="color: #008000;">=</span> listName<span style="color: #008000;">;</span>
         DetailsView.<span style="color: #0000FF;">Visibility</span> <span style="color: #008000;">=</span> Visibility.<span style="color: #0000FF;">Visible</span><span style="color: #008000;">;</span>
     <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>This brings us to the code behind of the <strong>ProductDetails</strong> control. The control is populated by the main control. This control contains also an Edit Price button. When the user clicks this button, the list price text block is changed into a text box in which the user can enter the new price. When the user then clicks the <strong>Update</strong> button,  the <strong>UpdateListItems</strong> method of the Lists.asmx web service is called to save the new list price. The update is also performed by using HttpWebRequest, which runs asynchronously on different threads.</p>
<p>The envelope for the UpdateListItems method looks like follows:</p>
<div id="attachment_1162" class="wp-caption aligncenter" style="width: 620px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/updatelistitems-envelope1.png"><img class="size-full wp-image-1162" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/updatelistitems-envelope1.png" alt="UpdateListItems envelope" width="610" height="168" /></a><p class="wp-caption-text">UpdateListItems envelope</p></div>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> UpdateListPrice<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>WebRequest.<span style="color: #0000FF;">Create</span><span style="color: #000000;">&#40;</span>
       <span style="color: #008000;">new</span> Uri<span style="color: #000000;">&#40;</span>siteUrl <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;/_vti_bin/Lists.asmx&quot;</span>, UriKind.<span style="color: #0000FF;">Absolute</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    request.<span style="color: #0000FF;">Method</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;POST&quot;</span><span style="color: #008000;">;</span>
    request.<span style="color: #0000FF;">ContentType</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;application/soap+xml; charset=utf-8&quot;</span><span style="color: #008000;">;</span>
    request.<span style="color: #0000FF;">BeginGetRequestStream</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>RequestCallback<span style="color: #000000;">&#41;</span>,
       request<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> RequestCallback<span style="color: #000000;">&#40;</span>IAsyncResult asyncResult<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #FF0000;">string</span> envelope <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;see image&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #FF0000;">string</span> query <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span>
    query <span style="color: #008000;">=</span> <span style="color: #666666;">@&quot;{0}{1}&quot;</span><span style="color: #008000;">;</span>
&nbsp;
    query <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>query, selectedProduct.<span style="color: #0000FF;">Id</span>, newListPriceString<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    envelope <span style="color: #008000;">=</span> <span style="color: #FF0000;">string</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span>envelope, listName, query<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>asyncResult.<span style="color: #0000FF;">AsyncState</span><span style="color: #008000;">;</span>
    body <span style="color: #008000;">=</span> request.<span style="color: #0000FF;">EndGetRequestStream</span><span style="color: #000000;">&#40;</span>asyncResult<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span>.<span style="color: #0000FF;">UTF8Encoding</span> encoding <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #000000;">System.<span style="color: #0000FF;">Text</span></span>.<span style="color: #0000FF;">UTF8Encoding</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> formBytes <span style="color: #008000;">=</span> encoding.<span style="color: #0000FF;">GetBytes</span><span style="color: #000000;">&#40;</span>envelope<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    body.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span>formBytes, <span style="color: #FF0000;">0</span>, formBytes.<span style="color: #0000FF;">Length</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    body.<span style="color: #0000FF;">Close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    request.<span style="color: #0000FF;">BeginGetResponse</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> AsyncCallback<span style="color: #000000;">&#40;</span>ResponseCallback<span style="color: #000000;">&#41;</span>, request<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ResponseCallback<span style="color: #000000;">&#40;</span>IAsyncResult asyncResult<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>HttpWebRequest<span style="color: #000000;">&#41;</span>asyncResult.<span style="color: #0000FF;">AsyncState</span><span style="color: #008000;">;</span>
    HttpWebResponse response <span style="color: #008000;">=</span>
        <span style="color: #000000;">&#40;</span>HttpWebResponse<span style="color: #000000;">&#41;</span>request.<span style="color: #0000FF;">EndGetResponse</span><span style="color: #000000;">&#40;</span>asyncResult<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    Stream content <span style="color: #008000;">=</span> response.<span style="color: #0000FF;">GetResponseStream</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>response.<span style="color: #0000FF;">StatusCode</span> <span style="color: #008000;">==</span> HttpStatusCode.<span style="color: #0000FF;">OK</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
       <span style="color: #0600FF;">try</span>
       <span style="color: #000000;">&#123;</span>
           <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Dispatcher</span>.<span style="color: #0000FF;">BeginInvoke</span><span style="color: #000000;">&#40;</span>ProcessResponse<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
       <span style="color: #000000;">&#125;</span>
       <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProcessResponse<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
    selectedProduct.<span style="color: #0000FF;">ListPrice</span> <span style="color: #008000;">=</span> newListPrice<span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Because of the <strong>TwoWay</strong> binding mode set on the <strong>ListPriceTextBlock</strong> on the list box, the price change is propagated to the item in the list box during the execution of the <strong>ProcessResponse</strong> method.</p>
<p>Build the Silverlight application and copy the resulting .xap file to your SharePoint project. I copied it to a Resources sub directory.</p>
<h2>Deploying the solution</h2>
<p>Now that it comes to the deployment of the SharePoint web part and its Silverlight application, you have to make some modifications to the Web Part files that contain the metadata for the Web Part.</p>
<p>Set the properties of the embedded silverlight resource. Include the Resources folder and the .xap file to the Web Part project. In the file properties set the Build action to <strong>Embedded Resource</strong>.</p>
<div id="attachment_1131" class="wp-caption aligncenter" style="width: 366px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/09/compile-as-embedded-resource1.png"></a><img class="size-full wp-image-1131" src="http://sharepointmagazine.net/wp-content/uploads/2008/09/compile-as-embedded-resource1.png" alt="Compile as an embedded resource" width="356" height="154" /><p class="wp-caption-text">Compile as an embedded resource</p></div>
<p>Build the SharePoint project and open the DLL with a tool like Reflector in order to copy the right namespace of the embedded resource which is the silverlight application. Return to the Web Part project and open the Web Part class. Before the namespace declaration you have to add the metadata attribute that enables an embedded resource in an assembly:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #000000;">&#91;</span>assembly<span style="color: #008000;">:</span> WebResource<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;SL.AdventureWorksProducts.Resources.SL.XAML.AdventureWorksProducts.xap&quot;</span>, <span style="color: #666666;">&quot;application/x-silverlight-app&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span>
<span style="color: #0600FF;">namespace</span> SL.<span style="color: #0000FF;">AdventureWorksProducts</span>
<span style="color: #000000;">&#123;</span>
   … Web Part code …
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>In the <strong>CreateChildControls</strong> method set the source property of the silverlight control to the location of the silverlight application. You can retrieve this location by using the <strong>GetWebResourceUrl</strong> method:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">silverlightControl.<span style="color: #0000FF;">Source</span> <span style="color: #008000;">=</span>
    <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Page</span>.<span style="color: #0000FF;">ClientScript</span>.<span style="color: #0000FF;">GetWebResourceUrl</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">GetType</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>, <span style="color: #666666;">&quot;SL.AdventureWorksProducts.Resources.SL.XAML.AdventureWorksProducts.xap&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>If needed you can modify the .webpart file and the .xml file to set certain Web Part properties.</p>
<p>When working with the Visual Studio 2008 extensions for WSS you can set the <strong>Start browser with URL</strong> property of the web part project to the URL of your SharePoint site. This will deploy the Web Part to this URL.</p>
<p>When deployed you can add the Web Part to a web part page. Don&#8217;t forget to configure your SharePoint server for enabling Silverlight! If you don&#8217;t know how to do that, you can always check the document &#8211; which is part of the Silverlight BluePrint for SharePoint &#8211;  included with this article.</p>
<h2>Conclusion</h2>
<p>If you want to learn more about Silverlight integration in SharePoint you can download the Silverlight BluePrint for Sharepoint at <a href="http://codeplex.com/SL4SP"></a>http://codeplex.com/SL4SP.</p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/creating-a-sharepoint-web-part-that-hosts-a-data-binding-silverlight-application/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Leveraging the SharePoint Platform (Part 1)</title>
		<link>http://sharepointmagazine.net/technical/development/leveraging-the-sharepoint-platform-part-1</link>
		<comments>http://sharepointmagazine.net/technical/development/leveraging-the-sharepoint-platform-part-1#comments</comments>
		<pubDate>Thu, 14 Aug 2008 08:26:41 +0000</pubDate>
		<dc:creator>Jeremy Thake</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[capabilities]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[sharepoint]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=424</guid>
		<description><![CDATA[After reading this six part series hopefully you'll have a clearer understanding of what the SharePoint Platform can offer to you and your organization. It will also provide some direction in using the SharePoint Platform.]]></description>
			<content:encoded><![CDATA[<p>After reading this six part series hopefully you&#8217;ll have a clearer understanding of what the SharePoint Platform can offer to you and your organization. It will also provide some direction in using the SharePoint Platform. I have broken the series down as follows:</p>
<ul>
<li>Part 1 &#8211; What is the SharePoint Platform</li>
<li>Part 2 &#8211; What capabilities to start with</li>
<li>Part 3 &#8211; How to start with the SharePoint Platform</li>
<li>Part 4 &#8211; Levels of leveraging the SharePoint Platform</li>
<li>Part 5 &#8211; Why use SharePoint as a Development Platform</li>
<li>Part 6 &#8211; Lessons learnt from Leveraging the SharePoint Platform</li>
</ul>
<p><strong>What is the SharePoint Platform?</strong></p>
<p>The SharePoint 2007 Platform has been sending a buzz round the IT industry now since November 2006 when it was launched, I won&#8217;t go through the <a href="http://www.diigo.com/user/jthake/sharepoint+history" target="_blank">history</a> of SharePoint in this series, but it is beneficial to understand how the platform has evolved since it&#8217;s introduction in 2001. Marc Andreessen, of Netscape fame, <a href="http://blog.pmarca.com/2007/09/the-three-kinds.html" target="_blank">defines a Platform succinctly</a>:</p>
<p align="center"><em>&#8220;A &#8220;platform&#8221; is a system that can be programmed and therefore customized by outside developers &#8212; users &#8212; and in that way, adapted to countless needs and niches that the platform&#8217;s original developers could not have possibly contemplated, much less had time to accommodate.&#8221;</em></p>
<p>This definition is very much targeted at cloud based platforms in the consumer market such as Facebook, Amazons&#8217; S3 and Ning. I think it is a very fitting to description of SharePoint&#8230;the amount of times I have been asked &#8220;can SharePoint do x?&#8221; and thought quietly in my head&#8230;&#8221;well yes&#8230;but it depends how far you want to go with it&#8230;&#8221;. In this series I hope to get people thinking in structured ways of how they can leverage the SharePoint Platform with some experience and advice to point people in the right direction.</p>
<p><strong>The six SharePoint &#8220;Pillars&#8221; / Capabilities</strong></p>
<div id="attachment_423" class="wp-caption aligncenter" style="width: 310px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/08/capabilities.jpg"><img class="size-medium wp-image-423" src="http://sharepointmagazine.net/wp-content/uploads/2008/08/capabilities-300x240.jpg" alt="SharePoint Capabilities" width="300" height="240" /></a><p class="wp-caption-text">SharePoint Capabilities</p></div>
<p>The six core pillars/capabilities of SharePoint are a good basis to start thinking about what the Platform has to offer. The <a href="http://www.microsoft.com/sharepoint/capabilities/default.mspx" target="_blank">Microsoft SharePoint site</a> describes the platform in these sections and has case studies focused around them. Below I&#8217;ve covered them off in less sales speak and in terms that people outside of Microsoft terminology will understand with direct comparisons to commonly know consumer platforms.</p>
<p><strong>Collaboration and Social Computing</strong></p>
<p style="center;"><span style="#808080;"><em>Real time presence; Standard Site Templates; Wikis; Blogs; People and Groups; Calendars; Email Integration; Task coordination; Surveys; Document Collaboration; Issue Tracking; </em><em>Social Networking</em></span></p>
<p>With all the buzz around about Web 2.0, since the evolution of the consumer Internet with platforms such as WordPress, Blogger and Wikipedia, it is no surprise that Microsoft have bet on Enterprise 2.0 being the next big thing. Each of the areas of this capability are by no means &#8220;best of breed&#8221;, but do cover basic functions expected. The issue here is the expectation of the user base exposed to more feature rich consumer platforms and also the take up of these without mature enough governance.</p>
<p><strong>Portals</strong></p>
<p align="center"><em><span style="#808080;">Mobile Device Support; Office 2007 Suite integration; My Site personal sites; Content syndication; Privacy and security; Site Directory; User Profiles and the Profile Store; Audience Targeting; Site Manager; Portal Site Templates; SharePoint Sites and Document Aggregation Web Parts; Colleagues and Membership Web Parts</span></em></p>
<p>As with the social computing aspects of the first capability, consumer Platforms such as Facebook, MySpace and iGoogle are leading the way here. This area focuses on the Personalization and Customization features commonly found in Portal technology products by providing the ability to create personalized spaces for users. These spaces can be driven by roles based rules, as well as user behavior and user preferences.</p>
<p><strong>Enterprise Search</strong></p>
<p align="center"><em><span style="#808080;">User Interface; Search results; Enterprise content sources; Relevance; Administration and Management; Indexing controls; Security; People search; Business data search</span></em></p>
<p>Enterprise Search has been a large talking point for generations of Platforms. The frustrations around the assumptions that Internet Search Engines find information so easily from millions of pages online when Enterprise equivalents fail miserably. The SP1 and Infrastructure Updates extend these capabilities further with faceted searches and a more advanced administrative web control panel. It also leverages core base platforms such as Active Directory with People Search functionalities.</p>
<p><strong>Enterprise Content Management</strong></p>
<p align="center"><em><span style="#808080;">Business document workflow support; Document management site templates; Integration with Microsoft Information Rights Management; Document Information Panel; Document Action Bar; Retention and auditing policies; Records repository; Email content as a records; Legal Holds; Navigation controls; Content authoring; Content publishing and deployment; Site templates; Page layouts; Site variations; WYSIWYG Web Content Editor; Slide libraries; Policies, auditing and compliance</span></em></p>
<p>Enterprise Content Management has been the driver behind a lot of the major players in the Document Management space swallowing up their smaller competitors such as: IBM with Filenet; OpenText with Hummingbird; and EMC with Documentum. This capability covers three main areas: Document Management; Records Management and Web Content Management.</p>
<p><strong>Business Process and Forms</strong></p>
<p align="center"><em><span style="#808080;">Browser based forms; Centralized forms management and control; Design once development model; Form Import Wizard; Integrated deployment model for &#8220;no code&#8221; forms; Comparability checker</span></em></p>
<p>Business Process and Forms capabilities focus around InfoPath Forms being hosted within the Office Forms Services as web pages. There are some features of InfoPath Forms that mean that they won&#8217;t host as web pages, but this is an extremely powerful way to build basic forms fast and integrate them within SharePoint Lists and therefore fully utilize the Platform Services. Remembering the InfoPath Forms store data in an XML format, it allows powerful manipulation of collections of forms and the ability to use this XML data within the List Column data (metadata).</p>
<p><strong>Business Intelligence</strong></p>
<p align="center"><em><span style="#808080;">Integrate, flexible spreadsheet publishing; share, manage and control spreadsheets; web based business intelligence using Excel Services; Data Connection Libraries; Business Data Catalogue; Business Data Web Parts; Business Data actions; Integrated Business intelligence dashboards; Report Center; Key Performance Indicators; Filter Web Parts</span></em></p>
<p>The Business Intelligence capability focuses around the hosting of Excel spreadsheets online. This has been a feature that really hasn&#8217;t made too many &#8216;blog&#8217; headlines as yet, but once the product has matured I&#8217;m 100% positive that it will be a highly used capability of the platform. The Key Performance Indicators (KPIs) and integration with SQL Reporting Services allows for Executive Dashboards makes for a compelling platform of choice.</p>
<p><strong>Platform Services</strong></p>
<p align="center"><em><span style="#808080;">Configuration management; Administration user interface; Delegation; Re-parenting; Provisioning; Usage analytics; Monitoring; Alert Notifications; RSS Feeds; Rights trimmed user interface; Automated bread crumb; Quick launch bar; Top Navigation bar; Accessibility; Recycle bin; Backup/restore support; Document Libraries; Metadata; Content Types; Application templates; Object Model; Web Services; Change Logs; Job Service; Feature Framework; Solution Deployment Model; Single Sign On</span></em></p>
<p>The base Platform of which all these capabilities surround has been extended significantly from SharePoint 2003. The core of which surrounds itself around the SharePoint Object Model of Site Collections, Sites and Webs and the security around these objects. The base concepts of the Platform Services area are where most people will find themselves configuring and creating instances of objects for their solutions. I will be focusing a lot of this series around these core concepts.</p>
<p><strong>The three SharePoint Editions</strong></p>
<p><a href="/Documents%20and%20Settings/Administrator/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2ef11a3d-d1bc-49bb-990b-f47140832a5b/image[5].png"></a></p>
<div class="mceTemp mceIEcenter">
<div class="mceTemp mceIEcenter">
<div class="mceTemp mceIEcenter">
<div id="attachment_432" class="wp-caption aligncenter" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/08/editions1.jpg"><img class="size-full wp-image-432" src="http://sharepointmagazine.net/wp-content/uploads/2008/08/editions1.jpg" alt="SharePoint Editions" width="500" height="297" /></a><p class="wp-caption-text">SharePoint Editions</p></div>
</div>
</div>
</div>
<p>The above diagram illustrates the difference in capabilities at each Edition of SharePoint. Windows SharePoint Services (WSS) 3.0 is available as an installation for Windows Server 2003 for free. Microsoft Office SharePoint Server (MOSS) 2007 Standard and Enterprise Editions are based on a licensing model (which I will not go into here&#8230;best place to start is to talk directly with <a href="http://www.microsoft.com/licensing/mla/" target="_blank">Microsoft on this one</a>). Microsoft has a more <a href="http://office.microsoft.com/en-us/products/FX101758691033.aspx?ofcresset=1" target="_blank">detailed page</a> describing the granular differences between each Edition. To summarize, Enterprise Edition allows Business Intelligence and Business Process and Forms.</p>
<p>Later on in the series I will be referring to these capabilities and when they are typically utilized during the maturity of the implementation of the Platform. One thing to bear in mind is that because WSS 3.0 is free, you do get a significant set of capabilities to leverage that would typically take weeks to build in ASP.NET/SQL traditional development platform. So you don&#8217;t necessarily have to jump straight into the large edition to get the functionality you require, that said, to scale your farm out from a one server role to multiple roles requires a MOSS Edition.</p>
<p><strong>SharePoint Architecture</strong></p>
<p><a href="/Documents%20and%20Settings/Administrator/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2ef11a3d-d1bc-49bb-990b-f47140832a5b/clip_image00184.jpg"></a></p>
<div class="mceTemp mceIEcenter">
<div id="attachment_444" class="wp-caption aligncenter" style="width: 510px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/08/infrastructure.jpg"><img class="size-full wp-image-444" src="http://sharepointmagazine.net/wp-content/uploads/2008/08/infrastructure.jpg" alt="SharePoint Infrastructure" width="500" height="375" /></a><p class="wp-caption-text">SharePoint Infrastructure</p></div>
</div>
<p>This diagram illustrates the architectural structure of the SharePoint Platform. SharePoint is simply another layer built on top of the .NET Framework and as with any typical dynamic ASP.NET web site, it runs within the Internet Information Services (IIS) 6.0 and connects to a SQL Server 2005 database. Both of which are hosted on a Windows Server 2003 machine.</p>
<p>This series talks about how you can leverage SharePoint and in doing so leverage ASP.NET 2.0 technologies such as Master Pages, Page Layouts and Web Parts that the Platform implements. It also leverages the Windows Workflow Foundations of the .NET 3.0 Framework with a custom SharePoint persistence database. This allows Microsoft professionals to become familiar with the environment based on experience around these technologies, although there aren&#8217;t many of us out there who are well rounded in all of the technologies in this architecture. This series will hopefully give you some understanding of the issues in the marketplace of sourcing SharePoint people and also getting the correct fit for the task at hand.</p>
<p><strong>The SharePoint Object Model</strong></p>
<p>Without going too far into the realms of the Object Model, I just wanted to promote the fact that most of the capabilities mentioned above basically are developed using it&#8217;s own Object Model which is made up of SharePoint Sites, SharePoint Webs, SharePoint Lists and SharePoint List Items. Thinking in these four terms you can start to structure your solutions to advantage of the methods and events available out of the box of each and also extend them if necessary. In this series I will be describing solutions and how they fit into these four simple objects &#8211; trust me it&#8217;s not as complicated as 1st Normal Form Database Design!</p>
<div class="mceTemp mceIEcenter">
<div class="mceTemp mceIEcenter">
<div class="mceTemp mceIEcenter">
<div id="attachment_443" class="wp-caption aligncenter" style="width: 488px"><a href="http://sharepointmagazine.net/wp-content/uploads/2008/08/sharepoint-object-model.jpg"><img class="size-full wp-image-443" src="http://sharepointmagazine.net/wp-content/uploads/2008/08/sharepoint-object-model.jpg" alt="SharePoint Object Model" width="478" height="374" /></a><p class="wp-caption-text">SharePoint Object Model</p></div>
</div>
</div>
</div>
<p><a href="/Documents%20and%20Settings/Administrator/Application%20Data/Windows%20Live%20Writer/PostSupportingFiles/2ef11a3d-d1bc-49bb-990b-f47140832a5b/image[10].png"></a></p>
<p><strong>Trying to be everything to everybody</strong></p>
<p>From reading this first part, you will probably realize that the SharePoint Platform is trying to be everything to everybody just like the other juggernauts in this space such as Oracle, SAP, IBM, EMC Documentum, OpenText and open source vendors such as Alfresco. This is a big jump from the previous 2003 version that was simply a Portal/Collaboration application and has now incorporated the ASP.NET 2.0 Framework, as well as amalgamating the Microsoft Content Management Server technologies. SharePoint vNext will surely mature some of the new entries into the WSS 3.0/MOSS 2007 version such as Business Forms, Business Intelligence and Search.</p>
<p>As I have mentioned before in my previous posts around the capabilities some of them are simply no where near the best of breed applications that focus on one core capability. Microsoft Partners will continue to build successful solutions on top of the SharePoint Platform to further extend the capabilities such as K2 for Workflow, Nintex for Reporting, Bamboo Solutions for Portal Web Part enhancements, Colligo for Offline Document Management, NewsGator for RSS Readers and Atlassian for WIkis.</p>
<p>The next part in the series will talk more in detail about the out of the box (OOTB) capabilities and how leverage them.</p>
<p>Until next time,</p>
<p>Jeremy Thake<br />
<a href="http://wss.made4the.net/">http://wss.made4the.net/</a> | <a href="http://www.readify.net/">http://www.readify.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/development/leveraging-the-sharepoint-platform-part-1/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Microsoft SharePoint on the iPhone</title>
		<link>http://sharepointmagazine.net/news/microsoft-sharepoint-on-the-iphone</link>
		<comments>http://sharepointmagazine.net/news/microsoft-sharepoint-on-the-iphone#comments</comments>
		<pubDate>Thu, 17 Jul 2008 15:49:10 +0000</pubDate>
		<dc:creator>sbell22</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[User]]></category>
		<category><![CDATA[SharePoint iPhone CMS NTLM Kerberos Mobile]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=142</guid>
		<description><![CDATA[I recently discovered what appears to be a "killer application" for mobile productivity:  using and managing fully-featured SharePoint sites from an iPhone.]]></description>
			<content:encoded><![CDATA[<p><strong>The Odd Couple?</strong></p>
<p>I recently discovered what appears to be a &#8220;killer application&#8221; for mobile productivity:  using and managing fully-featured SharePoint sites from an iPhone.  No, not the dumbed-down, &#8220;/m&#8221; DOS-like simplified SharePoint views.  We&#8217;re talking about the full, richly formatted and designed SharePoint user experience, including logging in to the back-end and configuring sites.  Accessed from an iPhone, SharePoint now allows business workgroup teams to collaborate while truly &#8220;on the go&#8221;, potentially speeding up the tempo of team workflow on critical projects.</p>
<p>I would not have understood how compelling using SharePoint from a pocket-sized mobile device is, but actually using SharePoint on an iPhone is a bit of a &#8220;wow!&#8221; experience.  SharePoint could open up a whole new universe for iPhone users: the Microsoft universe, which is a very large one.</p>
<p>iPhone&#8217;s Safari mobile browser renders many sites as well as a notebook or desktop computer; some even better.  Site designers at Amazon.com, BofA.com, LinkedIn.com have developed and are dishing up iPhone-optimized web pages, with stunning results.  But SharePoint sites really require no such modifications when accessed from an iPhone.  Authentication can be an issue, however; we are still sorting out exactly what the technical and configuration issues may be.</p>
<div style="center;"><span><a id="n9c_40" href="http://mail.google.com/mail/?ui=2&amp;ik=15d8ed0bf2&amp;realattid=f_fimf20ox0&amp;attid=0.1&amp;disp=inline&amp;view=att&amp;th=11b1f43aaa7c75b0" target="_blank"></a></span></p>
<p style="center;"><strong><span style="xx-small;">SharePoint challenge screen on a 2nd-generation (3G) iPhone</span></strong></p>
<p>There are now scores of iPhone-resident business productivity applications bursting onto the scene for the iPhone, based upon AAPL&#8217;s software developer&#8217;s kit (SDK).  During the first three days after the 3G iPhone&#8217;s launch July 11 2008, 1 million new 3G iPhones were sold and over 10 million applications were downloaded from Apple&#8217;s iPhone applications store.</p>
<p>That is a lot of activity downloading individual applications; but Microsoft&#8217;s <a id="n9c_19" href="http://www.microsoft.com/sharepoint/default.mspx" target="_blank">Office SharePoint Server platform</a> is a much bigger suite of fully-featured Microsoft applications than any individual iPhone-resident application.  Being a server resident Microsoft CMS ecosystem complete with an application development universe, app extensions, API, and add-ons there is no comparison to stand-alone, resident iPhone applications in terms of power, extensibility, and potential for scalability and robustness in many business enterprise environments &#8211; whether it is a large Corporation, or a startup company looking to execute at breakneck speed.</p>
<p><strong>Why is using SharePoint from an iPhone compelling?</strong></p>
<p>SharePoint on the iPhone may simply be the most promising and robust combination of mobility and a powerful server-based application out there.</p>
<div style="center;"><img src="http://docs.google.com/File?id=dgg83mmn_143dcj4k5gb_b" alt="" width="569" height="378" /><br />
<strong><span style="xx-small;"><br />
Using a SharePoint site from a 1st generation (2.5G) iPhone</span></strong></div>
<p>Running SharePoint from an iPhone, workgroup team members can be liberated to do these sorts of things &#8220;on the go&#8221; from anywhere, without needing a laptop computer:</p>
<ul>
<li>Centrally host documents, spreadsheets, and presentations in a secure environment</li>
<li>Edit those documents, spreadsheets, and presentations collaboritely with change control</li>
<li>Maintain, publish, and distribute group calendars and events</li>
<li>Schedule and update group meetings and events efficiently</li>
<li>Share photos/graphics using project-specific albums</li>
<li>Create internal/private social networks for sub-topic discussions</li>
<li>Create and share internal web content and media privately</li>
<li>Track issues, milestones, and Gantt charts for projects</li>
<li>Conduct internal opinion polls</li>
<li>Create and post internal announcements</li>
</ul>
<p>&#8230; and that&#8217;s just the start of it. SharePoint running on an ultra-mobile device, could potentially  change a lot of corporate lifestyles, and make a major impact on team productivity.</p>
<div style="center;"><img src="http://docs.google.com/File?id=dgg83mmn_144dj4ztdhm_b" alt="" width="507" height="337" /></div>
<p style="center;"><strong><span style="xx-small;">Logged into full-screen SharePoint application with the new 3G iPhone</span></strong></p>
<p>We have found that having full remote to SharePoint access can be even more useful than having access to email &#8212; allowing you to do real substantive work; more than just &#8220;knocking down email&#8221;.  It&#8217;s a very robust private project work portal for teams which has allowed our clients as to enhance team visibility and communications, speeding the pace of workflow.</p>
<p><strong>SharePoint is massively deployed, and growing exponentially<br />
</strong></p>
<p>How widely used is SharePoint with Corporate users?  VERY widely, and growing like a wildfire:</p>
<p><cite title="Microsoft Sharepoint Usage"><span style="small;">“</span><em>Today at the Microsoft Office SharePoint Conference 2008, Microsoft Chairman Bill Gates noted that SharePoint is one of the fastest growing products in the company’s history, having reached the milestone of a US $1billion-dollar business with 100 million licenses sold, and growth of more than 50 percent in the second quarter of the current fiscal year</em>”.<br />
</cite></p>
<p><cite title="Microsoft Sharepoint Usage">“<em>A recent report by IDC found that 61 percent of users surveyed said they were deploying SharePoint enterprise-wide. Another 28 percent of those using SharePoint in departments today are expected to expand usage to the enterprise within the next 12 months</em>”. <em>[source: Microsoft; IDC]</em></cite></p>
<p><strong><span style="small;">“</span></strong><em>Bill Gates showed in terms of growth in revenue, growth in adoption &#8212; 100 million users, that&#8217;s a phenomenal number. Another number is three-quarters of the Fortune 100 now have SharePoint. That&#8217;s just a very impressive number, people seeing the impact that it can have in their businesses, how they do business; just very, very gratifying for us</em>”</p>
<p>[source: Kurt DelBene, Sr Vice President, Microsoft Office Business Platform Group]</p>
<p><strong>Can it really be better than Windows Mobile</strong>?</p>
<p>Apples&#8217; &#8216;Safari mobile&#8217; browser is the first mobile browser to render many websites nearly as well as a notebook computer running fully featured browsers such as Internet Explorer, Firefox, or Opera.  I was especially surprised by how well Safari handles SharePoint, since even Microsoft&#8217;s own Windows Mobile devices do not seem to do that great of job of it.  But that is not too surprising, given that mobile browsers that render any website well, have not been seen until just recently.</p>
<p>I walked up to Microsoft&#8217;s Mobile Computing counter at a recent telecom conference (NXTcomm 08 in Las Vegas) and asked if it&#8217;s possible login to a Sharepoint site with a Windows Mobile device.  &#8220;Of course&#8221; was the answer.  The photo below shows what I got after attempting to login with the provided Opera Browser on the new Windows Mobile 6.1 device (see photo).  Clearly, Opera Mobile on WM 6.1 does not work with SharePoint, at this point in time.</p>
<div>
<div style="center;"><img src="http://docs.google.com/File?id=dgg83mmn_140cswf2xf7_b" alt="" width="238" height="178" /></div>
<div style="center;"><strong><span style="xx-small;">Attempting SharePoint access from Windows Mobile 6.1 using the included Opera mobile browser</span></strong></div>
<div>
<div style="center;"><img src="http://docs.google.com/File?id=dgg83mmn_141djgjpdfd_b" alt="" width="145" height="194" /></div>
<div style="center;"><strong><span style="xx-small;">Authentication screen on a WM 6.1 device running mobile IE</span></strong></div>
</div>
<div>When using the standard-issue IE browser on WM 6.1, I did get the SharePoint &#8220;challenge&#8221; login screen, but could not get past that.  I am reasonably confident though, that with sufficient effort, full SharePoint access &#8211; not just &#8220;/m&#8221; mode &#8211; can be accomplished with a Windows Mobile device.</div>
</div>
<p><strong>iPhones can access SSL secured SharePoint sites</strong></p>
<p>I have successfully accessed SharePoint servers with both 1st generaton (2.5G) and the second genertation (3G) iPhones, with secure 128-bit (&#8220;https://) SSL connectivity from the browser to the Sharepoint server.  The photo below shows a 3G iPhone successfully accessing a SSL-secured SharePoint site.</p>
<p><strong>MOSS vs WSS</strong></p>
<p>There are two versions of SharePoint: MOSS (Microsoft Office SharePoint Server) and WSS (Windows SharePoint Server).   MOSS is a superset of WSS, and can (among other capabilities) host live Excel spreadsheets on the server (MOSS includes an Excel engine, server-side), allowing individual SharePoint users to collaborate on live-computing spreadsheets (for example, driven by live stock market data) not merley on shared spreadsheet documents.</p>
<p>MOSS and WSS use the same rendering engine.  We believe the iPhone should access either MOSS or WSS SharePoint sites, but further testing will be required to be certain. <strong></strong></p>
<p><strong>iPhone supports NTLM Access authentication protocol</strong></p>
<p>SharePoint uses either NTLM or Kerberos based protocol, along with Microsoft Active Directory, to authentication users for access, depending upon how the server and the SharePoint installation have been configured by the SharePoint server administrator, and the Microsoft Windows Server Administrator.  <span class="a3"><br />
</span></p>
<p><span class="a3">The iPhone supports a variety of authentication types including passwords, MD5 Challenge-Response, NTLM, and HTTP MD5 Digest.</span> Some SharePoint sites do not let you past the &#8220;challenge&#8221; (login) screen, most likely due to NTLM or Kerberos authentication issues.  I do not yet have a handle on what configuration settings prevent iPhones from gettting through the authentication screen for some SharePoint sites, but will report on that once it is sorted out (if technically inclined readers don&#8217;t figure it out for me, first!).</p>
<p><strong>Summary</strong></p>
<p>Running full Sharepoint, an extremely powerful server-based application, from a versatile device as small as the iPhone can be a bit of a jaw-dropper.  I suggest you give it a try, before leaping to any conclusions!  The &#8220;user experience&#8221; is remarkably good.</p>
<p>The author will be following up this article by posting followup comments and perhaps a followup article, after some more research and testing has been conducted.</p></div>
<div style="center;"><img src="http://docs.google.com/File?id=dgg83mmn_142f73tg4d6_b" alt="" width="507" height="336" /></div>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/news/microsoft-sharepoint-on-the-iphone/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>NewsGator Social Sites</title>
		<link>http://sharepointmagazine.net/products/newsgator-social-sites</link>
		<comments>http://sharepointmagazine.net/products/newsgator-social-sites#comments</comments>
		<pubDate>Wed, 16 Jul 2008 15:31:51 +0000</pubDate>
		<dc:creator>Arno Nel</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[Companies]]></category>
		<category><![CDATA[enterprise 2.0]]></category>
		<category><![CDATA[newsgator]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=79</guid>
		<description><![CDATA[NewsGator Social Sites helps businesses deliver “Facebook for the Enterprise” by adding social computing and social networking capabilities to Microsoft SharePoint.  Check out some of NewsGator’s most social features in this Social Sites product review.  And see what customers, press, and analysts have to say about Social Sites.]]></description>
			<content:encoded><![CDATA[<p><a title="NewsGator" href="http://www.newsgator.com" target="_blank"><img class="alignnone size-full wp-image-98" title="NewsGator Logo" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image0011.jpg" alt="NewsGator" width="212" height="45" /></a></p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/comment_warning_48.png"><img class="alignnone size-full wp-image-97" title="comment_warning_48" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/comment_warning_48.png" alt="Comment Warning" width="48" height="48" /></a>This Article was authored by Laura Farrelly:</p>
<blockquote><p>&#8220;Laura Farrelly is currently the Director of Marketing for NewsGator Technologies, Inc.  Laura has nearly 10 years of executive level marketing and product management experience at business-to-business software companies. Laura has a B.S. in Engineering from Michigan Technological University, a M.S. in Engineering from the University of Michigan, and an MBA from the Kellogg School of Management at Northwestern University.&#8221;</p></blockquote>
<p>NewsGator Social Sites provides behind-the-firewall social computing and RSS capabilities that enable businesses to deliver &#8220;Facebook for the Enterprise&#8221;.  Social Sites integrates seamlessly with Microsoft SharePoint to provide employees with:</p>
<ul>
<li>Social Home/Start Pages &#8211; provides users with colleague activity feeds, enables network building, and surfaces relevant content.</li>
<li>Social Profile Pages &#8211; enables expert/colleague location and validation, provides social network graphs, and displays activity streams.</li>
<li>Communities &#8211; allows for easy discovery and creation of ad hoc groups, supports social bookmarking and content sharing, and offers rich discussion and document collaboration capabilities.</li>
<li>Content Discovery &#8211; provides advanced RSS capabilities (feeds, subscriptions, and management), surfaces hot topics and content, and eases content discovery with tagging and tag clouds.</li>
</ul>
<p>NewsGator Social Sites integrates seamlessly with SharePoint to provide enterprises with secure social computing capabilities that have been designed specifically for business purposes.  The following is a review of some of Social Sites most social features.</p>
<ul>
<li>1) <strong>Social Network Graphs</strong> &#8211; these graphs provide a visual depiction of a person&#8217;s closest colleagues along with recommendations for new colleagues. The nice part about this feature is that Social Sites compiles this information automatically based on the actions people are taking within SharePoint. With this feature, people can quickly locate experts or find other people in the organization that are working on similar projects.<br />
<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-1.jpg"><img class="alignnone size-full wp-image-87" title="newsgator-1" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-1.jpg" alt="Social Network Graphs " width="383" height="293" /></a></li>
<li>2) <strong>Communities</strong> &#8211; Social Sites enables people to create groups on the fly in order to collaborate around a special interest or project. Non-technical users can create groups with a few simple clicks. Groups can share documents and content and engage in discussions. Communities facilitate collaboration and help businesses improve productivity and innovation.<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-2.jpg"><img class="alignnone size-full wp-image-88" title="newsgator-2" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-2.jpg" alt="Newsgator Communities" width="371" height="282" /></a></li>
<li>3) <strong>Profile Pages</strong> &#8211; these pages feature overviews of a person including the content they create in SharePoint, their favorite RSS subscriptions, the tags they use most frequently, their current status, areas of expertise, etc. Profiles make it easy for people to find subject matter experts to assist with problem solving or work projects.<br />
<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-3.jpg"><img class="alignnone size-full wp-image-89" title="newsgator-3" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-3.jpg" alt="Profile Pages" width="358" height="323" /></a></li>
<li>4) <strong>Start Pages </strong>- Start pages provide a person with a personalized portal experience. Users can track their colleague&#8217;s portal activity including blog posts, document additions, discussion threads, etc. Relevant content is automatically surfaced for the user based on their portal activities. Users can track colleagues&#8217; current status and even update their own status. Personalized tag clouds can be added to the start page such that the user has quick access to their most important content. Users can set up a personalized RSS reader with their favorite feeds. And the system even suggests new colleagues to a user based on people&#8217;s activity in the portal.<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-4.jpg"><img class="alignnone size-full wp-image-90" title="newsgator-4" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-4.jpg" alt="Start Pages" width="393" height="371" /></a></li>
<li>5) <strong>Community Discovery</strong> &#8211; Social Sites makes it easy to discover relevant groups and communities within SharePoint. Social Sites recommends communities based on colleagues who are already members, as well as similar tags, read content, subscriptions and activities. Social Sites also provides for easy discovery of groups via tags, search, and lists of recently created communities.<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-5.jpg"><img class="alignnone size-full wp-image-91" title="newsgator-5" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-5.jpg" alt="Community Discovery" width="393" height="254" /></a></li>
<li>6) <strong>Social Bookmarks </strong>- This feature allows users to tag any URL or web content and automatically save it to a community, their profile, or other SharePoint locations.<a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-6.jpg"><img class="alignnone size-full wp-image-92" title="newsgator-6" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/newsgator-6.jpg" alt="Social Bookmarks" width="437" height="285" /></a></li>
</ul>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/comment_48.png"><img class="alignnone size-full wp-image-99" title="Comments" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/comment_48.png" alt="Comments" width="48" height="48" /></a>&#8220;Newsgator has a terrific front end to SharePoint. Check it out if you&#8217;re considering SharePoint for SN/Collab.&#8221; Susan Scrupski, IT Insider, Twitter Update, June 11, 2008.</p>
<ul class="unIndentedList">
<li>&#8220;You perhaps are familiar with Newsgator as an RSS aggregator. Earlier this year we wrote about its social platform built on top of Microsoft SharePoint. Newsgator was showing its newest release of the software and we remain impressed with the approach. Many vendors are trying to deliver ‘Facebook for the Enterprise.&#8217; Newsgator is one of the best.&#8221; Jonathan Yarmis, Fanning the Flames of Enterprise 2.0, June 13, 2008.</li>
<li><a href="http://publications.mediapost.com/index.cfm?fuseaction=Articles.san&amp;s=84335&amp;Nid=43669&amp;p=935822">Universal McCann Launches Intranet 2.0, Adopts Social Networking Platform</a>, Joe Mandese, Media Post, Jun 10, 2008.</li>
<li><a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9094798&amp;pageNumber=2">Microsoft, Other Firms Take Aim at Enterprise 2.0 Market with New Tools</a>, By Heather Havenstein, ComputerWorld, June 9, 2008.</li>
</ul>
<p><strong><span style="text-decoration: underline;">Company Details:</span></strong></p>
<p><strong>Company Name</strong>: NewsGator<br />
<strong>Company URL</strong>: <a href="http://www.newsgator.com/">www.NewsGator.com</a><br />
<strong>Product URL</strong>: <a href="http://www.newsgator.com/Business/SocialSites">www.newsgator.com/Business/SocialSites</a><br />
<strong>Product Video</strong>: <a href="http://www.newsgator.com/Business/SocialSites/Video/SocialSites_Viddler.aspx">http://www.newsgator.com/Business/SocialSites/Video/SocialSites_Viddler.aspx</a><br />
<strong>Pricing</strong>: Pricing and licensing for Social Sites is based on a one-time, per-user license fee that scales based on number of users.  Yearly support is charged as a percentage of the license fee.</p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/products/newsgator-social-sites/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>A tribute to the humble &#8220;leave form&#8221; &#8211; Part 2</title>
		<link>http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-2</link>
		<comments>http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-2#comments</comments>
		<pubDate>Sat, 12 Jul 2008 13:49:05 +0000</pubDate>
		<dc:creator>cleverworkarounds</dc:creator>
				<category><![CDATA[Customisation]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Help]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[User]]></category>
		<category><![CDATA[bpm]]></category>
		<category><![CDATA[infopath]]></category>
		<category><![CDATA[infopath sharepoint workflow process]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://sharepointmagazine.net/?p=74</guid>
		<description><![CDATA[Hi again and welcome to the next exciting instalment in the series that pays tribute to the consultant "get out of jail free" card that is the organisational "leave form".]]></description>
			<content:encoded><![CDATA[<p>Hi again and welcome to the next exciting instalment in the series that pays tribute to the consultant &#8220;get out of jail free&#8221; card that is the organisational &#8220;leave form&#8221;. My experience of SharePoint implementations may be somewhat skewed by regional and/or cultural bias of course, but many SharePoint installations tend to follow a script of something like</p>
<ul>
<li>IT Manager attends an &#8220;information session&#8221; from a Microsoft Gold Partner, has one two many chardonnays and is convinced that SharePoint is the *answer*, but isn&#8217;t sure of the question just yet&#8230;</li>
<li>IT Manager calls aforementioned Microsoft Gold Partner and I am sent out to dazzle them with my wit, charm and technical brilliance</li>
<li>IT Manager agrees with me that SharePoint has to be sold to (and owned by) &#8220;the business&#8221;, so chooses the first candidate business process that pops into his head</li>
<li>All hail the mighty &#8220;<strong>leave form</strong>&#8220;</li>
</ul>
<p>Me sarcastic? never! <img src='http://sharepointmagazine.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/getoutofjailcopy21.jpg"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/getoutofjailcopy21-thumb.jpg" border="0" alt="getoutofjail copy (2)" width="339" height="193" /></a></p>
<p><em>Note: I was recently certified as a Microsoft Certified Trainer for SharePoint, and I am using this series as practice for my training material! Thus this entire series of articles is pitched at a very high (end user) level. Readers with some exposure to SharePoint may find this article from the series is particularly easy-going, but rest assured, by the time I am done, I will be delving into web services, code and all sorts of goodies. Writing that stuff for the non developer will be a challenge &#8211; so stay with me, I will slowly ramp up the concepts as we go on.</em></p>
<p>So to recap the <a href="http://sharepointmagazine.net/technical/development/a-tribute-to-the-humble-leave-form" target="_blank">introductory article</a>, we have documented the leave application and approval process for the Springfield nuclear power plant, and they have kindly supplied us with their existing leave form that their employees print out and fill in by hand. So our very first job is to see how InfoPath handles importing this MSWord based form to InfoPath.</p>
<h2>InfoPath 101</h2>
<p>Even though InfoPath is part of MSOffice, many people do not know about it, let alone used it. If you have never seen InfoPath before now, then I suggest you do some <a href="http://office.microsoft.com/en-au/infopath/default.aspx" target="_blank">reading</a> about it and maybe even download the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2D1189BF-D86A-4ACF-9DCC-4D61F500AD6D&amp;displaylang=en" target="_blank">evaluation</a>.  My one sentence explanation is that it <strong><em>allows you to create electronic forms for data entry or data collection</em></strong>. Among its features is that it can import Word or Excel documents to speed up the form creation process. So let&#8217;s do that first up.</p>
<p>Upon starting up InfoPath 2007 we are presented with a &#8220;Getting Started&#8221; wizard. Our job is to design a new form, so the option to choose is to Design a Form Template as marked in the screen-grab below.</p>
<p>The next screen is to choose various options in relation to designing a form. We are starting from a completely blank form (which is the default option anyway), but this form is going to web browser based, so that people filling it in do not need InfoPath installed on their PC&#8217;s. SharePoint enterprise edition provides support for browser based forms via the &#8220;Forms Services&#8221; feature. InfoPath 2007 has built-in support for forms services, but the form must be marked as &#8220;browser compatible&#8221;.</p>
<p>This is not a default setting, so be sure to check the &#8220;Enable browser-compatible features only&#8221; box before clicking the OK button.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image7.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb7.png" border="0" alt="image" width="359" height="282" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image8.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb8.png" border="0" alt="image" width="455" height="280" /></a></p>
<p>Now we are at the main form designer screen within InfoPath. Being part of the MSOffice suite, it has a set of toolbars that looks very much like the other applications in the MSOffice suite. To the right of the InfoPath screen is the &#8220;design tasks&#8221; tool pane. I&#8217;ve shown it below.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image31.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image31-thumb.png" border="0" alt="image" width="133" height="332" /></a></p>
<p>You will come to know the &#8220;design tasks&#8221; pane very well soon enough. From here we can perform all sorts of actions to construct a new electronic form such as create textboxes, buttons, drop down lists and the like. Not only that, but we can instruct InfoPath to connect to &#8220;data sources&#8221; to populate the values in say, a drop down list box. Imagine for example that all of your clients are listed in your CRM system. InfoPath has the capability to access those client details and display them on the form. Think of the data entry duplication that this will save,  not to mention the  maintenance of data accuracy, eh?</p>
<p>But hey, we are here to impress the clients with our technical wizardry and to show how InfoPath allows non-developers to create sophisticated electronic forms. So what we will do first-up is import the existing MSWord based leave document and see what we get out of the box.</p>
<h2>Importing the old form</h2>
<p>So, you should be at the main InfoPath screen to perform this action. From the &#8220;File&#8221; menu, choose &#8220;Import Form&#8221;. On the next screen, choose &#8220;InfoPath importer for Word documents&#8221; and click &#8220;next&#8221;</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image10.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb10.png" border="0" alt="image" width="209" height="244" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image11.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb11.png" border="0" alt="image" width="377" height="242" /></a></p>
<p>You will be prompted to browse to a file to import. In this example, I have chosen the &#8220;springfieldleaveform.doc&#8221;. The &#8220;options&#8221; button allows you to control the specifics of the import process. In this example, I will simply import the form with all of the default import settings.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image12.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb12.png" border="0" alt="image" width="482" height="310" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image13.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb13.png" border="0" alt="image" width="234" height="311" /></a></p>
<p>Click &#8220;Finish&#8221; and InfoPath will do its thing &#8211; viola! We have the beginnings of a leave form!</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image14.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb14.png" border="0" alt="image" width="488" height="364" /></a></p>
<h2>Graphics?</h2>
<p>Ah, but wait, what happened to the graphics? The original MSWord form had two pictures in the header of the document &#8211; a 3-eyed fish and a picture of the towers. It turns out it seems, that graphics in the header or footer of an MSWord document do not get imported into InfoPath. Bummer &#8211; I really liked that 3-eyed fish!</p>
<p>But fear not, importing graphics is as easy as a cut and paste. If I open my original word version of the form, I can double click near the top of the document, and the header/footer will now be available to edit as shown below.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image15.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb15.png" border="0" alt="image" width="493" height="287" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image16.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb16.png" border="0" alt="image" width="182" height="141" /></a></p>
<p>Now you can click to highlight both images and they will paste into InfoPath. Not exactly earth shattering, is it?</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image17.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb17.png" border="0" alt="image" width="338" height="325" /></a></p>
<h2>It&#8217;s still not right&#8230;</h2>
<p>Okay, so it wasn&#8217;t a perfect import. In fact I&#8217;d give it about a 6 out of 10. But the point is we have our images and our text inside InfoPath. Also to be fair, MSWord files were not designed for the web either, so it is unsurprising that it wasn&#8217;t flawless.</p>
<p>So, now we can use the native features of Infopath to tidy up this form. First, we will tidy up the arrangement of the two images, and then we will add some graphical elements like textboxes and option buttons to allow the form to be electronically filled in. We will create a table on the form that looks like this</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image22.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb22.png" border="0" alt="image" width="497" height="55" /></a></p>
<p>In the right-hand &#8220;design task&#8221; bar, we select &#8220;Layout&#8221; and then choose to create a &#8220;custom table&#8221;. Choose a 2*2 table and you should see the table as shown in the third image below (look above the fish graphic).</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image18.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb18.png" border="0" alt="image" width="168" height="244" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image19.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb19.png" border="0" alt="image" width="172" height="110" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image20.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb20.png" border="0" alt="image" width="413" height="302" /></a></p>
<p>The next step is to format the table correctly. Highlight the two rightmost cells, right click on them and choose &#8220;merge cells&#8221;. The result should be a table looking like the rightmost image below.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image21.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb21.png" border="0" alt="image" width="244" height="116" /></a> <a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image22.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb22.png" border="0" alt="image" width="497" height="55" /></a><br />
Now drag and drop the three-eye fish to the leftmost cell and the plant picture to the rightmost cell of the top row of the table. Your result should look something like this.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image23.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb23.png" border="0" alt="image" width="632" height="454" /></a></p>
<p>Now highlight the remaining title text, and then cut and paste it into the empty bottom left cell . Aha! We are starting to look better! A bit of resizing of the table cells width and it is looking more like the original.</p>
<p><a href="http://sharepointmagazine.net/wp-content/uploads/2008/07/image24.png"><img style="0px" src="http://sharepointmagazine.net/wp-content/uploads/2008/07/image-thumb24.png" border="0" alt="image" width="460" height="186" /></a></p>
<h2>Are we impressed yet?</h2>
<p>Okay, sorry that is very much a rhetorical question, I know. I haven&#8217;t exactly written the most technically complex article ever.</p>
<p>But at least we have gotten the InfoPath version of the form to look much more like the MSWord version. If I had been running that as a client demonstration, it all in all would be around 2-3 minutes work. Is the client blown away in amazement and opening the chequebook yet?</p>
<p>Not exactly, but we haven&#8217;t gotten to the good stuff yet. In part 3, we will add some textboxes and other graphical elements (called &#8220;controls&#8221;) to the form, and then we will do some smart things to reduce manual data entry, as well as ensure that the data that we have collected is accurate.</p>
<p>Bye for now</p>
<p>Paul Culmsee</p>
<p><a href="http://www.cleverworkarounds.com">www.cleverworkarounds.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sharepointmagazine.net/technical/customisation/a-tribute-to-the-humble-leave-form-part-2/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
