<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.sharepointblogs.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Todd Baginski's SharePoint 2003 and MOSS 2007 Blog</title><link>http://www.sharepointblogs.com/tbaginski/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>My blog has moved</title><link>http://www.sharepointblogs.com/tbaginski/archive/2009/02/21/my-blog-has-moved.aspx</link><pubDate>Sun, 22 Feb 2009 00:42:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:42781</guid><dc:creator>tbaginski</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;My blog has moved!&lt;/p&gt;
&lt;p&gt;You can find my new blog&amp;nbsp;at this address&amp;nbsp;&lt;a href="http://www.toddbaginski.com/blog"&gt;http://www.toddbaginski.com/blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The new RSS feed is at this address &lt;a href="http://www.toddbaginski.com/blog/Rss.aspx"&gt;http://www.toddbaginski.com/blog/Rss.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=42781" width="1" height="1"&gt;</description></item><item><title>Hyper-V SharePoint Development Image: USB 2.0 vs. eSATA vs. C:\ shootout</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/12/01/hyper-v-sharepoint-development-image-usb-2-0-vs-esata-vs-c-shootout.aspx</link><pubDate>Mon, 01 Dec 2008 22:22:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:23536</guid><dc:creator>tbaginski</dc:creator><slash:comments>13</slash:comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/12/01/hyper-v-sharepoint-development-image-usb-2-0-vs.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;During my preparations for the the &lt;a target="_blank" href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032396509&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;MSDN Webcast I&amp;#39;m presenting tomorrow&lt;/a&gt; I realized the eSATA &lt;br /&gt;drive I purchased was not performing as fast as I thought it would.&amp;nbsp; I decided to see exactly how &lt;br /&gt;fast my external hard drive runs a virtual machine when it is connected via USB 2.0 vs. the eSATA &lt;br /&gt;interface. I also threw in a test to see how the virtual machine runs on the host machine&amp;#39;s C:\.&amp;nbsp; It&amp;#39;s &lt;br /&gt;been a couple of years since I benchmarked a SharePoint virtual machine, so I thought I would &lt;br /&gt;share the results with everyone.&amp;nbsp; Hyper-V is the virtual technology I used to run the virtual machine &lt;br /&gt;in this series of tests.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Host Machine&lt;/b&gt;:&lt;/p&gt;
&lt;p&gt;Dell Precision M6300 Laptop &lt;br /&gt;Intel Core 2 Duo T9300 2.5Ghz &lt;br /&gt;8GB RAM &lt;br /&gt;Operating System: Windows Server 2008 Enterprise x64&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;External Hard Drive:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Seagate 2.5&amp;quot; SATA II Hard Disk &amp;ndash; 7200RPM 8MB Cache &lt;br /&gt;INEO 2.5&amp;quot; External Hard Drive Case (Supports USB 2.0 and eSATA) - $29.95 &lt;br /&gt;eSATA Express Card 54 - $29.95&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Virtual Machine:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Windows 2003 Server R2 &amp;ndash; Standard Edition &lt;br /&gt;Domain Controller &lt;br /&gt;Application Server &lt;br /&gt;SQL Server 2005 &amp;ndash; Standard Edition &lt;br /&gt;MOSS 2007 Enterprise &lt;br /&gt;VS.NET 2008 &lt;br /&gt;SharePoint Designer &lt;br /&gt;Office 2007 &lt;br /&gt;Memory allocated to virtual machine: 2548MB&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Test results in mm:ss format:&lt;/b&gt;&lt;/p&gt;
&lt;table border="1" width="578" cellpadding="2" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="275" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;Test&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="110" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;USB 2.0&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;eSATA&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;&lt;strong&gt;C:\&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="271" valign="top"&gt;Boot the virtual machine. Test complete when the press ctrl-alt-delete screen appears. &lt;/td&gt;
&lt;td width="109" valign="top"&gt;
&lt;p align="center"&gt;01:26.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;03:00.0&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;01.27.5&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="268" valign="top"&gt;Load the SharePoint 3.0 Central Administration web site from the Start Menu for the first time.&lt;/td&gt;
&lt;td width="108" valign="top"&gt;
&lt;p align="center"&gt;01:06.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;01:03.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;00:44.8&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="266" valign="top"&gt;Load the home page of the Adventure Works Travel Site in another instance of IE for the first time.&lt;/td&gt;
&lt;td width="108" valign="top"&gt;
&lt;p align="center"&gt;01:07.9&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;01:02.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;01:03.0&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="264" valign="top"&gt;Open Windows Explorer for the first time.&lt;/td&gt;
&lt;td width="108" valign="top"&gt;
&lt;p align="center"&gt;00:04.0&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;00:02.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;00:02.5&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="264" valign="top"&gt;Open VS 2008 for the first time.&lt;/td&gt;
&lt;td width="107" valign="top"&gt;
&lt;p align="center"&gt;00:05.3&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;00:05.3&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;00:04.0&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="264" valign="top"&gt;Shut down the virtual machine.&lt;/td&gt;
&lt;td width="107" valign="top"&gt;
&lt;p align="center"&gt;00:51.3&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;00:51.5&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;00:50.1&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="263" valign="top"&gt;&lt;strong&gt;Totals&lt;/strong&gt;&lt;/td&gt;
&lt;td width="108" valign="top"&gt;
&lt;p align="center"&gt;04:40.2&lt;/p&gt;
&lt;/td&gt;
&lt;td width="91" valign="top"&gt;
&lt;p align="center"&gt;06:04.1&lt;/p&gt;
&lt;/td&gt;
&lt;td width="102" valign="top"&gt;
&lt;p align="center"&gt;04:11.9&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;* The tasks were performed in identical and sequential order for both the USB 2.0 and &lt;br /&gt;eSATA interfaces.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;* I should note that while these tests were run I had the following applications open on the &lt;br /&gt;host machine.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 Instances of Internet Explorer&lt;/li&gt;
&lt;li&gt;Microsoft Outlook&lt;/li&gt;
&lt;li&gt;Microsoft Office Communicator&lt;/li&gt;
&lt;li&gt;Windows Live Messenger&lt;/li&gt;
&lt;li&gt;Hyper-V Manager&lt;/li&gt;
&lt;li&gt;Windows Explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The results are quite interesting.&amp;nbsp; A few years ago virtual machines running on external hard drives &lt;br /&gt;&lt;em&gt;&lt;strong&gt;ALWAYS&lt;/strong&gt;&lt;/em&gt; out-performed virtual machines running on my laptop&amp;#39;s C:\.&amp;nbsp; However, as these tests &lt;br /&gt;indicate, with the technology advancements in laptop processors, memory, motherboards and &lt;br /&gt;hard disks an external hard disk no longer provides a significant performance gain, if any.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s also important to note that although the eSATA interface does not offer a significant &lt;br /&gt;performance boost for virtual machines, it does offer a significant performance boost associated with &lt;br /&gt;copying large files (such as virtual hard disks) and performing system backups.&amp;nbsp; I was able to use &lt;br /&gt;the built in Windows Server Backup to back up my C:\ (74.8GB of data) in less than 20 minutes. &lt;br /&gt;The same backup operation took over an hour with USB 2.0.&lt;/p&gt;
&lt;p&gt;What about you?&amp;nbsp; Have you seen the same behavior in your experiences?&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/12/01/hyper-v-sharepoint-development-image-usb-2-0-vs.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=23536" width="1" height="1"&gt;</description></item><item><title>SharePoint Certified Master - An Inside Look</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/11/21/sharepoint-certified-master-an-inside-look.aspx</link><pubDate>Fri, 21 Nov 2008 15:43:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:23263</guid><dc:creator>tbaginski</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=23263</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/11/21/sharepoint-certified-master-an-inside-look.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/11/21/sharepoint-certified-master-an-inside-look.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;As you may have seen, Microsoft recently announced &lt;/span&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/11/10/introducing-the-microsoft-certified-master-and-certified-architect-for-sharepoint.aspx"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;a pair of new certifications&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt; for SharePoint Products and Technologies.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.harbar.net/archive/2008/11/21/Microsoft-Certified-Master-for-SharePoint.aspx"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Spencer Harbar&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt; and &lt;/span&gt;&lt;a href="http://www.andrewconnell.com/blog/archive/2008/11/20/Microsoft-Certification-Master-for-SharePoint--My-Involvement-in-Helping.aspx"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Andrew Connell&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt; both have blog posts which describe the new certification programs and provide additional information that is not found on the official Microsoft site.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I encourage you to read their posts to learn more.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;As Andrew mentions in his blog post, the course authors and presenters include SharePoint Rangers, CAT team members, PFEs, MCS personnel, several members of the SharePoint product team and two SharePoint MVPs.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Andrew Connell is the content owner, author and instructor for the WCM portion of the course and I am the content owner, author and instructor for the Business Data Catalog (BDC) portion of the SharePoint Master Certification course.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="font-size:small;"&gt;Last week I presented the BDC portion of the course during the alpha delivery and I can definitely say that the training sessions are unlike any I have ever seen or presented before.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/mitchp/"&gt;&lt;span style="font-size:small;"&gt;Mitch Prince&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:small;"&gt; also contributed content to the BDC portion of the training and presented some if it last week as well.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Between now and the next time the training is offered I will be incorporating Mitch&amp;rsquo;s content into the BDC portion of the curriculum before I present it again.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Hopefully this post will help provide some insight into what the course is all about and give you an idea what the classroom atmosphere is like.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Like any training course there are slides, demos and lab exercises, however the discussions that take place during the sessions go way beyond your typical training course and provide a tremendous amount of value and insight into the SharePoint platform.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Imagine a training environment where you are not only learning from highly qualified and experienced instructors, but you are also learning from the experiences the entire class brings to the table.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Couple this with the fact that every person who partakes in the SharePoint Master Certification program has passed a stringent set of pre-requisites, exams, and personal interviews and you quickly realize that the depth of the training and the subject matter is incredibly valuable.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;The content presented in the curriculum is constantly evolving and being updated to incorporate student feedback.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;During the alpha delivery of the program last week I collected several interesting and helpful pieces of information from the students which stemmed from the real world experiences they had with the topics at hand.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The information I collected will become part of the curriculum going forward.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This open and iterative approach ensures that the certification always includes the most up to date information and tips from not only the instructors, but from students/experts from around the world.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Essentially, every time the class is taught, it is better than before!&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;Since the program was announced many people have asked me what I believe the true value of achieving the SharePoint Master Certification is.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Based on the session I delivered and the other sessions I sat in on later in the day, there is no doubt in my mind that the true value of the certification is that it ensures those who attain it know the SharePoint platform inside and out, from top to bottom.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I believe that you can certainly hire a person with this level of certification and have complete confidence they are capable of properly and successfully implementing a multimillion dollar infrastructure with SharePoint Products and Technologies.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I&amp;rsquo;m not trying to knock the existing SharePoint certifications, I&amp;rsquo;m just pointing out that if you can pass the SharePoint Master Certification exams and hands on lab tests then you have certainly proven you know your stuff.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;To say it another way, this certification proves you can walk the walk and not just talk the talk &amp;ndash; not just from a technical point of view, but also as a true consultant who knows how to work with the business to implement solutions that solve their problems and meet their needs quickly and effectively.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;In the future I hope to not only continue presenting the BDC portion of the course, but to also achieve this level of certification.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;It&amp;rsquo;s a tall mountain to climb; but as you may know, I love to ski and it&amp;rsquo;s another mountain I&amp;rsquo;d love to summit.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Speaking of skiing; I&amp;rsquo;m going to go hop in the FJ and head up to Breck for my first turns of the year! &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:Wingdings;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Pray for snow!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/11/21/sharepoint-certified-master-an-inside-look.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=23263" width="1" height="1"&gt;</description></item><item><title>A great loss...</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/09/05/a-great-loss.aspx</link><pubDate>Fri, 05 Sep 2008 16:32:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:20598</guid><dc:creator>tbaginski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=20598</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/09/05/a-great-loss.aspx#comments</comments><description>&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/09/05/a-great-loss.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;It saddens me greatly to know &lt;a href="http://www.u2u.info/Blogs/Patrick/default.aspx"&gt;Pat Tisseghem&lt;/a&gt; &lt;a href="http://weblogs.asp.net/jan/archive/2008/09/05/patrick-tisseghem-passed-away.aspx"&gt;passed away yesterday&lt;/a&gt;.&amp;nbsp; Every single time I met Pat at a conference or had dinner and drinks with him he was&amp;nbsp;energetic, smiling, and a fun guy to be around; and that is how I will always remember him.&lt;/p&gt;
&lt;p&gt;My heart goes out to his close family and friends and I wish you all the best!&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/09/05/a-great-loss.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=20598" width="1" height="1"&gt;</description></item><item><title>Speaking at the SharePoint Web 2.0 FireStarter next week</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/06/07/speaking-at-the-sharepoint-web-2-0-firestarter-next-week.aspx</link><pubDate>Sat, 07 Jun 2008 18:04:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:17364</guid><dc:creator>tbaginski</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=17364</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/06/07/speaking-at-the-sharepoint-web-2-0-firestarter-next-week.aspx#comments</comments><description>&lt;p style="MARGIN:0in 0in 10pt;" class="MsoNormal"&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/06/07/speaking-at-the-sharepoint-web-2-0-firestarter-next.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;If you missed my &lt;a href="http://www.toddbaginski.com/blog/archive/2008/06/07/teched-north-america-2008-session-materials-creating-solutions-with.aspx"&gt;Creating Solutions With The Business Data Catalog session&lt;/a&gt; at TechEd last week, and you&amp;#39;d like to see the SilverLight / BDC integration demo I did there, come attend the &lt;a target="_blank" href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=~CMTYDataSvcParams%5E~arg+Name%3D%22ID%22+Value%3D%221032379380%22%2F%5E~arg+Name%3D%22ProviderID%22+Value%3D%22A6B43178-497C-4225-BA42-DF595171F04C%22%2F%5E~arg+Name%3D%22lang%22+Value%3D%22en%22%2F%5E~arg+Name%3D%22Country%22+Value%3D%22United%20States%22%2F%5E~sParams%5E~%2FsParams%5E~%2FCMTYDataSvcParams%5E"&gt;SharePoint Web 2.0 FireStarter&lt;/a&gt; event next week on the Microsoft campus.&amp;nbsp; Heck, come attend anyway, there are many great topics and presentations scheduled.&amp;nbsp; I&amp;#39;ll be presenting my demo at the tail end of Steve Fox&amp;#39;s SilverLight on SharePoint session.&amp;nbsp; You can see the complete schedule and register &lt;a target="_blank" href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=~CMTYDataSvcParams%5E~arg+Name%3D%22ID%22+Value%3D%221032379380%22%2F%5E~arg+Name%3D%22ProviderID%22+Value%3D%22A6B43178-497C-4225-BA42-DF595171F04C%22%2F%5E~arg+Name%3D%22lang%22+Value%3D%22en%22%2F%5E~arg+Name%3D%22Country%22+Value%3D%22United%20States%22%2F%5E~sParams%5E~%2FsParams%5E~%2FCMTYDataSvcParams%5E"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/06/07/speaking-at-the-sharepoint-web-2-0-firestarter-next.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=17364" width="1" height="1"&gt;</description></item><item><title>TechEd North America 2008 Session Materials : Creating Solutions with the Business Data Catalog</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/06/07/teched-north-america-2008-session-materials-creating-solutions-with-the-business-data-catalog.aspx</link><pubDate>Sat, 07 Jun 2008 17:57:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:17363</guid><dc:creator>tbaginski</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=17363</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/06/07/teched-north-america-2008-session-materials-creating-solutions-with-the-business-data-catalog.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span style="color:#004080;"&gt;&lt;strong&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/06/07/teched-north-america-2008-session-materials-creating-solutions-with.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;
to everyone who came to my session last week at the Microsoft TechEd 2008 North America Developer conference!&amp;nbsp; It was really nice to see so many past students at the show and I enjoyed catching up with everyone.&amp;nbsp; On Wednesday night I had the chance to hang out with many of the Microsoft MVPs and watch the Blues Brothers kick it at the House of Blues.&amp;nbsp; &lt;a target="_blank" href="http://www.binarywave.com/blogs/eshupps/default.aspx"&gt;Eric Shupps&lt;/a&gt; accompanied the Blues Brothers for a song, I wish I had a picture of it, I thought he did pretty well.&amp;nbsp; :)&amp;nbsp; I met &lt;a target="_blank" href="http://www.brettlonsdale.com/default.aspx"&gt;Brett Lonsdale&lt;/a&gt; for the first time, &lt;a target="_blank" href="http://sharepointnick.com/blog/default.aspx"&gt;Nick Swan&amp;#39;s&lt;/a&gt; partner at BDC Meta Man, and we shared some great laughs with &lt;a target="_blank" href="http://www.thorprojects.com/blog/default.aspx"&gt;Rob Bogue&lt;/a&gt;.&amp;nbsp; &lt;a target="_blank" href="http://www.andrewconnell.com/index.aspx"&gt;AC&lt;/a&gt; was absolutely mobbed during his book signings; it was really cool to see a person as talented and hard working as Andrew enjoying the spotlight.&amp;nbsp; Thanks for the book AC!&amp;nbsp; &lt;a target="_blank" href="http://www.blackbladeinc.com/en-us/aboutus/Pages/BradleyThomasSmith.aspx"&gt;Brad Smith&lt;/a&gt; gave us a demo of his new Black Black appliance and we were all impressed.&amp;nbsp; I only saw &lt;a target="_blank" href="http://www.wildwires.com/Blog/"&gt;Stacy Draper&lt;/a&gt;, &lt;a target="_blank" href="http://www.shillier.com/"&gt;Scott Hillier&lt;/a&gt; and &lt;a target="_blank" href="http://www.bobmixon.com/Pages/default.aspx"&gt;Bob Mixon&lt;/a&gt; for a short time, and it&amp;#39;s always good to their smiling faces.&lt;/strong&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font size="3"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/font&gt;&lt;/span&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;color:#004080;font-family:Calibri;"&gt;You can find the Site Template Package (STP) for the SharePoint site I used for my demos &lt;/span&gt;&lt;span style="font-size:small;color:#004080;font-family:Calibri;"&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry17362.aspx"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:small;color:#004080;font-family:Calibri;"&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:small;color:#004080;font-family:Calibri;"&gt;The SilverLight and BDC Integration demo will be available soon right here on my blog, so please keep an eye out for it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/06/07/teched-north-america-2008-session-materials-creating-solutions-with.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=17363" width="1" height="1"&gt;</description></item><item><title>Moving On</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/05/18/moving-on.aspx</link><pubDate>Mon, 19 May 2008 00:37:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:16612</guid><dc:creator>tbaginski</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=16612</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/05/18/moving-on.aspx#comments</comments><description>&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/05/19/moving-on.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;As of May 18, I am no longer with &lt;a href="http://www.sharepointexperts.com/"&gt;SharePoint Experts, Inc.&lt;/a&gt;&amp;nbsp; Over four years ago, I first met &lt;a href="http://www.sharepointblogs.com/dustin/default.aspx"&gt;Dustin Miller&lt;/a&gt;, the president of SharePoint Experts.&amp;nbsp; Back then, I was attending his &lt;a href="http://sharepointbootcamp.com/sharepoint_bootcamp.htm"&gt;&amp;ldquo;Original&amp;rdquo; SharePoint Bootcamp&lt;/a&gt;, and SPS 2003 was still in the beta stages.&amp;nbsp; Shortly after that, I joined the team, and since then, with Dustin&amp;rsquo;s support and the support of all my friends at SharePoint Experts, I wrote the first SharePoint development training class in the industry (the &lt;a href="http://sharepointbootcamp.com/sharepoint_development_bootcamp.htm"&gt;SharePoint Development Bootcamp&lt;/a&gt;), became a SharePoint MVP, and started a new role as a regular conference speaker.&amp;nbsp; As time went on, my role within the company grew even more!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;/span&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Throughout these exciting years, I was privileged to create strong friendships with Dustin, &lt;a href="http://www.sharepointblogs.com/matt/default.aspx"&gt;Matt Passannante&lt;/a&gt;, &lt;a href="http://www.heathersolomon.com/"&gt;Heather Solomon&lt;/a&gt;, &lt;a href="http://www.sharepointblogs.com/dortiz/default.aspx"&gt;Doug Ortiz&lt;/a&gt; and all the other members of the SharePoint Experts family and contractor network.&amp;nbsp; &amp;nbsp;I&amp;rsquo;m very thankful for the opportunities, expertise and support they have provided me along the way, and I look forward to many more years of friendship with these great folks.&amp;nbsp; Don&amp;rsquo;t be surprised if you see us all together at conferences!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Although I am leaving the company to pursue another opportunity, I&amp;rsquo;m moving into a new type of role, and I&amp;rsquo;ll continue to recommend SharePoint Experts for your SharePoint training needs!&amp;nbsp; In fact, I personally trained the instructor that will be teaching my class (Doug Ortiz), and he&amp;rsquo;s going to be writing new material for future deliveries of the course.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;font-family:Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;/span&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;I have nothing but the fondest of memories of my time with the SharePoint Experts crew.&amp;nbsp; They will be deeply missed, and I wish all of them the best in their future endeavors.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&amp;nbsp; 
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/05/19/moving-on.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=16612" width="1" height="1"&gt;</description></item><item><title>Creating Solutions with the MOSS Single Sign On Service Session Materials</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/03/06/creating-solutions-with-the-moss-single-sign-on-service-session-materials.aspx</link><pubDate>Thu, 06 Mar 2008 09:50:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:13658</guid><dc:creator>tbaginski</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=13658</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/03/06/creating-solutions-with-the-moss-single-sign-on-service-session-materials.aspx#comments</comments><description>&lt;p&gt;&lt;span style="COLOR:#1f497d;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&amp;nbsp;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/03/06/creating-solutions-with-the-moss-single-sign-on-service.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;WOW!&amp;nbsp; What a day!&amp;nbsp; First, I got to meet Greg Lemond!&amp;nbsp; He is a very down to earth guy and I really enjoyed spending some time with him.&amp;nbsp; It was an experience I will certainly remember forever!&amp;nbsp; Then, believe it or not,&amp;nbsp;Master Chief himself showed up in our booth in the expo hall!&amp;nbsp; As soon as I get a copy of the pictures I&amp;#39;ll post them here. :)&amp;nbsp; As if those two things were not enough excitement for one day; then I presented my Creating Solutions with the MOSS Single Sign On Service session and finally the day wrapped up with a great dinner and some good times&amp;nbsp;at Kell&amp;#39;s Irish pub here in Seattle.&amp;nbsp; I&amp;#39;m very thankful for all the wonderful opportunities I&amp;#39;ve had this week and I&amp;#39;d like to send a special thank you out to all the folks who put on&amp;nbsp;the Microsoft SharePoint Conference that made it all possible!&lt;/p&gt;
&lt;p&gt;Thanks to everyone who came to my session today!&amp;nbsp; I really enjoyed presenting my session to such an enthusiastic crowd.&amp;nbsp; As promised, &lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry13221.aspx"&gt;here you will find the materials&lt;/a&gt; that I presented in my session today.&amp;nbsp; Enjoy!&lt;/p&gt;
&lt;p&gt;I can&amp;#39;t wait to get back home and jump on my bike again ...&amp;nbsp;it&amp;#39;s time to climb some mountains! :)&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="background-color:#ffcc33;border:#000000 2px solid;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/03/06/creating-solutions-with-the-moss-single-sign-on-service.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=13658" width="1" height="1"&gt;</description></item><item><title>Creating Solutions with the Business Data Catalog (BDC) Session Materials</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/03/04/creating-solutions-with-the-business-data-catalog-bdc-session-materials.aspx</link><pubDate>Wed, 05 Mar 2008 01:52:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:13554</guid><dc:creator>tbaginski</dc:creator><slash:comments>11</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=13554</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/03/04/creating-solutions-with-the-business-data-catalog-bdc-session-materials.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/03/05/creating-solutions-with-the-business-data-catalog-bdc-session.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;What a fun week it has been so far at the&amp;nbsp;&lt;a href="http://www.mssharepointconference.com/Pages/Default.aspx"&gt;Microsoft SharePoint Conference&lt;/a&gt;!&amp;nbsp; I just finished presenting my Creating Solutions with the Business Data Catalog (BDC) session and I&amp;#39;m looking forward to presenting my Creating Solutions with the MOSS Single Sign On Service session tomorrow.&amp;nbsp; Thanks to everyone who came to my session today!&amp;nbsp; All the code and materials for today&amp;#39;s session are now &lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry13223.aspx"&gt;available here&lt;/a&gt;.&amp;nbsp;Enjoy! &lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/03/05/creating-solutions-with-the-business-data-catalog-bdc-session.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=13554" width="1" height="1"&gt;</description></item><item><title>Upcoming Microsoft SharePoint Conference!</title><link>http://www.sharepointblogs.com/tbaginski/archive/2008/02/25/upcoming-microsoft-sharepoint-conference.aspx</link><pubDate>Mon, 25 Feb 2008 15:06:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:13104</guid><dc:creator>tbaginski</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=13104</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2008/02/25/upcoming-microsoft-sharepoint-conference.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/02/25/upcoming-microsoft-sharepoint-conference.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;I&amp;#39;m really looking forward to next week!&amp;nbsp; It will be great to meet all sorts of new people and see so many colleagues from across the globe at the &lt;a href="http://www.mssharepointconference.com/Pages/Default.aspx"&gt;Microsoft SharePoint Conference&lt;/a&gt;.&amp;nbsp; I will be presenting the following two sessions at the conference, I hope you have a chance to attend them!&amp;nbsp; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Creating Solutions with the Business Data Catalog (BDC)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creating Solutions with the MOSS Single Sign On Service&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All the code and materials that are part of my sessions will be posted here, on my blog, after the sessions have been delivered. &lt;/p&gt;
&lt;p&gt;If you would like to talk about these topics after the sessions, or other SharePoint development topics, please drop by and say hello at one of the sessions or come and chat with me in our booth in the expo hall.&amp;nbsp; You can also find me at the Ask the Experts sessions, or the Game Night on Wednesday. &lt;/p&gt;
&lt;p&gt;On Tuesday night, Microsoft has rented out the Museum of Flight for the conference attendees.&amp;nbsp; If you have not been there before, I recommend checking it out.&amp;nbsp; The flight simulator is a really good time! &lt;/p&gt;
&lt;p&gt;See you soon!&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2008/02/25/upcoming-microsoft-sharepoint-conference.aspx"&gt;Click here&lt;/a&gt; to comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=13104" width="1" height="1"&gt;</description></item><item><title>HOW TO: Programmatically customize site navigation in WSS 3.0 and MOSS 2007</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/12/26/how-to-programmatically-customize-site-navigation-in-wss-3-0-and-moss-2007.aspx</link><pubDate>Wed, 26 Dec 2007 18:36:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:10270</guid><dc:creator>tbaginski</dc:creator><slash:comments>40</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=10270</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/12/26/how-to-programmatically-customize-site-navigation-in-wss-3-0-and-moss-2007.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/12/26/how-to-programmatically-customize-site-navigation-in-wss-3.aspx"&gt;Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a repost of an article I posted while WSS 3.0 and MOSS 2007 were in the Beta stages.&amp;nbsp; The article was lost due to a server crash and many people have asked me to repost the article so I updated it with&amp;nbsp;additional information, updates screen shots, and a&amp;nbsp;&lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry10255.aspx"&gt;handy little Windows Forms Application&lt;/a&gt; you can use to test these concepts out yourself, or build upon the code base to meet your own needs.&amp;nbsp; Enjoy! &lt;/p&gt;
&lt;p&gt;In the previous version of SharePoint the QuickLaunch menu was controlled via the ONET.XML file and ASPX pages that made up a Site Definition, and making changes to the QuickLaunch menu was a cumbersome task at best. &lt;/p&gt;
&lt;p&gt;The new version of SharePoint provides significant improvements to the navigational elements within a SharePoint site as well as the ability to change these elements programmatically! This article describes how to programmatically interact with the navigation elements via the WSS API in order to customize SharePoint site navigation. This article also investigates the security trimming capabilities of the SharePoint UI with respect to programmatically edited navigation links. &lt;/p&gt;
&lt;p&gt;The first thing to note is that the objects used to programmatically customize navigation reside in the Microsoft.SharePoint.Navigation namespace. So, you&amp;rsquo;ll need to add a reference to the Microsoft.SharePoint.dll in your Visual Studio projects. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;New item: Controlling navigation via the SPWeb object!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The SPWeb object has been enhanced in MOSS 2007 to support the ability to control the navigation of a SharePoint site programmatically! Let&amp;rsquo;s examine how this can be done. &lt;/p&gt;
&lt;p&gt;The SPWeb object has a new property named Navigation that returns a SPNavigation object. This object allows developers to programmatically control the navigation of a SharePoint site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Shared Navigation Settings&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;One of the new settings you may apply to a site&amp;rsquo;s navigation structure is whether or not the site uses the navigation menus from its parent site. &lt;/p&gt;
&lt;p&gt;These examples assume you have created a top level site named test and a sub site named sharednav under the test top level site as well as a sub site named nosharednav under the test top level site. Once these sites have been created their hierarchy and URLs will look like this: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10256/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Before we get started, to help set the stage, here is what the navigation looks like in the test site. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10257/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here is an example of how to set a sub site to use the navigation from its parent site. &lt;/p&gt;
&lt;p&gt;SPSite sharedNavSite = new SPSite(&amp;ldquo;http://server/test/sharednav&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb sharedNavWeb = sharedNavSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;sharedNavWeb.Navigation.UseShared = true; &lt;/p&gt;
&lt;p&gt;The navigation for the sharednav site looks like this after the lines of code above have been run to set the property. Notice the breadcrumb trail at the top of the page uses the breadcrumb trail for the test top level site and the horizontal menu bar uses the items from the test top level site as well. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10258/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here is an example of how to set a sub site &lt;b&gt;not&lt;/b&gt; to use the navigation from a parent&amp;rsquo;s site. &lt;/p&gt;
&lt;p&gt;SPSite noSharedNavSite = new SPSite(&amp;ldquo;http://server/test/nosharednav&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb noSharedNavWeb = noSharedNavSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;noSharedNavWeb.Navigation.UseShared = false; &lt;/p&gt;
&lt;p&gt;The navigation for the nosharednav site looks like this after the lines of code above have been run to set the property. Notice the breadcrumb trail at the top of the page uses the breadcrumb trail for the nosharednav sub site and the horizontal menu bar uses the items from the nosharednav sub site. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10259/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;QuickLaunch Menu Items&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The QuickLaunch navigation menu may also be accessed programmatically. You can create new menu items in the QuickLaunch navigation menu and remove them. You can also specify if the link is external to the site. &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;add a&lt;/b&gt; &lt;b&gt;menu item to the QuickLaunch navigation menu&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;These QuickLaunch examples assume you have created a top level site named quicklaunch. &lt;/p&gt;
&lt;p&gt;Once this top level site has been created its URL will look like this: http://server/quicklaunch &lt;/p&gt;
&lt;p&gt;In this example we will add two links to the QuickLaunch menu for the quicklaunch top level site, one link will be internal and one will be external. The internal link will point to the Links list in the QuickLaunch site. The external link will point to the SharePoint Experts web site. &lt;/p&gt;
&lt;p&gt;SPSite quickLaunchSite = new SPSite(&amp;ldquo;http://server/quicklaunch&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb quickLaunchWeb = quickLaunchSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection quickLaunchNodes = quickLaunchWeb.Navigation.QuickLaunch; &lt;/p&gt;
&lt;p&gt;SPNavigationNode internalMenuItem = new SPNavigationNode(&amp;ldquo;Links&amp;rdquo;, &amp;ldquo;Lists/Links/AllItems.aspx&amp;rdquo;, false); &lt;/p&gt;
&lt;p&gt;quickLaunchNodes.AddAsFirst(internalMenuItem); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalMenuItem = new SPNavigationNode(&amp;ldquo;SharePoint Experts&amp;rdquo;, &amp;ldquo;http://www.SharePointExperts.com&amp;rdquo;, true); &lt;/p&gt;
&lt;p&gt;quickLaunchNodes.AddAsFirst(externalMenuItem); &lt;/p&gt;
&lt;p&gt;quickLaunchWeb.Update(); &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; If you do not call the Update() method on the SPWeb object you are working with, you will need to reset IIS to see your changes. &lt;/p&gt;
&lt;p&gt;Here is what the quicklaunch Site Collection looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10260/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;remove a&lt;/b&gt; &lt;b&gt;menu item from the QuickLaunch navigation menu&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;In this example we will remove the external link to the SharePoint Experts web site. &lt;/p&gt;
&lt;p&gt;SPSite quickLaunchSite = new SPSite(&amp;ldquo;http://server/quicklaunch&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb quickLaunchWeb = quickLaunchSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection quickLaunchNodes = quickLaunchWeb.Navigation.QuickLaunch; &lt;/p&gt;
&lt;p&gt;quickLaunchNodes.Delete(quickLaunchNodes([0])); &lt;/p&gt;
&lt;p&gt;quickLaunchWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the quicklaunch Site Collection looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10261/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Taking the QuickLaunch menu one step further&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The QuickLaunch menu is capable of displaying links in a grouped fashion, as you see in the screenshot above. For example, the Lists menu item in the screenshot above has two items under it &amp;ndash; the Calendar and Tasks links. Creating your own grouped links can be done programmatically. This is once again a simple process that requires very little code. &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;add grouped&lt;/b&gt; &lt;b&gt;menu items to the QuickLaunch navigation menu&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;In this example we will create a header link for the group of links and name it Administration. Then we will add two links under the Administration header link. The links will link to the Create and Site Settings pages for the quicklaunch Site Collection. &lt;/p&gt;
&lt;p&gt;SPSite quickLaunchSite = new SPSite(&amp;quot;http://&amp;quot; + serverTextBox.Text + &amp;quot;/quicklaunch&amp;quot;); &lt;/p&gt;
&lt;p&gt;SPWeb quickLaunchWeb = quickLaunchSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection quickLaunchNodes = quickLaunchWeb.Navigation.QuickLaunch; &lt;/p&gt;
&lt;p&gt;SPNavigationNode internalMenuItem = new SPNavigationNode(&amp;quot;Administration&amp;quot;, &amp;quot;&amp;quot;, false); &lt;/p&gt;
&lt;p&gt;quickLaunchNodes.AddAsFirst(internalMenuItem); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem1 = new SPNavigationNode(&amp;quot;Site Settings&amp;quot;, quickLaunchWeb.Url + &amp;quot;/_layouts/settings.aspx&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;quickLaunchNodes[0].Children.AddAsFirst(externalSubMenuItem1); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem2 = new SPNavigationNode(&amp;quot;Create&amp;quot;, quickLaunchWeb.Url + &amp;quot;/_layouts/create.aspx&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;quickLaunchNodes[0].Children.AddAsFirst(externalSubMenuItem2); &lt;/p&gt;
&lt;p&gt;quickLaunchWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the quicklaunch Site Collection looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10262/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; I added the Create and Site Settings links to the QuickLaunch bar to test the security trimmed aspects of the SharePoint UI. I wanted to see if SharePoint would hide these links from users who did not have access to see them because MOSS 2007 hides these links in the out of the box SharePoint UI from users who only have reader access. &lt;/p&gt;
&lt;p&gt;I created a user named reader and granted the user read only access to the quicklaunch top level site. When I logged into the quicklaunch top level site with this user the links I just added to the QuickLaunch were available to the reader user! This is an important thing to note, and should be kept in mind when adding links to the QuickLaunch menu! &lt;/p&gt;
&lt;p&gt;Here is what the quicklaunch Site Collection looked like when the reader user logged in: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10263/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here is the screen you see when you click one of the links you do not have access to: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10264/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Top Navigation Menu Items&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The top navigation menu may also be accessed programmatically. You can create new menu items in the top navigation menu navigation menu and remove them. You can also specify if the link is external to the site. &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;add a&lt;/b&gt; &lt;b&gt;menu item to the top navigation menu&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;This example assumes you have created a top level site named topnavigation. &lt;/p&gt;
&lt;p&gt;Once this Site Collection has been created its URLs will look like this: http://server/topnavigation &lt;/p&gt;
&lt;p&gt;In this example we will add two links to the top navigation menu for the topnavigation top level site, one link will be internal and one will be external. The internal link will point to the Links list in the topnavigation site. The external link will point to the SharePoint Experts web site. &lt;/p&gt;
&lt;p&gt;SPSite topNavigationSite = new SPSite(&amp;ldquo;http://server/topnavigation&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb topNavigationWeb = topNavigationSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection topNavigationNodes = topNavigationWeb.Navigation.TopNavigationBar; &lt;/p&gt;
&lt;p&gt;SPNavigationNode internalMenuItem = new SPNavigationNode(&amp;ldquo;Links&amp;rdquo;, &amp;ldquo;Lists/Links/AllItems.aspx&amp;rdquo;, false); &lt;/p&gt;
&lt;p&gt;topNavigationNodes.AddAsFirst(internalMenuItem); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalMenuItem = new SPNavigationNode(&amp;ldquo;SharePoint Experts&amp;rdquo;, &amp;ldquo;http://www.SharePointExperts.com&amp;rdquo;, true); &lt;/p&gt;
&lt;p&gt;topNavigationNodes.AddAsFirst(externalMenuItem); &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the topnavigation top level site looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10265/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;delete a&lt;/b&gt; &lt;b&gt;menu item from the top navigation menu&lt;/b&gt;. In this example we will remove the Links link we just added to the top navigation menu for the topnavigation top level site. &lt;/p&gt;
&lt;p&gt;SPSite topNavigationSite = new SPSite(&amp;ldquo;http://server/topnavigation&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb topNavigationWeb = topNavigationSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection topNavigationNodes = topNavigationWeb.Navigation.TopNavigationBar; &lt;/p&gt;
&lt;p&gt;topNavigationNodes.Delete(topNavigationNodes[0]); &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the topnavigation top level site looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10266/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Taking the Top Navigation one step further&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The top Navigation menu is capable of displaying dropdown menus that consist of multiple items. Adding additional sub menu items under the topmost item is a simple process and requires very little code. &lt;/p&gt;
&lt;p&gt;Here is how you &lt;b&gt;add a sub menu item to a top level menu item in the top navigation menu&lt;/b&gt;. In this example we will add a new top level menu item to the top navigation menu that has two sub menu items under it for the topnavigation top level site. &lt;/p&gt;
&lt;p&gt;SPSite topNavigationSite = new SPSite(&amp;ldquo;http://server/topnavigation&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb topNavigationWeb = topNavigationSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection topNavigationBarNodes = &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Navigation.TopNavigationBar; &lt;/p&gt;
&lt;p&gt;SPNavigationNode headerMenuItem = new SPNavigationNode(&amp;quot;SharePoint Sites&amp;quot;, &amp;quot;&amp;quot;, false); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes.AddAsFirst(headerMenuItem); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem1 = new SPNavigationNode(&amp;quot;SharePoint Experts&amp;quot;, &amp;quot;http://www.SharePointExperts.com&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes[0].Children.AddAsFirst(externalSubMenuItem1); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem2 = new SPNavigationNode(&amp;quot;SharePoint University&amp;quot;, &amp;quot;http://www.SharePointU.com&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes[0].Children.AddAsFirst(externalSubMenuItem2); &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the topnavigation top level site looks like after the above code has been executed: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10267/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; I was curious to see if the Top Navigation menu reacted the same way the QuickLaunch menu bar did regarding the security trimming of the UI. So I created an Administration Header link and two sub links for the Create and Site Settings pages. &lt;/p&gt;
&lt;p&gt;I granted the reader user read only access to the topnavigation top level site and when I logged into the topnavigation top level site with this user the links I just added to the Top Navigation menu were available to the reader user! This is an important thing to note, and should be kept in mind when adding links to the Top Navigation menu! &lt;/p&gt;
&lt;p&gt;Here is the code I used to add the links: &lt;/p&gt;
&lt;p&gt;SPSite topNavigationSite = new SPSite(&amp;ldquo;http://server/topnavigation&amp;rdquo;); &lt;/p&gt;
&lt;p&gt;SPWeb topNavigationWeb = topNavigationLaunchSite.OpenWeb(); &lt;/p&gt;
&lt;p&gt;SPNavigationNodeCollection topNavigationBarNodes = &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Navigation.TopNavigationBar; &lt;/p&gt;
&lt;p&gt;SPNavigationNode headerMenuItem = new SPNavigationNode(&amp;quot;Administration&amp;quot;, &amp;quot;&amp;quot;, false); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes.AddAsFirst(headerMenuItem); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem1 = new SPNavigationNode(&amp;quot;Site Settings&amp;quot;, topNavigationWeb.Url + &amp;quot;/_layouts/settings.aspx&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes[0].Children.AddAsFirst(externalSubMenuItem1); &lt;/p&gt;
&lt;p&gt;SPNavigationNode externalSubMenuItem2 = new SPNavigationNode(&amp;quot;Create&amp;quot;, topNavigationWeb.Url + &amp;quot;/_layouts/create.aspx&amp;quot;, true); &lt;/p&gt;
&lt;p&gt;topNavigationBarNodes[0].Children.AddAsFirst(externalSubMenuItem2); &lt;/p&gt;
&lt;p&gt;topNavigationWeb.Update(); &lt;/p&gt;
&lt;p&gt;Here is what the topnavigation top level site looked like when the administrator or the reader user user logged in; the links appear for both users. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10268/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;I created a &lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry10255.aspx"&gt;handy little Windows Forms Application&lt;/a&gt; you can use to test these concepts out yourself, or build upon the code base to meet your own needs. The application is easy to use, just enter the name of your SharePoint server, then click the buttons from top to bottom and follow along with this article. The application looks like this: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/files/folders/10269/download.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;I hope this article and the application come in handy for you! Now, it&amp;rsquo;s time to go skiing! :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;strong&gt; &lt;/strong&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/12/26/how-to-programmatically-customize-site-navigation-in-wss-3.aspx"&gt;Click here&lt;/a&gt; to commen on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=10270" width="1" height="1"&gt;</description></item><item><title>SharePoint Connections 2007 Code Samples and Session Materials</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/11/08/SharePoint-Connections-2007-Code-Samples-and-Session-Materials.aspx</link><pubDate>Thu, 08 Nov 2007 16:24:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:8368</guid><dc:creator>tbaginski</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=8368</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/11/08/SharePoint-Connections-2007-Code-Samples-and-Session-Materials.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;
&lt;p&gt;&lt;strong&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp;&lt;a href="http://www.toddbaginski.com/blog/archive/2007/11/08/sharepoint-connections-2007-code-samples-and-session-materials.aspx"&gt; Click here&lt;/a&gt; to open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Updated 11/12/2007:&amp;nbsp;The code for my BDC session is now available and linked to below.&amp;nbsp; Post-conference session materials have been distributed directly to post conference attendees.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;d like to say thank you to everyone who attended my sessions so&amp;nbsp;at this year&amp;#39;s SharePoint Connections Conference.&amp;nbsp; I met so many&amp;nbsp;smart, easy going people at the conference, and the audiences&amp;nbsp;were a real pleasure to present to.&amp;nbsp; It&amp;#39;s not a conference I will soon forget.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry8365.aspx"&gt;Click here&lt;/a&gt;, to download the SharePoint Toolkit application that I used during my SharePoint Object Model and Web Services Kick Start session.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry8367.aspx"&gt;Click here&lt;/a&gt;, to download the Site Template Package (stp file) for the SharePoint Site used during Todd Baginski&amp;#39;s&amp;nbsp;Using the MOSS SSO Service in Real World Situations&amp;nbsp;session at SharePoint Connections, during November of 2007.&amp;nbsp; This STP contains all the demos, code and instructions that describe how to implement the solutions in your own environment.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry8515.aspx"&gt;Click here&lt;/a&gt;, to download the Site Template Package (stp file) for the SharePoint Site used during Todd Baginski&amp;#39;s&amp;nbsp;Getting the Most Out of the Business Data Catalog&amp;nbsp;session at SharePoint Connections, during November of 2007.&amp;nbsp; This STP contains all the demos, code (including the custom BDC Web Part that displays data from the BDC and the Windows Forms application that displays data from the BDC) and instructions that describe how to implement the solutions in your own environment.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/11/08/sharepoint-connections-2007-code-samples-and-session-materials.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=8368" width="1" height="1"&gt;</description></item><item><title>Creating and deploying VSTO Documents inside SharePoint Document Libraries</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-and-deploying-vsto-documents-inside-sharepoint-document-libraries.aspx</link><pubDate>Thu, 16 Aug 2007 21:27:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:4390</guid><dc:creator>tbaginski</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=4390</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-and-deploying-vsto-documents-inside-sharepoint-document-libraries.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/creating-and-deploying-vsto-documents-inside-sharepoint-document-libraries.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio Tools for Office (VSTO) Documents can be deployed to or utilized as templates for a SharePoint Document Library. The process to develop VSTO Documents, deploy them to the SharePoint server, and set the proper security policies on the client machine in order for the documents to run properly can be easily repeated once you understand all the pieces of the puzzle. &lt;/p&gt;
&lt;p&gt;I have not been able to find complete documentation for this process on the Internet to date. I have found several web pages that provide pieces of the puzzle, but no comprehensive solution. I discussed this architecture with some Microsoft TS&amp;rsquo;s and they liked the architecture and approach and gave it two thumbs up. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;VSTO Document Basics&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To begin, it is important to understand how the VSTO Documents, the SharePoint server, and the target client machines interact. &lt;/p&gt;
&lt;p&gt;The following diagram helps illustrate the architecture: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/photos/tbaginski/images/4391/original.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;VSTO Documents contain a Deployment Manifest. Inside the Document&amp;rsquo;s Deployment Manifest, the location of the Assembly the VSTO Document relies upon is stored. This Deployment Manifest can be modified programmatically to point to any location where the Assembly the Document relies upon is stored. By default the Deployment Manifest specifies that the Assembly the document relies upon is stored in the same directory as the Document. &lt;/p&gt;
&lt;p&gt;The VSTO Document&amp;rsquo;s Assembly can be deployed to any file share the user who opens the VSTO document has access to. This location can be on a stand alone file server, or even a file share on the SharePoint server itself. The VSTO Document&amp;rsquo;s Assembly is a .dll file. &lt;/p&gt;
&lt;p&gt;In order for the client machine to properly load and render the VSTO Document and related Assembly, the client machine needs to trust the location from which the VSTO Document is opened and the location from which the Assembly is opened. Creating Security Policies on the client machine that trust the location from which the VSTO Document is opened allows the VSTO Document to properly load and render. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Scenario&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The following scenario will be used as an example to demonstrate how to develop, configure and deploy a VSTO Document that will be used as a template for a SharePoint Document Library. Terms that appear in parenthesis are used to represent the various components of the solution and maintain consistency throughout the instructions. &lt;/p&gt;
&lt;p&gt;An existing Word Document Template (Sample.dot) utilizes Macros to fill data in the Word Document Template. The majority of the data the users enter into the Macros to fill the document exists within a database, however users are presently keying the information into the Macro prompts manually. The document needs to be migrated to the VSTO format (VSTOSample.dot) in order to take advantage of the data in the database to expedite document creation. &lt;/p&gt;
&lt;p&gt;Once the existing Word Document Template has been converted to the VSTO format the VSTO Document Template should be deployed as a template for a given document library (Sample Document Library) on the SharePoint Server (SampleSharePointServer). &lt;/p&gt;
&lt;p&gt;Users must be able to open the VSTO Document Template from the Sample Document Library on the SampleSharePointServer and create a new Word Document from the VSTO Document Template. The new Word Document should be able to be saved to the Sample Document Library. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Prerequisites&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;This solution utilizes the following technologies: &lt;/p&gt;
&lt;p&gt;Development environment: &lt;/p&gt;
&lt;p&gt;Microsoft Office SharePoint Server 2007 (MOSS 2007) &lt;/p&gt;
&lt;p&gt;Visual Studio .NET 2005 &lt;/p&gt;
&lt;p&gt;Visual Studio Tools for Office 2005 (VSTO 2005) &lt;/p&gt;
&lt;p&gt;Client Machine: &lt;/p&gt;
&lt;p&gt;Please see the following web page on the MSDN for client machine prerequisites and instructions for installing the prerequisites: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/2ac08ee2(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/2ac08ee2(VS.80).aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Solution&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To successfully implement the aforementioned scenario several tasks need to be done. &lt;/p&gt;
&lt;p&gt;These tasks are as follows: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convert the existing Word Document Template (Sample.dot) to the VSTO format (VSTOSample.dot). &lt;/li&gt;
&lt;li&gt;Create a share on a stand alone file server or the SampleSharePointServer server (This example uses a file share on the SampleSharePointServer.) &lt;/li&gt;
&lt;li&gt;Edit the VSTO Document Deployment Manifest to point to the file share where the VSTO Document&amp;rsquo;s Assembly is stored. &lt;/li&gt;
&lt;li&gt;Create a new Sample Document Library Feature in SharePoint for the document library that will utilize the VSTO Document Template. (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions.) &lt;/li&gt;
&lt;li&gt;Install the Sample Document Library Feature on the SampleSharePointServer. (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions.) &lt;/li&gt;
&lt;li&gt;Register the Sample Document Library Feature on the site definition you want the Sample Document Library to be created on when a new SharePoint site is created based on that site definition. (Please see the &lt;a href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx"&gt;Adding a Document Library Feature to a Site Definition in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions.) &lt;/li&gt;
&lt;li&gt;Deploy the VSTOSample.dot file to the SampleSharePointServer. &lt;/li&gt;
&lt;li&gt;Deploy the VSTOSample.dll to the file share on the SampleSharePointServer. &lt;/li&gt;
&lt;li&gt;Create Security Policies on the client machine that trust the location the VSTOSample.dot file will be opened from. &lt;/li&gt;
&lt;li&gt;Test and rejoice!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Step 1: Convert the existing Word Document Template (Sample.dot) to the VSTO format (VSTOSample.dot)&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To convert an existing Word Document Template (Sample.dot) to the VSTO format follow these steps: &lt;/p&gt;
&lt;p&gt;Open Visual Studio .NET 2005. &lt;/p&gt;
&lt;p&gt;Click File | New | Project. &lt;/p&gt;
&lt;p&gt;Under Visual C# | Office, select Word Template. &lt;/p&gt;
&lt;p&gt;Name the Project VSTOSample. &lt;/p&gt;
&lt;p&gt;Click OK. &lt;/p&gt;
&lt;p&gt;Select Copy an existing document. (Sample.dot) &lt;/p&gt;
&lt;p&gt;Click OK. &lt;/p&gt;
&lt;p&gt;At this point VS.NET 2005 converts the existing Sample.dot file to the VSTO format. &lt;/p&gt;
&lt;p&gt;Rename Sample.dot in the VS.NET IDE to VSTOSample.dot. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; This can also be done for Word Documents, Excel Workbooks and Excel Templates. &lt;/p&gt;
&lt;p&gt;Select Word Document during project creation to convert a .doc file to the VSTO format. &lt;/p&gt;
&lt;p&gt;Select Excel Workbook during project creation to convert a .xls file to the VSTO format. &lt;/p&gt;
&lt;p&gt;Select Excel Template during project creation to convert a .xlt file to the VSTO format. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; If you are not converting an existing Document follow the same steps as above except select Create a new document instead of Copy an existing document when the dialogue with these options appears during project creation. &lt;/p&gt;
&lt;p&gt;Build the project. &lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s put some code into the document that will let us know the document was able to access the Assembly and execute code from it after we have deployed the document. &lt;/p&gt;
&lt;p&gt;Open the ThisDocument.cs file in the VSTOSample project in the VS.NET 2005 IDE. &lt;/p&gt;
&lt;p&gt;Add the following code to the ThisDocument_Startup method. &lt;/p&gt;
&lt;p&gt;MessageBox.Show(&amp;quot;I&amp;#39;d rather be skiing!&amp;quot;); &lt;/p&gt;
&lt;p&gt;Run the project. When the project runs the document will appear, then a textbox will appear with the message &amp;ldquo;I&amp;rsquo;d rather be skiing!&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;Click OK on the message box and close the document. &lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s add some more code to the document to demonstrate how a VSTO document can be more efficient at populating documents with information compared to Macros. &lt;/p&gt;
&lt;p&gt;First we will add an ActionsPane to the VSTO Document so we have a place to put some simple controls. &lt;/p&gt;
&lt;p&gt;In the Visual Studio .NET 2005 IDE right click the VSTOSample project. &lt;/p&gt;
&lt;p&gt;Click Add | New Item &lt;/p&gt;
&lt;p&gt;Select Actions Pane Control &lt;/p&gt;
&lt;p&gt;Name the control ActionsPane.cs &lt;/p&gt;
&lt;p&gt;Click Add &lt;/p&gt;
&lt;p&gt;Return to the ThisDocument.cs file in the VSTOSample project in the VS.NET 2005 IDE. &lt;/p&gt;
&lt;p&gt;Add the following code at the class level: &lt;/p&gt;
&lt;p&gt;Private ActionPane actionPane = new ActionPane(); &lt;/p&gt;
&lt;p&gt;Add the following code to the ThisDocument_Startup method: &lt;/p&gt;
&lt;p&gt;this.ActionsPane.Controls.Add(actionPane); &lt;/p&gt;
&lt;p&gt;Run the project. When the project runs the document will appear, then a textbox will appear with the message &amp;ldquo;I&amp;rsquo;d rather be skiing!&amp;rdquo; After you click the OK button the Document Actions Pane will appear on the right side of the VSTO Document. &lt;/p&gt;
&lt;p&gt;Close the document. &lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s add some controls to the Actions Pane. &lt;/p&gt;
&lt;p&gt;Open the ActionPane in design mode in VS.NET 2005. &lt;/p&gt;
&lt;p&gt;Drag a ComboBox Control and drop it on the ActionsPane designer surface. &lt;/p&gt;
&lt;p&gt;Name the ComboBox resortsComboBox &lt;/p&gt;
&lt;p&gt;Right click the resortsComboBox control and select Properties &lt;/p&gt;
&lt;p&gt;In the Properties Pane scroll to the Items Property and click the &amp;hellip; button &lt;/p&gt;
&lt;p&gt;Add the following items to the collection of items: &lt;/p&gt;
&lt;p&gt;Arapahoe Basin &lt;/p&gt;
&lt;p&gt;Wolf Creek Ski Area &lt;/p&gt;
&lt;p&gt;Vail &lt;/p&gt;
&lt;p&gt;Telluride &lt;/p&gt;
&lt;p&gt;Steamboat &lt;/p&gt;
&lt;p&gt;Alta &lt;/p&gt;
&lt;p&gt;Now, let&amp;rsquo;s add a control to the document to display our favorite ski resort. &lt;/p&gt;
&lt;p&gt;Open the VSTOSample.dot file in the VSTOSample project in design mode. &lt;/p&gt;
&lt;p&gt;Add in a BookMark control to the ToolBox in the VS.NET 2005 IDE. &lt;/p&gt;
&lt;p&gt;Right click on the ToolBox in the VS.NET 2005 IDE. &lt;/p&gt;
&lt;p&gt;Click Choose Items&amp;hellip; &lt;/p&gt;
&lt;p&gt;Sort by Namespace &lt;/p&gt;
&lt;p&gt;Select all the items in the Microsoft.Office.Tools.Word namespace. &lt;/p&gt;
&lt;p&gt;Click OK &lt;/p&gt;
&lt;p&gt;Type the words &amp;ldquo;My favorite ski resort is: &amp;ldquo; into the document. &lt;/p&gt;
&lt;p&gt;Drag a BookMark Control into the document and drop it at the end of the line you just typed. &lt;/p&gt;
&lt;p&gt;Name the control favoriteSkiResortBookMark &lt;/p&gt;
&lt;p&gt;Finally, let&amp;rsquo;s add an event handler to the resortsComboBox control to populate the document with the ski resort selected in the resortsComboBox. &lt;/p&gt;
&lt;p&gt;Click the button to display the Event Handlers for the resortsComboBox control. &lt;/p&gt;
&lt;p&gt;Double click in the SelectedIndexChanged event to create the event handler. &lt;/p&gt;
&lt;p&gt;Open the ActionPane.cs file in code view. &lt;/p&gt;
&lt;p&gt;Add the following code to the resortsComboBox_SelectedIndexChanged event handler method: &lt;/p&gt;
&lt;p&gt;Globals.ThisDocument.favoriteSkiResortBookMark.Text = resortsComboBox.Text; &lt;/p&gt;
&lt;p&gt;Run the project. Just like last time, when the project runs the document will appear, then a textbox will appear with the message &amp;ldquo;I&amp;rsquo;d rather be skiing!&amp;rdquo; After you click the OK button the Document Actions Pane will appear on the right side of the VSTO Document. The resortsComboBox control will be populated with the ski resorts you enetered. Selecting an item in the resortsComboBox will populate the document with the name of the selected ski resort in the location where you placed the favoriteSkiResortBookMark control. &lt;/p&gt;
&lt;p&gt;Close the VSTOSample project. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; This is a very simple demonstration that illustrates the power of VSTO Documents. Although the data in this example (The Ski Resort Names) does not come from a database, you can easily utilize the power of ADO.NET to return information from a database to populate data bound controls in the Actions Pane. Web Service calls may be used to retrieve the data from back end data sources, so your documents remain loosely coupled to your data layer. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Create a share on a stand alone file server or the SampleSharePointServer server (This example uses a file share on the SampleSharePointServer.)&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to assume you know how to do this. For example&amp;rsquo;s sake I&amp;rsquo;ll call this share: VSTODocs &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Edit the VSTO Document Deployment Manifest to point to the file share where the VSTO Document&amp;rsquo;s Assembly is stored.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve taken care of wrapping the code that does this inside a handy little Windows Form Application that will do this for you. The &lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry4393.aspx" title="VSTO Document Deployment Manifest Editor application"&gt;VSTO Document Deployment Manifest Editor&lt;/a&gt; application allows you to easily edit the VSTO Document Deployment Manifest to point to the location where you will deploy the Assembly for the VSTO Document. &lt;/p&gt;
&lt;p&gt;Here is a screenshot of the application: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.sharepointblogs.com/photos/tbaginski/images/4392/original.aspx" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;To edit the VSTO Document&amp;rsquo;s Deployment Manifest simply click the Browse button and browse to the location of the VSTOSample.dot file then select it. &lt;/p&gt;
&lt;p&gt;Then type in the UNC path for the file share you created in Step 2. (Make sure you type in the name of the .dll at the end of the path!) &lt;/p&gt;
&lt;p&gt;Click the Edit Document Deployment Manifest button and you are done. &lt;/p&gt;
&lt;p&gt;There is hardly any code under the hood here that actually edits the Document&amp;rsquo;s Deployment Manifest. I found the code to do this on the MSDN. &lt;/p&gt;
&lt;p&gt;Here is the link to the page on the MSDN that has the code: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/kck1ffhz(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/kck1ffhz(VS.80).aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Create a new Sample Document Library Feature in SharePoint for the document library that will utilize the VSTO Document Template. (Please see the &lt;/strong&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;&lt;strong&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; article for instructions.)&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5: Install the Sample Document Library Feature on the SampleSharePointServer. (Please see the &lt;/strong&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;&lt;strong&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; article for instructions.)&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 6: Register the Sample Document Library Feature on the site definition you want the Sample Document Library to be created on when a new SharePoint site is created based on that site definition. (Please see the &lt;a href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx"&gt;Adding a Document Library Feature to a Site Definition in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions.)&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;These steps can be skipped if you do not want to make the document a template in a SharePoint Document Library. If you don&amp;rsquo;t want to make the document a template in a SharePoint Document Library and merely wish to upload the document to a SharePoint Document Library then proceed. &lt;/p&gt;
&lt;p&gt;If you want to make the document a template in a SharePoint Document Library by using a SharePoint Feature please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 7: Deploy the VSTOSample.dot file to the SampleSharePointServer.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If you chose to perform steps 4, 5 and 6 then this task will already be accomplished. &lt;/p&gt;
&lt;p&gt;If you chose not to perform steps 4, 5 and 6 then create a new SharePoint Site. &lt;/p&gt;
&lt;p&gt;For examples sake create a site at the following location: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://samplesharepointserve/SiteDirectory/VSTOSample"&gt;http://SampleSharePointServe/SiteDirectory/VSTOSample&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Create a Document Library in the new VSTOSample SharePoint Site you created. Name the Document Library &amp;lsquo;Sample Document Library&amp;rsquo;. Upload the VSTOSample.dot file to the new Document Library you just created. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 8: Deploy the VSTOSample.dll to the file share on the SampleSharePointServer.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Copy the VSTOSample.dll file to the VSTODocs file share on the SampleSharePointServer. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 9: Create Security Policies on the client machine that trust the location the VSTOSample.dot file will be opened from.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The following commands are executed on the command line on the client machine. &lt;/p&gt;
&lt;p&gt;These commands set up the necessary Security Policies on the client machine that specify the client trusts the location from which the VSTO Document was opened and the location where the Assembly is stored. &lt;/p&gt;
&lt;p&gt;%windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag LocalIntranet_Zone -url &amp;quot;\\SampleSharePointServer\vstodocs\*&amp;quot; FullTrust -n &amp;quot;VSTO Documents&amp;quot; &lt;/p&gt;
&lt;p&gt;%windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag LocalIntranet_Zone -url &amp;quot;http://SampleSharePointServer/sitedirectory/*&amp;quot; FullTrust -n &amp;quot;VSTO SharePoint Documents&amp;quot; &lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll notice in both commands I use a wildcard in the paths. This allows me to trust all the documents and assemblies that are opened from these locations. In a development environment this is a nice approach to take because security is not a big consideration. However, in a production environment I recommend changing these paths to point to the particular VSTO Document and related Assembly. &lt;/p&gt;
&lt;p&gt;These commands came from the following MSDN article: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms404837(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms404837(VS.80).aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; To reset Security Policies to their default configuration run the following command at the command line on the client: &lt;/p&gt;
&lt;p&gt;%windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -rs &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 10: Test and rejoice!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Open Internet Explorer on the client machine. &lt;/p&gt;
&lt;p&gt;Navigate to the VSTOSample SharePoint Site you created. &lt;/p&gt;
&lt;p&gt;Look at the bottom toolbar of Internet Explorer. &lt;/p&gt;
&lt;p&gt;Check to see the site is in the Local Intranet Zone. (We set the security policies on the Local Intranet Zone, so the paths we set as trusted apply to web sites opened in the Local Intranet Zone.) &lt;/p&gt;
&lt;p&gt;Open the Sample Document Library. &lt;/p&gt;
&lt;p&gt;Open the VSTOSample.dot file. &lt;/p&gt;
&lt;p&gt;The VSTO Word Document Template should open and the &amp;ldquo;I&amp;rsquo;d rather be skiing!&amp;rdquo; Message Box should appear. The resortsComboBox should be populated with data, and selecting a resort will populate the document with the selected ski resort. &lt;/p&gt;
&lt;p&gt;If this functionality works you have successfully deployed the VSTO Document to the SharePoint Document Library! &lt;/p&gt;
&lt;p&gt;Save the VSTOSample VSTO Word Document Template to the Sample Documents Library by clicking File | Save. &lt;/p&gt;
&lt;p&gt;Name the new file VSTOSample &amp;ndash; Success. &lt;/p&gt;
&lt;p&gt;Return to Internet Explorer and refresh the Sample Document Library page. &lt;/p&gt;
&lt;p&gt;You will see you now have a Word Document named VSTOSample &amp;ndash; Success.doc in the Sample Document Library. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Nice job! You just made a VSTO document and integrated it with MOSS 2007!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/creating-and-deploying-vsto-documents-inside-sharepoint-document-libraries.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=4390" width="1" height="1"&gt;</description></item><item><title>Creating a custom Site Definition in WSS V3 / MOSS</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx</link><pubDate>Thu, 16 Aug 2007 21:20:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:4388</guid><dc:creator>tbaginski</dc:creator><slash:comments>30</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=4388</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx#comments</comments><description>
&lt;p&gt;



&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Page moved to &lt;a href="http://www.toddbaginski.com/blog/archive/0001/01/01/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;http://www.toddbaginski.com/blog/archive/0001/01/01/creating-a-custom-site-definition-in-wss-v3-moss.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=4388" width="1" height="1"&gt;</description></item><item><title>Adding a Document Library Feature to a Site Definition in WSS V3 / MOSS 2007</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx</link><pubDate>Thu, 16 Aug 2007 21:17:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:4387</guid><dc:creator>tbaginski</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=4387</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;One of the nicest things about Features in the new version of SharePoint is their ability to be added to a Site Definition by default. When you add a Feature to a Site Definition, that Feature is automatically available on a SharePoint site when you create a SharePoint site from the given Site Definition. &lt;/p&gt;
&lt;p&gt;This functionality allows developers to build Features and plug them into any Site Definition they choose. In the last version of SharePoint, functionality that can now be delivered in the form of a Feature had to be registered and configured for each Site Definition that utilized the functionality. This is no longer the case because Features encapsulate of all the functionality they deliver. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Plug and play functionality&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The relationship between Site Definitions and Features reminds me of the Plug and Play architecture Windows uses to add hardware to your computer. &lt;/p&gt;
&lt;p&gt;Windows is a platform which requires a driver to recognize a particular piece of hardware. The driver is responsible for knowing everything about the hardware and it defines how Windows interacts and utilizes the hardware. &lt;/p&gt;
&lt;p&gt;SharePoint and Site Definitions are like Windows in this analogy and Features are the hardware. The Feature.xml file acts like a driver that tells SharePoint and Site Definitions everything about the Feature and defines how SharePoint and the Site Definition interact with and utilize the Feature. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Adding Features to Site Definitions&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article the SharePoint Feature architecture and the process to create a Feature is explained. Once you have created your own custom Feature you can easily add it to a custom Site Definition. This is perhaps the easiest thing I have found out how to do in the SharePoint V3 so far. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Creating a custom Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt; to learn how to create a custom Site Definition. &lt;/p&gt;
&lt;p&gt;This short list of tasks will show you how to add a Feature to a Site Definition. &lt;/p&gt;
&lt;p&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to add the feature to. &lt;/p&gt;
&lt;p&gt;Step 2: Reset IIS on the SharePoint server. &lt;/p&gt;
&lt;p&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to. &lt;/p&gt;
&lt;p&gt;Short list, eh? See, I told you this was simple! &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to add the feature to.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;This example assumes you have created a custom Site Definition named SAMPLE. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Creating a custom Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt; for instructions. &lt;/p&gt;
&lt;p&gt;Open the ONET.XML file for the Site Definition you wish to edit. &lt;/p&gt;
&lt;p&gt;The ONET.XML file can be found at the following location on the SharePoint server: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\SAMPLE\XML\ONET.XML &lt;/p&gt;
&lt;p&gt;Find the section in the ONET.XML file that corresponds to the configuration for the Sample Team Site. The XML Looks like this: &lt;/p&gt;
&lt;p&gt;&amp;lt;Configuration ID=&amp;quot;0&amp;quot; Name=&amp;quot;Default&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Lists&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-E717-4E80-AA17-D0C71B360101&amp;quot; Type=&amp;quot;101&amp;quot; Title=&amp;quot;$Resources:core,shareddocuments_Title;&amp;quot; Url=&amp;quot;$Resources:core,shareddocuments_Folder;&amp;quot; QuickLaunchUrl=&amp;quot;$Resources:core,shareddocuments_Folder;/Forms/AllItems.aspx&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-6A49-43FA-B535-D15C05500108&amp;quot; Type=&amp;quot;108&amp;quot; Title=&amp;quot;$Resources:core,discussions_Title;&amp;quot; Url=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,discussions_Folder;&amp;quot; QuickLaunchUrl=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,discussions_Folder;/AllItems.aspx&amp;quot; EmailAlias=&amp;quot;$Resources:core,discussions_EmailAlias;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-D1CE-42de-9C63-A44004CE0104&amp;quot; Type=&amp;quot;104&amp;quot; Title=&amp;quot;$Resources:core,announceList;&amp;quot; Url=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,announce_Folder;&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Rows&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Row&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Field Name=&amp;quot;Title&amp;quot;&amp;gt;$Resources:onetid11;&amp;lt;/Field&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Field Name=&amp;quot;Body&amp;quot;&amp;gt;$Resources:onetid12;&amp;lt;/Field&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Field Name=&amp;quot;Expires&amp;quot;&amp;gt;&amp;amp;lt;ows:TodayISO/&amp;amp;gt;&amp;lt;/Field&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Row&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Rows&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/List&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-2062-426C-90BF-714C59600103&amp;quot; Type=&amp;quot;103&amp;quot; Title=&amp;quot;$Resources:core,linksList;&amp;quot; Url=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,links_Folder;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-EC85-4903-972D-EBE475780106&amp;quot; Type=&amp;quot;106&amp;quot; Title=&amp;quot;$Resources:core,calendarList;&amp;quot; Url=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,calendar_Folder;&amp;quot; QuickLaunchUrl=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,calendar_Folder;/Calendar.aspx&amp;quot; EmailAlias=&amp;quot;$Resources:core,calendar_EmailAlias;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;00BFEA71-A83E-497E-9BA0-7A5C597D0107&amp;quot; Type=&amp;quot;107&amp;quot; Title=&amp;quot;$Resources:core,taskList;&amp;quot; Url=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,tasks_Folder;&amp;quot; QuickLaunchUrl=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,tasks_Folder;/AllItems.aspx&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Lists&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Modules&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Module Name=&amp;quot;Default&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Modules&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;SiteFeatures&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- BasicWebParts Feature --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature ID=&amp;quot;00BFEA71-1C5E-4A24-B310-BA51C3EB7A57&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/SiteFeatures&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;WebFeatures&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TeamCollab Feature --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature ID=&amp;quot;00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/WebFeatures&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Configuration&amp;gt; &lt;/p&gt;
&lt;p&gt;In the &amp;lt;SiteFeatures&amp;gt; element add the following XML to add your own custom Document Library Feature (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article for instructions on how to create a custom Document Library Feature.): &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- Custom Common Document Library Feature --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature ID=&amp;quot;&amp;lt;GUID OF YOUR FEATURE GOES HERE&amp;gt;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;The &amp;lt;GUID OF YOUR FEATURE GOES HERE&amp;gt; portion of the XML above should be replaced with the GUID you created for your feature. This GUID is found in the ID attribute of the &amp;lt;Feature&amp;gt; element inside the Feature.xml file that corresponds to the custom Document Library Feature you are adding. &lt;/p&gt;
&lt;p&gt;Save the ONET.XML file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Reset IIS on the SharePoint server.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;On the SharePoint server type iisreset on the command line and wait for IIS to reset. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Open Internet Explorer. &lt;/p&gt;
&lt;p&gt;Browse to the &lt;a href="http://sharepointservername/SiteDirectory/CustDocLib"&gt;http://SharePointServerName/SiteDirectory/&lt;/a&gt; site. &lt;/p&gt;
&lt;p&gt;Click Create Site &lt;/p&gt;
&lt;p&gt;In the Title and URL Name textboxes enter CustomDocLibFeatureSite &lt;/p&gt;
&lt;p&gt;In the Template Selection area of the web page click the Custom Site Definitions tab and select the Sample Site template. &lt;/p&gt;
&lt;p&gt;Click the Create button. &lt;/p&gt;
&lt;p&gt;When the newly created web site appears, click Site Actions and select Site Settings. &lt;/p&gt;
&lt;p&gt;Under the Site Administration section, click the Site Features link. &lt;/p&gt;
&lt;p&gt;You will see you Custom Document Library Feature in the list! &lt;/p&gt;
&lt;p&gt;To activate the Feature, click on the Activate Button next to the Feature in the list. &lt;/p&gt;
&lt;p&gt;To create your own Custom Document Library based on this Feature follow these steps: &lt;/p&gt;
&lt;p&gt;Click Site Settings &lt;/p&gt;
&lt;p&gt;Click Create &lt;/p&gt;
&lt;p&gt;Click Custom Document Library &lt;/p&gt;
&lt;p&gt;Fill in the required information and create the Custom Document Library. &lt;/p&gt;
&lt;p&gt;If you created a custom Document Template in the Document Template dropdown select Custom Document Library for the template. &lt;/p&gt;
&lt;p&gt;Click Create. &lt;/p&gt;
&lt;p&gt;If you created a custom Document Template clicking the new button on the Custom Document Library toolbar will open the custom Document Template you created. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The beat goes on&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take things one step further now. Instead of just adding the Custom Document Library Feature to the Site Definition and making it available, let&amp;rsquo;s create a Custom Document Library list from the Feature when the site is created. This way users will not have to create the Custom Document Library list themselves after the site is created. &lt;/p&gt;
&lt;p&gt;The tasks to do this are just as simple as the tasks we just performed. Here is a list of the tasks necessary to make the Custom Document Library Feature list created by default when the site is created from our custom Site Definition. &lt;/p&gt;
&lt;p&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to create the custom Document Library list on. &lt;/p&gt;
&lt;p&gt;Step 2: Reset IIS on the SharePoint server. &lt;/p&gt;
&lt;p&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to create the custom Document Library list on. &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Make sure you are editing the same custom Site Definition that you added the Feature to. If you try to create a list for a Site Definition that does not implement the Feature the list relies upon, an error will occur during site creation indicating the Feature the list relies upon is not available. &lt;/p&gt;
&lt;p&gt;This example assumes you have created a custom Site Definition named SAMPLE. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Creating a custom Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt;&amp;nbsp;for instructions. &lt;/p&gt;
&lt;p&gt;Open the ONET.XML file for the Site Definition you wish to edit. &lt;/p&gt;
&lt;p&gt;The ONET.XML file can be found at the following location on the SharePoint server: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\SAMPLE\XML\ONET.XML &lt;/p&gt;
&lt;p&gt;In the &amp;lt;Lists&amp;gt; element under the Configuration section we just edited, add the following XML to add your own custom Document Library Feature. (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007 article&lt;/a&gt; for instructions on how to create a custom Document Library Feature): &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;&amp;lt;GUID OF YOUR FEATURE GOES HERE&amp;gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;Title=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;Url=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;QuickLaunchUrl=&amp;quot;Custom Document Library/Forms/AllItems.aspx&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; You can use your own custom Resources file to provide the values for the Title, UTL, and QuickLaunchUrl attributes. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007 article&lt;/a&gt;&amp;nbsp;for further details. If you have already created a custom Resource file as described in the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007 article&lt;/a&gt;&amp;nbsp;your XML will look like this: &lt;/p&gt;
&lt;p&gt;&amp;lt;List FeatureId=&amp;quot;&amp;lt;GUID OF YOUR FEATURE GOES HERE&amp;gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;Title=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibrary_Title;&amp;quot; &lt;/p&gt;
&lt;p&gt;Url=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibrary_Folder;&amp;quot; &lt;/p&gt;
&lt;p&gt;QuickLaunchUrl=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibrary_Folder;/Forms/AllItems.aspx&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;Save the ONET.XML file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Reset IIS on the SharePoint server.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;On the SharePoint server type iisreset on the command line and wait for IIS to reset. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Open Internet Explorer. &lt;/p&gt;
&lt;p&gt;Browse to the &lt;a href="http://sharepointservername/SiteDirectory/CustDocLib"&gt;http://SharePointServerName/SiteDirectory/&lt;/a&gt; site. &lt;/p&gt;
&lt;p&gt;Click Create Site &lt;/p&gt;
&lt;p&gt;In the Title and URL Name textboxes enter CustomDocLibFeatureListCreatedSite &lt;/p&gt;
&lt;p&gt;In the Template Selection area of the web page click the Custom Site Definitions tab and select the Sample Site template. &lt;/p&gt;
&lt;p&gt;Click the Create button. &lt;/p&gt;
&lt;p&gt;When the newly create web site appears you will see the Custom Document Library list link on the QuickLaunch navigation menu. &lt;/p&gt;
&lt;p&gt;Click the Custom Document Library link to go to the Custom Document Library list. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Midas touch!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s put the finishing touches on our work now. In addition to creating the list by default, let&amp;rsquo;s place a view of the Custom Document Library list on the home page of our custom Site Definition when the site is created. &lt;/p&gt;
&lt;p&gt;Once again, this is a very simple task to perform. Here are the steps: &lt;/p&gt;
&lt;p&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to create a default view on the home page of the custom Document Library list on. &lt;/p&gt;
&lt;p&gt;Step 2: Reset IIS on the SharePoint server. &lt;/p&gt;
&lt;p&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Edit the ONET.XML file for the Site Definition you wish to create a default view on the home page of the custom Document Library list on.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Make sure you are editing the same custom Site Definition that you added the Feature to and created the list on be default. If you try to create a list for a Site Definition that does not implement the Feature the list relies upon an error will occur during site creation indicating the Feature the list relies upon is not available. If you try to create a view of the list and that list has not been automatically created you will get an error during site creation that tells you the list does not exist. (Well, actually the error is &amp;lsquo;Cannot complete this action&amp;rsquo;) &lt;/p&gt;
&lt;p&gt;This example assumes you have created a custom Site Definition named SAMPLE. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Creating a custom Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt; for instructions. &lt;/p&gt;
&lt;p&gt;Open the ONET.XML file for the Site Definition you wish to edit. &lt;/p&gt;
&lt;p&gt;The ONET.XML file can be found at the following location on the SharePoint server: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\SAMPLE\XML\ONET.XML &lt;/p&gt;
&lt;p&gt;Find the &amp;lt;Module&amp;gt; in the ONET.XML that is invoked by the Configuration we just edited. The XML looks like this: &lt;/p&gt;
&lt;p&gt;&amp;lt;Module Name=&amp;quot;Default&amp;quot; Url=&amp;quot;&amp;quot; Path=&amp;quot;&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;File Url=&amp;quot;default.aspx&amp;quot; NavBarHome=&amp;quot;True&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;View List=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,announce_Folder;&amp;quot; BaseViewID=&amp;quot;0&amp;quot; WebPartZoneID=&amp;quot;Left&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;View List=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,calendar_Folder;&amp;quot; BaseViewID=&amp;quot;0&amp;quot; RecurrenceRowset=&amp;quot;TRUE&amp;quot; WebPartZoneID=&amp;quot;Left&amp;quot; WebPartOrder=&amp;quot;2&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;AllUsersWebPart WebPartZoneID=&amp;quot;Right&amp;quot; WebPartOrder=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;![CDATA[ &lt;/p&gt;
&lt;p&gt;&amp;lt;WebPart xmlns=&amp;quot;http://schemas.microsoft.com/WebPart/v2&amp;quot; xmlns:iwp=&amp;quot;http://schemas.microsoft.com/WebPart/v2/Image&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Assembly&amp;gt;Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;lt;/Assembly&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;TypeName&amp;gt;Microsoft.SharePoint.WebPartPages.ImageWebPart&amp;lt;/TypeName&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;FrameType&amp;gt;None&amp;lt;/FrameType&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Title&amp;gt;$Resources:wp_SiteImage;&amp;lt;/Title&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;iwp:ImageLink&amp;gt;/_layouts/images/homepage.gif&amp;lt;/iwp:ImageLink&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/WebPart&amp;gt; &lt;/p&gt;
&lt;p&gt;]]&amp;gt;&amp;lt;/AllUsersWebPart&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;View List=&amp;quot;$Resources:core,lists_Folder;/$Resources:core,links_Folder;&amp;quot; BaseViewID=&amp;quot;0&amp;quot; WebPartZoneID=&amp;quot;Right&amp;quot; WebPartOrder=&amp;quot;2&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;NavBarPage Name=&amp;quot;$Resources:core,nav_Home;&amp;quot; ID=&amp;quot;1002&amp;quot; Position=&amp;quot;Start&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;NavBarPage Name=&amp;quot;$Resources:core,nav_Home;&amp;quot; ID=&amp;quot;0&amp;quot; Position=&amp;quot;Start&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/File&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Module&amp;gt; &lt;/p&gt;
&lt;p&gt;The &amp;lt;Module&amp;gt; element specifies the resources that Configurations which invoke this mode use. The &amp;lt;File&amp;gt; element specifies files that the Configuration will implement. Inside the &amp;lt;File&amp;gt; element for the default.aspx page add the following XML to create a view of the Custom Document Library list. &lt;/p&gt;
&lt;p&gt;&amp;lt;View List=&amp;quot;$Resources:core,lists_Folder;/Custom Document Library&amp;quot; BaseViewID=&amp;quot;0&amp;quot; WebPartZoneID=&amp;quot;Left&amp;quot; WebPartOrder=&amp;quot;3&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; You can use your own custom Resources file to provide the value for the List attribute. Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article for further details. If you have already created a custom Resource file as described in the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx"&gt;Creating a Custom Document Library Feature in WSS V3 / MOSS 2007&lt;/a&gt; article your XML will look like this: &lt;/p&gt;
&lt;p&gt;&amp;lt;View List=&amp;quot;$Resources:core,lists_Folder;/$Resources:customDocumentLibrary,customDocumentLibrary_Folder;&amp;quot; BaseViewID=&amp;quot;0&amp;quot; WebPartZoneID=&amp;quot;Left&amp;quot; WebPartOrder=&amp;quot;3&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;Save the ONET.XML file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: Reset IIS on the SharePoint server.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;On the SharePoint server type iisreset on the command line and wait for IIS to reset. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Create a new SharePoint site based on the Site Definition you added the Feature to.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Open Internet Explorer. &lt;/p&gt;
&lt;p&gt;Browse to the &lt;a href="http://sharepointservername/SiteDirectory/CustDocLib"&gt;http://SharePointServerName/SiteDirectory/&lt;/a&gt; site. &lt;/p&gt;
&lt;p&gt;Click Create Site &lt;/p&gt;
&lt;p&gt;In the Title and URL Name textboxes enter CustomDocLibViewOnHomePage &lt;/p&gt;
&lt;p&gt;In the Template Selection area of the web page click the Custom Site Definitions tab and select the Sample Site template. &lt;/p&gt;
&lt;p&gt;Click the Create button. &lt;/p&gt;
&lt;p&gt;You will see the Custom Document Library on the home page!&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=4387" width="1" height="1"&gt;</description></item><item><title>Creating a Custom Document Library Feature in WSS V3 / MOSS 2007</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx</link><pubDate>Thu, 16 Aug 2007 21:12:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:4386</guid><dc:creator>tbaginski</dc:creator><slash:comments>31</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=4386</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3-moss-2007.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Features are a powerful new set of functionality that MOSS 2007 comes with out of the box. Features allow you to deploy functionality inside your MOSS 2007 portal in a granular and loosely coupled fashion. The Document Library that many of the out of the box site definitions come with in MOSS 2007 is implemented as a feature. Building on this out of the box Document Library Feature you can create your own custom Document Library Features as well. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Feature Basics&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;To begin, let&amp;rsquo;s take a look at the directories and files that make up a Feature. &lt;/p&gt;
&lt;p&gt;Features are stored on the SharePoint Server at the following location: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES &lt;/p&gt;
&lt;p&gt;Each Feature on the SharePoint Server has its own sub directory that is created in the directory listed above. &lt;/p&gt;
&lt;p&gt;Inside each Feature sub directory you will find a file named Feature.xml. &lt;/p&gt;
&lt;p&gt;The Feature.xml file holds metadata about the Feature. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Document Library Features&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Here is the Feature.xml file that is used to create the DocumentLibrary Feature that comes with MOSS 2007: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.4017&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature Id=&amp;quot;&lt;b&gt;00BFEA71-E717-4E80-AA17-D0C71B360101&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Title=&amp;quot;&lt;b&gt;$Resources:core,documentlibraryFeatureTitle;&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;&lt;b&gt;$Resources:core,documentlibraryFeatureDesc;&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Version=&amp;quot;&lt;b&gt;1.0.0.0&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Scope=&amp;quot;&lt;b&gt;Web&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Hidden=&amp;quot;&lt;b&gt;TRUE&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;DefaultResourceFile=&amp;quot;&lt;b&gt;core&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;xmlns=&amp;quot;&lt;b&gt;http://schemas.microsoft.com/sharepoint/&lt;/b&gt;&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifest Location=&amp;quot;&lt;b&gt;ListTemplates\DocumentLibrary.xml&lt;/b&gt;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Feature&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The following metadata about the feature is contained in the Feature element in this XML file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;ID:&lt;/b&gt; The GUID that uniquely identifies the Feature &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Title:&lt;/b&gt; The name of the feature. You will see the name of the Feature displayed on the Site Features web page inside the Site Settings section for a given SharePoint Site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Description:&lt;/b&gt; The description of the feature. You will see the description of the Feature displayed on the Site Features web page inside the Site Settings section for a given SharePoint Site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Version:&lt;/b&gt; The version of the Feature. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Scope:&lt;/b&gt; Web or Site are acceptable values here. The scope specifies if the Feature can span an entire site collection, or if the Feature will just be used for an individual sub web. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Hidden:&lt;/b&gt; TRUE or FALSE are acceptable values here. This setting specifies if the Feature is visible in the list of Features on the Site Features web page mentioned above. You will notice in the XML below that the DocumentLibrary Feature has its Hidden attribute set to TRUE, this is why you do not see the Document Library in the list of Features on the Site Features web page. Therefore the ability to create a Document Library is not able to be turned off by an end user who has access to the Site Features web page. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;DefaultResourceFile:&lt;/b&gt; This is the name of the Resource file the feature relies on to provide it with additional configuration information. (More on Resource files later in this document). &lt;/p&gt;
&lt;p&gt;You will notice the &amp;lt;ElementManifests&amp;gt; element in the Feature.xml file. This element contains the location of another XML file that contains the different &amp;lt;Elements&amp;gt; this Feature implements. &lt;/p&gt;
&lt;p&gt;The &amp;lt;ElementManifest&amp;gt; element specifies that the Feature utilizes a file in the ListTemplates sub directory called DocumentLibrary.xml. The path to sub directories and files is a relative path. &lt;/p&gt;
&lt;p&gt;Here is the DocumentLibrary.xml file that holds the &amp;lt;Elements&amp;gt; implemented by the DocumentLibrary Feature: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.4017&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Elements xmlns=&amp;quot;&lt;b&gt;http://schemas.microsoft.com/sharepoint/&lt;/b&gt;&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ListTemplate Name=&amp;quot;&lt;b&gt;doclib&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;&lt;b&gt;101&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;BaseType=&amp;quot;&lt;b&gt;1&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;OnQuickLaunch=&amp;quot;&lt;b&gt;TRUE&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;SecurityBits=&amp;quot;&lt;b&gt;11&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Sequence=&amp;quot;&lt;b&gt;110&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;DisplayName=&amp;quot;&lt;b&gt;$Resources:core,doclibList;&lt;/b&gt;&amp;quot; Description=&amp;quot;&lt;b&gt;$Resources:core,doclibList_Desc;&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Image=&amp;quot;&lt;b&gt;/_layouts/images/itdl.gif&lt;/b&gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;DocumentTemplate=&amp;quot;&lt;b&gt;101&lt;/b&gt;&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Elements&amp;gt; &lt;/p&gt;
&lt;p&gt;Notice the &amp;lt;ListTemplate&amp;gt; element? This should look familiar to those who have edited the ONET.XML file in the last version of SharePoint. &lt;/p&gt;
&lt;p&gt;The &amp;lt;ListTemplate&amp;gt; element specifies the information needed to make a particular list available on a SharePoint site. The only change to this element you see in this particular example is the addition of the Sequence attribute. As far as I can tell this attribute controls the order of the list on the Create page within a SharePoint site. &lt;/p&gt;
&lt;p&gt;Closer inspection reveals some incredibly powerful technology that has been baked into MOSS 2007 &amp;ndash; Resource files. This leads us to the topic of Resource files. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resource Files&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The DisplayName and Description attributes have an interesting item in their values. Let&amp;rsquo;s examine the DisplayName attribute. &lt;/p&gt;
&lt;p&gt;The value for this attribute is $Resources:core,docLibList. This value specifies that the doclibList value is read from the core Resource file. &lt;/p&gt;
&lt;p&gt;Resource files are stored in the following directory on the SharePoint server: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\Resources &lt;/p&gt;
&lt;p&gt;Resource files contain key value pairs of information and are used to provide localization capabilities to SharePoint. I believe we will see many developers using Resource files for more than localization in the future because of the power and flexibility they provide. &lt;/p&gt;
&lt;p&gt;The $Resources:core part of the value corresponds to the core.en-US.resx resource file. &lt;/p&gt;
&lt;p&gt;The docLibList part of the value corresponds to the docLibList &amp;lt;Data&amp;gt; element within the core Resource file. &lt;/p&gt;
&lt;p&gt;The XML inside the core resource file that is used to populate the DisplayName and Description attributes of the &amp;lt;ListTemplate&amp;gt; element looks like this: &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;doclibList&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Document Library&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;doclibList_Desc&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Create a document library when you have a collection of documents or other files that you want to share. Document libraries support features such as folders, versioning, and check out.&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;At this time I have not been able to find any documentation regarding these files, so I don&amp;rsquo;t recommend editing the core resource file, instead, make your own. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Another Benefit Of Features&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In the last version of SharePoint the ONET.XML file was very big and contained a large amount of information. With the advent of Features the ONET.XML file shrinks because Features are used to componetize the contents of the ONET.XML file. As we have seen here, the &amp;lt;ListeTemplate&amp;gt; element, previously found in the &amp;lt;ListTemplates&amp;gt; element inside the ONET.XML file has been moved into the Document Library Feature. Other out of the box MOSS 2007 lists utilize this same approach. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Creating You Own Document Library Feature&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Creating you own custom Document Library Feature is a simple task once you figure out all the pieces of the puzzle. Here is a list of tasks that you will need to do in order to create your own custom Document Library Feature. &lt;/p&gt;
&lt;p&gt;Step 1: Create a directory for the Feature. &lt;/p&gt;
&lt;p&gt;Step 2: (Optional) Create a custom Resource file. &lt;/p&gt;
&lt;p&gt;Step 3: Create the Feature.xml file for the Feature. &lt;/p&gt;
&lt;p&gt;Step 4: (Optional) Create the &amp;lt;DocumentTemplate&amp;gt; element inside the ONET.XML file if you are using a custom Document Template for your custom Document Library. &lt;/p&gt;
&lt;p&gt;Step 5: Create the ListTemplates sub directory under your new Feature directory. &lt;/p&gt;
&lt;p&gt;Step 6: Create the CustomDocumentLibrary.xml file for the Feature. &lt;/p&gt;
&lt;p&gt;Step 7: Copy the contents of the DocLib sub directory into your new Feature directory. &lt;/p&gt;
&lt;p&gt;Step 8: (Optional) If you plan to use a custom Document Template and you performed Step 4 above - Create a custom Document Template. &lt;/p&gt;
&lt;p&gt;Step 9: (Optional) Copy the custom Document Template you created that will server as the default Document Template for your new custom Document Library to the SharePoint server. &lt;/p&gt;
&lt;p&gt;Step 10: (Optional) Add the Feature to the site definition you want the feature to be installed on by default when the site is created. (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx"&gt;Adding a Document Library Feature to a Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt;.) &lt;/p&gt;
&lt;p&gt;Step 11: Register the Feature with a SharePoint site via the STSADM.EXE command line utility. &lt;/p&gt;
&lt;p&gt;Step 12: Reset IIS. &lt;/p&gt;
&lt;p&gt;Step 13a: (Assuming you did not do Step 10) Browse to the SharePoint site you registered the feature with. Browse to the Create web page and the custom Document Library will be available in the list of items to create. &lt;/p&gt;
&lt;p&gt;Step 13b: (Assuming you did perform Step 10) Create a new SharePoint site with the site definition you edited in Step 10. Browse to the new site to see the custom Document Library already created for you. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note: &lt;/b&gt;In both cases the custom Document Library Feature will be available on the site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1: Create a directory for the Feature.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Create a new directory for your Feature in the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES directory. &lt;/p&gt;
&lt;p&gt;This example will use the directory named CustomDocumentLibrary. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 2: (Optional) Create a custom Resource file.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Take advantage of the ability to store all your display settings and other items whose values may change frequently in your own Resource file by creating one. &lt;/p&gt;
&lt;p&gt;Create a new file named customDocumentLibrary.en-US.resx in the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\Resources directory. &lt;/p&gt;
&lt;p&gt;Inside the file put the following XML: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.4017.1004&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;root&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;customDocumentLibrary_Title&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Custom Document Library&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;customDocumentLibrary_Folder&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Custom Document Library&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;customDocumentLibraryDisplayName&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Custom Document Library&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Data Name=&amp;quot;customDocumentLibraryDescription&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Value&amp;gt;Create a custom document library when you have a collection of documents or other files that you want to share. Custom document libraries support features such as folders, versioning, and check out.&amp;lt;/Value&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Data&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/root&amp;gt; &lt;/p&gt;
&lt;p&gt;Save the file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 3: Create the Feature.xml file for the Feature.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Create a GUID for your feature. You will need to insert this GUID into some of the XML in this document where you see &amp;lt;YOUR GUID HERE&amp;gt;. &lt;/p&gt;
&lt;p&gt;You can create a GUID inside VS.NET 2005 or run the following SQL SELECT statement to return a new GUID. SELECT NewID() &lt;/p&gt;
&lt;p&gt;Create a file named Feature.xml and place it in the CustomDocumentLibrary directory you just created. &lt;/p&gt;
&lt;p&gt;If you performed Step 2 put the following XML in the file: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.4017&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature Id=&amp;quot;&amp;lt;YOUR GUID HERE&amp;gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Title=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibrary_Title;&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibraryDescription;&amp;quot; &lt;/p&gt;
&lt;p&gt;Version=&amp;quot;1.0.0.0&amp;quot; &lt;/p&gt;
&lt;p&gt;Scope=&amp;quot;Web&amp;quot; &lt;/p&gt;
&lt;p&gt;Hidden=&amp;quot;FALSE&amp;quot; &lt;/p&gt;
&lt;p&gt;DefaultResourceFile=&amp;quot;customDocumentLibrary&amp;quot; &lt;/p&gt;
&lt;p&gt;xmlns=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifest Location=&amp;quot;ListTemplates\CustomDocumentLibrary.xml&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Feature&amp;gt; &lt;/p&gt;
&lt;p&gt;If you did not perform Step 2 put the following XML in the file: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.4017&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Feature Id=&amp;quot;&amp;lt;YOUR GUID HERE&amp;gt;&amp;quot; &lt;/p&gt;
&lt;p&gt;Title=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;Create a custom document library when you have a collection of documents or other files that you want to share. Custom document libraries support features such as folders, versioning, and check out.&amp;quot; &lt;/p&gt;
&lt;p&gt;Version=&amp;quot;1.0.0.0&amp;quot; &lt;/p&gt;
&lt;p&gt;Scope=&amp;quot;Web&amp;quot; &lt;/p&gt;
&lt;p&gt;Hidden=&amp;quot;FALSE&amp;quot; &lt;/p&gt;
&lt;p&gt;DefaultResourceFile=&amp;quot;core&amp;quot; &lt;/p&gt;
&lt;p&gt;xmlns=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ElementManifest Location=&amp;quot;ListTemplates\CustomDocumentLibrary.xml&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/ElementManifests&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Feature&amp;gt; &lt;/p&gt;
&lt;p&gt;Remember to replace &amp;lt;YOUR GUID HERE&amp;gt; with the GUID you created! &lt;/p&gt;
&lt;p&gt;Save the file. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 4: (Optional) Create the &amp;lt;DocumentTemplate&amp;gt; element inside the ONET.XML file if you are using a custom Document Template for your custom Document Library.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Open the ONET.XML file for a custom site definition you have created (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/creating-a-custom-site-definition-in-wss-v3-moss.aspx"&gt;Creating a custom Site Definition in MOSS 2007 article&lt;/a&gt; for more details on how to create a custom site definition in MOSS 2007.) &lt;/p&gt;
&lt;p&gt;Inside the ONET.XML file create a new &amp;lt;DocumentTemplate&amp;gt; element inside the &amp;lt;DocumentTemplates&amp;gt; element. &lt;/p&gt;
&lt;p&gt;If you performed Step 2 use the following XML: &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplate &lt;/p&gt;
&lt;p&gt;Path=&amp;ldquo;SAMPLE&amp;rdquo; &lt;/p&gt;
&lt;p&gt;DisplayName=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibraryDisplayName;&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;Default=&amp;quot;TRUE&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibraryDescription;&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplateFiles&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplateFile Name=&amp;quot;doctemp\word\custom.dot&amp;quot; &lt;/p&gt;
&lt;p&gt;TargetName=&amp;quot;Forms/template.doc&amp;quot; &lt;/p&gt;
&lt;p&gt;Default=&amp;quot;TRUE&amp;quot;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/DocumentTemplateFiles&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/DocumentTemplate&amp;gt; &lt;/p&gt;
&lt;p&gt;If you did not perform Step 2 use the following XML: &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplate &lt;/p&gt;
&lt;p&gt;Path=&amp;rdquo;SAMPLE&amp;rdquo; &lt;/p&gt;
&lt;p&gt;DisplayName=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;Default=&amp;quot;TRUE&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot; Create a custom document library when you have a collection of documents or other files that you want to share. Custom document libraries support features such as folders, versioning, and check out.&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplateFiles&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;DocumentTemplateFile Name=&amp;quot;doctemp\word\custom.dot&amp;quot; &lt;/p&gt;
&lt;p&gt;TargetName=&amp;quot;Forms/template.doc&amp;quot; &lt;/p&gt;
&lt;p&gt;Default=&amp;quot;TRUE&amp;quot;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/DocumentTemplateFiles&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/DocumentTemplate&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 5: Create the ListTemplates sub directory under your new Feature directory.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\CustomDocumentLibrary directory create a directory named ListTemplates. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 6: Create the CustomDocumentLibrary.xml file for the Feature.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Create a file named CustomDocumentLibrary.xml and place it in the ListTemplates directory you just created. &lt;/p&gt;
&lt;p&gt;If you performed Step 2 use the following XML: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.3820&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Elements xmlns=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ListTemplate &lt;/p&gt;
&lt;p&gt;Name=&amp;quot;doclib&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;BaseType=&amp;quot;1&amp;quot; &lt;/p&gt;
&lt;p&gt;OnQuickLaunch=&amp;quot;FALSE&amp;quot; &lt;/p&gt;
&lt;p&gt;SecurityBits=&amp;quot;11&amp;quot; &lt;/p&gt;
&lt;p&gt;DisplayName=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibraryDisplayName;&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;$Resources:customDocumentLibrary,customDocumentLibrary_Folder;&amp;quot; &lt;/p&gt;
&lt;p&gt;Image=&amp;quot;/_layouts/images/itdl.gif&amp;quot; &lt;/p&gt;
&lt;p&gt;DocumentTemplate=&amp;quot;4000&amp;quot;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Elements&amp;gt; &lt;/p&gt;
&lt;p&gt;If you did not perform Step 2 use the following XML: &lt;/p&gt;
&lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _lcid=&amp;quot;1033&amp;quot; _version=&amp;quot;12.0.3820&amp;quot; _dal=&amp;quot;1&amp;quot; --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;!-- _LocalBinding --&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Elements xmlns=&amp;quot;http://schemas.microsoft.com/sharepoint/&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;ListTemplate &lt;/p&gt;
&lt;p&gt;Name=&amp;quot;doclib&amp;quot; &lt;/p&gt;
&lt;p&gt;Type=&amp;quot;4000&amp;quot; &lt;/p&gt;
&lt;p&gt;BaseType=&amp;quot;1&amp;quot; &lt;/p&gt;
&lt;p&gt;OnQuickLaunch=&amp;quot;FALSE&amp;quot; &lt;/p&gt;
&lt;p&gt;SecurityBits=&amp;quot;11&amp;quot; &lt;/p&gt;
&lt;p&gt;DisplayName=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;Description=&amp;quot;Custom Document Library&amp;quot; &lt;/p&gt;
&lt;p&gt;Image=&amp;quot;/_layouts/images/itdl.gif&amp;quot; &lt;/p&gt;
&lt;p&gt;DocumentTemplate=&amp;quot;4000&amp;quot;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/Elements&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; You can add multiple &amp;lt;ListTemplate&amp;gt; elements here if you wish to create a Feature that deploys multiple document libraries at a time. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 7: Copy the contents of the DocLib sub directory into your new Feature directory.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;In the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\CustomDocumentLibrary directory create a directory named DocLib. &lt;/p&gt;
&lt;p&gt;Copy the contents of the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\DocumentLibrary\DocLib directory to the new DocLib directory you just created. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 8: (Optional) If you plan to use a custom Document Template and you performed Step 4 above, create a custom Document Template.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Open Microsoft Word. &lt;/p&gt;
&lt;p&gt;Type in &amp;ldquo;Sample document template&amp;rdquo; into the document. &lt;/p&gt;
&lt;p&gt;Click File | Save As &lt;/p&gt;
&lt;p&gt;In the dropdown list that says Save as type: select Document Template (.dot) &lt;/p&gt;
&lt;p&gt;Name the file custom.dot &lt;/p&gt;
&lt;p&gt;Click the Save button. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 9: (Optional) Copy the custom Word Document Template you create that will server as the default Document Template for your new custom Document Library to the SharePoint server.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Copy the custom.dot file to the following directory on the SharePoint server: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\&amp;lt;NAME OF CUSTOME SITE DEFINITION&amp;gt;\DOCTEMP\WORD &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 10: (Optional) Add the Feature to the site definition you want the feature to be installed on by default when the site is created. (Please see the &lt;a target="_blank" href="http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/adding-a-document-library-feature-to-a-site-definition-in-wss-v3-moss-2007.aspx"&gt;Adding a Document Library Feature to a Site Definition in WSS V3 / MOSS 2007 article&lt;/a&gt;.)&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 11: Register the Feature with a SharePoint site via the STSADM.EXE command line utility.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;On the SharePoint server type the following command on the command line to change to the directory stsadm.exe resides in: &lt;/p&gt;
&lt;p&gt;cd &amp;ldquo;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN&amp;rdquo; &lt;/p&gt;
&lt;p&gt;Then type the following command to install the feature on the SharePoint server: &lt;/p&gt;
&lt;p&gt;stsadm -o installfeature -filename &amp;quot;CustomDocumentLibrary\feature.xml&amp;quot; &lt;/p&gt;
&lt;p&gt;This example assumes you have created a SharePoint site at the following URL: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://sharepointservername/SiteDirectory/CustDocLib"&gt;http://SharePointServerName/SiteDirectory/CustDocLib&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;To activate the feature on the SharePoint site mentioned above site use the following command: &lt;/p&gt;
&lt;p&gt;stsadm &amp;ndash;o activatefeature &amp;ndash;filename &amp;ldquo;CustomDocumentLibrary\feature.xml&amp;rdquo; &amp;ndash;url &amp;ldquo;http://SharePointServerName/SiteDirectory/CustDocLib&amp;rdquo; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;*Note:&lt;/b&gt; You can also uninstall and deactivate features using the stsadm utility. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uninstall command line:&lt;/b&gt; stsadm -o uninstallfeature -filename &amp;quot;CustomDocumentLibrary\feature.xml&amp;quot; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deactivate command line:&lt;/b&gt; stsadm &amp;ndash;o deactivatefeature &amp;ndash;filename &amp;ldquo;CustomDocumentLibrary\feature.xml&amp;rdquo; &amp;ndash;url &amp;ldquo;http://SharePointServerName/SiteDirectory/CustDocLib&amp;rdquo; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 12: Reset IIS. &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;On the SharePoint server type iisreset on the command line and wait for IIS to reset. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 13a: (Assuming you did not do Step 10) Browse to the SharePoint site you registered the feature with. Browse to the Create web page and the custom Document Library will be available in the list of items to create.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Open Internet Explorer. &lt;/p&gt;
&lt;p&gt;Browse to the &lt;a href="http://sharepointservername/SiteDirectory/CustDocLib"&gt;http://SharePointServerName/SiteDirectory/CustDocLib&lt;/a&gt; site. &lt;/p&gt;
&lt;p&gt;Click Site Settings &lt;/p&gt;
&lt;p&gt;Click Create &lt;/p&gt;
&lt;p&gt;Click Custom Document Library &lt;/p&gt;
&lt;p&gt;Fill in the required information and to the Custom Document Library. &lt;/p&gt;
&lt;p&gt;(If you created a custom Document Template) In the Document Template dropdown select Custom Document Library for the template. &lt;/p&gt;
&lt;p&gt;Click Create. &lt;/p&gt;
&lt;p&gt;If you created a custom Document Template clicking the new button on the Custom Document Library toolbar will open the custom Document Template you created. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 13b: (Assuming you did perform Step 10) Create a new SharePoint site with the site definition you edited in Step 10. Browse to the new site to see the custom Document Library already created for you.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Open Internet Explorer. &lt;/p&gt;
&lt;p&gt;Create a new SharePoint site with the custom site definition you edited. &lt;/p&gt;
&lt;p&gt;You will see the Custom Document Library already created for you and listed in the QuickLaunch Navigation on the left hand side of the site. &lt;/p&gt;
&lt;p&gt;If you created a custom Document Template clicking the new button on the Custom Document Library toolbar will open the custom Document Template you created.&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/creating-a-custom-document-library-feature-in-wss-v3.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=4386" width="1" height="1"&gt;</description></item><item><title>Connected Page Viewer Web Part</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/connected-page-viewer-web-part.aspx</link><pubDate>Thu, 16 Aug 2007 20:11:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:4383</guid><dc:creator>tbaginski</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=4383</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/08/16/connected-page-viewer-web-part.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/connected-page-viewer-web-part.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;This is a repost of an article on my blog that was lost during a server failure.&amp;nbsp; Historically, this&amp;nbsp;has been one of the most popular&amp;nbsp;articles on my blog, so I dug up the code and put it back online.&lt;/p&gt;
&lt;p&gt;The code you will find below is for a Connected Page Viewer Web Part for WSS V2 and SPS 2003.&amp;nbsp; The Connected Page Viewer Web Part consumes a URL from another Web Part that provides URLs.&amp;nbsp; This Web Part WORKS GREAT in WSS V3 and MOSS 2007 as well.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;using System;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Xml.Serialization;&lt;br /&gt;using System.Security;&lt;br /&gt;using System.Security.Permissions;&lt;br /&gt;using Microsoft.SharePoint;&lt;br /&gt;using Microsoft.SharePoint.Utilities;&lt;br /&gt;using Microsoft.SharePoint.WebPartPages;&lt;br /&gt;using Microsoft.SharePoint.WebPartPages.Communication;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO; &lt;/p&gt;
&lt;p&gt;namespace Custom.SharePoint.WebParts&lt;br /&gt;{&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// This Web Part displays the contents of a URL that is passed in from a provider web part.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;[DefaultProperty(&amp;quot;Text&amp;quot;),&lt;br /&gt;ToolboxData(&amp;quot;&amp;lt;{0}:ConsumerPageViewer runat=server&amp;gt;&amp;lt;/{0}:ConsumerPageViewer&amp;gt;&amp;quot;),&lt;br /&gt;XmlRoot(Namespace=&amp;quot;Custom.SharePoint.WebParts&amp;quot;)]&lt;br /&gt;public class ConsumerPageViewer : WebPart , ICellConsumer&lt;br /&gt;{&lt;br /&gt;#region Properties &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The URL to display in the IFRAME&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;private string pageUrl = string.Empty;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The property that exposes the pageUrl variable&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;[Browsable(true), &lt;br /&gt;Category(&amp;quot;Customization&amp;quot;), &lt;br /&gt;DefaultValue(&amp;quot;&amp;quot;), &lt;br /&gt;WebPartStorage(Storage.Personal), &lt;br /&gt;FriendlyName(&amp;quot;Page Url&amp;quot;), &lt;br /&gt;Description(&amp;quot;Default page URL such as &lt;a href="http://www.sharepointexperts.com&amp;quot;)]"&gt;http://www.sharepointexperts.com&amp;quot;)]&lt;/a&gt;&lt;br /&gt;public string PageUrl&lt;br /&gt;{&lt;br /&gt;get {return pageUrl;}&lt;br /&gt;set {pageUrl = value;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Variable to toggle if the URL of the content in the web part is displayed.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;private bool showPageUrl = false;&lt;br /&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The property that exposes the showPageUrl variable&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;[Browsable(true), &lt;br /&gt;Category(&amp;quot;Customization&amp;quot;), &lt;br /&gt;DefaultValue(false), &lt;br /&gt;WebPartStorage(Storage.Shared), &lt;br /&gt;FriendlyName(&amp;quot;Show Page Url&amp;quot;), &lt;br /&gt;Description(&amp;quot;Specifies if the URL of the content in the web part is displayed.&amp;quot;)]&lt;br /&gt;public bool ShowPageUrl&lt;br /&gt;{&lt;br /&gt;get {return showPageUrl;}&lt;br /&gt;set {showPageUrl = value;}&lt;br /&gt;}&lt;br /&gt;#endregion&lt;br /&gt;// Event required by ICellConsumer&lt;br /&gt;public event CellConsumerInitEventHandler CellConsumerInit; &lt;/p&gt;
&lt;p&gt;// Keep a count of ICellConsumer connections.&lt;br /&gt;private int cellConnectedCount = 0; &lt;/p&gt;
&lt;p&gt;// Cell information&lt;br /&gt;private string cellName = &amp;quot;Cell Data&amp;quot; &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Register interfaces.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public override void EnsureInterfaces()&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;// Register the ICellConsumer interface.&lt;br /&gt;RegisterInterface(&amp;quot;CellConsumer_WPQ_&amp;quot;, &lt;br /&gt;&amp;quot;ICellConsumer&amp;quot;, &lt;br /&gt;WebPart.UnlimitedConnections, &lt;br /&gt;ConnectionRunAt.Server, &lt;br /&gt;this, &lt;br /&gt;&amp;quot;CellConsumer_WPQ_&amp;quot;, &lt;br /&gt;&amp;quot;Consumes a cell from&amp;quot;, &lt;br /&gt;&amp;quot;Consumes a cell of data&amp;quot;); &lt;br /&gt;} &lt;br /&gt;catch(SecurityException)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// This method is called by the framework to determine whether a part &lt;br /&gt;/// can be run on the client or server based on the current&lt;br /&gt;/// configuration.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public override ConnectionRunAt CanRunAt()&lt;br /&gt;{&lt;br /&gt;return ConnectionRunAt.Server;&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// Notification to the Web Part that it has been connected&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;interfaceName&amp;quot;&amp;gt;Unique name of the interface that is being connected&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;connectedPart&amp;quot;&amp;gt;Reference to the other Web Part that is being connected to&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;connectedInterfaceName&amp;quot;&amp;gt;Unique name of the interface on the other Web Part&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;runAt&amp;quot;&amp;gt;Where the interface should execute&amp;lt;/param&amp;gt;&lt;br /&gt;public override void PartCommunicationConnect(string interfaceName,&lt;br /&gt;WebPart connectedPart,&lt;br /&gt;string connectedInterfaceName,&lt;br /&gt;ConnectionRunAt runAt)&lt;br /&gt;{&lt;br /&gt;EnsureChildControls(); &lt;br /&gt;if (interfaceName == &amp;quot;CellConsumer_WPQ_&amp;quot;)&lt;br /&gt;{&lt;br /&gt;cellConnectedCount++;&lt;br /&gt;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// In this method, a part should fire any connection init events.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;public override void PartCommunicationInit()&lt;br /&gt;{&lt;br /&gt;if(cellConnectedCount &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;if (CellConsumerInit != null)&lt;br /&gt;{&lt;br /&gt;CellConsumerInitEventArgs cellConsumerInitArgs = new CellConsumerInitEventArgs();&lt;br /&gt;cellConsumerInitArgs.FieldName = cellName;&lt;br /&gt;CellConsumerInit(this, cellConsumerInitArgs);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// This method is called by the Authoring environment for all&lt;br /&gt;/// the initial data required for creating a connection.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;interfacename&amp;quot;&amp;gt;Name of interface that the framework is&lt;br /&gt;/// requesting information on&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;returns&amp;gt;An EventArgs object such as CellProviderInitArgs&amp;lt;/returns&amp;gt;&lt;br /&gt;public override InitEventArgs GetInitEventArgs(string interfaceName)&lt;br /&gt;{&lt;br /&gt;if (interfaceName == &amp;quot;CellConsumer_WPQ_&amp;quot;)&lt;br /&gt;{&lt;br /&gt;EnsureChildControls();&lt;br /&gt;CellConsumerInitEventArgs cellConsumerInitArgs = new CellConsumerInitEventArgs(); &lt;br /&gt;cellConsumerInitArgs.FieldName = cellName;&lt;br /&gt;return(cellConsumerInitArgs);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;return(null);&lt;br /&gt;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The CellProviderInit event handler&lt;br /&gt;/// The Provider part will fire this event during its PartCommunicationInit phase.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;Provider Web Part&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;cellProviderInitArgs&amp;quot;&amp;gt;The args passed by the Provider&amp;lt;/param&amp;gt;&lt;br /&gt;public void CellProviderInit(object sender, CellProviderInitEventArgs cellProviderInitArgs)&lt;br /&gt;{&lt;br /&gt;// This is where the Consumer part can identify what type of &amp;quot;Cell&amp;quot; the Provider&lt;br /&gt;// will be sending.&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// The CellReady event handler&lt;br /&gt;/// The Provider part will fire this event during its PartCommunicationMain phase.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;sender&amp;quot;&amp;gt;Provider Web Part&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;cellReadyArgs&amp;quot;&amp;gt;The args passed by the Provider&amp;lt;/param&amp;gt;&lt;br /&gt;public void CellReady(object sender, CellReadyEventArgs cellReadyArgs)&lt;br /&gt;{&lt;br /&gt;if(cellReadyArgs.Cell != null)&lt;br /&gt;{&lt;br /&gt;pageUrl = cellReadyArgs.Cell.ToString();&lt;br /&gt;}&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt; &lt;br /&gt;/// Render this Web Part control to the output parameter specified.&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;output&amp;quot;&amp;gt; The HTML writer to write out to &amp;lt;/param&amp;gt;&lt;br /&gt;protected override void Render(HtmlTextWriter output)&lt;br /&gt;{&lt;br /&gt;//The following objects are used to created the iframe in the web part and return the contents of the link to the IFRAME&lt;br /&gt;StringBuilder buffer = new StringBuilder(10240);&lt;br /&gt;StringWriter InnerWriter = new StringWriter(buffer);&lt;br /&gt;HtmlTextWriter BufferWriter = new HtmlTextWriter(InnerWriter); &lt;/p&gt;
&lt;p&gt;try &lt;br /&gt;{ &lt;br /&gt;//Call method to write HTML to buffer&lt;br /&gt;WriteWebPartContent(BufferWriter);&lt;br /&gt;//Write HTML back to browser&lt;br /&gt;output.Write(buffer); &lt;br /&gt;}&lt;br /&gt;catch (System.Exception Ex)&lt;br /&gt;{ &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// This method generates the HTML to display the IFRAME and the page content inside it&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name=&amp;quot;output&amp;quot;&amp;gt;The HTMLTextWriter to send the output to&amp;lt;/param&amp;gt;&lt;br /&gt;protected void WriteWebPartContent(HtmlTextWriter output)&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;string frame = &amp;quot;outputIFrame_&amp;quot; + base.Qualifier; &lt;/p&gt;
&lt;p&gt;output.AddStyleAttribute(&amp;quot;display&amp;quot;, &amp;quot;inline&amp;quot;);&lt;br /&gt;output.AddAttribute(HtmlTextWriterAttribute.Id, frame);&lt;br /&gt;output.AddAttribute(HtmlTextWriterAttribute.Name, frame);&lt;br /&gt;output.AddStyleAttribute(HtmlTextWriterStyle.Width, &amp;quot;100%&amp;quot;);&lt;br /&gt;output.AddStyleAttribute(HtmlTextWriterStyle.Height, &amp;quot;100%&amp;quot;);&lt;br /&gt;output.AddAttribute(&amp;quot;frameBorder&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;output.AddAttribute(HtmlTextWriterAttribute.Src, pageUrl);&lt;br /&gt;output.RenderBeginTag(HtmlTextWriterTag.Iframe);&lt;br /&gt;output.RenderEndTag(); &lt;/p&gt;
&lt;p&gt;//If the web part is configured to show the page url then display it&lt;br /&gt;if (showPageUrl == true)&lt;br /&gt;{&lt;br /&gt;output.Write( &amp;quot;&amp;lt;BR&amp;gt;This web part is displaying content from the following URL: &amp;quot; + SPEncode.HtmlEncode(pageUrl) + &amp;quot;&amp;lt;BR&amp;gt;&amp;quot;);&lt;/p&gt;
&lt;p&gt;output.Write( &amp;quot;&amp;lt;BR&amp;gt;EASTER EGG! Ski lifts open in 97 days from the date I reposted this article!&amp;lt;BR&amp;gt;&amp;quot;);&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (System.Exception Ex)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/08/16/connected-page-viewer-web-part.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=4383" width="1" height="1"&gt;</description></item><item><title>Which WSS 3.0 / MOSS 2007 site Template is right for me?</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/06/29/Which-WSS-3.0-_2F00_-MOSS-2007-site-Template-is-right-for-me_3F00_.aspx</link><pubDate>Fri, 29 Jun 2007 15:48:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:2554</guid><dc:creator>tbaginski</dc:creator><slash:comments>23</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=2554</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/06/29/Which-WSS-3.0-_2F00_-MOSS-2007-site-Template-is-right-for-me_3F00_.aspx#comments</comments><description>&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2532/original.aspx"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2532/original.aspx"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2553/original.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/06/29/which-wss-3.0-moss-2007-site-template-is.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;MOSS 2007 ships with many predefined Templates you may use to create Site Collections and sub sites. Sometimes the out of the box site Templates will meet the needs of your project. Other times, the out of the box site Templates may need to be enhanced. &lt;/p&gt;
&lt;p&gt;Knowing which site Template has the functionality you need to deploy, or use as a baseline for a custom Site Definition, is one of the key decisions you make when architecting a SharePoint deployment. This being said, it is important to understand the functionality the Templates WSS and MOSS come with out of the box, and what they look like. &lt;/p&gt;
&lt;p&gt;This post will outline what functionality the site Templates WSS and MOSS come with out of the box,&amp;nbsp;what they look like, and document several useful peices of information developers will find handy when working with the out of the box SharePoint site Templates. &lt;/p&gt;
&lt;p&gt;MOSS offers some guidance by providing descriptions and preview images for each out of the box template. However, not all of these descriptions list which resources the site comes provisioned with, and the preview images are no help at all. See the image below, I think you will agree. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2532/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2532/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2532/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;To better understand the inventory of out of the box site Templates, I created a Site Collection based on each out of the box site Template. After creating 23 different Site Collections, I realized it would be hard to remember what each one looked like. So, I decided to take some screenshots and document the site Templates. &lt;/p&gt;
&lt;p&gt;Below you will find tables corresponding to the different categories the site Templates reside in. The tables list the site Template names and descriptions for each category. As I mentioned before, you will see these descriptions are a good starting point, but do not describe the various lists that are provisioned with each site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Collaboration Category Descriptions&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2547/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2547/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2547/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Meetings Category Descriptions&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2549/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2549/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2549/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Enterprise Category Descriptions&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2548/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2548/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2548/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Publishing Category Descriptions&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2550/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2550/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2550/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Preview Images&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;If you care to see what all of the preview images look like, you can find them in the following directory on your SharePoint server: &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\IMAGES&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;The file names for the preview images corresponding to each site Template are listed in the tables below. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;A More Detailed Look&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;If you care to see what each of the home pages for the site Templates looks like, you can download them from this &lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry2530.aspx"&gt;file&lt;/a&gt;. These images should give you a good understanding of the different Lists and layouts that come with each out of the box Template.&amp;nbsp; &lt;em&gt;&lt;span style="color:#ff8040;"&gt;&lt;strong&gt;This should save you a lot of time creating each type of site Template on your own machine!&lt;/strong&gt;&lt;/span&gt;&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Information developers will want to keep handy when enhancing or creating new custom Site Templates and Site Definitions.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The next table lists the WEBTEMP XML fragment file&amp;nbsp;each site Template and Configuration is stored in, the file name of the preview image, and the concatenated Template and Configuration string you need when making sites with this site Template programmatically. If you wish to change the out of the box preview images I recommend backup up the existing preview images, then replacing them with your new preview images that have the same file names. Feel free to use the images I created from screenshots of each site Template&amp;rsquo;s out of the box home page to do so. You can download them &lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry2530.aspx"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;* You may have to perform this process again after a service pack is applied in the future. It is not supported to edit the various WEBTEMP files that come out of the box, so that is why I recommend this approach. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2551/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2551/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2551/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Buried Treasure: Crouching Tiger- Hidden Templates!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;Many of the site Templates listed in the following table are left over from the last version of SharePoint and are marked obsolete. However some of them may be created programmatically. I included the list of all the hidden site Templates here for your reference. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2552/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2552/thumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2552/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Leverage this information to create SharePoint sites programmatically&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;The concatenated Template and Configuration string is used when creating sites programmatically. See the below code sample for an example, pay attention to the text in &lt;strong&gt;&lt;span style="color:#ff8040;"&gt;orange&lt;/span&gt;&lt;/strong&gt;, to see where the concatenate string is used. &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Create a new SPSite object corresponding to your top level site&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;SPSite newSite = new SPSite(&amp;ldquo;http://moss/site&amp;rdquo;);&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Create a new SPWeb object from the newSite object&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;SPWeb newWeb = newSite.OpenWeb();&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Return the collection of sub sites&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;SPWebCollection subSites = newWeb.Webs;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Create a new sub site by adding it to the sub site collection&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//The new site will have the following metadata:&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Full URL once created: http://moss/newsite&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Name: New Site&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Description: This is the description for my new site.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Local ID set to 1033 &amp;ndash; English&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Site Template: Team Site&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;//Use Unique Permissions: True&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;SPWeb newSubWeb = subSites.Add(&amp;ldquo;newsite&amp;rdquo;, &amp;ldquo;New Site&amp;rdquo;, &amp;ldquo;This is the description for my new site.&amp;rdquo;, 1033, &amp;ldquo;&lt;strong&gt;&lt;span style="color:#ff8040;"&gt;STS#0&lt;/span&gt;&lt;/strong&gt;&amp;rdquo;, true, false);&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Important planning information related to the out of the box site Templates!&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;This chart shows the available site Templates one may create sub sites with, for a given parent site Template. Make sure you pick site Templates that will allow you to create the types of sub sites your functionality requirements dictate. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2553/original.aspx"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2553/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2553/secondarythumb.aspx" alt="" /&gt;&lt;/a&gt;&amp;nbsp;Click on thumbnail for full size image.&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2553/original.aspx"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I hope this post comes in handy for you and saves you&amp;nbsp;the time I spent digging through the SharePoint file system and creating dozens of SharePoint sites to find the information. All the information in this post comes from the RTM version of MOSS 2007 Enterprise.&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/06/29/which-wss-3.0-moss-2007-site-template-is.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=2554" width="1" height="1"&gt;</description></item><item><title>SharePoint Development Bootcamp - 2nd Quarter Public Dates Announced</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/05/22/sharepoint-development-bootcamp-2nd-quarter-public-dates-announced.aspx</link><pubDate>Wed, 23 May 2007 02:30:20 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1807</guid><dc:creator>tbaginski</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1807</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/05/22/sharepoint-development-bootcamp-2nd-quarter-public-dates-announced.aspx#comments</comments><description>&lt;p&gt;Earlier this week we announced the dates for our next public Bootcamps.&amp;nbsp; I&amp;#39;ve been busy adding all sorts of great content to my &lt;a href="http://sharepointbootcamp.com/sharepoint_development_bootcamp.htm"&gt;SharePoint Development Bootcamp&lt;/a&gt; and I&amp;#39;m really looking forward to teaching it in Vegas July 30 -&amp;nbsp;August 3.&lt;/p&gt; &lt;p&gt;I&amp;#39;m especially excited this time because &lt;a href="http://sharepointbootcamp.com/about_heather.htm"&gt;Heather Solomon&lt;/a&gt; and &lt;a href="http://sharepointbootcamp.com/about_matt.htm"&gt;Matt Passanante&lt;/a&gt; will also be teaching their &lt;a href="http://sharepointbootcamp.com/sharepoint_branding_bootcamp.htm"&gt;SharePoint Branding Bootcamp&lt;/a&gt; and &lt;a href="http://sharepointbootcamp.com/sharepoint_administration_bootcamp.htm"&gt;SharePoint Administration and Planning Bootcamp&lt;/a&gt;, respectively.&amp;nbsp; &lt;a href="http://sharepointbootcamp.com/about_dustin.htm"&gt;Dustin Miller&lt;/a&gt; will be on site all week long supporting the different classes, and cracking them up with his endless supply of jokes.&lt;/p&gt; &lt;p&gt;On the final day we will merge all the instructors and classes together for a &amp;#39;Stump The Instructors&amp;#39; session which should be a very fun afternoon of Q&amp;amp;A.&lt;/p&gt; &lt;p&gt;Many people have already signed up for the Bootcamp experience, and I&amp;#39;m looking forward to meeting all of you!&amp;nbsp; Tickets are going faster than ever with the ever-growing popularity of SharePoint, so if you would like to attend, sign up soon.&lt;/p&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=27043" width="1" height="1" alt="" /&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1807" width="1" height="1"&gt;</description></item><item><title>SharePoint Feature Manager Update 1.0.0.2</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/05/22/sharepoint-feature-manager-update-1-0-0-2.aspx</link><pubDate>Wed, 23 May 2007 02:00:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1808</guid><dc:creator>tbaginski</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1808</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/05/22/sharepoint-feature-manager-update-1-0-0-2.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/0001/01/01/sharepoint-feature-manager-update-1-0-0-2.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Today I updated the SharePoint Feature Manager&amp;nbsp;to fix an interesting bug I found. &lt;/p&gt;
&lt;p&gt;On my development VPC that was upgraded from B2TR to RTM the path to the Features directory was: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\&lt;strong&gt;w&lt;/strong&gt;eb &lt;strong&gt;s&lt;/strong&gt;erver &lt;strong&gt;e&lt;/strong&gt;xtensions\12\TEMPLATE\FEATURES &lt;/p&gt;
&lt;p&gt;On my development VPC that has a fresh install of&amp;nbsp;RTM the path to the Features directory is: &lt;/p&gt;
&lt;p&gt;C:\Program Files\Common Files\Microsoft Shared\&lt;strong&gt;W&lt;/strong&gt;eb &lt;strong&gt;S&lt;/strong&gt;erver &lt;strong&gt;E&lt;/strong&gt;xtensions\12\TEMPLATE\FEATURES &lt;/p&gt;
&lt;p&gt;The change in capitalization of the Web Server Extensions directory, highlighted in &lt;strong&gt;bold&lt;/strong&gt; above, caused a path replacement inside the SharePoint Feature Manager to fail on the fresh install of the RTM build.&amp;nbsp; I&amp;#39;ve fixed the bug and the application will now work properly on SharePoint installations that were not upgraded from B2TR, as well as SharePoint installations that were upgraded from B2TR to RTM.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;You can download it here: &lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry2449.aspx"&gt;http://www.sharepointblogs.com/files/folders/tbaginski/entry2449.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/0001/01/01/sharepoint-feature-manager-update-1-0-0-2.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;a href="http://www.sharepointblogs.com/files/97/tbaginski/entry8420.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="1" src="http://www.sharepointblogs.com/aggbug.aspx?PostID=27038" height="1" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1808" width="1" height="1"&gt;</description></item><item><title>Leaving the BDC Meta Man project</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/05/08/leaving-the-bdc-meta-man-project.aspx</link><pubDate>Tue, 08 May 2007 08:40:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1809</guid><dc:creator>tbaginski</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1809</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/05/08/leaving-the-bdc-meta-man-project.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/05/08/leaving-the-bdc-meta-man-project.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;In order to pursue other opportunities, I&amp;#39;ve decided to end my involvement with&amp;nbsp;the BDC Meta Man project. &lt;/p&gt;
&lt;p&gt;For almost a year now I have been working&amp;nbsp;on the BDC Meta Man project with Nick Swan and Dmitry Kaloshin.&amp;nbsp; During this exciting time I forged strong relationships with Nick and Dmitry and enjoyed the experience very much.&amp;nbsp; The entire experience was a positive one and I have nothing but good things to say about Nick and Dmitry.&amp;nbsp; I am confident that Nick and Dmitry will create an even brighter future for the project, and I wish them both luck! &lt;/p&gt;
&lt;p&gt;Thanks to everyone who supported the BDC Meta Man project along the way, it was an exciting journey!&amp;nbsp; Now that I&amp;rsquo;m embarking on a new journey with SharePoint Experts as Vice President, stay tuned for some exciting announcements of my own!&lt;/p&gt;
&lt;p&gt;&lt;img width="1" src="http://www.sharepointblogs.com/aggbug.aspx?PostID=25062" height="1" alt="" /&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/05/08/leaving-the-bdc-meta-man-project.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1809" width="1" height="1"&gt;</description></item><item><title>SharePoint Connections - Session Follow Up: Create an Internet-Facing SharePoint Site</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/04/12/sharepoint-connections-session-follow-up-create-an-internet-facing-sharepoint-site.aspx</link><pubDate>Fri, 13 Apr 2007 03:01:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1810</guid><dc:creator>tbaginski</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1810</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/04/12/sharepoint-connections-session-follow-up-create-an-internet-facing-sharepoint-site.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/04/13/sharepoint-connections-session-follow-up-create-an-internet-facing.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;During the Create an Internet-Facing SharePoint Site session I covered the following topics.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setting up forms based authentication.&lt;/li&gt;
&lt;li&gt;Creating your own custom Master Pages and style sheets&lt;/li&gt;
&lt;li&gt;Personalizing site content for users.&lt;/li&gt;
&lt;li&gt;Leveraging the Business Data Catalog to surface and interact with back end systems.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each of these topics is broken down more in depth in this blog post.&amp;nbsp; All the code used during my demos can be found i&lt;span style="color:#000000;"&gt;n the rar file linked at the end of this post.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff8000;"&gt;Setting up forms based authentication&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because a brief survey revealed almost the entire audience had already attended a session that covered setting up forms based authentication for SharePoint sites, I moved quickly through the materials related to setting up forms based authentication for SharePoint sites and did not spend a lot of time on it.&lt;/p&gt;
&lt;p&gt;At any rate, here are the step by step instructions that describe how to set up a SharePoint site to use forms based authentication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;*Note:&amp;nbsp; There are also several GREAT blog posts that describe how to set up FBA with SharePoint sites available&amp;nbsp;on the Internet as well.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Andrew Connell has a great article on this topic here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx"&gt;&lt;/a&gt;&lt;a href="http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx"&gt;HOWTO: Configuring a Office SharePoint Server 2007 Publishing Site with Dual Authentication Providers and Anonymous Access&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dan Attis also has&amp;nbsp;two great articles on this topic here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcow.com/blogs/jdattis/archive/2007/02/23/Office_SharePoint_Server_2007_Forms_Based_Authentication_FBA_Walkthrough_Part_1.aspx"&gt;Office SharePoint Server 2007 - Forms Based Authentication (FBA) Walk-through - Part 1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcow.com/blogs/jdattis/archive/2007/03/01/Office_SharePoint_Server_2007_Forms_Based_Authentication_FBA_w_MySites_Walkthrough_Part_2.aspx"&gt;Office SharePoint Server 2007 - Forms Based Authentication (FBA) w/MySites Walk-through - Part 2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Without further adieu, here are the step by step instructions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 1: Create the database FBA will use to store credentials, roles, and users.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. On your SharePoint development server open Windows Explorer. &lt;/p&gt;
&lt;p&gt;2. Navigate to the following directory: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;%windir%\Microsoft.NET\Framework\v2.0.50727 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3. Double click the aspnet_regsql.exe file to open the ASP.NET SQL Server Setup Wizard. &lt;/p&gt;
&lt;p&gt;4. Click the Next button. &lt;/p&gt;
&lt;p&gt;5. Make sure the Configure SQL Server for application services radio button is selected. &lt;/p&gt;
&lt;p&gt;6. Click the Next button. &lt;/p&gt;
&lt;p&gt;7. In the Server textbox enter the name of the SQL Server that will hold the database. &lt;/p&gt;
&lt;p&gt;8. Make sure the Windows Authentication radio button is selected. &lt;/p&gt;
&lt;p&gt;9. In the Database textbox enter SP_FBA_DB. &lt;/p&gt;
&lt;p&gt;10. Click the Next button. &lt;/p&gt;
&lt;p&gt;11. Click the Next button. &lt;/p&gt;
&lt;p&gt;12. Click the Finish button.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 2: Configure the ASP.NET Membership and Role Providers to use the SP_FBA_DB database.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. On your SharePoint development open VS 2005.&lt;/p&gt;
&lt;p&gt;2. Click File | New | Web Site. &lt;/p&gt;
&lt;p&gt;3. In the templates list box select ASP.NET Web Site. &lt;/p&gt;
&lt;p&gt;4. In the Location drop down list, select File System. &lt;/p&gt;
&lt;p&gt;5. In the Location text box enter: &lt;/p&gt;
&lt;p&gt;c:\inetpub\wwwroot\SP FBA Administration Site &lt;/p&gt;
&lt;p&gt;6. Click the OK button. &lt;/p&gt;
&lt;p&gt;7. When the Web Site is created, right click the c:\...\SP FBA Administration Site\ node in the Solution Explorer and select Add New Item. &lt;/p&gt;
&lt;p&gt;8. In the Templates list box select Web Configuration File. &lt;/p&gt;
&lt;p&gt;9. Click the Add button. &lt;/p&gt;
&lt;p&gt;10. Locate the following code in the web.config file: &lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings/&amp;gt;&lt;/p&gt;
&lt;p&gt;11. Replace the code above with the code below: &lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add &lt;/p&gt;
&lt;p&gt;name=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionString=&amp;quot;server=&amp;lt;Your SQL Server Name&amp;gt; &lt;/p&gt;
&lt;p&gt;database=SP_FBA_DB; &lt;/p&gt;
&lt;p&gt;Integrated Security=SSPI;&amp;quot; &lt;/p&gt;
&lt;p&gt;providerName=&amp;quot;System.Data.SqlClient&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;12. Replace the &amp;lt;Your SQL Server Name&amp;gt; placeholder with the name of the SQL Server that you installed the database on, in Part 1. &lt;/p&gt;
&lt;p&gt;13. Inside the &amp;lt;system.web&amp;gt; section in the web.config file, insert the following code. &lt;/p&gt;
&lt;p&gt;&amp;lt;membership defaultProvider=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add &lt;/p&gt;
&lt;p&gt;name=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlMembershipProvider, &lt;/p&gt;
&lt;p&gt;System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordRetrieval=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordReset=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresQuestionAndAnswer=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresUniqueEmail=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordFormat=&amp;quot;Hashed&amp;quot; &lt;/p&gt;
&lt;p&gt;maxInvalidPasswordAttempts=&amp;quot;5&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredPasswordLength=&amp;quot;1&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredNonalphanumericCharacters=&amp;quot;0&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordAttemptWindow=&amp;quot;10&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordStrengthRegularExpression=&amp;quot;&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/membership&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;roleManager &lt;/p&gt;
&lt;p&gt;enabled=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;defaultProvider=&amp;quot;SP_FBA_DB_AspNetSqlRoleProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&amp;quot;SP_FBA_DB_AspNetSqlRoleProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlRoleProvider, System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/roleManager&amp;gt; &lt;/p&gt;
&lt;p&gt;14. In VS 2005 Click Website | ASP.NET Configuration. &lt;/p&gt;
&lt;p&gt;15. Click the Security link. &lt;/p&gt;
&lt;p&gt;16. Click the Select authentication type link. &lt;/p&gt;
&lt;p&gt;17. Select the From the internet radio button. &lt;/p&gt;
&lt;p&gt;18. Click the Done button. &lt;/p&gt;
&lt;p&gt;19. Don&amp;rsquo;t close IE at this point, we will use it in the next part. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 3: Create a user to use for testing purposes.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Return to IE. &lt;/p&gt;
&lt;p&gt;2. Click the create user link. &lt;/p&gt;
&lt;p&gt;3. In the User Name text box enter: SP_FBA_DB_TEST_USER &lt;/p&gt;
&lt;p&gt;4. In the Password text box enter: password &lt;/p&gt;
&lt;p&gt;5. In the Confirm Password text box enter: password &lt;/p&gt;
&lt;p&gt;6. In the E-Mail text box enter &lt;a href="mailto:SP_FBA_DB_TEST_USER@test.com"&gt;SP_FBA_DB_TEST_USER@test.com&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;7. Click the Create User button. &lt;/p&gt;
&lt;p&gt;8. Click the Continue button. &lt;/p&gt;
&lt;p&gt;9. Don&amp;rsquo;t close IE at this point, we will use it again in just a bit. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 4: Verify all configuration settings.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Return to IE. &lt;/p&gt;
&lt;p&gt;2. Click the Provider tab. &lt;/p&gt;
&lt;p&gt;3. Click the Select a different provider for each feature (advanced) 4. link. &lt;/p&gt;
&lt;p&gt;5. In the Membership Provider section, verify the SP_FBA_DB_AspNetSqlMembershipProvider radio button is selected. &lt;/p&gt;
&lt;p&gt;6. Click the Test link next to the SP_FBA_DB_AspNetSqlMembershipProvider Membership Provider. &lt;/p&gt;
&lt;p&gt;7. You should see the message: Successfully established a connection to the database. &lt;/p&gt;
&lt;p&gt;8. Click the OK button. &lt;/p&gt;
&lt;p&gt;9. In the Role Provider section, verify the SP_FBA_DB_AspNetSqlRoleProvider radio button is selected. &lt;/p&gt;
&lt;p&gt;10. Click the Test link next to the SP_FBA_DB_AspNetSqlRoleProvider Role Provider. &lt;/p&gt;
&lt;p&gt;11. You should see the message: Successfully established a connection to the database. &lt;/p&gt;
&lt;p&gt;12. Click the OK button. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 5: Create a SharePoint Web Application that will utilize FBA.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Here, we will expose an existing SharePoint Web Application as an extranet site. Basically, we are exposing the same content to extranet users via a different URL, and using FBA to authenticate the users to the site, instead of Active Directory.&lt;/p&gt;
&lt;p&gt;1. Open the SharePoint Central Administration web site. &lt;/p&gt;
&lt;p&gt;2. Click Start | All Programs | Microsoft Office Server | SharePoint 3.0 Central Administration. &lt;/p&gt;
&lt;p&gt;3. Click the Application Management link. &lt;/p&gt;
&lt;p&gt;4. Click the Create or extend Web application link. &lt;/p&gt;
&lt;p&gt;5. Click the Extend an existing Web application link. &lt;/p&gt;
&lt;p&gt;6. In the Web Application drop down list, select Change Web Application. &lt;/p&gt;
&lt;p&gt;7. In the Select Web Application popup window, click the default SharePoint Web Application. (SharePoint (80)). &lt;/p&gt;
&lt;p&gt;8. In the Description text box enter SharePoint (80) &amp;ndash; FBA &lt;/p&gt;
&lt;p&gt;9. In the Port text box enter 80. &lt;/p&gt;
&lt;p&gt;10. In the Host Header text box enter FBA &lt;/p&gt;
&lt;p&gt;11. In the security Configuration section do the following: &lt;/p&gt;
&lt;p&gt;12. Select NTLM as the Authentication Provider. &lt;/p&gt;
&lt;p&gt;13. Set Anonymous Access to No. &lt;/p&gt;
&lt;p&gt;14. Set Use Secure Sockets Layer (SSL) to No. &lt;/p&gt;
&lt;p&gt;15. In the Load Balanced URL section change the Zone to Extranet. &lt;/p&gt;
&lt;p&gt;16. Click the OK button. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 6: Configure FBA for the SharePoint Web Application created in&amp;nbsp;Part 5.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open Windows Explorer. &lt;/p&gt;
&lt;p&gt;2. Navigate to the directory where the FBA SharePoint Web Application was created. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. By default, this location will be:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;C:\Inetpub\wwwroot\wss\VirtualDirectories\FBA80&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3. Open the web.config file in this directory. &lt;/p&gt;
&lt;p&gt;4. Locate the following code in the web.config file: &lt;/p&gt;
&lt;p&gt;&amp;lt;/SharePoint&amp;gt; &lt;/p&gt;
&lt;p&gt;5. Add the following code below the line of code above. &lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add &lt;/p&gt;
&lt;p&gt;name=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionString=&amp;quot;server=&amp;lt;Your SQL Server Name&amp;gt; &lt;/p&gt;
&lt;p&gt;database=SP_FBA_DB; &lt;/p&gt;
&lt;p&gt;Integrated Security=SSPI;&amp;quot; &lt;/p&gt;
&lt;p&gt;providerName=&amp;quot;System.Data.SqlClient&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;6. Replace the &amp;lt;Your SQL Server Name&amp;gt; placeholder with the name of the SQL Server that you installed the database on, in Exercise 1. &lt;/p&gt;
&lt;p&gt;7. Locate the following code in the web.config file: &lt;/p&gt;
&lt;p&gt;&amp;lt;system.web&amp;gt; &lt;/p&gt;
&lt;p&gt;8. Add the following code below the line of code above. &lt;/p&gt;
&lt;p&gt;&amp;lt;membership defaultProvider=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlMembershipProvider, &lt;/p&gt;
&lt;p&gt;System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordRetrieval=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordReset=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresQuestionAndAnswer=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresUniqueEmail=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordFormat=&amp;quot;Hashed&amp;quot; &lt;/p&gt;
&lt;p&gt;maxInvalidPasswordAttempts=&amp;quot;5&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredPasswordLength=&amp;quot;1&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredNonalphanumericCharacters=&amp;quot;0&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordAttemptWindow=&amp;quot;10&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordStrengthRegularExpression=&amp;quot;&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/membership&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;roleManager &lt;/p&gt;
&lt;p&gt;enabled=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;defaultProvider=&amp;quot;SP_FBA_DB_AspNetSqlRoleProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&amp;quot;SP_FBA_DB_AspNetSqlRoleProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlRoleProvider, System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/roleManager&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part&amp;nbsp;7: Configure SharePoint Central Administration so it can also communicate with the SP_FBA_DB database.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open Windows Explorer. &lt;/p&gt;
&lt;p&gt;2. Navigate to the directory where the SharePoint Central Administration web application was created. &lt;/p&gt;
&lt;p&gt;3. By default, this location will be: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;C:\Inetpub\wwwroot\wss\VirtualDirectories\&amp;lt;Your Port Here&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;a. The &amp;lt;Your Port Here&amp;gt; placeholder is the port that SharePoint Central Administration uses on your server.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;4. Open the web.config file in this directory. &lt;/p&gt;
&lt;p&gt;5. Locate the following code in the web.config file: &lt;/p&gt;
&lt;p&gt;&amp;lt;/SharePoint&amp;gt; &lt;/p&gt;
&lt;p&gt;6. Add the following code below the line of code above. &lt;/p&gt;
&lt;p&gt;&amp;lt;connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add &lt;/p&gt;
&lt;p&gt;name=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionString=&amp;quot;server=&amp;lt;Your SQL Server Name&amp;gt; &lt;/p&gt;
&lt;p&gt;database=SP_FBA_DB; &lt;/p&gt;
&lt;p&gt;Integrated Security=SSPI;&amp;quot; &lt;/p&gt;
&lt;p&gt;providerName=&amp;quot;System.Data.SqlClient&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/connectionStrings&amp;gt; &lt;/p&gt;
&lt;p&gt;7. Replace the &amp;lt;Your SQL Server Name&amp;gt; placeholder with the name of the SQL Server that you installed the database on, in Exercise 1. &lt;/p&gt;
&lt;p&gt;8. Locate the following code in the web.config file: &lt;/p&gt;
&lt;p&gt;&amp;lt;system.web&amp;gt; &lt;/p&gt;
&lt;p&gt;9. Add the following code below the line of code above. &lt;/p&gt;
&lt;p&gt;&amp;lt;membership defaultProvider=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&amp;quot;SP_FBA_DB_AspNetSqlMembershipProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlMembershipProvider, &lt;/p&gt;
&lt;p&gt;System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordRetrieval=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;enablePasswordReset=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresQuestionAndAnswer=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;requiresUniqueEmail=&amp;quot;false&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordFormat=&amp;quot;Hashed&amp;quot; &lt;/p&gt;
&lt;p&gt;maxInvalidPasswordAttempts=&amp;quot;5&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredPasswordLength=&amp;quot;1&amp;quot; &lt;/p&gt;
&lt;p&gt;minRequiredNonalphanumericCharacters=&amp;quot;0&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordAttemptWindow=&amp;quot;10&amp;quot; &lt;/p&gt;
&lt;p&gt;passwordStrengthRegularExpression=&amp;quot;&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/membership&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;roleManager &lt;/p&gt;
&lt;p&gt;enabled=&amp;quot;true&amp;quot; &lt;/p&gt;
&lt;p&gt;defaultProvider=&amp;quot;AspNetWindowsTokenRoleProvider&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;add name=&amp;quot;SP_FBA_DB_AspNetSqlRoleProvider&amp;quot; &lt;/p&gt;
&lt;p&gt;type=&amp;quot;System.Web.Security.SqlRoleProvider, System.Web, &lt;/p&gt;
&lt;p&gt;Version=2.0.0.0, Culture=neutral, &lt;/p&gt;
&lt;p&gt;PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/p&gt;
&lt;p&gt;connectionStringName=&amp;quot;SP_FBA_DB_SQL_CONN_STRING&amp;quot; &lt;/p&gt;
&lt;p&gt;applicationName=&amp;quot;/&amp;quot; &lt;/p&gt;
&lt;p&gt;/&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/providers&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;/roleManager&amp;gt; &lt;/p&gt;
&lt;p&gt;10. The only difference in the web.config entries for the Central Administration web site is as follows: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. In the FBA SharePoint Web Application web.config file the roleManager tag looks like this:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;roleManager enabled=&amp;quot;true&amp;quot; defaultProvider=&amp;quot;&lt;b&gt;SP_FBA_DB_AspNetSqlRoleProvider&lt;/b&gt;&amp;quot;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. In the Central Administration web.config file the roleManager tag looks like this:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;roleManager enabled=&amp;quot;true&amp;quot; defaultProvider=&amp;quot;&lt;b&gt;AspNetWindowsTokenRoleProvider&lt;/b&gt;&amp;quot;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c. The differences are noted in &lt;b&gt;bold&lt;/b&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Part&amp;nbsp;8: Adjust your hosts file so the FBA website will resolve properly.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open Windows Explorer. &lt;/p&gt;
&lt;p&gt;2. Navigate to the following directory: &lt;/p&gt;
&lt;p&gt;3. %windir%\system32\drivers\etc &lt;/p&gt;
&lt;p&gt;4. Open the hosts file. &lt;/p&gt;
&lt;p&gt;5. Add the following line at the end of the file: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;127.0.0.1 fba&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;6. Save the file. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 9: Turn on FBA for the FBA SharePoint Web Application created in Part 5.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open the SharePoint Central Administration web site. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. Click Start | All Programs | Microsoft Office Server | SharePoint 3.0 Central Administration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2. Click the Application Management link. &lt;/p&gt;
&lt;p&gt;3. Click the Authentication providers link. &lt;/p&gt;
&lt;p&gt;4. Click the Extend an existing Web application link. &lt;/p&gt;
&lt;p&gt;5. In the Web Application drop down list, select Change Web 7. Application. &lt;/p&gt;
&lt;p&gt;6. In the Select Web Application popup window, click the default SharePoint Web Application. (SharePoint (80)). &lt;/p&gt;
&lt;p&gt;7. When the page refreshes, click the Extranet link. &lt;/p&gt;
&lt;p&gt;8. On the Edit Authentication page do the following. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. Set Authentication Type to Forms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. Check the Enable anonymous access check box.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c. In the Membership provider name text box enter:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;SP_FBA_DB_AspNetSqlMembershipProvider&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d. In the Role manager name text box enter:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;SP_FBA_DB_AspNetSqlRoleProvider&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;e. Select the no radio button under Enable Client Integration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;9. Click the Save button. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 10: Grant permissions to the SP_FBA_DB_TEST_USER test user you created in the SP_FBA_DB database, so they may access the SharePoint Site.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open the SharePoint Central Administration web site. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. Click Start | All Programs | Microsoft Office Server | SharePoint 3.0 Central Administration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2. Click the Application Management link. &lt;/p&gt;
&lt;p&gt;3. Click the Policy for Web application link. &lt;/p&gt;
&lt;p&gt;4. In the Web Application dropdown select Change Web Application. &lt;/p&gt;
&lt;p&gt;5. Click the SharePoint (80) link. &lt;/p&gt;
&lt;p&gt;6. Click the Add Users button. &lt;/p&gt;
&lt;p&gt;7. In the Zones drop down list select Extranet. &lt;/p&gt;
&lt;p&gt;8. Click the Next &amp;gt; button. &lt;/p&gt;
&lt;p&gt;9. In the Users text box enter the name of the test user created in Part 3. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. The user name is: SP_FBA_DB_TEST_USER.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;10. Click the Check Names button. &lt;/p&gt;
&lt;p&gt;11. In the Choose Permissions section check the Full Control - Has full control. Check box. &lt;/p&gt;
&lt;p&gt;12. Click the Finish button. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Part 11: Test the FBA by logging in with the test user.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;1. Open IE. &lt;/p&gt;
&lt;p&gt;2. Browse to the following url: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. &lt;a href="http://fba/"&gt;http://fba&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;3. You will be prompted with the FBA login page. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. In the user name text box enter: SP_FBA_DB_TEST_USER&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. In the Password text box enter: password&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;4. Click the Sign In button. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff8000;"&gt;Creating your own custom Master Pages and style sheets&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;In the rar file linked at the end of this post, you will find the Master Page and CSS files I used to create the demo site that looked like this.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Demo%20Site%20Screenshot%5B9%5D.png"&gt;&lt;img border="0" width="1151" src="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Demo%20Site%20Screenshot_thumb%5B7%5D.png" height="791" style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff8000;"&gt;Personalizing site content for users&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;In my session, both SharePoint Site Groups and custom Web Parts were used to personalize a user&amp;#39;s experience.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;To demonstrate how to personalize a user&amp;#39;s experience within a custom Web Part I created a custom Web Part to&amp;nbsp;surface ski report data via the BDC.&amp;nbsp; &lt;/span&gt;&lt;span style="color:#000000;"&gt;The custom Web Part I created to surface information from the BDC allowed users to specify which view of the data they would like to see.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;Turning on the enhanced view of the custom Web Part looks like this: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Enhanced%20View%5B1%5D.png"&gt;&lt;img border="0" width="308" src="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Enhanced%20View_thumb%5B1%5D.png" height="538" style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Notice that some values are rendered in &lt;strong&gt;bold&lt;/strong&gt; and in the color &lt;strong&gt;&lt;span style="color:#008000;"&gt;green&lt;/span&gt;&lt;/strong&gt; when the enhanced view is turned on.&amp;nbsp; This helps you quickly determine which resorts you need to go shred! &lt;/p&gt;
&lt;p&gt;Turning off the enhanced view of the custom Web Part looks like this: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Non-Enhanced%20View%5B1%5D.png"&gt;&lt;img border="0" width="307" src="http://www.sharepointblogs.com/blogs/tbaginski/WindowsLiveWriter/SharePointConnectionsSessionFollowUpCrea_CE0B/Non-Enhanced%20View_thumb%5B1%5D.png" height="541" style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" alt="" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;The code inside the custom Web Part that made this personalization possible looks like this:&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;bool enhancedView; &lt;/p&gt;
&lt;p&gt;[WebBrowsable(true),&lt;br /&gt;Category(&amp;quot;BDC Configuration&amp;quot;),&lt;br /&gt;Personalizable(PersonalizationScope.User),&lt;br /&gt;DefaultValue(true),&lt;br /&gt;WebDisplayName(&amp;quot;Display enhanced view&amp;quot;),&lt;br /&gt;WebDescription(&amp;quot;Toggles the way the data is presented.&amp;quot;)]&lt;br /&gt;public bool EnhancedView&lt;br /&gt;{&lt;br /&gt;get { return enhancedView; }&lt;br /&gt;set { enhancedView = value; }&lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;Notice the Personalizable attribute, in this case, is set to PersonalizationScope.User.&amp;nbsp; This specifies that the value of the property will be stored individually for each user who accesses the site.&amp;nbsp; This property value is stored in the SharePoint database.&lt;/p&gt;
&lt;p&gt;The complete source code for this Web Part may be found i&lt;span style="color:#000000;"&gt;n the rar file linked at the end of this post.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff8000;"&gt;&lt;strong&gt;Leveraging the Business Data Catalog to surface and interact with back end systems&lt;/strong&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;This portion of my presentation showed how to use the out of the box BDC Web Parts to surface data from back end systems in SharePoint sites secured via Windows Credentials with the Active Directory, as well as showing how to expose BDC data from within a SharePoint site secured via FBA. &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;&lt;em&gt;The out of the box BDC Web Parts do not work in SharePoint sites secured via FBA.&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; So, in order to surface BDC data in a SharePoint site secured via FBA, I created&amp;nbsp;a custom Web Part and Web Service to access the BDC data.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;The complete source code for the custom&amp;nbsp;Web Part class and the custom Web Service class used to surface BDC data within a SharePoint site secured via FBA may be found i&lt;span style="color:#000000;"&gt;n the rar file linked at the end of this post.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;As you will see below, returning data from the BDC requires many different steps to be taken.&amp;nbsp; Hopefully the comments I provided in the code sample below adequately describe how this process is accomplished.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="color:#000000;"&gt;The real nuts and bolts associated with returning data from the BDC looks like this.&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;[WebMethod]&lt;br /&gt;public DataSet QueryBDC(string sharedResourceProviderName, string lobSystemInstanceName, string entityName)&lt;br /&gt;{&lt;/p&gt;
&lt;p&gt;//The DataTable the results from the BDC are stored in&lt;br /&gt;DataTable dataTable = new DataTable(&amp;quot;Resorts&amp;quot;); &lt;/p&gt;
&lt;p&gt;//The DataSet the Web Service returns&lt;br /&gt;DataSet dataSet = new DataSet(); &lt;/p&gt;
&lt;p&gt;//Specify which SSP to use to access BDC data&lt;br /&gt;SqlSessionProvider.Instance().SetSharedResourceProviderToUse(sharedResourceProviderName);&lt;/p&gt;
&lt;p&gt;//Create a collection of all the LOB System Instances in the BDC&lt;br /&gt;NamedLobSystemInstanceDictionary sysInstances = ApplicationRegistry.GetLobSystemInstances();&lt;/p&gt;
&lt;p&gt;//Create an object representing the LobSystemInstance to return the data from&lt;br /&gt;LobSystemInstance lobSystemInstance = sysInstances[lobSystemInstanceName];&lt;/p&gt;
&lt;p&gt;//Create an object representing the Entity to return the data from&lt;br /&gt;Entity bdcEntity = lobSystemInstance.GetEntities()[entityName]; &lt;/p&gt;
&lt;p&gt;//Create an object representing the MethodInstance to invoke on the Entity&lt;br /&gt;MethodInstance methInst = bdcEntity .GetFinderMethodInstance();&lt;/p&gt;
&lt;p&gt;//Create an object we can use to loop through the data returned&lt;br /&gt;IEntityInstanceEnumerator bdcEntityInstanceEnumerator =&lt;br /&gt;(IEntityInstanceEnumerator)bdcEntity.Execute(methInst,&lt;br /&gt;lobSystemInstance);&lt;/p&gt;
&lt;p&gt;//Create a collection of all the fields returned&lt;br /&gt;FieldCollection fieldCollection = bdcEntity.GetFinderView().Fields;&lt;/p&gt;
&lt;p&gt;//Loop through the collection to create the DataColumns in the DataTable that will hold the results&lt;br /&gt;foreach (Field field in fieldCollection)&lt;br /&gt;{&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;DataColumn dataColumn = new DataColumn(field.Name, Type.GetType(field.TypeDescriptor.TypeName));&lt;br /&gt;dataTable.Columns.Add(dataColumn);&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;//Populate the DataTable with the data&lt;br /&gt;while (bdcEntityInstanceEnumerator.MoveNext())&lt;br /&gt;{&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IEntityInstance iEntityInstance = bdcEntityInstanceEnumerator.Current;&lt;br /&gt;DataRow dataRow = dataTable.NewRow();&lt;/p&gt;
&lt;p&gt;foreach (Field field in bdcEntity.GetFinderView().Fields)&lt;br /&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (iEntityInstance[field] != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataRow[field.Name] = iEntityInstance[field];&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataTable.Rows.Add(dataRow);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;//Add the DataTable to the DataSet&lt;br /&gt;dataSet.Tables.Add(dataTable); &lt;/p&gt;
&lt;p&gt;//Return the DataSet&lt;br /&gt;return dataSet; &lt;/p&gt;
&lt;p&gt;} &lt;/p&gt;
&lt;p&gt;Here is a link to the rar file that contains all the code you will need to replicate the demos I created for my session. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry23216.aspx"&gt;http://www.sharepointblogs.com/files/folders/tbaginski/entry23216.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;In the rar file you will also find the following items to help you recreate this solution. &lt;/p&gt;
&lt;p&gt;1. SQL Script to create the TPG (Todd&amp;#39;s Powder Guides) database and Resorts Table that holds the ski resort data. &lt;/p&gt;
&lt;p&gt;2. A tab delimited text file containing the sample data I used in my demo. &lt;/p&gt;
&lt;p&gt;3.&amp;nbsp;The BDC Application Definition representing the Resorts Table in the TPG database. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;*Note: Make sure you change the following line of XML in the BDC Application Definition to point to your database server before you import the Application Definition into the BDC.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;Property Name=&amp;quot;RdbConnection Data Source&amp;quot; Type=&amp;quot;System.String&amp;quot;&amp;gt;&lt;strong&gt;YOUR DATABASE NAME GOES HERE&lt;/strong&gt;&amp;lt;/Property&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img width="1" src="http://www.sharepointblogs.com/aggbug.aspx?PostID=23215" height="1" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/04/13/sharepoint-connections-session-follow-up-create-an-internet-facing.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1810" width="1" height="1"&gt;</description></item><item><title>SharePoint Connections - Sessions Follow Ups</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/04/12/sharepoint-connections-sessions-follow-ups.aspx</link><pubDate>Fri, 13 Apr 2007 00:35:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1811</guid><dc:creator>tbaginski</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1811</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/04/12/sharepoint-connections-sessions-follow-ups.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/04/13/sharepoint-connections-sessions-follow-ups.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Thanks to everyone who attended the sessions I presented at the SharePoint Connections conference in Orlando!&amp;nbsp; I had a great time at the conference, and met a lot of great people there as well.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;following blog posts will come after this one, to break down each topic, and describe the code I used in my demos at the conference.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Create an Internet-Facing SharePoint Site&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Integrate Smart Client and Windows Forms Applications with SharePoint Sites and the Business Data Catalog&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use the Visual Studio Extensions for Windows SharePoint Services to Create Custom Site Definitions and a Whole Lot More!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="color:#ff8000;"&gt;&lt;strong&gt;Thanks again&lt;/strong&gt;&lt;/span&gt; for attending my sessions!&amp;nbsp; I hope to see you again this Fall in Las Vegas at the next SharePoint Connections conference where I will be presenting the following sessions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Getting the most out of the Business Data Catalog&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Implementing the MOSS SSO service in real world situations&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SharePoint Object Model / Web Services Kick Start&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#39;m also &lt;em&gt;&lt;strong&gt;thrilled&lt;/strong&gt;&lt;/em&gt; that I was selected to present the Post-Conference session in Las Vegas!&amp;nbsp; The post-conference session is titled:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Hands on training - SharePoint Development Bootcamp&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;During this post conference workshop I&amp;#39;ll present/teach modules from my SharePoint Development Bootcamp.&amp;nbsp; Each module has a short slide presentation, followed by a quick demo, then a lab exercise.&lt;/p&gt;
&lt;p&gt;Attendees will be provided with handouts for all of the modules covered.&amp;nbsp; Each handout includes the bullet points in the slides, complete with detailed notes, explanantions, and screenshots related to each bullet point on the slide.&amp;nbsp; Each handout also includes click by click lab instructions that describe how to accomplish the lab.&amp;nbsp; All code snippets and materials needed to complete each lab will also be provided. &lt;/p&gt;
&lt;p&gt;Attendees may complete the hands on labs during this POST-CON event, and I will assist them during lab time. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The bottom line:&lt;/strong&gt;&amp;nbsp; This is a bonafide day of interactive SharePoint development training, not just presentations.&amp;nbsp; I encourage all attendees&amp;nbsp;to come armed with a SharePoint development environment to use during lab time at the post conference session!&lt;/p&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/04/13/sharepoint-connections-sessions-follow-ups.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&lt;img width="1" src="http://www.sharepointblogs.com/aggbug.aspx?PostID=23207" height="1" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1811" width="1" height="1"&gt;</description></item><item><title>HOW TO: Create a custom Windows Workflow Activity and make it available in SharePoint Designer</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/03/08/how-to-create-a-custom-windows-workflow-activity-and-make-it-available-in-sharepoint-designer.aspx</link><pubDate>Fri, 09 Mar 2007 02:06:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1812</guid><dc:creator>tbaginski</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1812</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/03/08/how-to-create-a-custom-windows-workflow-activity-and-make-it-available-in-sharepoint-designer.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/03/09/how-to-create-a-custom-windows-workflow-activity-and.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Update: I am no longer a member of SharePoint Experts.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Recently we (&lt;a href="http://www.sharepointexperts.com/"&gt;SharePoint Experts&lt;/a&gt;) have been utilizing Workflows inside MOSS to automate many of our internal business processes. Last night, while trying to automate a process, &lt;a href="http://www.sharepointblogs.com/dustin/default.aspx"&gt;Dustin&lt;/a&gt; let me know that the Send an Email Activity, available by default in SPD, does not allow you to specify a from email address. He asked me if I could create a custom Workflow Activity to send emails that would provide the ability to specify a from email address. &lt;/p&gt;
&lt;p&gt;I looked at several examples on the Internet and inside the ECM Starter Kit and none of the materials I found online provide step by step instructions. This slowed down my development efforts and made me think that this topic would be an excellent blog post to help people out, so I&amp;#39;m typing it up to help everyone who may want to create a custom Windows Workflow Activity and make it available in SharePoint Designer. &lt;/p&gt;
&lt;p&gt;I developed the C# code you will see in this blog post and &lt;a href="http://www.sharepointblogs.com/dustin/default.aspx"&gt;Dustin&lt;/a&gt; was instrumental in helping me hook in the existing form that is utilized by the out of the box Send an Email Activity in SPD. &lt;/p&gt;
&lt;p&gt;To begin, let&amp;#39;s cover the components necessary to create a custom Windows Workflow Activity and make it available in SPD. &lt;/p&gt;
&lt;p&gt;The main pieces of the puzzle are as follows: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The assembly that contains the custom Workflow Activity class. &lt;/li&gt;
&lt;li&gt;The web.config file corresponding to the SharePoint Web Application on your server where the custom Workflow Activity will be used. &lt;/li&gt;
&lt;li&gt;The WSS.ACTIONS file on your SharePoint server that registers Workflow Actions with SPD. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The following instructions will create a custom Workflow Activity in VS 2005. The Activity takes several input parameters and sends an email based on the parameters. This Activity reuses the existing form that is utilized by the out of the box Send an Email Activity in SPD which provides the ability to look up users to populate the To and CC fields, as well as entering the Subject and Body for the email. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;strong&gt;Fabian Mortiz has an excellent article that describes how to&amp;nbsp;take my code sample and extend it to read lookup fields&amp;nbsp;inside the body of the email.&amp;nbsp; You can find his article here:&amp;nbsp; &lt;/strong&gt;&lt;a href="http://weblogs.mysharepoint.de/fabianm/archive/2007/08/27/workflow-entwicklung-teil-2-e-mail-aktivit-t-mit-benutzerdefinierter-absenderadresse-f-r-den-sharepoint-designer.aspx"&gt;http://weblogs.mysharepoint.de/fabianm/archive/2007/08/27/workflow-entwicklung-teil-2-e-mail-aktivit-t-mit-benutzerdefinierter-absenderadresse-f-r-den-sharepoint-designer.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here is a list of the input parameters this custom Activity uses: &lt;/p&gt;
&lt;p&gt;SMTPServerName &amp;ndash; specifies which SMTP server will send the email. &lt;/p&gt;
&lt;p&gt;FromEmailAddress &amp;ndash; specifies who the email is from. &lt;/p&gt;
&lt;p&gt;To &amp;ndash; specifies who the email is sent to. &lt;/p&gt;
&lt;p&gt;Subject &amp;ndash; specifies the subject of the email. &lt;/p&gt;
&lt;p&gt;Body &amp;ndash; specifies the body of the email. &lt;/p&gt;
&lt;p&gt;CC - specifies who will be copied on the email.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To create the assembly that contains the custom Workflow Activity class, perform the following steps. &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open VS 2005. &lt;/li&gt;
&lt;li&gt;Click File| New | Project. &lt;/li&gt;
&lt;li&gt;In the Project Types tree select Workflow. &lt;/li&gt;
&lt;li&gt;In the Templates list box select Workflow Activity Library. &lt;/li&gt;
&lt;li&gt;In the Name text box enter Sample.ActivityLibrary. &lt;/li&gt;
&lt;li&gt;Click the OK button. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;To create the class for the custom Workflow Activity, perform the following steps. &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the Solution Explorer, right click the Sample.ActivityLibrary node. &lt;/li&gt;
&lt;li&gt;Select Add | Activity. &lt;/li&gt;
&lt;li&gt;In the Add New Item window, select Visual C# Project Items in the Categories tree. &lt;/li&gt;
&lt;li&gt;Select Activity in the Templates list box. &lt;/li&gt;
&lt;li&gt;In the Name text box enter CustomEmailActivity.cs. &lt;/li&gt;
&lt;li&gt;Click the Add button. &lt;/li&gt;
&lt;li&gt;In the Solution Explorer, right click the CustomEmailActivity.cs file and select View Code. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Replace the contents of the class with the following code: &lt;/div&gt;
&lt;code&gt;
&lt;p&gt;using System;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.ComponentModel.Design;&lt;br /&gt;using System.Collections; &lt;br /&gt;using System.Diagnostics; &lt;br /&gt;using System.Drawing; &lt;br /&gt;using System.Workflow.ComponentModel; &lt;br /&gt;using System.Workflow.ComponentModel.Design; &lt;br /&gt;using System.Workflow.ComponentModel.Compiler; &lt;br /&gt;using System.Workflow.ComponentModel.Serialization; &lt;br /&gt;using System.Workflow.Runtime; &lt;br /&gt;using System.Workflow.Activities; &lt;br /&gt;using System.Workflow.Activities.Rules; &lt;/p&gt;
&lt;p&gt;namespace Sample.ActivityLibrary &lt;br /&gt;{ &lt;br /&gt;/// &amp;lt;summary&amp;gt; &lt;br /&gt;/// This class deines a custom Windows Workflow Activity that sends emails &lt;br /&gt;/// &amp;lt;/summary&amp;gt; &lt;br /&gt;public partial class CustomEmailActivity : Activity &lt;br /&gt;{ &lt;/p&gt;
&lt;p&gt;//Create a variable to access the Event Log when errors need to be logged &lt;br /&gt;private EventLog _eventLog; &lt;/p&gt;
&lt;p&gt;#region DepedencyProperties for the Activity &lt;/p&gt;
&lt;p&gt;public static DependencyProperty BCCProperty = DependencyProperty.Register(&amp;quot;BCC&amp;quot;, typeof(ArrayList), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty BodyProperty = DependencyProperty.Register(&amp;quot;Body&amp;quot;, typeof(string), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty CCProperty = DependencyProperty.Register(&amp;quot;CC&amp;quot;, typeof(ArrayList), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty SubjectProperty = DependencyProperty.Register(&amp;quot;Subject&amp;quot;, typeof(string), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty ToProperty = DependencyProperty.Register(&amp;quot;To&amp;quot;, typeof(ArrayList), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty FromEmailAddressProperty = DependencyProperty.Register(&amp;quot;FromEmailAddress&amp;quot;, typeof(string), typeof(CustomEmailActivity)); &lt;br /&gt;public static DependencyProperty SMTPServerNameProperty = DependencyProperty.Register(&amp;quot;SMTPServerName&amp;quot;, typeof(string), typeof(CustomEmailActivity)); &lt;/p&gt;
&lt;p&gt;#endregion &lt;/p&gt;
&lt;p&gt;#region Properties &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Required)] &lt;br /&gt;public string FromEmailAddress &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (string)base.GetValue(FromEmailAddressProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(FromEmailAddressProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Required)] &lt;br /&gt;public string SMTPServerName &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (string)base.GetValue(SMTPServerNameProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(SMTPServerNameProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Optional)] &lt;br /&gt;public string Body &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (string)base.GetValue(BodyProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(BodyProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Optional)] &lt;br /&gt;public ArrayList CC &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (ArrayList)base.GetValue(CCProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(CCProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Required)] &lt;br /&gt;public string Subject &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (string)base.GetValue(SubjectProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(SubjectProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;[ValidationOption(ValidationOption.Required)] &lt;br /&gt;public ArrayList To &lt;br /&gt;{ &lt;br /&gt;get &lt;br /&gt;{ &lt;br /&gt;return (ArrayList)base.GetValue(ToProperty); &lt;br /&gt;} &lt;br /&gt;set &lt;br /&gt;{ &lt;br /&gt;base.SetValue(ToProperty, value); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;#endregion &lt;/p&gt;
&lt;p&gt;#region Contructor &lt;/p&gt;
&lt;p&gt;public CustomEmailActivity() &lt;br /&gt;{ &lt;br /&gt;InitializeComponent(); &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;#endregion &lt;/p&gt;
&lt;p&gt;#region Overidden Methods &lt;/p&gt;
&lt;p&gt;protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) &lt;br /&gt;{ &lt;br /&gt;//Set up the Event Logging object &lt;br /&gt;_eventLog = new EventLog(&amp;quot;Workflow&amp;quot;); &lt;br /&gt;_eventLog.Source = &amp;quot;SharePoint Workflow&amp;quot;; &lt;/p&gt;
&lt;p&gt;try &lt;br /&gt;{ &lt;br /&gt;//Send the email &lt;br /&gt;SendEmail(); &lt;br /&gt;} &lt;br /&gt;finally &lt;br /&gt;{ &lt;br /&gt;//Dispose of the Event Logging object &lt;br /&gt;_eventLog.Dispose(); &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;//Indicate the activity has closed &lt;br /&gt;return ActivityExecutionStatus.Closed; &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;#endregion &lt;/p&gt;
&lt;p&gt;#region Private Methods &lt;/p&gt;
&lt;p&gt;private void SendEmail() &lt;br /&gt;{ &lt;br /&gt;try &lt;br /&gt;{ &lt;br /&gt;//Create a new object that will send the email &lt;br /&gt;System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage(); &lt;br /&gt;//Create an object to specify the from address for the email &lt;br /&gt;System.Net.Mail.MailAddress fromAddress = new System.Net.Mail.MailAddress(FromEmailAddress); &lt;br /&gt;//Set the from email address on the message object &lt;br /&gt;msg.From = fromAddress; &lt;br /&gt;//Add the email addresses stored in the To property to the email message object &lt;br /&gt;for (int i = 0; i &amp;lt; To.Count; i++) &lt;br /&gt;{ &lt;br /&gt;msg.To.Add(To[ i ].ToString()); &lt;br /&gt;} &lt;br /&gt;//Add the email addresses stored in the CC property to the email message object &lt;br /&gt;for (int i = 0; i &amp;lt; CC.Count; i++) &lt;br /&gt;{ &lt;br /&gt;msg.CC.Add(CC[ i ].ToString()); &lt;br /&gt;} &lt;br /&gt;//Mark the message body as HTML &lt;br /&gt;msg.IsBodyHtml = true; &lt;br /&gt;//Populate the subject for the message &lt;br /&gt;msg.Subject = Subject; &lt;br /&gt;//Populate the body for the message &lt;br /&gt;msg.Body = Body; &lt;br /&gt;//Create an object to represent the mail server that will send the message &lt;br /&gt;System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(SMTPServerName); &lt;br /&gt;//Set the credentials used to authenticate to the email server &lt;br /&gt;client.UseDefaultCredentials = true; &lt;br /&gt;//Send the message &lt;br /&gt;client.Send(msg); &lt;br /&gt;} &lt;br /&gt;catch (System.Exception Ex) &lt;br /&gt;{ &lt;br /&gt;//Log exceptions in the Event Log &lt;br /&gt;_eventLog.WriteEntry(&amp;quot;SMTP Server Name: &amp;quot; + SMTPServerName + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;From: &amp;quot; + FromEmailAddress + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;To: &amp;quot; + To + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;CC: &amp;quot; + CC + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;Subject: &amp;quot; + Subject + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;Body: &amp;quot; + Body + &lt;br /&gt;Environment.NewLine + &lt;br /&gt;&amp;quot;Error: &amp;quot; + Ex.InnerException.ToString() &lt;br /&gt;, EventLogEntryType.Information); &lt;br /&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;p&gt;#endregion &lt;/p&gt;
&lt;p&gt;} &lt;br /&gt;} &lt;/p&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Save the file. &lt;/li&gt;
&lt;li&gt;Click Build | Build Sample.ActivityLibrary.&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Finally, sign the assembly. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Right click on the Sample.ActivityLibrary node in the Solution Explorer. &lt;/li&gt;
&lt;li&gt;Select Properties. &lt;/li&gt;
&lt;li&gt;Click the Signing tab. &lt;/li&gt;
&lt;li&gt;Check the Sign the assembly checkbox. &lt;/li&gt;
&lt;li&gt;In the Choose a strong name key file dropdown list select New. &lt;/li&gt;
&lt;li&gt;Name the key file Sample.ActivityLibrary.snk. &lt;/li&gt;
&lt;li&gt;Uncheck the Protect my key file with a password checkbox. &lt;/li&gt;
&lt;li&gt;Click the OK button. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Build the Assembly. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Obtain the PublicKeyToken for your assembly. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Open a command prompt. &lt;/li&gt;
&lt;li&gt;Change to the output directory of your Sample.ActivityLibrary project. &lt;/li&gt;
&lt;li&gt;Issue the following command: sn &amp;ndash;T Sample.ActivityLibrary.dll &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Copy the value returned, and paste it into the AssemblyInfo.cs file in the Sample.ActivityLibrary project. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;You will use this value later in the deployment process. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Make sure you comment out the line, like this:
&lt;p&gt;&lt;code&gt;//Public key token is &amp;lt;Your PublicKeyToken will appear here&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Deploy the assembly to the GAC on your SharePoint Server. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;To edit the web.config file on your SharePoint server so the Activity has permissions to execute, perform the following steps. &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the web.config file corresponding to the SharePoint Web Application on your server where the custom Workflow Activity will be used. &lt;/li&gt;
&lt;li&gt;Locate the &amp;lt;authorizedTypes&amp;gt; section. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Add the following XML inside the &amp;lt;authorizedTypes&amp;gt; section: &lt;/div&gt;
&lt;code&gt;
&lt;p&gt;&amp;lt;authorizedType Assembly=&amp;quot;Sample.ActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=&amp;lt;Insert Your PublicKeyToken Here&amp;gt; &amp;quot; Namespace=&amp;quot;Sample.ActivityLibrary&amp;quot; TypeName=&amp;quot;*&amp;quot; Authorized=&amp;quot;True&amp;quot; /&amp;gt; &lt;/p&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Return to your AssemblyInfo.cs file. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Copy the Public Key Token you added to the class.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Return to the web.config file. &lt;/li&gt;
&lt;li&gt;Replace the &amp;lt;Insert Your PublicKeyToken Here&amp;gt; placeholder with the value you copied from the web.config file.&lt;/li&gt;
&lt;li&gt;Save the web.config file. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;To edit the WSS.ACTIONS file on your SharePoint server register the custom Activity with SPD, perform the following steps. &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Open the WSS.ACTIONS file on your SharePoint server. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;The file is located in the following directory: &lt;/li&gt;
&lt;/ol&gt;
&lt;p style="MARGIN-LEFT:18pt;"&gt;C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1033\Workflow &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Locate the &amp;lt;Actions&amp;gt; section. &lt;/li&gt;
&lt;li&gt;Add the following XML inside the &amp;lt;Actions&amp;gt; section. &lt;/li&gt;
&lt;code&gt;
&lt;p&gt;&amp;lt;Action Name=&amp;quot;Custom Email Action&amp;quot; &lt;br /&gt;ClassName=&amp;quot;Sample.ActivityLibrary.CustomEmailActivity&amp;quot; &lt;br /&gt;Assembly=&amp;quot;Sample.ActivityLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9fed0241ddc0b7ef&amp;quot; &lt;br /&gt;AppliesTo=&amp;quot;all&amp;quot; &lt;br /&gt;Category=&amp;quot;Sample&amp;quot;&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;RuleDesigner Sentence=&amp;quot;Send %1 from %2 via SMTP host %3.&amp;quot;&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;FieldBind Field=&amp;quot;To,CC,Subject,Body&amp;quot; Text=&amp;quot;this message&amp;quot; DesignerType=&amp;quot;Email&amp;quot; Id=&amp;quot;1&amp;quot;/&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;FieldBind Field=&amp;quot;FromEmailAddress&amp;quot; Text=&amp;quot;this address&amp;quot; Id=&amp;quot;2&amp;quot; DesignerType=&amp;quot;TextArea&amp;quot;/&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;FieldBind Field=&amp;quot;SMTPServerName&amp;quot; Text=&amp;quot;SMTP Server&amp;quot; Id=&amp;quot;3&amp;quot; DesignerType=&amp;quot;TextArea&amp;quot;/&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/RuleDesigner&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameters&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;To&amp;quot; Type=&amp;quot;System.Collections.ArrayList, mscorlib&amp;quot; Direction=&amp;quot;In&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;CC&amp;quot; Type=&amp;quot;System.Collections.ArrayList, mscorlib&amp;quot; Direction=&amp;quot;Optional&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;Subject&amp;quot; Type=&amp;quot;System.String, mscorlib&amp;quot; Direction=&amp;quot;In&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;Body&amp;quot; Type=&amp;quot;System.String, mscorlib&amp;quot; Direction=&amp;quot;Optional&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;FromEmailAddress&amp;quot; Type=&amp;quot;System.String, mscorlib&amp;quot; Direction=&amp;quot;In&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Parameter Name=&amp;quot;SMTPServerName&amp;quot; Type=&amp;quot;System.String, mscorlib&amp;quot; Direction=&amp;quot;In&amp;quot; InitialValue=&amp;quot;127.0.0.1&amp;quot; /&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Parameters&amp;gt; &lt;br /&gt;&amp;lt;/Action&amp;gt; &lt;br /&gt;&lt;/p&gt;
&lt;/code&gt;
&lt;li&gt;Save the file. &lt;/li&gt;
&lt;li&gt;Reset IIS. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So what does this XML do? Let me explain. &lt;/p&gt;
&lt;p&gt;The Action element specifies how the Activity will appear and be categorized when you click the Add button in SPD to add an Activity to a Workflow. The Action element also specifies what assembly and class the Action is contained in. &lt;/p&gt;
&lt;p&gt;The RuleDesigner element specifies the text and links displayed in SPD once the Activity has been added to a Workflow in SPD. &lt;/p&gt;
&lt;p&gt;The FieldBind elements inside the RuleDesigner element map the input controls to the Parameter elements defined in the Parameters element. Their IDs correspond to the %# arguments in the Sentence attribute inside the RuleDesigner element. The Text attributes correspond to the links displayed in SPD. The DesignerType attributes correspond to the type of control that will be used for input. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notice the following line of XML is used to map multiple properties to the out of the box form that comes with the Send an Email Action. This is how we were able to reuse that form! &lt;/strong&gt;&lt;/p&gt;
&lt;p style="MARGIN-LEFT:18pt;"&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;FieldBind Field=&amp;quot;To,CC,Subject,Body&amp;quot; Text=&amp;quot;this message&amp;quot; DesignerType=&amp;quot;Email&amp;quot; Id=&amp;quot;1&amp;quot;/&amp;gt; &lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Parameter elements map the properties of the custom Workflow Action to the properties defined in the class that represents the custom Workflow Activity. The Name attributes must match the names of the properties defined in the class that represents the custom Workflow Activity. The Type attributes must match the types of the properties defined in the class that represents the custom Workflow Activity. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To test the activity, perform the following steps. These steps will create a simple workflow and deploy it to the Announcements list in a Team Site. &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a Team Site on your SharePoint Server. &lt;/li&gt;
&lt;li&gt;Open SharePoint Designer. &lt;/li&gt;
&lt;li&gt;Click File | Open Site. &lt;/li&gt;
&lt;li&gt;In the Site name text box, type in the URL to the Team Site you just created. &lt;/li&gt;
&lt;li&gt;Click the Open button. &lt;/li&gt;
&lt;li&gt;Click File | New | Workflow. &lt;/li&gt;
&lt;li&gt;In the Give a name to this workflow text box enter: Custom Email Action Test Workflow. &lt;/li&gt;
&lt;li&gt;Click the Next button. &lt;/li&gt;
&lt;li&gt;Click the Actions button and select More Actions. &lt;/li&gt;
&lt;li&gt;In the Select a Category drop down list select Sample. &lt;/li&gt;
&lt;li&gt;Highlight Custom Email Action in the Choose an Action list box. &lt;/li&gt;
&lt;li&gt;Click the Add button. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The Custom Email Action then appears in SPD, it looks like this: &lt;/div&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2450/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2450/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/files/folders/tbaginski/entry20677.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Next, click the &amp;#39;this message&amp;#39; link. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The out of the box form that comes with the Send an Email Activity will appear since we are reusing it. It looks like this after you populate it with values. &lt;/div&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2451/original.aspx"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2452/original.aspx"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2454/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2454/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Click the OK button when you are finished filling out the form. &lt;/li&gt;
&lt;li&gt;Next click the &amp;#39;this address&amp;#39; link and type in who the email is from. &lt;/li&gt;
&lt;li&gt;Finally, click the &amp;#39;127.0.0.1&amp;#39; link and type in the name of your mail server if it is different from your SharePoint server. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;When you are finished specifying parameters, SPD looks like this (Note: you screen will look different when you use different parameters.): &lt;/div&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2451/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2451/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Click the Finish button. &lt;/li&gt;
&lt;li&gt;Open IE and navigate to the Team Site you created in step 1 above. &lt;/li&gt;
&lt;li&gt;Click the Announcements link. &lt;/li&gt;
&lt;li&gt;Mouse over the Get Started with Windows SharePoint Services! List Item. &lt;/li&gt;
&lt;li&gt;Right click the arrow that appears and select Workflows in the drop down menu. &lt;/li&gt;
&lt;li&gt;Select the Custom Email Action Test Workflow you just created by clicking on the hyperlink. &lt;/li&gt;
&lt;li&gt;When the page refreshes, click the Start button to start the workflow. &lt;/li&gt;
&lt;li&gt;When the page refreshes you will see the Custom Email Action Test Workflow has completed. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;The page will look like this: &lt;/div&gt;
&lt;p&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2452/original.aspx" alt="" /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Victory!&amp;nbsp;&amp;nbsp;Well done, you just created a custom Windos Workflow Activity, registered it with SPD, and used it inside a&amp;nbsp;SharePoint Workflow!&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTES: &lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;If sending the email fails, you will notice the status will be set to &amp;#39;Completed&amp;#39; inside the List the workflow has been assigned to. This is because I did not return any failure information to SharePoint when an exception occurred while trying to send the email, since I am trying to keep this example simple. &lt;/li&gt;
&lt;li&gt;
&lt;div&gt;To see diagnostic information related to the Workflow, look in the Event Logs. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;To demonstrate the Event Logging built into the custom Activity, I configured my mail server to deny relaying to show you an example of the information logged in the Event Log when an Exception occurs.&amp;nbsp; This is what it looks like: &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.sharepointblogs.com/photos/tbaginski/images/2453/original.aspx"&gt;&lt;img border="0" src="http://www.sharepointblogs.com/photos/tbaginski/images/2453/original.aspx" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;As you can see, the email was not sent due to the relaying permissions set on my development server. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Another thing that this custom Workflow Activity does not implement is validation of user input, so you&amp;#39;ll need to add that on your own. &lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;For example, if you enter an invalid email address, like &amp;quot;user&amp;quot;, instead of users@user.com, the .NET objects that send email will fail. &lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/03/09/how-to-create-a-custom-windows-workflow-activity-and.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1812" width="1" height="1"&gt;</description></item><item><title>SharePoint Feature Manager - Updated Version Now Available</title><link>http://www.sharepointblogs.com/tbaginski/archive/2007/03/05/sharepoint-feature-manager-updated-version-now-available.aspx</link><pubDate>Tue, 06 Mar 2007 01:01:00 GMT</pubDate><guid isPermaLink="false">1f6a1193-f4bb-4480-a5ae-b538d8b20f46:1813</guid><dc:creator>tbaginski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.sharepointblogs.com/tbaginski/rsscomments.aspx?PostID=1813</wfw:commentRss><comments>http://www.sharepointblogs.com/tbaginski/archive/2007/03/05/sharepoint-feature-manager-updated-version-now-available.aspx#comments</comments><description>&lt;p&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/03/06/sharepoint-feature-manager-updated-version-now-available.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;open this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;Today I updated the SharePoint Feature Manager&amp;nbsp;based on feedback I have received about the application.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The status text box now automatically scrolls after each operation is completed.&amp;nbsp; This should make the program easier to use.&lt;/p&gt;
&lt;p&gt;You can download it here: &lt;a href="http://www.sharepointblogs.com/files/folders/tbaginski/entry2449.aspx"&gt;http://www.sharepointblogs.com/files/folders/tbaginski/entry2449.aspx&lt;/a&gt;&lt;a href="http://www.sharepointblogs.com/files/97/tbaginski/entry8420.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="1" src="http://www.sharepointblogs.com/aggbug.aspx?PostID=20437" height="1" alt="" /&gt;
&lt;table frame="box" border="2" align="center" cellpadding="5" cellspacing="0" style="BORDER-RIGHT:#000000 2px solid;BORDER-TOP:#000000 2px solid;BORDER-LEFT:#000000 2px solid;BORDER-BOTTOM:#000000 2px solid;BACKGROUND-COLOR:#ffcc33;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;This blog has moved.&amp;nbsp; &lt;a href="http://www.toddbaginski.com/blog/archive/2007/03/06/sharepoint-feature-manager-updated-version-now-available.aspx"&gt;Click here&lt;/a&gt; to&amp;nbsp;comment on this post on my new blog.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://www.sharepointblogs.com/aggbug.aspx?PostID=1813" width="1" height="1"&gt;</description></item></channel></rss>