<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4028665687514805882</id><updated>2011-12-11T19:24:44.879+11:00</updated><category term='response.binarywrite linkbutton server side click event not firing'/><category term='C# RSS Atom Read'/><category term='Sharepoint tools CAML Query'/><category term='Color coding List item based on date'/><category term='SPWeb object closed disposed trying'/><category term='build CAML Query'/><category term='sharepoint custom property Webpart dynamic dropdown dropdownlist'/><category term='Color Coded SharePoint Calendar'/><category term='ReadOnly TextBox C# value'/><category term='WebUserControl ASP.Net WebSite'/><category term='Sharepoint extending stsadm custom action'/><category term='sharepoint list traffic lights CEWP script'/><category term='SharePoint Links'/><category term='CalendarExtender selected date ReadOnly TextBox'/><category term='Hide Fields Calendar SharePoint'/><category term='ReportViewer WebPart SharePoint'/><category term='Sharepoint AJAX MOSS'/><title type='text'>Developer's Tips and Tricks</title><subtitle type='html'>This blog is for development tips and tricks mainly on .NET and SharePoint development which could save time of someone like me.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-3949658189913790785</id><published>2011-03-21T19:22:00.000+11:00</published><updated>2011-03-21T19:22:51.298+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebUserControl ASP.Net WebSite'/><title type='text'>Adding instance of WebUserControl to ASP.Net website project</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It can easily be done using namespaces. Here's an example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WebControl1.ascx:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notice that Inherits references the namespace (MyUserControls), and not just the class name (WebControl1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WebControl1.ascx.cs:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace MyUserControls { public partial class WebControl1 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } } } Notice that the class have been included in the namespace MyUserControls&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Default.aspx.cs:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using MyUserControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { var control = (WebControl1) Page.LoadControl("~/WebControl1.ascx"); } } This approach potentially allow you to redistribute your user controls (or keep them in a separate project) without the hassle of referencing them in your .aspx files.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-3949658189913790785?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://stackoverflow.com/questions/1290592/dynamically-load-a-user-control-ascx-in-a-asp-net-website/1290685#1290685' title='Adding instance of WebUserControl to ASP.Net website project'/><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/3949658189913790785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=3949658189913790785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3949658189913790785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3949658189913790785'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2011/03/adding-instance-of-webusercontrol-to.html' title='Adding instance of WebUserControl to ASP.Net website project'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-5390537754898239749</id><published>2011-03-01T20:24:00.000+11:00</published><updated>2011-03-01T20:24:32.680+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CalendarExtender selected date ReadOnly TextBox'/><title type='text'>ASP.Net AJAX CalendarExtender - Get selected date from ReadOnly TextBox</title><content type='html'>In this article I will explain a very common issue faced while using the ASP.Net AJAX Control Toolkit CalendarExtender control.&lt;br /&gt;Issue&lt;br /&gt;Whenever for the ASP.Net Textbox if the ReadOnly property of the Textbox is set to true, the selected data is not available in the Text property of the Textbox on PostBack.&lt;br /&gt; &lt;br /&gt;Reason&lt;br /&gt; &lt;br /&gt;The reason behind this issue is that whenever value of an ASP.Net Textbox is set to ReadOnly and the value of the textbox is set client side using client side script like JavaScript, in such cases the value of the Textbox is not available in the Text property of the ASP.Net Textbox. The ASP.Net AJAX Control Toolkit CalendarExtender makes use of JavaScript to set the selected date in the Textbox.&lt;br /&gt; &lt;br /&gt;Solution&lt;br /&gt; &lt;br /&gt;The solution to the issue is making use of Request.Form collections. As this collection has values of all fields that are posted back to the server and also it has the values that are set using client side scripts like JavaScript.&lt;br /&gt; &lt;br /&gt;Thus we need to do a small change in the way we are fetching the value server side.&lt;br /&gt; &lt;br /&gt;C#&lt;br /&gt; &lt;br /&gt;protected void Submit(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    string date = Request.Form[txtDate.UniqueID];&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;As you can see above I am fetching the value of the Textbox from the Request.Form collection using the UniqueID property of the Textbox which is nothing but Client Side name of the ASP.Net TextBox control&lt;br /&gt;The screenshot below describes that the selected date value is now available server side when fetched using the Request.Form collection&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-5390537754898239749?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://aspsnippets.com/Articles/ASP.Net-AJAX-CalendarExtender---Get-selected-date-from-ReadOnly-TextBox.aspx' title='ASP.Net AJAX CalendarExtender - Get selected date from ReadOnly TextBox'/><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/5390537754898239749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=5390537754898239749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5390537754898239749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5390537754898239749'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2011/03/aspnet-ajax-calendarextender-get.html' title='ASP.Net AJAX CalendarExtender - Get selected date from ReadOnly TextBox'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-66766149680598458</id><published>2010-08-20T20:12:00.000+10:00</published><updated>2010-08-20T20:12:38.293+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ReadOnly TextBox C# value'/><title type='text'>Read Text value from ReadOnly TextBox</title><content type='html'>Some time we need to make textbox read-only for showing data. If we make textbox read-only at the designer setting as below, then the textbox always returns blank in the code behind.&lt;br /&gt; &lt;br /&gt;&lt;asp:TextBox ID="txtDate" runat="server" ReadOnly="true"&gt;&lt;br /&gt; &lt;br /&gt; Here I am giving you an example of the issue and the solution.&lt;br /&gt;For date picker I used ASP.NET AJAX 's Calendar extender that can be attached to any ASP.NET TextBox control only. And in the  textbox I don't want that user directly write any text. &lt;br /&gt;For achieving this, if I make textbox read-only then at the server side textbox.text will come as blank(empty). &lt;br /&gt;Solution&lt;br /&gt;&lt;asp:TextBox ID="txtDate" runat="server"&gt;&lt;br /&gt;&lt;br /&gt;&lt;act:CalendarExtender ID="txtdate_CalendarExtender" runat="server" TargetControlID="txtdate" PopupButtonID="txtDate" Format="MM/dd/yyyy"&gt;&lt;/act:CalendarExtender&gt;&lt;br /&gt;&lt;br /&gt;In code behind add an attribute.&lt;br /&gt;&lt;br /&gt;txtDate.Attributes.Add("readonly", "readonly");&lt;br /&gt;&lt;br /&gt;By doing this we can retrieve read-only textbox's value in the code behind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-66766149680598458?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mindfiresolutions.com/How-to-retrieve-readonly-textboxs-value-in-the-code-behind-924.php' title='Read Text value from ReadOnly TextBox'/><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/66766149680598458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=66766149680598458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/66766149680598458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/66766149680598458'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/08/read-text-value-from-readonly-textbox.html' title='Read Text value from ReadOnly TextBox'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-5275995735955417089</id><published>2010-05-21T17:26:00.001+10:00</published><updated>2010-05-21T17:40:33.006+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color coding List item based on date'/><title type='text'>Color coding List item based on date</title><content type='html'>We had a need to maintain a set of books as library. I decided to go with SharePoint list with 'Issued Date' as DateTime column and 'Due Date' column as calculated column (Issued Date + 14 days).&lt;br /&gt;The formula for 'Due Date' is &lt;span style="color: red;"&gt;=[Issued Date]+14&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Added one more column of type 'Yes\No' with name 'Returned' to note if the book has been returned or not.&lt;br /&gt;&lt;br /&gt;Ok, now i have to display the row in yellow(or light pink) if today's date is just 3 days or less&amp;nbsp;away from 'Due Date', make it red if today's date is 'Due Date' or crossed. All other rows in green.&lt;br /&gt;To do this on client side, CEWP had to be added to the page as the last WebPart.&lt;br /&gt;The script to check for the date and change the row color was&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;// Change these variables to suit your needs&lt;br /&gt;var green = 3; // Items this many days out will be green&lt;br /&gt;var yellow = 1; // Items that are this many days or more are yellow&lt;br /&gt;&lt;br /&gt;var tbls = document.getElementsByTagName(&amp;quot;TABLE&amp;quot;);&lt;br /&gt;var col = new Array();&lt;br /&gt;for (var t in tbls) {&lt;br /&gt; if (tbls[t].className == &amp;quot;ms-listviewtable&amp;quot;) {&lt;br /&gt;  var rows = tbls[t].childNodes[0].childNodes;&lt;br /&gt;  var hRow = rows[0].getElementsByTagName(&amp;quot;TH&amp;quot;);&lt;br /&gt;  for (i=0;i&amp;lt;hRow.length;i++) {&lt;br /&gt;  col[i] = (hRow[i].innerText || hRow[i].textContent) + &amp;quot;&amp;quot;;&lt;br /&gt;  col[i] = col[i].replace(/n/,&amp;quot;&amp;quot;);&lt;br /&gt;  }&lt;br /&gt;  for (r=1;r&amp;lt;rows.length;r++) {&lt;br /&gt;   for (c=0;c&amp;lt;col.length;c++) {   &lt;br /&gt;   if ((col[c] == &amp;#039;Due Date&amp;#039;) &amp;amp;&amp;amp; (rows[r].childNodes[c+1].innerText == &amp;#039;No&amp;#039;)) {    &lt;br /&gt;    colorIt(rows[r],rows[r].childNodes[c],green,yellow);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function colorIt(row,x,green,yellow) {&lt;br /&gt;var strDate = x.innerText || x.textContent;&lt;br /&gt;var dt1 = parseInt(strDate.substring(0,2),10);&lt;br /&gt;var mon1 = parseInt(strDate.substring(3,5),10);&lt;br /&gt;var yr1 = parseInt(strDate.substring(6,10),10);&lt;br /&gt;mon1 = mon1 - 1;&lt;br /&gt;&lt;br /&gt;var startDate = new Date(yr1, mon1, dt1); &lt;br /&gt;var today = new Date();&lt;br /&gt;var toDate = new Date(today.getFullYear(), today.getMonth() , today.getDate()); &lt;br /&gt;var dateDiff = (startDate - toDate )/86400000;;&lt;br /&gt;&lt;br /&gt;if (dateDiff &amp;gt; green) {&lt;br /&gt;row.style.backgroundColor=&amp;#039;#66FF99&amp;#039;;&lt;br /&gt;} else if (dateDiff &amp;gt;= yellow) {&lt;br /&gt;row.style.backgroundColor=&amp;#039;Pink&amp;#039;;&lt;br /&gt;}&lt;br /&gt;else &lt;br /&gt;{&lt;br /&gt;row.style.backgroundColor=&amp;#039;#CC0066&amp;#039;;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-5275995735955417089?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/5275995735955417089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=5275995735955417089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5275995735955417089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5275995735955417089'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/05/color-coding-list-item-based-on-date.html' title='Color coding List item based on date'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-900923954555885111</id><published>2010-05-21T17:10:00.001+10:00</published><updated>2010-05-21T17:14:06.361+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color Coded SharePoint Calendar'/><title type='text'>Color Coded SharePoint Calendar</title><content type='html'>Once i had to give different color for the Calendar items. Below are the steps i followed&lt;br /&gt;&lt;br /&gt;1. Created one Calculated Column with title 'ColorTitle'&lt;br /&gt;2. Added the formula &lt;br /&gt;&lt;blockquote&gt;="&amp;lt;div style='border: 1px solid #009933; padding: 3px; margin: 0px; background-color: #FFFFB0; color: #009933'&amp;gt;"&amp;amp;Title&amp;amp;"&amp;lt;/div&amp;gt;"&lt;/blockquote&gt;3. Edited the default view as below&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a. Chose 'ColorTitle' for Month View Title&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b. Chose 'ColorTitle' for Week View Title&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saved the view. Thats all :)&lt;br /&gt;&lt;br /&gt;Note: You can change the color based on a field value by slightly modifiying the formula.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-900923954555885111?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/900923954555885111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=900923954555885111' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/900923954555885111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/900923954555885111'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/05/color-coded-sharepoint-calendar.html' title='Color Coded SharePoint Calendar'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-2882707059785416788</id><published>2010-05-21T17:03:00.000+10:00</published><updated>2010-05-21T17:03:06.789+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hide Fields Calendar SharePoint'/><title type='text'>Hide fields of SharePoint Calendar</title><content type='html'>I wanted a Calendar in my team site without fields 'Recurrence' and 'Workspace'. Since it was production server, i cannot do any custom coding, installation or configuration and even i cannot use any tool to tweak the fields.&lt;br /&gt;So, the solution is to do with JavaScript + CEWP.&lt;br /&gt;Go to the Display.aspx form and EditForm.aspx through an&amp;nbsp; item in calendar and bring the page into edit more to include the CEWP.&lt;br /&gt;&lt;br /&gt;One trick to bring the Displayform or editform to edit mode, just append "toolpaneview=2" after ".aspx" in the address bar of browser&lt;br /&gt;.......DisplayForm.aspx?toolpaneview=2 or&lt;br /&gt;-----EditForm.aspx?toolpaneview=2&lt;br /&gt;&lt;br /&gt;Add CEWP to the bottom of page. Add the following script to the CEWP&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var trs = document.getElementsByTagName("TR");&amp;lt;/P&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;for (var r in trs) {&lt;br /&gt;var row = (trs[r].innerText&lt;br /&gt;trs[r].textContent)+"";&lt;br /&gt;if (row.match(/^Workspace/)) { trs[r].style.display = "none"; }&lt;br /&gt;if (row.match(/^Recurrence/)) { trs[r].style.display = "none";}&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-2882707059785416788?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/2882707059785416788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=2882707059785416788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/2882707059785416788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/2882707059785416788'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/05/hide-fields-of-sharepoint-calendar.html' title='Hide fields of SharePoint Calendar'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-4807593394006039266</id><published>2010-04-06T22:20:00.000+10:00</published><updated>2010-04-06T22:20:16.577+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint list traffic lights CEWP script'/><title type='text'>Show traffic lights in SP List based on Checkbox(Yes\No) column</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;I had to create a SharePoint list with traffic lights as shown below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_aUvNER3CSoU/S7shMOnYlzI/AAAAAAAAAB0/KXXC8kp6Q0Y/s1600/trafficlights.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" nt="true" src="http://2.bp.blogspot.com/_aUvNER3CSoU/S7shMOnYlzI/AAAAAAAAAB0/KXXC8kp6Q0Y/s640/trafficlights.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The decision for color of traffic light is from a Checkbox field.&lt;br /&gt;&lt;br /&gt;One calculated field for each traffic light has to be created with formula like&lt;br /&gt;="&amp;lt; d i v &amp;gt;&amp;lt; i m g src="http://www.blogger.com/_layouts/images/KPIDefault-%22&amp;amp;IF([Gate%201]=&lt;strong&gt;TRUE&lt;/strong&gt;,"0.GIF","2.GIF")&amp;amp;"" /&amp;gt; &amp;lt; / d i v &amp;gt;"&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The idea is to use the existing SharePoint KPI images.&lt;br /&gt;&lt;br /&gt;Since the formula is based on Checkbox, the following IF condition will work.&lt;br /&gt;="&amp;lt; d i v &amp;gt;&amp;lt; i m g src="http://www.blogger.com/_layouts/images/KPIDefault-%22&amp;amp;IF([Gate%201]=&lt;strong&gt;TRUE&lt;/strong&gt;,"0.GIF","2.GIF")&amp;amp;"" /&amp;gt; &amp;lt; / d i v &amp;gt;"&lt;br /&gt;"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;Did NOT work:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;="&amp;lt; d i v &amp;gt;&amp;lt; i m g src="http://www.blogger.com/_layouts/images/KPIDefault-%22&amp;amp;IF([Gate%201]=&lt;strong&gt;Yes&lt;/strong&gt;,"0.GIF","2.GIF")&amp;amp;"" /&amp;gt; &amp;lt; / d i v &amp;gt;"&lt;br /&gt;&lt;br /&gt;="&amp;lt; d i v &amp;gt;&amp;lt; i m g src="http://www.blogger.com/_layouts/images/KPIDefault-%22&amp;amp;IF([Gate%201]=&lt;strong&gt;1&lt;/strong&gt;,"0.GIF","2.GIF")&amp;amp;"" /&amp;gt; &amp;lt; / d i v &amp;gt;"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It will just set the HTML tags to the calculated field based on the checkbox value. &lt;br /&gt;How to make the browser to interpret the HTML tags and display the image.&lt;br /&gt;&lt;br /&gt;Here comes the handy script from &lt;a href="http://blog.pathtosharepoint.com/2008/09/01/apply-color-coding-to-your-sharepoint-lists/"&gt;http://blog.pathtosharepoint.com/2008/09/01/apply-color-coding-to-your-sharepoint-lists/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A CEWP has to be added at bottom of the page and include the following script in the CEWP, thats all. &lt;br /&gt;It does magic for you...&lt;br /&gt;&lt;br /&gt;&amp;lt; s c r i p t type="text/javascript"&amp;gt;&lt;br /&gt;//&lt;br /&gt;// Text to HTML&lt;br /&gt;// Feedback and questions: Christophe@PathToSharePoint.com&lt;br /&gt;//&lt;br /&gt;var theTDs = document.getElementsByTagName("TD");&lt;br /&gt;var i=0;&lt;br /&gt;var TDContent = " ";&lt;br /&gt;while (i &amp;lt; theTDs.length) { try { TDContent = theTDs[i].innerText || theTDs[i].textContent; if ((TDContent.indexOf("&lt;div") &amp;&amp;="" (tdcontent.indexof(?&lt;="" 0)="" ="=" div=""&gt;") &amp;gt;= 0)) {&lt;br /&gt;theTDs[i].innerHTML = TDContent;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch(err){}&lt;br /&gt;i=i+1;&lt;br /&gt;}&lt;br /&gt;//&lt;br /&gt;// ExpGroupRenderData overwrites the default SharePoint function&lt;br /&gt;// This part is needed for collapsed groupings&lt;br /&gt;//&lt;br /&gt;function ExpGroupRenderData(htmlToRender, groupName, isLoaded) {&lt;br /&gt;var tbody=document.getElementById("tbod"+groupName+"_");&lt;br /&gt;var wrapDiv=document.createElement("DIV");&lt;br /&gt;wrapDiv.innerHTML="&lt;br /&gt;&lt;table&gt;&lt;tbody ?\?="" groupname+?_\?="" id="\&amp;quot;tbod&amp;quot;+" isloaded="\&amp;quot;&amp;quot;+isLoaded+"&gt;&lt;&gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;&amp;lt;&amp;gt;"+htmlToRender+"&lt;/&gt;&lt;/&gt;&lt;/&gt;&lt;/&gt;&lt;/tbody&gt;&lt;/table&gt;";&lt;br /&gt;var theTBODYTDs = wrapDiv.getElementsByTagName("TD"); var j=0; var TDContent = " ";&lt;br /&gt;while (j &amp;lt; theTBODYTDs.length) { try { TDContent = theTBODYTDs[j].innerText || theTBODYTDs[j].textContent; if ((TDContent.indexOf("&lt;div") &amp;&amp;="" (tdcontent.indexof(?&lt;="" 0)="" ="=" div=""&gt;") &amp;gt;= 0)) {&lt;br /&gt;theTBODYTDs[j].innerHTML = TDContent;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch(err){}&lt;br /&gt;j=j+1;&lt;br /&gt;}&lt;br /&gt;tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild,tbody);&lt;br /&gt;}&lt;br /&gt;&amp;lt; / s c r i p t &amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-4807593394006039266?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/4807593394006039266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=4807593394006039266' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4807593394006039266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4807593394006039266'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/04/show-traffic-lights-in-sp-list-based-on.html' title='Show traffic lights in SP List based on Checkbox(Yes\No) column'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_aUvNER3CSoU/S7shMOnYlzI/AAAAAAAAAB0/KXXC8kp6Q0Y/s72-c/trafficlights.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-5543003342333748873</id><published>2010-01-04T23:39:00.004+11:00</published><updated>2010-01-05T22:26:38.647+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ReportViewer WebPart SharePoint'/><title type='text'>ReportViewer in WebPart (SharePoint)</title><content type='html'>Using ReportViewer control inside SharePoint Webpart is bit tricky and challenging. &lt;br /&gt;Below are the steps to make it happen.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: large;"&gt;1. web.config (of SharePoint) changes &lt;span style="background-color: #999999; font-size: small;"&gt;(Extra space has been included after &amp;gt; and &amp;lt; to make it appear in blog)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;add below line to &amp;lt; httpHandlers &amp;gt; section&lt;br /&gt;&lt;br /&gt;&amp;lt; add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" / &amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;and below line to &amp;lt; assemblies &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" / &amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: large;"&gt;2. Add Report (.rdlc) and DataSet (.xsd) files to Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Sample Code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;using System;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;using Microsoft.Reporting.WebForms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Data.SqlClient;&lt;br /&gt;using System.Drawing;&lt;br /&gt;&lt;br /&gt;namespace ReportWebpart&lt;br /&gt;{&lt;br /&gt;public class ReportsWP : WebPart&lt;br /&gt;{&lt;br /&gt;Label lblTime;&lt;br /&gt;ReportViewer ReportViewer1;&lt;br /&gt;TextBox tb1;&lt;br /&gt;Button btn;&lt;br /&gt;&lt;br /&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;base.CreateChildControls();&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;lblTime = new Label();&lt;br /&gt;lblTime.Text = "Enter Plant No.";&lt;br /&gt;&lt;br /&gt;tb1 = new TextBox();&lt;br /&gt;&lt;br /&gt;btn = new Button();&lt;br /&gt;btn.Text = "Refresh Report";&lt;br /&gt;btn.Click += new EventHandler(btn_Click);&lt;br /&gt;&lt;br /&gt;ReportViewer1 = new ReportViewer();&lt;br /&gt;ReportViewer1.Width = Unit.Percentage(80);&lt;br /&gt;ReportViewer1.EnableViewState = true;&lt;br /&gt;ReportViewer1.LocalReport.ReportPath = @".\Report1.rdlc";&lt;span style="color: #6aa84f;"&gt; &lt;strong&gt;// Copy the rdlc file to root of IIS&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;ReportViewer1.ProcessingMode = ProcessingMode.Local;&lt;br /&gt;ReportViewer1.ID = "rprtViewer1";&lt;br /&gt;&lt;br /&gt;this.Controls.Add(lblTime);&lt;br /&gt;this.Controls.Add(tb1);&lt;br /&gt;this.Controls.Add(btn);&lt;br /&gt;this.Controls.Add(ReportViewer1);&lt;br /&gt;}&lt;br /&gt;catch (Exception ex)&lt;br /&gt;{&lt;br /&gt;string k = ex.Message;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void btn_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;DataTable newDT = GetTable();&lt;br /&gt;ReportViewer1.LocalReport.DataSources.Clear();&lt;br /&gt;ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1_Employee", newDT));&lt;span style="color: #6aa84f;"&gt;&lt;strong&gt;//Name of Dataset (.xsd file)+ '_' + table name&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;ReportViewer1.ID = "rprtViewer1";&lt;br /&gt;ReportViewer1.DocumentMapCollapsed = true;&lt;br /&gt;ReportViewer1.LocalReport.Refresh();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private DataTable GetTable()&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;&lt;strong&gt;//FRAME THE QUERY AS NEEDED. THE FIELDS RETURN SHOULD MATCH WITH REPORT'S DESIGN TIME FIELDS&lt;/strong&gt;&lt;/span&gt; &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;----------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;If you are getting following error while accessing the WebPart page containing ReportViewer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Microsoft.SharePoint.Portal.Analytics.UI.ReportViewerMessages, Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c does not implement IReportViewerMessages or could not be found&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Try either of following to fix it&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1In web.config of SharePoint, comment the following line under &lt;br /&gt;1. &amp;lt;appsettings &amp;gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt; ! -- &amp;lt; add key="ReportViewerMessages" value="Microsoft.SharePoint.Portal.Analytics...... / &amp;gt; -- &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp; Add&amp;nbsp; following to &amp;lt; appsettings &amp;gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt; remove key="ReportViewerMessages" &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-5543003342333748873?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/5543003342333748873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=5543003342333748873' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5543003342333748873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5543003342333748873'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2010/01/using-reportviewer-control-inside.html' title='ReportViewer in WebPart (SharePoint)'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-4048996094426618414</id><published>2009-12-22T00:41:00.003+11:00</published><updated>2009-12-22T01:00:08.129+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='response.binarywrite linkbutton server side click event not firing'/><title type='text'>LinkButton in SharePoint - Not firing Click Event</title><content type='html'>&lt;p&gt;I had a sitution to stream a file from SQL Server.&lt;br /&gt;ASP.Net LinkButton was used in the ITemplate to use in GridView and Click event was defined with statements like&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;response.AddHeader("Content-Disposition", "attachment; filename=" + fileName );&lt;br /&gt;response.AddHeader("Content-Length", blob.Length.ToString());&lt;br /&gt;response.ContentType = "Application/x-msexcel";&lt;br /&gt;response.BinaryWrite(blob);&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Everything was working perfect in WebApplication. When the webpart was deployed to SharePoint, the server side click event fired only once. After that the link became irresponsive. If the page is refreshed, the link worked once again for 1st time.&lt;br /&gt;&lt;br /&gt;After several googling, found that SharePoint stores time-stamp on client side for security reasons and avoids multiple post-backs for the same control.&lt;br /&gt;&lt;br /&gt;There are 2 ways to over-come this issue. Just add an appropriate line as below&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;1. Generic way&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;imageButton.OnClientClick = "this.form.onsubmit = function() {return true;}";&lt;br /&gt;or&lt;br /&gt;hyperLink.OnClientClick = "this.form.onsubmit = function() {return true;}";&lt;br /&gt;or&lt;br /&gt;linkButton.OnClientClick = "document.getElementsByTagName(\'form\')[0].onsubmit = function() {return true;}";&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#3333ff;"&gt;2.Specific to SharePoint&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="color:#33cc00;"&gt;linkButton.OnClientClick = "_spFormOnSubmitCalled = false;_spSuppressFormOnSubmitWrapper=true;";&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;After adding single line (one of the above), the webpart worked like a charm.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-4048996094426618414?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/4048996094426618414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=4048996094426618414' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4048996094426618414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4048996094426618414'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2009/12/linkbutton-in-sharepoint-not-firing.html' title='LinkButton in SharePoint - Not firing Click Event'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-4593224103955321827</id><published>2009-10-14T17:09:00.003+11:00</published><updated>2009-10-14T17:11:56.592+11:00</updated><title type='text'>Composit Control Tips</title><content type='html'>Came across this useful link about Composite Control.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://skysigal.xact-solutions.com/Articles/tabid/434/ctl/ArticleView/mid/1024/articleId/36/Default.aspx" target="_blank"&gt;http://skysigal.xact-solutions.com/Articles/tabid/434/ctl/ArticleView/mid/1024/articleId/36/Default.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-4593224103955321827?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/4593224103955321827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=4593224103955321827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4593224103955321827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/4593224103955321827'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2009/10/composit-control-tips.html' title='Composit Control Tips'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-5055706898968326028</id><published>2009-09-18T21:49:00.008+10:00</published><updated>2009-12-22T15:21:13.195+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C# RSS Atom Read'/><title type='text'>Read RSS and Atom feed in C#</title><content type='html'>I had a requirement to read RSS/Atom feeds from blogs and store in SharePoint List.&lt;br /&gt;I remember we had to go for separate framework to read the feeds and parse it. In that case we need to refer the framework in our project and install that assembly in Bin or GAC.&lt;br /&gt;&lt;br /&gt;Now with .Net 3.5, life has become much easier.&lt;br /&gt;&lt;br /&gt;Yes, with the namespace 'System.ServiceModel.Syndication' it is just few lines of code to read and parse the feeds either RSS or Atom.&lt;br /&gt;&lt;br /&gt;Just add reference to 'System.ServiceModel.Web' to your project and include above namespace in your class, thats it.&lt;br /&gt;&lt;br /&gt;Below is the code i used.&lt;br /&gt;&lt;span style="color: #009900; font-size: 85%;"&gt;XmlReader reader = XmlReader.Create(curUrl); &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900; font-size: 85%;"&gt;SyndicationFeed feed = SyndicationFeed.Load(reader);&lt;br /&gt;string title = String.Empty;&lt;br /&gt;string link = String.Emplty;&lt;br /&gt;DateTime dateTime = null;&lt;br /&gt;foreach (var feeditem in feed.Items)&lt;br /&gt;{&lt;br /&gt;title = feeditem.Title.Text;&lt;br /&gt;dateTime = feeditem.PublishDate.LocalDateTime;&lt;br /&gt;link = feeditem.Links[feeditem.Links.Count -1].Uri.OriginalString;&lt;br /&gt;&lt;br /&gt;//Do your tasks here&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: #330033;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900; font-size: 85%;"&gt;&lt;span style="color: #330033;"&gt;Easy to deploy and maintain too. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900; font-size: 85%;"&gt;&lt;span style="color: #330033;"&gt;Happy Coding &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #009900; font-size: 85%;"&gt;&lt;span style="color: #330033;"&gt;வாழ்க வளமுடன் :) &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-5055706898968326028?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/5055706898968326028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=5055706898968326028' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5055706898968326028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/5055706898968326028'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2009/09/read-rss-and-atom-feed-in-c.html' title='Read RSS and Atom feed in C#'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-1588063860031330061</id><published>2009-09-18T21:41:00.003+10:00</published><updated>2009-09-18T21:47:43.104+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Links'/><title type='text'>Useful SharePoint Links</title><content type='html'>&lt;strong&gt;Some Useful SharePoint links&lt;/strong&gt;&lt;br /&gt;&lt;BR&gt;&lt;br /&gt;&lt;a id="ctl00_MTContentSelector1_mainContentContainer_ctl00" target="_blank" href="http://msdn.microsoft.com/en-us/library/cc160835.aspx"&gt;Accessing Data from Workflow Association and Initiation Forms in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl01" href="http://msdn.microsoft.com/en-us/library/bb687949.aspx"&gt;Best Practices: Common Coding Issues When Using the SharePoint Object Model&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl02" href="http://msdn.microsoft.com/en-us/library/aa973248.aspx"&gt;Best Practices: Using Disposable Windows SharePoint Services Objects&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl03" href="http://msdn.microsoft.com/en-us/library/bb985502.aspx"&gt;Checklist for Creating SharePoint Web Parts&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl04" href="http://msdn.microsoft.com/en-us/library/cc406686.aspx"&gt;Creating Custom Timer Jobs in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl05" href="http://msdn.microsoft.com/en-us/library/cc889345.aspx"&gt;Creating a Windows SharePoint Services 3.0 Custom Field by Using the EntityPicker&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl06" href="http://msdn.microsoft.com/en-us/library/aa973249.aspx"&gt;Creating a Windows SharePoint Services 3.0 Web Part Using Visual Studio 2005 Extensions&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl07" href="http://msdn.microsoft.com/en-us/library/bb530302.aspx"&gt;Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0 (Part 1 of 2)&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl08" href="http://msdn.microsoft.com/en-us/library/bb530301.aspx"&gt;Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0 (Part 2 of 2)&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl09" href="http://msdn.microsoft.com/en-us/library/dd878359.aspx"&gt;Securing Application Pages in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl10" href="http://msdn.microsoft.com/en-us/library/bb530303.aspx"&gt;Selective Content Migration in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl11" href="http://msdn.microsoft.com/en-us/library/cc406685.aspx"&gt;Understanding and Creating Customized and Uncustomized Files in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl12" href="http://msdn.microsoft.com/en-us/library/cc300138.aspx"&gt;Understanding the Administrative Object Model of Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl13" href="http://msdn.microsoft.com/en-us/library/bb814929.aspx"&gt;Usage Event Logging in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl14" href="http://msdn.microsoft.com/en-us/library/dd348394.aspx"&gt;Using Solution Packages to Deploy Features and Content in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl15" href="http://msdn.microsoft.com/en-us/library/dd441390.aspx"&gt;Workflow Scalability and Performance in Windows SharePoint Services 3.0&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" id="ctl00_MTContentSelector1_mainContentContainer_ctl16" href="http://msdn.microsoft.com/en-us/library/bb153523.aspx"&gt;Working with ASP.NET 2.0 Web Parts and Windows SharePoint Services 3.0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-1588063860031330061?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/1588063860031330061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=1588063860031330061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/1588063860031330061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/1588063860031330061'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2009/09/usefule-sharepoint-links.html' title='Useful SharePoint Links'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-2060280157138643354</id><published>2009-07-22T16:23:00.003+10:00</published><updated>2009-07-22T16:29:32.394+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build CAML Query'/><title type='text'>Building CAML Query</title><content type='html'>Found &lt;A href="http://sharepointmagazine.net/technical/development/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list" target="_blank"&gt;this&lt;/A&gt; useful site details about building CAML query.&lt;br /&gt;&lt;br /&gt;http://sharepointmagazine.net/technical/development/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list&lt;br /&gt;&lt;br /&gt;Thanks Boske.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-2060280157138643354?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/2060280157138643354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=2060280157138643354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/2060280157138643354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/2060280157138643354'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2009/07/building-caml-query.html' title='Building CAML Query'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-982714350093247292</id><published>2008-12-18T20:56:00.004+11:00</published><updated>2008-12-18T21:22:47.190+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint tools CAML Query'/><title type='text'>SharePoint Tools</title><content type='html'>Ok friends, its very long since my last post. I will make sure that i update this blog regularly. To start with, here are the tools often used during SharePoint development.&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.codeplex.com/spstipsUtilityPack" target="_blank"&gt;SharePoint Tips Utility Pack &lt;/a&gt;- Developed by my ex-colleague Ishai.&lt;br /&gt;This tool has many functions. Setting the properties of a field and managing Event Listeners were we largely used among them.&lt;br /&gt;Mate, you are champion. I am really proud that I was your team member. You have answer for all SharePoint questions.&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://www.codeplex.com/SPCamlViewer" target="_blank"&gt;Stramit SharePoint 2007 Caml Viewer &lt;/a&gt;&lt;br /&gt;This tool can be used to see the GUIDs of any lists and views very easily. Also all the fields and its internal names can be easily seen using this tool.&lt;br /&gt;&lt;br /&gt;3. &lt;a href="http://www.u2u.be/res/Tools/CamlQueryBuilder.aspx" target="_blank"&gt;U2U CAML Query Builder&lt;/a&gt;&lt;br /&gt;Last but not least, the most useful tool for building CAML queries to use in SharePoint object model coding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-982714350093247292?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/982714350093247292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=982714350093247292' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/982714350093247292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/982714350093247292'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2008/12/sharepoint-tools.html' title='SharePoint Tools'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-3109199363796160948</id><published>2007-06-26T16:28:00.004+10:00</published><updated>2009-05-07T15:57:41.515+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SPWeb object closed disposed trying'/><title type='text'>"Trying to use SPWeb object that has been closed.." Error</title><content type='html'>&lt;p&gt;&lt;span style="font-family:arial;"&gt;We were getting “&lt;span style="color:#000099;"&gt;Trying to use an SPWeb object that has been closed or disposed and is no longer valid.&lt;/span&gt;” in our MOSS -Workflow project.&lt;br /&gt;&lt;br /&gt;After investigating all the source codes, I found the error causing statement in WebPart class.&lt;br /&gt;&lt;br /&gt;The best practice is to dispose objects either by calling Dispose() in finally block or with using clause.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;The snippet causing problem in our project was&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#ff0000;"&gt;SPGroup group;&lt;br /&gt;using (SPWeb web = SPContext.Current.Web)&lt;br /&gt;{&lt;br /&gt;group = web.Groups[“Administrators”];&lt;br /&gt;this.DisplayText = "Submit for Approval";&lt;br /&gt;:&lt;br /&gt;:&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Here, the object is &lt;em&gt;&lt;strong&gt;not really created&lt;/strong&gt;&lt;/em&gt; in the memory, only the reference to the exisiting object is got and used. We should not dispose the current context web object manually in our code.&lt;br /&gt;&lt;br /&gt;More information about best practice can be found at&lt;br /&gt;&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms778813.aspx"&gt;&lt;span style="font-family:arial;"&gt;http://msdn2.microsoft.com/en-us/library/ms778813.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Happy Coding :)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-3109199363796160948?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/3109199363796160948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=3109199363796160948' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3109199363796160948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3109199363796160948'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2007/06/trying-to-use-spweb-object-that-has.html' title='&quot;Trying to use SPWeb object that has been closed..&quot; Error'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-3202714257144330478</id><published>2007-06-19T16:00:00.000+10:00</published><updated>2007-06-19T20:22:02.760+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint extending stsadm custom action'/><title type='text'>Extending stsadm.exe with custom actions</title><content type='html'>Stsadm.exe command can be extended by inheriting&lt;br /&gt;&lt;em&gt;&lt;span style="color:#3333ff;"&gt;Microsoft.SharePoint.StsAdmin.ISPStsadmCommand&lt;/span&gt;&lt;/em&gt; interface.&lt;br /&gt;&lt;br /&gt;The actual process involves two steps.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Creating the configuration xml file.&lt;/li&gt;&lt;li&gt;Creating a class that implements ISPStsadmCommand interface.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Configuration file&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;The configuration xml file indicates to stsadm.exe which operations are available. This configuration file must follow well known naming convention stsadmcommands.&lt;&lt;em&gt;customcommands&lt;/em&gt;&gt;.xml where &lt;&lt;em&gt;customcommands&gt;&lt;/em&gt; can be any meaningful name  but must be unique. Through this naming convention for configuration files, stsadm.exe implements a pluggable architecture for declaring custom operations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#006600;"&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;commands&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;command name=&amp;quot;&amp;lt;name for command&amp;gt;&amp;quot; class=&amp;quot;&amp;lt;namespace&amp;gt;,&amp;lt;class&amp;gt;,Version=&amp;lt;version&amp;gt;,&lt;br&gt;&lt;br /&gt;Culture=neutral,PublicKeyToken=&amp;lt;token&amp;gt;&amp;quot;&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;/command&amp;gt;&lt;br&gt;&lt;br /&gt;&amp;lt;/commands&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#006600;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;The configuration file itself is a simple XML document with a &lt;commands/&gt; root element containing one or more &lt;command/&gt; sub-elements. These &lt;command/&gt; sub-elements are where we declare custom operations and include two attributes name and class. The name attribute indicates the name of the operation to be executed by stsadm.exe. Note that the exact value of the name attribute will be specified by an administrator at runtime using the -o named parameter in order to execute the declared custom operation. The second attribute class specifies the class and .NET Assembly name where our classes that implement the ISPStsadmCommand interface.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;.Net assembly&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The .Net assembly containing the classes has to be placed in GAC. Each operation requires separate class inheriting ISPStsadmCommand interface. The ISPStsadmCommand interface has two methods to implement.&lt;br /&gt;1.       GetHelpMessage – this method returns help and usage information.&lt;br /&gt;2.       Run – this method actually does the custom operation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class CustomActivateFeature : ISPStsadmCommand&lt;br /&gt;    {&lt;br /&gt;        //method to return help message&lt;br /&gt;        public string GetHelpMessage(string command)&lt;br /&gt;        {&lt;br /&gt;            //named parameters expected&lt;br /&gt;            return "-url &lt;url&gt;";&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;        //method called to perform the action&lt;br /&gt;        public int Run(string command,&lt;br /&gt;            System.Collections.Specialized.StringDictionary keyValues,&lt;br /&gt;            out string output)&lt;br /&gt;        {&lt;br /&gt;           &lt;br /&gt;           //assign value to variables&lt;br /&gt;            if (keyValues.ContainsKey("url"))&lt;br /&gt;            {&lt;br /&gt;                url = keyValues["url"];&lt;br /&gt;                if ((url == null) (url.Length == 0)) output += "url cannot be empty";&lt;br /&gt;                  :&lt;br /&gt;                  :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Deployment&lt;/span&gt;&lt;/strong&gt;                                                                                &lt;br /&gt;The deployment process involves two steps.&lt;br /&gt;1.       Copy the configuration file (stsadmcommands.feature.xml) to [12 Hive]\CONFIG folder.&lt;br /&gt;2.       Copy the DLL file to GAC.&lt;br /&gt;&lt;br /&gt;Now we can perform our custom actions using stsadm.exe by typing&lt;br /&gt;&lt;br /&gt;stsadm.exe –o &amp;lt;name we have specified in xml file&amp;gt; &amp;lt;named &lt;br /&gt;parameters&amp;gt; at command prompt.&lt;br /&gt;&lt;br /&gt;It can be very useful to include in script/batch file for actions like backup, restore or some other automated actions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-3202714257144330478?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/3202714257144330478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=3202714257144330478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3202714257144330478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3202714257144330478'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2007/06/extending-stsadmexe-with-custom-actions.html' title='Extending stsadm.exe with custom actions'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-1276479063667145086</id><published>2007-06-12T17:13:00.000+10:00</published><updated>2007-06-12T20:09:49.758+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint custom property Webpart dynamic dropdown dropdownlist'/><title type='text'>Custom property of Webpart - dynamic DropDownList</title><content type='html'>Custom properties can be included directly by including the properties (GET-SET accessor) in the web part class. Based on the return data type of the property, corresponding UI control will be rendered at run time.&lt;br /&gt;Ex. If there is a property in webpart class as below&lt;br /&gt;&lt;br /&gt;&lt;em&gt;private string columnName = “”;&lt;br /&gt;&lt;br /&gt;[WebBrowsable(true),&lt;br /&gt;Personalizable(true),&lt;br /&gt;Category("Web Part Settings"),&lt;br /&gt;DisplayName("Site Column name."),&lt;br /&gt;WebDisplayName("Site Column name."),&lt;br /&gt;WebDescription("Site Column name.")]&lt;br /&gt;public string ColumnName&lt;br /&gt;{&lt;br /&gt;get { return columnName; }&lt;br /&gt;set { columnName = value; }&lt;br /&gt;}&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note:&lt;/strong&gt; WebBrowsable and Personalizable attributes should be true.&lt;br /&gt;Above property will be rendered as text box on the property pane.&lt;br /&gt;&lt;br /&gt;To display dropdown list if values are static, create a enum containing all static values and use that enum in the get-set method.&lt;br /&gt;Ex:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;public enum searchscope&lt;br /&gt;{&lt;br /&gt;All_Sites,&lt;br /&gt;Current_Site&lt;br /&gt;}&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;private searchscope searchScope = searchscope.All_Sites;&lt;br /&gt;[WebBrowsable(true),&lt;br /&gt;Personalizable(true),&lt;br /&gt;Category("Web Part Settings"),&lt;br /&gt;DisplayName("Search scope."),&lt;br /&gt;WebDisplayName("Search scope."),&lt;br /&gt;WebDescription("Detirmines the scope to search.")]&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;public searchscope SearchScope&lt;br /&gt;{&lt;br /&gt;get { return searchScope; }&lt;br /&gt;set&lt;br /&gt;{&lt;br /&gt;searchScope = value;&lt;br /&gt;}&lt;br /&gt;}&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The above code will diplay a dropdown list with two static values.&lt;br /&gt;&lt;br /&gt;Ok, what we have to do if the values are to be dynamically read from sharepoint list or some other source.&lt;br /&gt;1. Create a class that inherit from &lt;span style="color: rgb(51, 51, 255);"&gt;Microsoft.SharePoint.WebPartPages.ToolPart&lt;/span&gt;&lt;br /&gt;2. Create and initialise DropDownList&lt;br /&gt;3. Add the drop down list to the Controls in the overridden method &lt;span style="color: rgb(51, 51, 255);"&gt;CreateChildControls&lt;/span&gt;.&lt;br /&gt;4. Override &lt;span style="color: rgb(51, 51, 255);"&gt;ApplyChanges()&lt;/span&gt; method to update the value in the main webpart class.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;class CustomToolPart : ToolPart&lt;br /&gt;{&lt;br /&gt;DropDownList ddlTypes = new DropDownList();&lt;br /&gt;:&lt;br /&gt;:&lt;br /&gt;&lt;br /&gt;public CustomToolPart()//Constructor&lt;br /&gt;{&lt;br /&gt;this.Title = "Select Type";&lt;span style="color: rgb(51, 204, 0);"&gt;//Set the title for our custom tool part.&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;PopulatePageTypes();&lt;span style="color: rgb(51, 255, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;//Method to populate the drop down list.&lt;br /&gt;&lt;/span&gt;Controls.Add(ddlTypes);&lt;br /&gt;}&lt;br /&gt;public override void ApplyChanges()&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;logic&gt;  //Logic to update the variable value in main webpart class&lt;br /&gt;&lt;/logic&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;Now in the main web part class,&lt;br /&gt;1. Override &lt;span style="color: rgb(51, 51, 255);"&gt;GetToolParts()&lt;/span&gt; method&lt;br /&gt;2. Create and initialise our custom class.&lt;br /&gt;3. Add to ToolParts array.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;public override ToolPart[] GetToolParts()&lt;br /&gt;{&lt;br /&gt;ToolPart[] toolparts = new ToolPart[3];&lt;br /&gt;WebPartToolPart wptp = new WebPartToolPart(); &lt;span style="color: rgb(51, 204, 0);"&gt;//WebPart's default properties&lt;br /&gt;&lt;/span&gt;CustomPropertyToolPart cptp = new CustomPropertyToolPart(); &lt;span style="color: rgb(51, 204, 0);"&gt;//Standard Custom properties added to webpart like ColumnName and SearchScope.&lt;br /&gt;&lt;/span&gt;CustomToolPart ctp = new CustomToolPart(); &lt;span style="color: rgb(51, 204, 0);"&gt;// Our custom property ToolPart&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;toolparts[0] = wptp;&lt;br /&gt;toolparts[1] = cptp;&lt;br /&gt;toolparts[2] = ctp;&lt;br /&gt;&lt;br /&gt;return toolparts;&lt;br /&gt;}&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;That’s all. Deploy the webpart and you can see the dropdown list with dynamic values when you modify the properties of the webpart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-1276479063667145086?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/1276479063667145086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=1276479063667145086' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/1276479063667145086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/1276479063667145086'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2007/06/custom-property-of-webpart-dynamic.html' title='Custom property of Webpart - dynamic DropDownList'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4028665687514805882.post-3832999115341214714</id><published>2007-05-21T21:26:00.000+10:00</published><updated>2007-06-12T20:08:56.674+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint AJAX MOSS'/><title type='text'>Steps to setup AJAX on Sharepoint Server 2007</title><content type='html'>&lt;p&gt;1. Download &lt;a href="http://go.microsoft.com/fwlink/?LinkID=77296"&gt;ASP.NET 2.0 AJAX Extensions 1.0&lt;/a&gt; from http://ajax.asp.net/default.aspx&lt;br /&gt;2. Install &lt;a href="http://go.microsoft.com/fwlink/?LinkID=77296"&gt;ASP.NET 2.0 AJAX Extensions 1.0&lt;/a&gt; on the server.&lt;br /&gt;3. Update web.config file of the server as directed in &lt;a href="http://ajax.asp.net/docs/ConfiguringASPNETAJAX.aspx"&gt;http://ajax.asp.net/docs/ConfiguringASPNETAJAX.aspx&lt;/a&gt;&lt;br /&gt;4. Script manager has to be added to enable AJAX on webpage,&lt;br /&gt;    &lt;/p&gt;&lt;ul&gt;&lt;li&gt;It can be added in master(template) page to enable the whole website to be AJAX enabled&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The class AjaxBasePart.cs found in &lt;a href="http://www.capdes.com/2007/02/microsoft_office_sharepoint_se.html"&gt;http://www.capdes.com/2007/02/microsoft_office_sharepoint_se.html&lt;/a&gt; can be used as base class of our class.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Adding Script Manager to our class.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Thats it. Now you can create your own AJAX enabled solutions.&lt;br /&gt;&lt;br /&gt;Videos for introduction and implementation of AJAX can be found at &lt;a href="http://www.asp.net/learn/videos/default.aspx"&gt;http://www.asp.net/learn/videos/default.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are a lot of AJAX enabled controls (&lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit"&gt;ASP.NET AJAX Control Toolkit&lt;/a&gt;) available at &lt;a href="http://ajax.asp.net/downloads/default.aspx"&gt;http://ajax.asp.net/downloads/default.aspx&lt;/a&gt; which can be used directly on our website as like as custom user control.&lt;br /&gt;&lt;br /&gt;Have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4028665687514805882-3832999115341214714?l=dev-tips.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dev-tips.blogspot.com/feeds/3832999115341214714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4028665687514805882&amp;postID=3832999115341214714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3832999115341214714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4028665687514805882/posts/default/3832999115341214714'/><link rel='alternate' type='text/html' href='http://dev-tips.blogspot.com/2007/05/my-first-posting.html' title='Steps to setup AJAX on Sharepoint Server 2007'/><author><name>Muthu Kumaran</name><uri>http://www.blogger.com/profile/09392171938722150189</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://lh6.google.com/image/devtips/RlQtxeY8LPI/AAAAAAAAABA/Jw--qaJSf44/s144/photo3.JPG'/></author><thr:total>0</thr:total></entry></feed>
