<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5137977785389892281</id><updated>2012-02-16T02:30:16.214-08:00</updated><category term='SharePoint'/><category term='SCRUM'/><category term='AGILE'/><category term='MOSS'/><category term='WebPart'/><category term='TFS2008'/><category term='WSS'/><title type='text'>Smart&lt;Code&gt; = new Smart&lt;Code&gt;(security);</title><subtitle type='html'>Team Foundation Server, SharePoint, BizTalk, SQL Server, ASP.NET + Security</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-3993274541813630131</id><published>2011-08-09T01:19:00.000-07:00</published><updated>2011-08-11T02:03:23.078-07:00</updated><title type='text'>Nessus Integration API for Happy .NET Developer</title><content type='html'>&lt;span style="color: blue;"&gt;[About NetNessus]&lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Y&lt;/span&gt;&lt;/b&gt;ou can now integrate Nessus  Services into your own enterprise security environment, Nessus originally  provided &lt;a href="http://www.nessus.org/documentation/nessus_XMLRPC_protocol_guide.pdf" rel="nofollow"&gt;&lt;span style="color: blue;"&gt;RPCXML API&lt;/span&gt;&lt;/a&gt; for Nessus integration (actually it is more like XML  over HTTPS), working with this API is not very productive and requires going  back to the API documents very often, it is not even productive to integrate  into a security solution developed using a certain development  platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;T&lt;/b&gt;&lt;/span&gt;he NetNessus API is an integration  layer used to provide abstraction to the Nessus XML API, using .NET and the  power of WCF, anyone can now integrate Nessus into their enterprise security  solution, if combined with WF, it can even be more productive, some of the  solutions that can be done for example could be a remote administration and  management of Nessus from mobile devices, a dashboard for management, through  any web portal or even re-brand Nessus :)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: blue;"&gt;[The API]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;T&lt;/b&gt;&lt;/span&gt;he API is simple, in the download section you will have a  very simple web application for demonstration + API (you will need ASP.NET 4.0  &amp;amp; VS 2010), this is the initial version, so it is not complete and it  contains the following operations:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;Login&lt;/span&gt; (Login operation, this  generates a cookie session for use with operations the need  authentication)&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;getReports&lt;/span&gt; (list available  reports)&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;getScans&lt;/span&gt; (list current active  scans)&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;getPolicies&lt;/span&gt; (list stored scan  policies)&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;startScan&lt;/span&gt; (start a  scan)&lt;/li&gt;&lt;/ul&gt;Here are screens of the demo ASP.NET web application&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sites.google.com/site/nadershalabi2/netnessus/Screenshot1.PNG?attredirects=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://sites.google.com/site/nadershalabi2/netnessus/Screenshot1.PNG?attredirects=0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://sites.google.com/site/nadershalabi2/netnessus/Screenshot2.PNG?attredirects=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://sites.google.com/site/nadershalabi2/netnessus/Screenshot2.PNG?attredirects=0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The API are available in two source files:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;NessusAPI.CS&lt;/span&gt;, contains the API&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;NessusDataTypes.CS&lt;/span&gt;, contains data  types that encapsulates XML messages returned from Nessus.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The  methods above do the work needed to parse the results back from Nessus XML,  however, the following method is responsible for posting the data:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;XDocument nessusCommander(string httpParams, string urlData)&lt;br /&gt;    {&lt;br /&gt;        Util util = &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;Util();&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;uri = util.GetNessusRpcUrl() + urlData;&lt;br /&gt;&lt;br /&gt;        System.Net.ServicePointManager.ServerCertificateValidationCallback += &lt;br /&gt;                  &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;RemoteCertificateValidationCallback(checkPolicy);&lt;br /&gt;&lt;br /&gt;        HttpWebRequest request = (HttpWebRequest)&lt;br /&gt;        WebRequest.Create(uri);&lt;br /&gt;        request.KeepAlive = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;        request.ProtocolVersion = HttpVersion.Version10;&lt;br /&gt;        request.Method = &lt;span style="color: #990000;"&gt;"POST"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;byte&lt;/span&gt;[] postBytes = Encoding.ASCII.GetBytes(httpParams);&lt;br /&gt;&lt;br /&gt;        request.ContentType = &lt;span style="color: #990000;"&gt;"application/x-www-form-urlencoded"&lt;/span&gt;;&lt;br /&gt;        request.ContentLength = postBytes.Length;&lt;br /&gt;        Stream requestStream = request.GetRequestStream();&lt;br /&gt;&lt;br /&gt;        requestStream.Write(postBytes, 0, postBytes.Length);&lt;br /&gt;        requestStream.Close();&lt;br /&gt;&lt;br /&gt;        XDocument xmldoc;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;        &lt;/span&gt;&lt;span style="color: #38761d;"&gt;// Watch for this, &lt;br /&gt;        // Nessus wont return XML in case of an error (like authentication)&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;using&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;(HttpWebResponse response = request.GetResponse() &lt;span style="color: blue;"&gt;as&lt;/span&gt; HttpWebResponse)&lt;br /&gt;        {&lt;br /&gt;            Stream strm = response.GetResponseStream();&lt;br /&gt;&lt;br /&gt;            StreamReader reader = &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;StreamReader(strm);&lt;br /&gt;            xmldoc = XDocument.Parse(reader.ReadToEnd());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;return&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;xmldoc;&lt;br /&gt;    }&lt;/pre&gt;&lt;/div&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;span style="color: blue;"&gt;&lt;a href="http://sites.google.com/site/nadershalabi2/SecurityScanner.zip?attredirects=0"&gt;[Download]&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-3993274541813630131?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/3993274541813630131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2011/08/nessus-integration-api-for-happy-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3993274541813630131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3993274541813630131'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2011/08/nessus-integration-api-for-happy-net.html' title='Nessus Integration API for Happy .NET Developer'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-2007554194851886805</id><published>2009-11-21T09:44:00.000-08:00</published><updated>2010-06-14T23:43:10.063-07:00</updated><title type='text'>Agile </title><content type='html'>&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;I went to the many resources I could find on the web about Agile, and found&amp;nbsp;few good&amp;nbsp;resources that helped me a lot in&amp;nbsp;exploring the concepts and techniques. To be honest, I collected many resources then decided that they won't do good, because all I found at first was on.... paper, or a book....Ok, but how all this applied in real life? I found that SCRUM can be used in other industries, other than software (it is really related to lean management), so I did more research on the topic in order to find theory "applied", and I found a couple of great resources that can really show you how Agile is applied (with tools, code and all the great stuff that drives us crazy at the end of the project)&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Following are "Autumn of Agile" screen casts, after&amp;nbsp;watching them, try to check other related topics, like Enterprise library, Team Foundation Server, ORM Technologies (I will be posting few resources about the last one),&amp;nbsp;and how they can help&amp;nbsp;in managing&amp;nbsp;projects in an "Agile" Environment...Enjoy!&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Autumn of Agile Screencast Series:&lt;/span&gt;&lt;br /&gt;&lt;table cellpadding="3" style="border-bottom: #ff9900 0px solid;"&gt;&lt;tbody&gt;&lt;tr style="background-color: #ff9900; color: white;"&gt;&lt;td width="140"&gt;&lt;strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Downloads&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Title&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_-01.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | No Code&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/10/18/autumn-of-agile-iteration-1-screencast-is-available/" target="_blank"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration -1: Intro to Agile&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #ff9900; color: white;"&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_00_Part_A.zip"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | No Code&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/10/27/autumn-of-agile-iteration-0-part-a-screencast-is-available/" target="_blank"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 0 - Part A: Organizing Requirements&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_00_Part_B.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | No Code&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/11/03/autumn-of-agile-iteration-0-part-b-screencast-is-available/" target="_blank"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 0 - Part B: Estimating Tasks and Setting up CI Server&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #ff9900; color: white;"&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_01_Part_A.zip"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | &lt;/span&gt;&lt;a href="http://www.autumnofagile.net/Code/AutumnOfAgile_Iteration_01_Part_A_Code.zip"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/11/10/autumn-of-agile-iteration-1-part-a-screencast-is-available/" target="_blank"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 1 - Part A: Using TDD to drive our first User Story&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_01_Part_B.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | &lt;/span&gt;&lt;a href="http://www.autumnofagile.net/Code/AutumnOfAgile_Iteration_01_Part_B_Code.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/11/24/autumn-of-agile-iteration-1-part-b-is-available/" target="_blank"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 1 - Part B: Integrating with Rhino Tools and ASP.NET MVC frameworks&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #ff9900; color: white;"&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_01_Part_C.zip"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | &lt;/span&gt;&lt;a href="http://www.autumnofagile.net/Code/AutumnOfAgile_Iteration_01_Part_C_Code.zip"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/" target="_blank"&gt;&lt;span style="color: white; font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 1 - Part C: Our First Controller and View in ASP.NET MVC&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="140"&gt;&lt;a href="http://www.autumnofagile.net/screencasts/AutumnOfAgile_Iteration_01_Part_D.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Video&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; | &lt;/span&gt;&lt;a href="http://www.autumnofagile.net/Code/AutumnOfAgile_Iteration_01_Part_D_Code.zip"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Code&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/2008/12/08/autumn-of-agile-iteration-01-part-d-screencast-is-available/" target="_blank"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Iteration 1 - Part D: Refactoring to Eliminate Technical Debt&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;This previous tutorial is&amp;nbsp;great&amp;nbsp;in&amp;nbsp;clearing the concepts of Agile&amp;nbsp;with a practical&amp;nbsp;step-by-step&amp;nbsp;demonstration to build a real project, created by &lt;/span&gt;&lt;/div&gt;&lt;a href="http://unhandled-exceptions.com/blog/index.php/about/"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Stephen A. Bohlen &lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;For some Agile OOP (actually they are just OOP concepts, but good to see them from Agile perspective), you can watch &lt;/span&gt;&lt;a href="http://www.agiledeveloper.com/blog/"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Venkat Subramaniam&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; on &lt;/span&gt;&lt;a href="http://www.dnrtv.com/default.aspx"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;dnrTV &lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;talking about Fundamentals of Agile Design:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dnrtv.com/default.aspx?showNum=73"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Part 1 of Fundamentals of Agile Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dnrtv.com/default.aspx?showNum=74"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Part 2 of Fundamentals of Agile Design&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-2007554194851886805?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/2007554194851886805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/agile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/2007554194851886805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/2007554194851886805'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/agile.html' title='Agile &lt;Resources&gt;'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-8026047072484777504</id><published>2009-11-19T00:41:00.000-08:00</published><updated>2010-06-14T23:46:50.009-07:00</updated><title type='text'>SharePoint 2010 Beta is here...</title><content type='html'>&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;span style="font-size: x-large;"&gt;Y&lt;/span&gt;esterday, SharePoint 2010 team blog announced the BEAT release of MOSS 2010, it can be downloaded from this direct link &lt;/span&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;a href="http://sharepoint2010.microsoft.com/try-it/Pages/Trial.aspx"&gt;http://sharepoint2010.microsoft.com/try-it/Pages/Trial.aspx&lt;/a&gt;, let me say that the HW and SW requirements are a little bit expensive for me...&amp;nbsp;the requierments are listed here&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/cc262485(office.14).aspx"&gt;http://technet.microsoft.com/en-us/library/cc262485(office.14).aspx&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;I decided that I won’t be downloading&amp;nbsp;the BETA today till I have a descent 64-bit hardware, and decided to go directly to the "getting started" section to dig deeper into the resources (&lt;/span&gt;&lt;a href="http://technet.microsoft.com/en-us/sharepoint/ee518660.aspx)"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;http://technet.microsoft.com/en-us/sharepoint/ee518660.aspx)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Enjoy...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-8026047072484777504?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/8026047072484777504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/sharepoint-2010-beta-is-here.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/8026047072484777504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/8026047072484777504'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/sharepoint-2010-beta-is-here.html' title='SharePoint 2010 Beta is here...'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-4047137322202319596</id><published>2009-11-15T03:39:00.000-08:00</published><updated>2009-11-15T06:13:57.434-08:00</updated><title type='text'>WCF - Windows Communication Foundation </title><content type='html'>&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Get started with WCF quickly and easily,&amp;nbsp;here are two great resources for you:&lt;/span&gt;&lt;br /&gt;&lt;div class="fw-text"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;strong&gt;First&lt;/strong&gt;, &lt;/span&gt;&lt;a href="http://www.dasblonde.net/2007/06/24/WCFWebcastSeries.aspx"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;dasBlonde&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; WCF Webcasts:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="fw-text"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344312&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 01 of 15): Overview&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344314&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 02 of 15): Contracts&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344318&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 03 of 15): Contract Versioning&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344322&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 04 of 15): Exceptions and Faults&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344330&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 05 of 15): Bindings&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344338&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 06 of 15): Hosting&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344342&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 07 of 15): Messaging Patterns&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344344&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 08 of 15): Instancing Modes&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344346&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 09 of 15): Concurrency, Throughput, and Throttling&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344348&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 10 of 15): Security Fundamentals&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344351&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 11 of 15): Federated Security&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344353&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 12 of 15): Reliable Messaging&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344355&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 13 of 15): Transactions&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344357&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 14 of 15): Message Queuing&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032344359&amp;amp;Culture=en-US"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;MSDN Webcast: Windows Communication Foundation Top to Bottom (Part 15 of 15): Extensibility&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;strong&gt;Second&lt;/strong&gt;, I would strongly recomend &lt;em&gt;&lt;a href="http://www.pluralsight.com/main/instructors.aspx?name=aaron-skonnard"&gt;Aaron Skonnard&lt;/a&gt;&lt;/em&gt; screencasts from &lt;/span&gt;&lt;a href="http://www.pluralsight.com/"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Pluralsight&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, not just WCF, but also WCF RESTful&amp;nbsp;starter kit preview&amp;nbsp;1 and 2, which is great, make sure to visit the site for new screencasts:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=creating-your-first-wcf-client"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Creating your first WCF client&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to create your first WCF client application. You'll see how to add a service reference to your client project, use the generated client classes and configuration file, and actually invoke the service operations and process the results.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=configuring-service-references"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Configuring service references&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to configure client-side service references with different settings. You'll see how to use service reference configuration editor within Visual Studio 2008 to customize various code-generation settings.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=getting-started-wcf-rest-starter-kit"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Getting started with the WCF REST Starter Kit&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to get started with the new WCF REST Starter Kit. You'll see how to install the WCF REST Starter Kit on your machine, navigate the documentation, samples, and project templates, and you'll see how to quickly get started with a simple RESTful service implementation.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=lap-around-api-extensions-part1"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;A lap around the new API extensions - Part 1&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to use some of the new APIs that come with the WCF REST Starter Kit. You'll see how to use various classes and extension methods found in Microsoft.ServiceModel.Web including [WebHelp], [WebCache], WebProtocolException, WebServiceHost2, and more.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=lap-around-api-extensions-part2"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;A lap around the new API extensions - Part 2&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to use some of the new APIs that come with the WCF REST Starter Kit. You'll see how to take advantage of the new RequestInterceptor extensibility point made possible by WebServiceHost2.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=resource-singleton-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Resource singleton services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to create a simple resource singleton service using the WCF REST Starter Kit. You'll see how to use the Resource Singleton Service project template to create a sample implementation that you'll customize to expose your favorite movie information as a singleton resource, and then you'll test the service using Fiddler.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=resource-collection-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Resource collection services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to implement resource collection services using the WCF REST Starter Kit. You'll see how to use the Resource Collection Service project template to create a sample implementation that exposes a collection of bookmarks, and then you'll test the service using Fiddler.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=atom-feed-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Atom feed services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to implement a simple Atom feed service using the WCF REST Starter Kit. You'll see how to use the Atom Feed Service project template, customize the project, and test the feed within Internet Explorer.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=atompub-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;AtomPub services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to implement a standard AtomPub service using the WCF REST Starter Kit. You'll see how to use the AtomPub Service project template, customize the project, and test the AtomPub service within Internet Explorer and Fiddler.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=http-plain-xml-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;HTTP Plain XML (POX) Services&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Learn how to implement HTTP plain XML services (POX) using the WCF REST Starter Kit. These services don't have to follow the RESTful constraints -- they simply define operations that send/receive XML payloads.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=multiple-representations"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Multiple resource representations&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to use the WCF REST Starter Kit to implement RESTful services that support a variety of different resource representation formats. We'll see how to support both XML and JSON, push-style Streams, and URL-encoded input.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=x-http-method-override"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Implementing X-HTTP-Method-Override&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to implement X-HTTP-Method-Override in your WCF RESTful services using the new WCF REST Starter Kit. This video shows you how to build a RequestInterceptor class that intercepts the incoming messages to perform the X-HTTP-Method-Override logic.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=calling-services-asynchronously"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Calling services asynchronously with WCF&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to invoke Web services asynchronously with WCF in order to avoid tying up your main application thread.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=hosting-in-windows-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Hosting WCF services in Windows Services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to host your WCF services within a traditional Windows Service when you can't use (or don't want to use) IIS hosting techniques for whatever reason.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=configuring-was-for-tcp-endpoints"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Configuring WAS for TCP endpoints&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to configure Windows Process Activation Service (WAS) for TCP-based activation, making it possible for you to host your WCF service in IIS with TCP-based endpoints.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=configuring-bindings"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Configuring Bindings&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to configure bindings on your WCF endpoints, which will allow you to customize the precise communication details you wish to support on your service.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=configuring-behaviors"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Configuring services with behaviors&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to configure your WCF services with behaviors, which will allow you to customize different aspects of the runtime execution "behavior".&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=configuring-mex-endpoints"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Configuring MEX endpoints&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to configure your WCF services with Metadata Exchange (MEX) endpoints - both over HTTP and TCP - allowing consumers to automatically retrieve metadata from your services at runtime.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=building-restful-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Building RESTful Services with WCF&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, Learn how to build a RESTful service with WCF, converting a previously created WCF service to support a RESTful interface.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=building-restful-services-2"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Building RESTful Services with WCF (Part 2)&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencasts continues to guide the viewer through how to build a RESTful service with WCF, simplifying the IIS hosting of the service.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=calling-restful-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;strong&gt;Calling RESTful Services with WCF&lt;/strong&gt;,&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt; This screencast introduces developers to the client-side experience for using WCF to consume RESTful services. You'll see how to use the new WebChannelFactory class to create WCF channels that know how to map method calls into traditional HTTP operations (GET, POST, PUT, and DELETE).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=enabling-ajax-integration"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Ajax-enabling your WCF services&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast guides the viewer through the process of Ajax-enabling your WCF services, allowing you to easily consume them from within your Ajax client pages.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=httpclient-consuming-twitter-in-under-3-minutes"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Using HttpClient to consume Twitter in under 3 minutes&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast shows you how to use the new HttpClient class found in the WCF REST Starter Kit (Preview 2) to build a console application that retrieves Twitter statuses and updates Twitter statues (using the Twitter REST API), and it only takes 3 minutes to do it!&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=httpclient-getting-started"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Getting started with the WCF REST Starter Kit Preview 2&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast shows you how to get started with the new version of the WCF REST Starter Kit (Preview 2) that you can download now from CodePlex. It shows how to use the starter kit to create a simple REST service, along with a simple client to consume it.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=httpclient-consuming-rest-services"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Consuming REST services with HttpClient&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast shows you how to use the new HttpClient API (found in the WCF REST Starter Kit Preview 2) to build a Twitter client application against the Twitter REST API. It shows how to use several of the operations on the Twitter REST service.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=httpclient-querystring-form-input"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;HttpClient: Query string and form input&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast shows you how to manage query string and form input required by RESTful services on the Web by using some of the new features in the WCF REST Starter Kit Preview 2. The example shows how to send this type of input into the Twitter REST API.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;strong&gt;&lt;a href="http://www.pluralsight.com/main/screencasts/screencast.aspx?id=httpclient-processing-message-content"&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;HttpClient: Processing message content&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;, This screencast shows you how to process different types of messages that you might get back from RESTful services on the Web. It shows how to use XLinq, DataContractSerializer, and XmlSerializer, and it shows how to process XML, Atom, and JSON messages.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;Happy programming&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-4047137322202319596?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/4047137322202319596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/wcf-windows-communication-foundation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4047137322202319596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4047137322202319596'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/11/wcf-windows-communication-foundation.html' title='WCF - Windows Communication Foundation &lt;Get started&gt;'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-3754227494697086822</id><published>2009-10-04T04:55:00.000-07:00</published><updated>2009-10-04T04:56:39.177-07:00</updated><title type='text'>SharePoint Walkthrough – Playing with features (Step 3)</title><content type='html'>This is the third and final part of our walkthrough – Playing with features, in the previous tutorial, we created an instance of a document library, added a web part page to it and finally added two web parts to this page, what is left to be done is to connect the two web parts together, to do this we will add an event receiver class to our last feature, that is the feature that creates the web part page instance, using event receivers, we can connect the two web parts and do other custom actions, for example, when the feature is disabled, we want to be able to delete the document library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 3 – Connecting the web parts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open VS 2008 and start where we left off in our last step (the code for the last tutorial can be downloaded &lt;a href="http://nader.shalabi.googlepages.com/Walkthrough2.zip"&gt;here&lt;/a&gt;), we will add an event receiver class (C#) to our ProductsPage feature, switch to the Solution Explorer, right click the ProductsPage folder and add new class to this folder, name it “ProductsPageHandler.cs”, click Add.&lt;br /&gt;&lt;br /&gt;The class generated is as follows:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Walkthrough1.ProductsPage&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductsPageHandler&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;We need to modify it as follows (I’ll explain next):&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Security.Permissions;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SharePoint;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.SharePoint.WebPartPages;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Walkthrough1.ProductsPage&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    [CLSCompliant(&lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    [Guid(&lt;span class="str"&gt;"229de50f-4cef-4d1c-9b5c-cabbd0cc20b5"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductsPageHandler : SPFeatureReceiver&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FeatureActivated(SPFeatureReceiverProperties properties)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = properties.Feature.Parent &lt;span class="kwrd"&gt;as&lt;/span&gt; SPWeb)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                SPFile file = web.GetFile(web.Url + &lt;span class="str"&gt;"/Lists/Products/MyProducts.aspx"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                SPLimitedWebPartManager webPartManager = file.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="rem"&gt;// We know this is the first web part, however, we should try to reference the web part in a better way and not to&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="rem"&gt;// count on order, same for the connections, although we know we have one connection interface&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="rem"&gt;// I could have added web parts using code instead of feature.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="rem"&gt;// One bug migh come along is when trying to re-activate the feature, the list will remain and&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="rem"&gt;// the page would be UPDATED with extra versions of the web parts&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                System.Web.UI.WebControls.WebParts.WebPart wpLearningStyle = webPartManager.WebParts[0];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                System.Web.UI.WebControls.WebParts.WebPart wpStyleDescription = webPartManager.WebParts[1];&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                ProviderConnectionPoint cnLearnningStyle = webPartManager.GetProviderConnectionPoints(wpLearningStyle)[0];&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                ConsumerConnectionPoint cnLearningDescription = webPartManager.GetConsumerConnectionPoints(wpStyleDescription)[0];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                webPartManager.SPConnectWebParts(wpLearningStyle, cnLearnningStyle, wpStyleDescription, cnLearningDescription);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FeatureDeactivating(SPFeatureReceiverProperties properties)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;            &lt;span class="rem"&gt;// When the feature is deactivated, I need to delete the document library&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;            &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = properties.Feature.Parent &lt;span class="kwrd"&gt;as&lt;/span&gt; SPWeb)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;            {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                    SPList list = web.Lists[&lt;span class="str"&gt;"Products"&lt;/span&gt;];&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                    list.Delete();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                    list.Update();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;                &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;                {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;                    &lt;span class="rem"&gt;// Well, this exception means list do not exist&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FeatureInstalled(SPFeatureReceiverProperties properties)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FeatureUninstalling(SPFeatureReceiverProperties properties)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;First of all, there is no way for WSS to know that this event receiver is associated with our feature, we need to link them together, and the easiest way to accomplish this is through the GUID attribute of the class:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Guid(&lt;span class="str"&gt;"229de50f-4cef-4d1c-9b5c-cabbd0cc20b5"&lt;/span&gt;)]&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I copied this Guid from the feature.xml under ProductsPage feature; this is the same as the Id attribute of the &amp;gt;Feature&amp;lt; element. This would differ if you are working on your own and not copying the uploaded solution files, so you need to change it if you are following with your own source code.&lt;br /&gt;&lt;br /&gt;Next modification is the class itself, we need to make it public and inherit from the class SPFeatureReceiver, the most important method to override is the FeatureActivated method, this method will be called once our feature is deployed and activated (our web part page instance), this means we have a page with two web parts ready to go.&lt;br /&gt;&lt;br /&gt;To work with web part page we need to use the SPFile class, using this class I can obtain a web part manager (SPLimitedWebPartManager) with a shared scope, this is the same scope you use when you say “Modify shared web part” on the WSS UI web interface. Using our web part manager, we can access our web parts through indexer; finally we used ProviderConnectionPoint and ConsumerConnectionPoint classes to connect the web parts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are writing the code yourself, you might get confused by the reference resolve error, the error is for the WebPart class specifically, you need to determin which WebPart class you are referencing, the one in the Microsoft.SharePoint.WebPartPages name space or the one in the System.Web.UI.WebControls.WebParts name space. As you can see from the code above, we used the classes from the System.Web.UI.WebControls.WebParts name space (WebPart, ConsumerConnectionPoint and ProviderConnetionPoint)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thoughts:&lt;/strong&gt; As you see from the code, we need a better way (than indexers) to access web parts and connection points, and this is what the code comments is all about&lt;br /&gt;&lt;br /&gt;The FeatureDeactivating() method is just to demonstrate what you can do with an event handler, here in our example, we are deleting the list once we deactivate the feature, please note that the features set in our solution needs to be installed and deactivated in order, so, if you try to activate this feature again after it was deactivated, it won’t work, because the list is deleted and there is no MyPage.aspx to work on, you can enhance the code further to add better logic based on features.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thoughts:&lt;/strong&gt; You can work with this code by adding more event handlers to the remaining features, enhance the activation/deactivation of features, group certain features into one features (although VSeWSS 1.3 will overwrite your work and you need to do much manually).&lt;br /&gt;&lt;br /&gt;Make sure to delete the previously created document library first, then Build the solution and press F5 to run it, check if the web parts are connected by selecting products.&lt;br /&gt;&lt;br /&gt;Hope you enjoyed this tutorial, drop me email if you have any questions on : &lt;a href="mailto:nader_shalabi@hotmail.com"&gt;nader_shalabi@hotmail.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nader.shalabi.googlepages.com/Walkthrough3.zip"&gt;[Download source code]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-3754227494697086822?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/3754227494697086822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/10/sharepoint-walkthrough-playing-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3754227494697086822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3754227494697086822'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/10/sharepoint-walkthrough-playing-with.html' title='SharePoint Walkthrough – Playing with features (Step 3)'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-4248061090003765854</id><published>2009-09-30T05:41:00.000-07:00</published><updated>2009-09-30T07:04:24.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebPart'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>SharePoint Walkthrough – Playing with features (Step 2)</title><content type='html'>This is the second part of our walkthrough, in the previous step we created two connectable web parts, installed, connected and tested the web parts. In this tutorial, we will create a feature, that once activated, will create a document library, this is an easy step and VSeWSS takes care of much of the XML editing work for you, next however&amp;nbsp;is the tricky part, we want to add a web part page, more, we want to add the two web parts we created in the first step to this page, so let’s get started.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 2 – Build the Document Library, Add Web Part Page, Add Web Parts to the Web Part Page&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Create a document library instance&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Open VS 2008 and start with the project we created in our first step, you can also pick up the &lt;a href="http://nader.shalabi.googlepages.com/Walkthrough1.zip"&gt;first step code here&lt;/a&gt;. What we will do now is to create a feature that once activated will create a document library, so right click the project node in solution explorer and add a new item, select the List Instance from SharePoint category, name it ProductsLibrary:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://2.bp.blogspot.com/_f-xH2PkHFAM/SsNKw9lty1I/AAAAAAAAACE/9qilmlkmD-Y/s400/11.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;The create list instance dialog shows up, select the Document Library template and click Ok:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://3.bp.blogspot.com/_f-xH2PkHFAM/SsNLDVGIonI/AAAAAAAAACM/6eBuuQMGQNA/s320/12.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;That’s it! We need to tweak certain things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Rename the ProductsLibrary Instance folder in the WSP View to ProductsLibrary.&lt;/li&gt;&lt;li&gt;Open the feature.xml file under ProductsLibrary node and modify the Title attribute in element and add a Description attribute (Title="Products Library Instance" Description="Creates a document library named Products").&lt;/li&gt;&lt;li&gt;Open the “ProductsLibrary\instance.xml” file and change the element attributes:&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Description="Pages for our products"&lt;/li&gt;&lt;li&gt;OnQuickLaunch="True"&lt;/li&gt;&lt;li&gt;Title="Products"&amp;nbsp;&lt;/li&gt;&lt;li&gt;Url="Lists/Products"&lt;/li&gt;&lt;/ul&gt;The OnQuickLaunch attribute allows us to show the document library in the quick launch list. Save, build and press F5 or deploy from build menu, then, open the site in you debug settings and see if the list is created, mine shows this:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsNLqWmOXgI/AAAAAAAAACU/168U6nA0vP8/s400/13.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Add a web part page to the created list (document library) instanc&lt;/strong&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Let’s decompose this further:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a web part page instance&lt;/li&gt;&lt;li&gt;Ad two web parts (previously created) to the page instance&lt;/li&gt;&lt;/ul&gt;There is no template in VSeWSS 1.3 to add a web part page instance, the right way to create a web part page instance is by adding a Module (according to MSDN : &lt;a href="http://msdn.microsoft.com/en-us/library/ms462994.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms462994.aspx&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Right click the project node and add a Module from the SharePoint category, name it ProductsPage:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsNMZG-f9HI/AAAAAAAAACc/y8sUTN7IWnU/s400/14.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This will add two files, a Module.xml file and sample.txt file, delete the sample.txt file from the solution explorer, then go to the WSP View and click the refresh button. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;Open the feature.xml file under ProductsPage node and modify the element attributes, title and description (Title="Products Page Instance" Description="Creates an instance of a web part page"). &lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next open the Module .xml under ProductsPage under ProductsPage in WSP View, this file contains the elements describing the files that will need to be created and references their templates, currently the file looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="8df75de2-ba12-465a-9bd3-3d2419daa9dc"&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ProductsPage"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;File&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="sample.txt"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="sample.txt"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Sample.txt is the file added by the VSeWSS template and we already deleted it, delete the&amp;nbsp;&amp;lt;File&amp;gt; element. Now we need to specify the template file for the web part page, I already took a shortcut on this, instead of writing the file from scratch, I took one from SharePoint web part page templates, go to the 12 folder, specifically “[DRIVE]:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\STS\DOCTEMP\SMARTPGS”, you can pick any of the files, however, I decided to take the spstd3.aspx file, copy this file to your desktop and open in it in visual studio and look for this code:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;WebPartPages:WebPartZone&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Title&lt;/span&gt;&lt;span class="kwrd"&gt;="loc:Header"&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="Header"&lt;/span&gt; &lt;span class="attr"&gt;FrameType&lt;/span&gt;&lt;span class="kwrd"&gt;="TitleBarOnly"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a web part zone, and we will use it to add our web parts to, let’s start, close the file and go to your desktop or where you copied the file and rename it to products.aspx, the right click on the ProductsPage folder in solution explorer and add existing item, pick up the products.aspx file and click Add, this is how your solution explorer should look like:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://3.bp.blogspot.com/_f-xH2PkHFAM/SsNUHynWpHI/AAAAAAAAACk/Dd-HMIPl9kQ/s320/15.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;Go back to the feature.xml file under ProductsPage in WSP View and modify it by adding &amp;lt;ElementFile&amp;gt; element to &amp;lt;ElemenetManifests&amp;gt; node:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ElementManifests&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ElementManifest&lt;/span&gt; &lt;span class="attr"&gt;Location&lt;/span&gt;&lt;span class="kwrd"&gt;="ProductsPage\Module.xml"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ElementFile&lt;/span&gt; &lt;span class="attr"&gt;Location&lt;/span&gt;&lt;span class="kwrd"&gt;="ProductsPage\products.aspx.aspx"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ElementManifests&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is how we will reference our file in this feature, now go back to the Module.xml file and modify it to look something like this (The GUIDs will be different than the one you have)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="8df75de2-ba12-465a-9bd3-3d2419daa9dc"&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ProductsPage"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="Lists/Products"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;File&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="products.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="products.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MyProducts.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="GhostableInLibrary"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;When I tried to do this first time I was really confused, the list will not copy the file you specify here (products.aspx) it will create a new file from it, the Url attribute in the &amp;lt;File&amp;gt; element tells the list the source from which the list will create instances, the Name attributes is the name of the new file, confused enough? The Url in the &amp;lt;module&amp;gt; element specify the list that will be used to create the web part page, you can find the value specified in the instance.xml file under the feature that creates the document library, in our case ProductsLibrary, refresh the WSP View and products.aspx page should be under the feature node:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://2.bp.blogspot.com/_f-xH2PkHFAM/SsNfEZ3jQ5I/AAAAAAAAAD8/VJ--BliM5yA/s400/16.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;This way we created the web part page instance, build the project and test it, this is my output, a document library with one web part page instance:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://3.bp.blogspot.com/_f-xH2PkHFAM/SsNfVHc5GXI/AAAAAAAAAEE/CK0zaCLoyag/s400/166.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thoughts:&lt;/strong&gt; This is a great feature for many reasons, most important is to be able to extend the publishing features in MOSS 2007 by provisioning content through custom code (this can be achieved by code, but as long as it can be done with code maintenance, why not). Picking a scenario would be generating content from external sources on the fly and customize this content without any human intervention.&lt;br /&gt;&lt;br /&gt;Open the web part page, you will find a blank page, but this is not true, you added all the features of SharePoint to this page, like the navigation, integration with SharePoint security, etc…, this is a powerful feature and a great canvas to start with. From the Site Actions menu, click Edit Page to work in Edit mode:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" iq="true" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsNfiWfmyYI/AAAAAAAAAEM/Dm7Rhyi0B_A/s400/17.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;Note the web part zones this page defines, we will add the web parts to the Header web part zone, Click on Save and Stop Editing to move on to adding web parts to this page.&lt;br /&gt;To add web through feature, we will continue to use the module feature we created, open the module.xml file and modify it to look like this (it will be different on your machine and I will tell you how to do it):&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt; &lt;span class="attr"&gt;Id&lt;/span&gt;&lt;span class="kwrd"&gt;="8df75de2-ba12-465a-9bd3-3d2419daa9dc"&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/sharepoint/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="ProductsPage"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="Lists/Products"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;File&lt;/span&gt; &lt;span class="attr"&gt;Path&lt;/span&gt;&lt;span class="kwrd"&gt;="products.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Url&lt;/span&gt;&lt;span class="kwrd"&gt;="products.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;="MyProducts.aspx"&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;="GhostableInLibrary"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AllUsersWebPart&lt;/span&gt; &lt;span class="attr"&gt;WebPartZoneID&lt;/span&gt;&lt;span class="kwrd"&gt;="Header"&lt;/span&gt; &lt;span class="attr"&gt;WebPartOrder&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/WebPart/v3"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;      &lt;span class="rem"&gt;&amp;lt;!--&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="rem"&gt;      The following Guid is used as a reference to the web part class, &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="rem"&gt;      and it will be automatically replaced with actual type name at deployment time.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="rem"&gt;      --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Walkthrough1.ProductsList, Walkthrough1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=368358217c045f14"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Cannot import ProductsList Web Part.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Products List&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Displays list of products&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        ]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AllUsersWebPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AllUsersWebPart&lt;/span&gt; &lt;span class="attr"&gt;WebPartZoneID&lt;/span&gt;&lt;span class="kwrd"&gt;="Header"&lt;/span&gt; &lt;span class="attr"&gt;WebPartOrder&lt;/span&gt;&lt;span class="kwrd"&gt;="2"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;[CDATA[&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/WebPart/v3"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;      &lt;span class="rem"&gt;&amp;lt;!--&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&lt;span class="rem"&gt;      The following Guid is used as a reference to the web part class, &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;&lt;span class="rem"&gt;      and it will be automatically replaced with actual type name at deployment time.&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&lt;span class="rem"&gt;      --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Walkthrough1.ProductDescription, Walkthrough1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=368358217c045f14"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Cannot import ProductDescription Web Part.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Product Description&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Displays the description of a product from the products list web part&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        ]]&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AllUsersWebPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;File&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Module&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Elements&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier New;"&gt;&lt;/span&gt;&lt;br /&gt;As you can see, I added the web parts using the &amp;lt;AllUsersWebPart&amp;gt; element, the attributes specify where the web part should appear and it’s order. The tricky part is getting the CDATA content, if you open (in solution explorer) the ProductsList.webpart file, you will find similar content to the one in the first CDATA section:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://schemas.microsoft.com/WebPart/v3"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;      &lt;span class="rem"&gt;&amp;lt;!--&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="rem"&gt;      The following Guid is used as a reference to the web part class, &lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;      and it will be automatically replaced with actual type name at deployment time.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="rem"&gt;      --&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;type&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="c9c9e1af-8b05-4ed7-92b7-63194e872f1f"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Cannot import ProductsList Web Part.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;importErrorMessage&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;metaData&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Products List&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Displays list of products&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;properties&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;data&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webPart&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;webParts&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, the &amp;lt;type&amp;gt; element contains a GUID to the type, this is replaced when the web part is installed with the real type, to get it, go to the site’s web part gallery (where we used to test our project) and click on the web parts edit icon:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img border="0" iq="true" src="http://3.bp.blogspot.com/_f-xH2PkHFAM/SsNiIlm3uAI/AAAAAAAAAEU/j3WpPtZdce0/s400/18.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then click on the View XML item:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img border="0" iq="true" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsNiT_no3MI/AAAAAAAAAEc/FwRl7Gu-1vY/s400/19.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And here you go! The full XML data that needs to go into the CDATA section:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img border="0" iq="true" src="http://2.bp.blogspot.com/_f-xH2PkHFAM/SsNidZ8b0zI/AAAAAAAAAEk/8DZtZiWpQkU/s400/20.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now build and deploy the solution, go to the Products library and open the MyProducts.aspx page, you will find the web parts deployed:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img border="0" iq="true" src="http://2.bp.blogspot.com/_f-xH2PkHFAM/SsNinApwWEI/AAAAAAAAAEs/R26nXXoeUeU/s400/21.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the next step we will show how to connect the web parts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Thoughts:&lt;/strong&gt; This can be done (creating a page and adding web parts to it) by code, but to do this in a feature is yet another great benefit and added flexibility. How it can be done by code? Using event receivers, which I will cover in my next tutorial.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nader.shalabi.googlepages.com/Walkthrough2.zip"&gt;[Download source code]&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-4248061090003765854?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/4248061090003765854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/sharepoint-walkthrough-playing-with_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4248061090003765854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4248061090003765854'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/sharepoint-walkthrough-playing-with_30.html' title='SharePoint Walkthrough – Playing with features (Step 2)'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_f-xH2PkHFAM/SsNKw9lty1I/AAAAAAAAACE/9qilmlkmD-Y/s72-c/11.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-737980429252307871</id><published>2009-09-29T02:18:00.000-07:00</published><updated>2009-09-30T00:47:40.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebPart'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>SharePoint Walkthrough – Playing with features (Step 1)</title><content type='html'>In this tutorial, we want to create a set of features that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Creates a document library.&lt;/li&gt;&lt;li&gt;Creates a web part page instance in the document library.&lt;/li&gt;&lt;li&gt;Provision the web part page by adding two web parts to the page.&lt;/li&gt;&lt;li&gt;Connect the two web parts in the web part page instance with web part connections.&lt;/li&gt;&lt;/ol&gt;We will use &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio 2008&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FB9D4B85-DA2A-432E-91FB-D505199C49F6&amp;amp;displaylang=en"&gt;VSeWSS 1.3&lt;/a&gt;, so let's get started.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;Step 1 – Write the web parts&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's start by creating two connectable web parts, the first web parts will have a list of products, the second web part will display description text for the selected product in the first web part through web part connection, fire up visual studio 2008 and create new project, pick up the Empty project template from SharePoint projects type list:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHyGAZg32I/AAAAAAAAABM/2d8seKtgcqE/s1600-h/1.JPG"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHyGAZg32I/AAAAAAAAABM/2d8seKtgcqE/s400/1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select "Full Trust (Deploy to GAC)" from the "Select Trust Level" dialog box:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHycqMKl2I/AAAAAAAAABU/EhsZ4-W50fs/s1600-h/2.JPG"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHycqMKl2I/AAAAAAAAABU/EhsZ4-W50fs/s400/2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We will write some code that won't work with partial trust deployment. Hit Ok.&lt;br /&gt;Building connectable web parts is easy, we need first to agree on the connection interface between the web parts and what we are passing, here it is fairly simple, we are passing description string, so our interface will look something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IProductDescription&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;// Our data is goes here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductDescription { get; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This is a simple interface that once a selection in our products web part list is made, we will send along with this interface the description of our product using the "ProductDescription" property.&lt;br /&gt;Now to use this interface, we will implement it in our web part class, we need first to add a web part:&lt;br /&gt;Right click the project node in the Solution Explorer -&amp;gt; Add -&amp;gt; New Item, from the Add New Item dialog, select "Web part" from the SharePoint Category, name the web part "ProductsList":&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsHyqasAZdI/AAAAAAAAABc/BprrWhqbnkU/s1600-h/3.JPG"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsHyqasAZdI/AAAAAAAAABc/BprrWhqbnkU/s400/3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Three&amp;nbsp;files are generated, open the "ProductsList.cs" file and add the following code:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IProductDescription&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;// Our data is goes here&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductDescription { get; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;[Guid(&lt;span class="str"&gt;"c9c9e1af-8b05-4ed7-92b7-63194e872f1f"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductsList : &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    System.Web.UI.WebControls.WebParts.WebPart,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    IProductDescription&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="rem"&gt;// Keep track of our product list selection&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Selection { get; set; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="rem"&gt;// Holds the products description&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] ProductsDescription = &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    { &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="str"&gt;"This is a must see movie, I really got the idea years after"&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="str"&gt;"Nice mouse pad with a smily face of Homer Simpson"&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="str"&gt;"Very nice cup holder with USB heater"&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    };&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductsList()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        &lt;span class="rem"&gt;// Initialize our selection&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        Selection = -1;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateChildControls();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;        &lt;span class="rem"&gt;// Our list is a simple Radio button list&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        RadioButtonList productsList = &lt;span class="kwrd"&gt;new&lt;/span&gt; RadioButtonList();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        productsList.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(&lt;span class="str"&gt;"Matrix I"&lt;/span&gt;, &lt;span class="str"&gt;"0"&lt;/span&gt;));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        productsList.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(&lt;span class="str"&gt;"Acme Mouse Pad"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt;));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;        productsList.Items.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; ListItem(&lt;span class="str"&gt;"Acme Cup Holder"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="rem"&gt;// Each time we have a selection, we will update,&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="rem"&gt;// not great though, can be enhanced with AJAX,&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="rem"&gt;// it is easier than you think, till next Walkthrough&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        productsList.AutoPostBack = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;        &lt;span class="rem"&gt;// Hook our event for the list&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        productsList.SelectedIndexChanged += &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler(productsList_SelectedIndexChanged);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controls.Add(productsList);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;    &lt;span class="kwrd"&gt;void&lt;/span&gt; productsList_SelectedIndexChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;        Selection = (sender &lt;span class="kwrd"&gt;as&lt;/span&gt; RadioButtonList).SelectedIndex;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;    &lt;span class="rem"&gt;// This is where the fun begins, note the method attribute&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;    [ConnectionProvider(&lt;span class="str"&gt;"Product Description"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; IProductDescription ConnectionInterface()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;        &lt;span class="rem"&gt;// our web part implemented this interface&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;        &lt;span class="rem"&gt;// we can send any object that implement this interface&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;    &lt;span class="rem"&gt;// IProductDescription Members implementation&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductDescription&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;        get&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;        {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (Selection != -1)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; ProductsDescription[Selection]; &lt;span class="rem"&gt;// return the product description&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"Select a product"&lt;/span&gt;; &lt;span class="rem"&gt;// in case there is no selection&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Several things need to be explained, we talked about the connection interface IProductDescription, but how it communicates or gets exposed by the WSS framework, note the method ConnectionInterface(), this method is decorated with the [ConnectionProvider] attribute, which means one thing to the framework, the web part exposes an outgoing connection, and since our web part implements this interface (and defines the one property it has, ProductDescription), we can return our web part instance.&lt;br /&gt;&lt;br /&gt;The rest is the logic of our web part UI setup and event handling, when this web part is connected, each time the page updates, the web part will send the data or product description (based on selection) to the consuming web part, which brings me to the second part, writing the consuming web part, build the project and make sure all compiles.&lt;br /&gt;&lt;br /&gt;To write the consuming web part, add another web part to the project as we did earlier with the first one, name the web part "ProductDescription", the rest is easy:&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Guid(&lt;span class="str"&gt;"97c76944-ca8c-4201-b128-48e08a7e6753"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductDescription : System.Web.UI.WebControls.WebParts.WebPart&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; IProductDescription productDescriptionProvider = &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductDescription()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateChildControls()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;base&lt;/span&gt;.CreateChildControls();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        Label label = &lt;span class="kwrd"&gt;new&lt;/span&gt; Label();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="rem"&gt;// Read the passed data through our interface&lt;/span&gt;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (productDescriptionProvider != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;            label.Text = productDescriptionProvider.ProductDescription;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controls.Add(label);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    [ConnectionConsumer(&lt;span class="str"&gt;"Product Description"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetInterface(IProductDescription providerInterface)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;        &lt;span class="rem"&gt;// Here we go, our data interface&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        productDescriptionProvider = providerInterface;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;In this web part we have control that gets updated with the product description, the data is passed through the GetInterface() method, this time decorated with the [ConnectionConsumer] attribute, that tells the framework to send the outgoing interface (IProductDescription) to this method.&lt;br /&gt;&lt;/div&gt;Build the solution and make sure it compiles.&lt;br /&gt;&lt;br /&gt;Now before we go to the next step in our walkthrough, we need to test the web parts in a simple web part page, to do that we need to install them, right click the project node -&amp;gt; Properties, go to the Debug tab -&amp;gt; Start browser with Url should be set to the site collection the web parts will be deployed to, make sure to set it, mine is &lt;a href="http://localhost/"&gt;http://localhost/&lt;/a&gt; by default. &lt;br /&gt;&lt;br /&gt;Save and open the WSP View (if not showing, go to View -&amp;gt; Other Windows -&amp;gt; WSP View), click on the Refresh button on the top of the view, nodes for the features that define the web parts will show, under each feature there is a feature.xml file, open it and in the tag, modify the Title attribute and add a Description attribute (Do the same for the other feature file under ProductsList):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsHy83DOViI/AAAAAAAAABs/3RmcrxP2g4w/s1600-h/5.JPG"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SsHy83DOViI/AAAAAAAAABs/3RmcrxP2g4w/s400/5.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;These settings relates to the feature that will install the web parts, for the web parts titles, expand the web part category, for example ProductDescription under feature.xml in the previous figure, click on the ProductDescription.webpart and modify the properties element as follows (Do the same for the other web part):&lt;br /&gt;&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Title"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Products List&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Description"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="string"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Displays list of products&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;These are the title and description of the web part in the web part selection dialog.&lt;br /&gt;&lt;/div&gt;Now click F5 to deploy and run IE, in the main page, I edited the home page to add web parts, the web parts will be in the "All Web Parts" -&amp;gt; "Miscellaneous" group:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHzIjrGBwI/AAAAAAAAAB0/Bih4FSCxb6Y/s1600-h/6.JPG"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHzIjrGBwI/AAAAAAAAAB0/Bih4FSCxb6Y/s400/6.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Select the two web parts and click Add, next configure the connections, from Products List web part add a connection to Product Description web part:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHzQFd4EQI/AAAAAAAAAB8/VeggUm_UH50/s1600-h/7.JPG"&gt;&lt;img alt="" border="0" src="http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHzQFd4EQI/AAAAAAAAAB8/VeggUm_UH50/s400/7.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Exit edit mode and select a product from the product list to see its description in the product description.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Thoughts:&lt;/strong&gt; The page will always post back, we can use AJAX to enhance the user experience, but we need to configure the SharePoint site to use .NET 3.5 features, the trick is easy, you can open the web site from Visual Studio 2008 and configure it's settings to use 3.5 features.&lt;br /&gt;&lt;br /&gt;In the next step (Step 2), I will show you how to create a document library instance, add a web part page to it.&lt;br /&gt;&lt;a href="http://nader.shalabi.googlepages.com/Walkthrough1.zip"&gt;[Download source code]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-737980429252307871?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/737980429252307871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/sharepoint-walkthrough-playing-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/737980429252307871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/737980429252307871'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/sharepoint-walkthrough-playing-with.html' title='SharePoint Walkthrough – Playing with features (Step 1)'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_f-xH2PkHFAM/SsHyGAZg32I/AAAAAAAAABM/2d8seKtgcqE/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-8756008491250992997</id><published>2009-09-08T23:30:00.000-07:00</published><updated>2010-06-14T23:51:28.839-07:00</updated><title type='text'>The problem with "_" in MOSS...not funny</title><content type='html'>I setup a VM for SharePoint 2007 server for demo purposes, while I was preparing my demo on Form &amp;amp; Excel Services, I was unable to publish any, I just don't know why, I did everything right, I re-created the VM machine :( this time I am sure all is right, I have it worked before on many VM machines, so I decided (out of despair) to change the name of the machine.......and it worked!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is not funny; my machine name was "dev_moss", yes!!! It was the "_" letter! Don’t know why, but it just won’t work if the machine name has "_" in it, this applies only&amp;nbsp;to this case when you are setting up&amp;nbsp;an isolated VM machine, I didn't try it with a real physicall machine, any how, hope they will fix it. The problem can be solved if the SharePoint site is published with a header from IIS, because it wont reference the machine name, and this is from other guys who faced the same problem,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-8756008491250992997?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/8756008491250992997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/problem-with-in-mossnot-funny.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/8756008491250992997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/8756008491250992997'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/09/problem-with-in-mossnot-funny.html' title='The problem with &quot;_&quot; in MOSS...not funny'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-3212337658543908072</id><published>2009-08-18T10:02:00.000-07:00</published><updated>2009-08-18T10:07:30.918-07:00</updated><title type='text'>Me, Jeeran and Team System 2008</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_f-xH2PkHFAM/SorfwZ-a72I/AAAAAAAAABE/Sl9zzyPsHhY/s1600-h/Jeeran.jpg"&gt;&lt;img style="MARGIN: 0px 0px 10px 10px; WIDTH: 130px; FLOAT: right; HEIGHT: 88px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5371351528292151138" border="0" alt="" src="http://4.bp.blogspot.com/_f-xH2PkHFAM/SorfwZ-a72I/AAAAAAAAABE/Sl9zzyPsHhY/s320/Jeeran.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Early this week I finished my first consultation project for &lt;a href="http://www.jeeran.com/"&gt;Jeeran&lt;/a&gt;, a web development company, the consultation was to setup Team Foundation Server 2008, show Jeeran the value of Team System (through walkthroughs and training sessions), utilize and customize &lt;a href="http://scrumforteamsystem.com/"&gt;SCRUM for team system&lt;/a&gt; to manage their development projects. It was really great experience; I enjoyed working with the project manager and Team Leaders.&lt;br /&gt;At the end, I prepared a virtual machine with VSTS 2010 Beat 1, yep, this was as an added bonus to this consultancy, and I am sure that once released, Jeeran can have a good idea about it and can decide to upgrade if they want.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-3212337658543908072?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/3212337658543908072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/me-jeeran-and-team-system-2008.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3212337658543908072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3212337658543908072'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/me-jeeran-and-team-system-2008.html' title='Me, Jeeran and Team System 2008'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_f-xH2PkHFAM/SorfwZ-a72I/AAAAAAAAABE/Sl9zzyPsHhY/s72-c/Jeeran.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-3406504784500927228</id><published>2009-08-11T00:46:00.001-07:00</published><updated>2009-08-11T01:28:21.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AGILE'/><title type='text'>Agile, Tools and OOP</title><content type='html'>In my last consultation to implement TFS 2008, the management asked me to find an easy and effective process to remove certain developed/implemented user stories from current project and prevent them from being released, they always face problem going back to code and start removing those features, which takes long time and sometimes needs further testing to make sure the modifications did not affect the product as whole.&lt;br /&gt;&lt;br /&gt;The solution lies in three areas:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First, Your Process&lt;/strong&gt;, the process already implemented is SCRUM, SCRUM is Agile, and in this process the client (or product owner) must be part of the whole process and with the help of the development team and subject matter experts, the product owner early in the project can select and rank the features that needs implementation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Second, Tools&lt;/strong&gt; like TFS can help make this less painful, features like branching, labeling and merging in TFS SCC can be used to build an effective deployment process based on the ability to selectively promoting feature, a process known as "promotion modeling", more on this:&lt;br /&gt;&lt;a href="http://thirdshelf.com/2008/09/24/source-code-promotion-model/"&gt;http://thirdshelf.com/2008/09/24/source-code-promotion-model/&lt;/a&gt;&lt;a href="http://www.ericsink.com/scm/source_control.html"&gt;http://www.ericsink.com/scm/source_control.html&lt;/a&gt;&lt;br /&gt;This is good, but tools is useful as long as you plan properly and have a planned process to follow&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Finally, OOP!&lt;/strong&gt; This is important, if your developers follow AGILE coding practices (They are OOP, I should not even call them Agile) like SRP, SoC, IoC, OCP, LSP, etc... You can be sure that changing and adopting to change is easy or at least less painful process. Here is a good example on good process planning, include a code review process that always directs your programmers to use best practices in coding, do mentoring on using code written based on best practices, like Microsoft Enterprise Library for example, this way they will transparently implement others best practices, more on this:&lt;br /&gt;&lt;a href="http://mmiika.wordpress.com/oo-design-principles/"&gt;http://mmiika.wordpress.com/oo-design-principles/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-3406504784500927228?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/3406504784500927228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/agile-tools-and-oop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3406504784500927228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/3406504784500927228'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/agile-tools-and-oop.html' title='Agile, Tools and OOP'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-1056713217701355189</id><published>2009-08-11T00:42:00.000-07:00</published><updated>2009-08-11T01:30:04.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCRUM'/><title type='text'>Nice SCRUM tutorial (10 minutes)</title><content type='html'>This is a very illustrative and easy to follow tutorial on SCRUM under 10 minutes, really nice work, available on YouTube&lt;br /&gt;&lt;br /&gt;&lt;object width="500" height="315"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Q5k7a9YEoUI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Q5k7a9YEoUI&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="315"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-1056713217701355189?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/1056713217701355189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/nice-scrum-tutorial-10-minutes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/1056713217701355189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/1056713217701355189'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/nice-scrum-tutorial-10-minutes.html' title='Nice SCRUM tutorial (10 minutes)'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5137977785389892281.post-4842036313868795149</id><published>2009-08-10T23:51:00.000-07:00</published><updated>2009-08-11T00:35:50.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS2008'/><title type='text'>TFS 2008 Consultation</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_f-xH2PkHFAM/SoEeg_oWlwI/AAAAAAAAAAw/jczr-R6w4Hk/s1600-h/tfsOverview.png"&gt;&lt;img style="MARGIN: 0px 10px 10px 0px; WIDTH: 320px; FLOAT: left; HEIGHT: 182px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5368605782987675394" border="0" alt="" src="http://1.bp.blogspot.com/_f-xH2PkHFAM/SoEeg_oWlwI/AAAAAAAAAAw/jczr-R6w4Hk/s320/tfsOverview.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;The last month was very interesting, I got the chance to do a consultation for a web development company with 45 developers, we installed, configured TFS 2008, customized the &lt;a href="http://scrumforteamsystem.com/"&gt;SCRUM&lt;/a&gt; process template, setup &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3ECD00BA-972B-4120-A8D5-3D38311893DE&amp;amp;displaylang=en"&gt;Web Access for Team System (TeamPlain&lt;/a&gt;), setup code review process, did a full training on the VSTS editions (Developer, Architect, Database and Test), and as added bonus, delivered a virtual machine with &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx"&gt;VSTS and TFS 2010 Beta 1&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5137977785389892281-4842036313868795149?l=nadershalabi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nadershalabi.blogspot.com/feeds/4842036313868795149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/consulting-with-microsoft-team-system.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4842036313868795149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5137977785389892281/posts/default/4842036313868795149'/><link rel='alternate' type='text/html' href='http://nadershalabi.blogspot.com/2009/08/consulting-with-microsoft-team-system.html' title='TFS 2008 Consultation'/><author><name>Nader</name><uri>http://www.blogger.com/profile/08877973301690127942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='26' src='http://4.bp.blogspot.com/_f-xH2PkHFAM/SoERXKHQFjI/AAAAAAAAAAM/dqyNxytU6NI/S220/australia-sydney-opera-house.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_f-xH2PkHFAM/SoEeg_oWlwI/AAAAAAAAAAw/jczr-R6w4Hk/s72-c/tfsOverview.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
