<?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-10414700</id><updated>2011-12-13T22:55:59.417-05:00</updated><title type='text'>Manny's SharePoint Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10414700.post-114769723588232822</id><published>2006-05-15T07:44:00.000-05:00</published><updated>2006-05-15T07:47:15.883-05:00</updated><title type='text'>Hiding the !new Icon for WSS Lists</title><content type='html'>&lt;P&gt;&lt;FONT face="Verdana" size="2"&gt;Here's a way to do it per list, if you don't want a &lt;br /&gt;    global change to the lists...&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;  &lt;P&gt;&lt;FONT face="Verdana" size="2"&gt;You can stick this function in the ows.js, directly on &lt;br /&gt;    the&amp;nbsp;allitems.aspx page&amp;nbsp;or wherever else you may find &lt;br /&gt;    appropriate&amp;nbsp;and attach it to the Body onload. ( i.e. BODY &lt;br /&gt;    onload=“javascript:HideNewIcons();“ )&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;  &lt;P&gt;&lt;FONT face="Verdana" size="2"&gt;I just find it more convenient to modify a particular &lt;br /&gt;    list template where users may not want that silly icon...&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;  &lt;P&gt;&lt;FONT face="Verdana" size="2"&gt;OK, so it adds a fraction of a second to the page &lt;br /&gt;    load, but shouldn't be that bad...&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;  &lt;P&gt;&lt;FONT face="Courier New" size="2"&gt;function HideNewIcons()&lt;BR&gt;&lt;br /&gt;    {&lt;BR&gt;&lt;br /&gt;    var fields,i;&lt;BR&gt;&lt;br /&gt;    fields = document.getElementsByTagName('IMG');&lt;BR&gt;&lt;br /&gt;    for( i = 0; i &amp;lt; fields.length; i ++ )&lt;BR&gt;&lt;br /&gt;    {&lt;BR&gt;&lt;br /&gt;    var imgsrc = fields[i].getAttribute('SRC');&lt;BR&gt;&lt;br /&gt;    if(imgsrc.indexOf("new.gif") != -1)&lt;BR&gt;&lt;br /&gt;    {&lt;BR&gt;&lt;br /&gt;    fields[i].style.visibility = "hidden";&lt;BR&gt;&lt;br /&gt;    }&lt;BR&gt;&lt;br /&gt;    }&lt;BR&gt;&lt;br /&gt;    }&lt;BR&gt;&lt;br /&gt;   &lt;/FONT&gt;&lt;br /&gt;  &lt;/P&gt;&lt;br /&gt;  &lt;P&gt;&lt;FONT face="Verdana" size="2"&gt;It's always fun to “cheat” things to work... :)&lt;/FONT&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-114769723588232822?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/114769723588232822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=114769723588232822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/114769723588232822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/114769723588232822'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2006/05/hiding-new-icon-for-wss-lists.html' title='Hiding the !new Icon for WSS Lists'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-113744289448576261</id><published>2006-01-16T15:19:00.000-05:00</published><updated>2007-02-05T08:47:53.106-05:00</updated><title type='text'>Treeview Source</title><content type='html'>Please send me a message fo this code.&lt;br /&gt;&lt;br /&gt;It is a REAL PAIN to post code to this site...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-113744289448576261?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/113744289448576261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=113744289448576261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/113744289448576261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/113744289448576261'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2006/01/treeview-source.html' title='Treeview Source'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-113744107026538184</id><published>2006-01-16T14:37:00.000-05:00</published><updated>2006-01-16T14:51:10.283-05:00</updated><title type='text'>Add Folder-Level Context Menu Items</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#000000;"&gt;Add Folder-Level Context Menu Items&lt;br /&gt;&lt;br /&gt;Here’s how to do it:  -Some of you may ask “Why the heck?”…  Well, I just come up with the solutions, not the problemsJ&lt;br /&gt;&lt;br /&gt;Naturally, there may be several folders with like names in a library.  This is intended to be used for standard folders.  For example, for time sheets kept as per standard in a folder named “TimeReports”.&lt;br /&gt;The script below can be replaced and tailored to meet the requirements.  Ideally you will have a custom js file, custom doclib definitions and have defined one or more custom AddDoclibMenuItems functions also.   For this test, we’ll use the default AddDoclibMenuItems function&lt;br /&gt;&lt;br /&gt;Make sure you create a backup of the ows.js if you are modifying this file directly and not using a custom.js file.&lt;br /&gt;&lt;br /&gt;1. We need a little script to return the file’s immediate parent folder name.&lt;br /&gt;&lt;br /&gt;This goes anywhere in your script file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;color:#3333ff;"&gt;function GetFolderName()&lt;br /&gt;{&lt;br /&gt;var fileName = GetFileName(currentItemFileUrl);&lt;br /&gt;var folderName = currentItemFileUrl;&lt;br /&gt;// remove  /filename.ext from path&lt;br /&gt;folderName = folderName.replace('/' + fileName,'')&lt;br /&gt;// get folder name&lt;br /&gt;return folderName.substring(folderName.lastIndexOf('/')+1);&lt;br /&gt;}&lt;br /&gt;function GetFileName(inPathFile)&lt;br /&gt;{&lt;br /&gt;return inPathFile.substring(inPathFile.lastIndexOf('/')+1);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;2. Insert the function to add a custom menu items&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;function AddCustomFolderMenu()&lt;br /&gt;{&lt;br /&gt;var retval = false; // if no custom menu is added, default return value&lt;br /&gt;var fName = GetFolderName();&lt;br /&gt;       switch (fName)&lt;br /&gt;       {&lt;br /&gt;       // here is where you can get creative and do our own logic.  Get data from an xml file etc…&lt;br /&gt;        case "NewFolder":&lt;br /&gt;// add only the ‘Edit’ and checkin/out menu items to any folder named “New Folder”&lt;br /&gt;&lt;br /&gt;              setDocType();&lt;br /&gt;              strDisplayText = StBuildParam(L_EditIn_Text, currentItemAppName);&lt;br /&gt;strAction = "EditInOffice2000('" + currentItemFileUrl + "', '" + currentItemAppName + "', '" + ctx.HttpRoot + "')";&lt;br /&gt;                     strImagePath = ctx.imagesPath + currentItemIcon;&lt;br /&gt;                     CAMOpt(m, strDisplayText + " 2000", strAction, strImagePath);&lt;br /&gt;                     AddCheckinCheckoutMenuItem(m, ctx, currentItemEscapedFileUrl);&lt;br /&gt;                     retval = true; // No more menu items to be added.&lt;br /&gt;break; &lt;br /&gt;&lt;br /&gt;        case "test":&lt;br /&gt;              // for this example, we will add an item in addition to the default menu items&lt;br /&gt;strDisplayText = "Generate PDF Document";&lt;br /&gt;strAction = "STSNavigate('" + ctx.HttpRoot + "/_layouts/makepdf/makepdfversion.aspx?DocumentName=" + GetFileName(currentItemFileUrl) + "&amp;SourceFolder=" + GetFileName(currentItemEscapedFileUrl) + "&amp;amp;DocumentType=" + docExt + "&amp;RootFolder=" + GetSource() +"')";&lt;br /&gt;strImagePath = ctx.imagesPath + "pdf.gif";&lt;br /&gt;CAMOpt(m, strDisplayText, strAction, strImagePath);&lt;br /&gt;retval = false; // on return, it will continue to add the default items.&lt;br /&gt;break; &lt;br /&gt;                                          &lt;br /&gt;        case "so on and so on…":&lt;br /&gt;      }&lt;br /&gt;              return retval;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;3.                 Locate the function below:&lt;br /&gt;&lt;br /&gt;We need to place the test in an appropriate location within the script,  for example&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;function AddDocLibMenuItems(m, ctx)&lt;br /&gt;{&lt;br /&gt;…&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;4.                 Find the statement:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;if (currentItemFSObjType != 1)&lt;br /&gt;       {&lt;br /&gt;       …&lt;br /&gt;&lt;/span&gt;      &lt;br /&gt;&lt;span style="color:#000000;"&gt;(I guess we can have custom menu items for folders, but we mostly want to act on items inside folders…)&lt;br /&gt;&lt;br /&gt;5.                 Insert this code (immediately after if statement above)&lt;br /&gt;&lt;br /&gt;Here is where we will call our switch/case to determine whether a custom menu is required.  If the menu was added, we will break out and render our custom menu items only.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3366ff;"&gt;var retval = AddCustomFolderMenu(currentItemEscapedFileUrl);&lt;br /&gt;       if (retval == true)&lt;br /&gt;       {     &lt;br /&gt;       window.onfocus = RefreshOnNextFocus;&lt;br /&gt;       return;&lt;br /&gt;// if menu was added, we render and quit.&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;6.                 Done&lt;br /&gt;Nothing further required… Except for a few folders with the names you have selected.  Maybe a browser refresh ;)&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/10414700-113744107026538184?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/113744107026538184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=113744107026538184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/113744107026538184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/113744107026538184'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2006/01/add-folder-level-context-menu-items.html' title='Add Folder-Level Context Menu Items'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-112308565068038022</id><published>2005-08-03T11:07:00.000-05:00</published><updated>2005-08-03T11:44:26.780-05:00</updated><title type='text'>Updated TreeView Navigation</title><content type='html'>Latest navigator looks like so.  Worked out all glitches. Note: removed some Names from the Tree.&lt;br /&gt;&lt;br /&gt;Also implementing a control based on the MS IEWebcontrols.Treeview.&lt;br /&gt;&lt;br /&gt;Here's what it looks like: -the javascript version-&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6222/804/1600/treenav2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6222/804/320/treenav2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-112308565068038022?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/112308565068038022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=112308565068038022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/112308565068038022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/112308565068038022'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/08/updated-treeview-navigation.html' title='Updated TreeView Navigation'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-111842566907681236</id><published>2005-06-10T12:43:00.000-05:00</published><updated>2007-03-09T05:58:07.866-05:00</updated><title type='text'>BreadCrumb Links for SPS Areas</title><content type='html'>Once again, I’m not sure if this has been posted anywhere…&lt;br /&gt;&lt;br /&gt;Regardless, I haven’t found a similar posting, so here goes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We all know that there is a breadcrumb navigation for the left nav in SPS. Some would like to have it on the top of the page, and this needs to be a custom modification, so here is how to do it:&lt;br /&gt;&lt;br /&gt;For this example, I will be replacing the Page Title with the breadcrumb link.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Open any of the default.aspx pages for an area template in your favourite editor. For example, the SPSTOPIC\default.aspx page. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Locate the following code that renders the page title:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;tr&amp;gt; &amp;lt;td ID="onetidPageTitle" class="ms-pagetitle"&amp;gt; &lt;BR&gt;&amp;lt;SPSWC:CategoryProperty runat="server" Property="Name" /&amp;gt; &amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;/pre&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Comment this entry&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Replace the code with the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;spswc:breadcrumbtrail id=&amp;quot;BreadCrumbTrail2&amp;quot; &lt;BR&gt;runat=&amp;quot;server&amp;quot; titlelocid=&amp;quot;MultiPage_BreadcrumbWebPartTitle&amp;quot; &lt;BR&gt;verticalmode=&amp;quot;false&amp;quot; frametype=&amp;quot;None&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Note that you will need to give the control a unique ID ("BreadCrumbTrail2") ast here is another control already on the page.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Save the Page and take a look… You should see something like this in place of the Page Title. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Back to: &lt;a href="http://www.blogger.com/default.aspx"&gt;Home&lt;/a&gt; &gt; &lt;a href="http://www.blogger.com/Topics/default.aspx"&gt;Topics&lt;/a&gt; &gt; Applications&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Finally, if you would like to edit the appearance, the classes to modify this are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.bc-cell&lt;br /&gt;.bc-htable&lt;br /&gt;.bc-trail&lt;br /&gt;.bc-leadin&lt;br /&gt;.ms-vb bc-cell&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-111842566907681236?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/111842566907681236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=111842566907681236' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111842566907681236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111842566907681236'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/06/breadcrumb-links-for-sps-areas.html' title='BreadCrumb Links for SPS Areas'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-111826120796400620</id><published>2005-06-08T15:05:00.000-05:00</published><updated>2005-06-10T13:00:01.176-05:00</updated><title type='text'>Force Document Check-out</title><content type='html'>Forcing Document Check-Out in SharePoint Libraries&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;The issue:  Two or more users opening a document for editing simultaneously.  This can happen quite easily if users do not follow procedure and is likely to cause some headaches in large environments.&lt;br /&gt;&lt;br /&gt;The solution: Easy… Build the procedure into the function so your users don’t have the option to ‘skip’ it.&lt;br /&gt;&lt;br /&gt;We need to do two things, both in the ows.js – or customows.js if you have one -  Always back-up before editing!&lt;br /&gt;&lt;br /&gt;First, we must edit the original call to the editor (Office 2003 application).&lt;br /&gt;&lt;br /&gt;Find the AddDoclibMenuItems function as shown below.  We need to pass an extra argument, ctx.HttpRoot, to establish the origin when we make the call to editDocumentWithProgID2 function.  This is necessary to perform the Check-out.  Locate the line and edit as shown below.&lt;br /&gt;&lt;br /&gt;function AddDocLibMenuItems(m, ctx)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;strAction = "editDocumentWithProgID2('" + currentItemFileUrl + "', '" + currentItemProgId + "', '" + currentItemOpenControl + "', '" + ctx.HttpRoot + "')";&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Next we analyse the Check-In and Check-Out function to determine how to implement it:&lt;br /&gt;&lt;br /&gt;The call to Check-Out an item is like so:&lt;br /&gt;&lt;br /&gt;NavigateToCheckinAspx('" + ctx.HttpRoot + "', 'FileName=" + url + "&amp;Checkout=true')";&lt;br /&gt;&lt;br /&gt;And the NavigateToCheckinAspx is like so:&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;function NavigateToCheckinAspx(strHttpRoot, strArgs)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    SubmitFormPost(strHttpRoot + "/_layouts/" + L_Language_Text + "/Checkin.aspx?" + strArgs + "&amp;Source=" + GetSource());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Thus, we can modify the editDocumentWithProgID2 function to perform the checkout before the item is opened.  To do this, add the new argument we are passing to the function (strHttpRoot) and add the if statements below to the beginning of the editDocumentWithProgID2 function as shown:&lt;br /&gt;&lt;br /&gt;function editDocumentWithProgID2(strDocument, varProgID, varEditor, strHttpRoot)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if (currentItemCheckedOutUserId == null)&lt;br /&gt;&lt;br /&gt;currentItemCheckedOutUserId = itemTable.COUId;&lt;br /&gt;&lt;br /&gt;if (currentItemCheckedOutUserId == "")&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;SubmitFormPost(strHttpRoot + "/_layouts/" + L_Language_Text + "/Checkin.aspx?FileName=" + strDocument + "&amp;Checkout=true&amp;Source=" + GetSource());&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The Result: If the document is not checked out, it will automatically be checked out when the user elects to edit the item.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-111826120796400620?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/111826120796400620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=111826120796400620' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111826120796400620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111826120796400620'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/06/force-document-check-out.html' title='Force Document Check-out'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-111824500268650766</id><published>2005-06-08T10:18:00.000-05:00</published><updated>2005-06-08T13:28:35.976-05:00</updated><title type='text'>Document Workspace: Multiple Documents</title><content type='html'>&lt;p&gt;The problem:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;So you have a project that needs to update/modyfy multiple documents.  On top of that, they are in various libraries.  Do you really want to create a workspace for each one? Definitely not.   Need to configure security, possibly event handlers fot the libraries, etc.  Unless you have an application to automate this, it's a pain.  regardless, it's a pain cause you need multiple workspaces.&lt;br /&gt;&lt;br /&gt;Here's a trick:  (Note, this is just the idea.  I will leave the details of coding to you...)&lt;br /&gt;&lt;br /&gt;You need to create a small application - maybe a webpart) to build a list of available files in a given site.&lt;/p&gt;&lt;p&gt;a) The app should be called from the target library.  For example, using a new button in the library toolbar that can pass the target url to the application.&lt;/p&gt;&lt;p&gt;b) The App should allow selection from multiple libraries and be able to navigate subfolders to allow the user access to all the files in the current site.&lt;/p&gt;&lt;p&gt;c)  for each selected file, you will need to store the full url.&lt;/p&gt;&lt;p&gt;d) Once all files are selected and the user clicks 'ok', the files are copied to the desired Workspace library.  At the time of copying the files, you must set the _SourceUrl field to match the origin url.  like so:  &lt;/p&gt;&lt;p&gt;item.Item("Source Url") = "&lt;span style="color:#000000;"&gt;http://server/sites/site/&lt;/span&gt;&lt;span style="color:#000000;"&gt;library/folder/filename.ext"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;where item is an SPListItem object, meaning a file in a document library in this case.&lt;/p&gt;&lt;p&gt;if you use an SPFile object, just substitute &lt;/p&gt;&lt;p&gt;file.Item.Item("Source Url") = &lt;span style="color:#000000;"&gt;"&lt;/span&gt;&lt;span style="color:#000000;"&gt;http://server/sites/site/library/folder/filename.ext&lt;/span&gt;&lt;span style="color:#000000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So now you have a bunch of files from different sources in one central workspace for editing, and they are all connected to their respective parent objects.&lt;/p&gt;&lt;p&gt;NB: don't forget to check-out the source files when you do this...  &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/10414700-111824500268650766?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/111824500268650766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=111824500268650766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111824500268650766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/111824500268650766'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/06/document-workspace-multiple-documents.html' title='Document Workspace: Multiple Documents'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110865884628423149</id><published>2005-02-17T11:03:00.000-05:00</published><updated>2006-05-15T07:48:53.166-05:00</updated><title type='text'>Display User Site Roles</title><content type='html'>This page creates a simple table that lists all subwebs and user roles for each web.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;%@ Page language="VB"%&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Import Namespace="Microsoft.SharePoint" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;Link REL="stylesheet" Type="text/css" HREF="/_layouts/&amp;lt;%=System.Threading.Thread.CurrentThread.CurrentUICulture.LCID%&amp;gt;/styles/ows.css"&amp;gt;&lt;br /&gt;&amp;lt;script language="vb" runat="server"&amp;gt;&lt;br /&gt;Sub Page_Load(obj as object, e as eventargs)&lt;br /&gt; Dim mySite As SPSite = SPControl.GetContextSite(Context)&lt;br /&gt; Dim myWeb As SPWeb = SPControl.GetContextWeb(Context)&lt;br /&gt;  &lt;br /&gt; Response.Write("&amp;lt;table border=1 class=ms-hovercellactive&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Site&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;User&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Roles&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;")&lt;br /&gt; For Each subSite as SPWeb In mySite.AllWebs&lt;br /&gt;  Response.Write("&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;" + subSite.ServerRelativeUrl.ToString + "&amp;lt;/td&amp;gt;")&lt;br /&gt;  For Each user As SPUser In subSite.Users&lt;br /&gt;   Response.Write("&amp;lt;td&amp;gt;" + user.Name + "&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;")&lt;br /&gt;   For Each role as SPRole In user.Roles&lt;br /&gt;    Response.Write( role.Name.ToString + " ")&lt;br /&gt;   Next role&lt;br /&gt;   Response.Write("&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;")&lt;br /&gt;  Next user&lt;br /&gt;  Response.Write("&amp;lt;/tr&amp;gt;")&lt;br /&gt; Next subSite&lt;br /&gt; Response.Write("&amp;lt;/table&amp;gt;")          &lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/HTML&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110865884628423149?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110865884628423149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110865884628423149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110865884628423149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110865884628423149'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/02/display-user-site-roles.html' title='Display User Site Roles'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110865603678505617</id><published>2005-02-17T10:50:00.000-05:00</published><updated>2005-02-23T12:24:57.493-05:00</updated><title type='text'>Display Properties for List (Doclib) Items in Site</title><content type='html'>&lt;span style="font-family:arial;"&gt;This is a simple aspx page that you can call to iterate the files in your site libraries and display each item's properties.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;%@ Page language="VB"%&amp;gt; &amp;lt;%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt; &amp;lt;%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt; &amp;lt;%@ Import Namespace="Microsoft.SharePoint" %&amp;gt; &amp;lt;%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;!-- by Manuel Montes -- pastel_de_limon@hotmail.com --&amp;gt;&lt;br /&gt;&amp;lt;HEAD&amp;gt;&lt;br /&gt;&amp;lt;script language="vb" runat="server"&amp;gt;&lt;br /&gt;Public outputstring as string&lt;br /&gt;Sub Page_Load(obj as object, e as eventargs)&lt;br /&gt;   Dim ThisWeb As SPWeb = SPControl.GetContextWeb(Context) &lt;br /&gt;   'ThisWeb.AllowUnsafeUpdates = True&lt;br /&gt;   Dim hash As System.Collections.Hashtable&lt;br /&gt;   Dim keys As System.Collections.ICollection&lt;br /&gt;   Response.Write(ThisWeb.url + "&amp;lt;BR&amp;gt;")&lt;br /&gt;   Dim lists as SPListCollection = ThisWeb.GetListsOfType(SPBaseType.DocumentLibrary)                      &lt;br /&gt;   For Each list as SPList In lists&lt;br /&gt;    Dim docLibrary As SPDocumentLibrary = CType(list, SPDocumentLibrary)&lt;br /&gt;    if not docLibrary.IsCatalog&lt;br /&gt;     Response.Write(docLibrary.Title + "&amp;lt;BR&amp;gt;") &lt;br /&gt;      For Each item as SPListItem in docLibrary.Items  &lt;br /&gt;       hash = item.File.Properties&lt;br /&gt;       keys = hash.Keys&lt;br /&gt;       For Each key As Object In keys&lt;br /&gt;        Response.Write(SPEncode.HtmlEncode(key.ToString()) &amp;amp; " : " &amp; SPEncode.HtmlEncode(hash(key.ToString()).ToString()) &amp;amp;amp; ";")&lt;br /&gt;        Response.write("&amp;lt;BR&amp;gt;")&lt;br /&gt;       Next key&lt;br /&gt;       Response.Write("Next Item: &amp;lt;BR&amp;gt;")&lt;br /&gt;      Next item        &lt;br /&gt;    End if &lt;br /&gt;   Next list&lt;br /&gt;     &lt;br /&gt;End Sub   &lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/HTML&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110865603678505617?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110865603678505617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110865603678505617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110865603678505617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110865603678505617'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/02/display-properties-for-list-doclib.html' title='Display Properties for List (Doclib) Items in Site'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110720430089149899</id><published>2005-01-31T15:39:00.000-05:00</published><updated>2006-05-15T07:52:16.926-05:00</updated><title type='text'>Simple User Welcome for SPS/WSS</title><content type='html'>&lt;p&gt;Save this page in the layouts/1033 folder and and reference it in a page viewer webpart...&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;lt;html&amp;gt; &amp;lt;%@ Page language="C#"%&amp;gt; &amp;lt;%@ Register Tagprefix="SharePoint"&lt;br /&gt;Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint,&lt;br /&gt;Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt; &amp;lt;%@&lt;br /&gt;Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities"&lt;br /&gt;Assembly="Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral,&lt;br /&gt;PublicKeyToken=71e9bce111e9429c" %&amp;gt; &amp;lt;%@ Import Namespace="Microsoft.SharePoint"&lt;br /&gt;%&amp;gt; &amp;lt;%@ Register Tagprefix="WebPartPages"&lt;br /&gt;Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint,&lt;br /&gt;Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt; &amp;lt;% SPSite&lt;br /&gt;spServer = SPControl.GetContextSite(System.Web.HttpContext.Current); SPWeb spWeb&lt;br /&gt;= SPControl.GetContextWeb(System.Web.HttpContext.Current); %&amp;gt; &amp;lt;% &lt;/p&gt;&lt;br /&gt;&lt;p&gt;string welcome = "Welcome to the " + spWeb.Title + " site. "; string welcome2&lt;br /&gt;= "You are logged on as: " + spWeb.CurrentUser.Name ; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;%&amp;gt; &amp;lt;BODY height=40px scroll="no"&amp;gt; &amp;lt;TABLE &amp;gt;&amp;lt;TR&amp;gt;&amp;lt;td style="font-family:Arial;&lt;br /&gt;font-size:10pt; font-weight:bold; color:#af0b1c"&amp;gt;&amp;lt;%=welcome%&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/TR&amp;gt; &amp;lt;TR&amp;gt;&amp;lt;td&lt;br /&gt;style="font-family:Arial; font-size:10pt; font-weight:bold;&lt;br /&gt;color:#000000"&amp;gt;&amp;lt;%=welcome2%&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/TR&amp;gt;&amp;lt;/TABLE&amp;gt; &amp;lt;/BODY&amp;gt; &amp;lt;/HTML&amp;gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110720430089149899?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110720430089149899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110720430089149899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110720430089149899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110720430089149899'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/01/simple-user-welcome-for-spswss.html' title='Simple User Welcome for SPS/WSS'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110720181020681801</id><published>2005-01-31T13:02:00.000-05:00</published><updated>2005-02-01T10:35:41.183-05:00</updated><title type='text'>Recycle Bin for SPS and WSS Libraries</title><content type='html'>&lt;span style="font-family:arial;"&gt;I have an ongoing development of a utility for easy recovery of documents. Began this last September, but have been busy with other things. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;My first challenge was realising that it's impossible to use an event handler to catch an splistiem on the delete event. Of course... it's quite impossible to act on a deleted item. So this implied a different approach, which was just recently published by Maxim Karpov in the february edition of MSDN Magazine. This solution is great, if you are to use event handlers.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;I opted for a different approach. Rather than using event handlers, I built an application that is called via the context menu. The goal here is to replace the Delete command with a call to move the file to a designated "Recycle Bin" library.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;I have a demo video, about 1.5MB which shows how this application works. If anyone likes I can email it. I will gladly share this.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;One challenge I have found is in retaining the document metadata, such as the last edited time, or modified time. Also, for deleted folders, I have not been able to access these properties. Nonetheless, this is far better than an item-level restore from SQL!!! &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;The main advantage of this solution over the event-driven solution is that only ONE recycle bin pre site is required, and you do not need to keep a mirror of each library. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;The main advantage of the event-driven solution is that it catched delete events in explorer view also, whereas this solution does not.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;There are several security checks performed by the application to verify delete/restore permissions, and this will also display user friendly messages for checked-out items etc. while the standard WSS redirect to an error page is rather abrupt and rude.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Looking to finish up some minor glitches in the next weeks.&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110720181020681801?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110720181020681801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110720181020681801' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110720181020681801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110720181020681801'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/01/recycle-bin-for-sps-and-wss-libraries.html' title='Recycle Bin for SPS and WSS Libraries'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110676715500622417</id><published>2005-01-27T10:59:00.000-05:00</published><updated>2006-01-16T14:35:18.800-05:00</updated><title type='text'>Library TreeView Navigation Control for SPS and WSS</title><content type='html'>&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;Document Library Tree View navigation Control&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This control is a explorer tree-type navigator that you can stick inyour sharepoint left navbar.To implement this solution, follow these steps:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Create a new Web Control Libray project in vb.net &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Paste the source code below - also available &lt;a href="http://www.msd2d.com/Content/Tip_viewitem_03.aspx?section=SharePoint&amp;category=Development&amp;id=27b1eb09-9e7c-40af-b36d-c20f533b73ed"&gt;here.&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Generate a key file (&lt;span style="color:#3333ff;"&gt;sn -k {path}\treenav.snk&lt;/span&gt;) and reference it in the assemblyinfo.vb as shown here: &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;&amp;lt;Assembly: AssemblyKeyFile(&amp;quot;c:\keys\libtreenav.snk&amp;quot;)&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Edit the version number for the assembly ex: &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;&amp;lt;Assembly: AssemblyVersion(&amp;quot;1.1.1.0&amp;quot;)&amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Recompile the code &lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;To trust the assembly, add it to the GAC OR copy it to the bin folder and add a safecontrol entry in the web.config like this: &lt;/span&gt;&lt;p&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;"&gt;&amp;lt;SafeControl Assembly=&amp;quot;LibraryTreeView, Version=1.1.1.0, Culture=neutral, PublicKeyToken=db9e239c2db54b1b&amp;quot; Namespace=&amp;quot;LibraryTreeView&amp;quot; TypeName=&amp;quot;*&amp;quot; Safe=&amp;quot;True&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Restart iis. &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Note: You can determine the assembly's PKT by viewing the item properties from the GAC (&lt;span style="color:#3333ff;"&gt;C:\windows\assembly folder&lt;/span&gt;)To render the control:&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;Next, edit the pages&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In your default.aspx and in the allitems.aspx of the doclib list template, insert this directive: &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;%@ Register Tagprefix="LTV" Namespace="LibraryTreeView" Assembly="LibraryTreeView, Version=,Culture=neutral, PublicKeyToken= yourassemlblypkt" %&gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;The control uses Geir Landro's dtree javascript ( www.destroydrop.com/tree ) so you need to download this, I place the dtree.js in &lt;span style="color:#3333ff;"&gt;layouts\1033&lt;/span&gt; and used &lt;span style="color:#3333ff;"&gt;layouts\1033\images\img&lt;/span&gt; to store the dtree images for this.(you can put them wherever you want) &lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Reference the script and the css file in your default.aspx and allitems.aspx &lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;&amp;lt;link rel=&amp;quot;StyleSheet&amp;quot; href=&amp;quot;/_layouts/1033/styles/dtree.css&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/_layouts/1033/dtree.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Place the control into the navigation Table, best right at the top, before the Documents navbar item.&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:arial;color:#3333ff;"&gt;&amp;lt;LTV:TreeViewNav id=&amp;quot;LTVNav1&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;You will also need to customize the dtree.css file to control the boundaries of the navigator. If you do not set boundaries on the control, as you expand the tree, your navigation column will also expand and the web part page will shrink.&lt;br /&gt;You can do it like this, for example. You can read about controlling scrollbars to learn how to customise this to your liking.&lt;br /&gt;in the dtree.css file, edit this class:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3333ff;"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;.dtree {&lt;br /&gt;font-family: Arial;&lt;br /&gt;font-size: 8pt;&lt;br /&gt;color: #000000;&lt;br /&gt;white-space: nowrap;&lt;br /&gt;overflow-x: scroll;&lt;br /&gt;overflow-y: hidden;&lt;br /&gt;&lt;br /&gt;height: auto;&lt;br /&gt;width: 120px;&lt;br /&gt;&lt;br /&gt;SCROLLBAR-FACE-COLOR: #ffffff;&lt;br /&gt;SCROLLBAR-ARROW-COLOR: #AF0B1C;&lt;br /&gt;SCROLLBAR-TRACK-COLOR: #ffffff;&lt;br /&gt;SCROLLBAR-BASE-COLOR: #ffffff;&lt;br /&gt;scrollbar-shadow-color: #ffffff;&lt;br /&gt;scrollbar-darkshadow-color: #ffffff;&lt;br /&gt;scrollbar-highlight-color: none;&lt;br /&gt;scrollbar-3dlight-color:#ffffff;&lt;br /&gt;&lt;br /&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;To open the linked documents in a new window, change (add) the following italicised code in the dtree.js&lt;br /&gt;if ((node.icon == this.icon.folder) {&lt;br /&gt;  str += '&amp;lt;a id=&amp;quot;s' + this.obj + nodeId + '&amp;quot; class=&amp;quot;' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '&amp;quot; href=&amp;quot;' + node.url + '&amp;quot;';&lt;br /&gt;  }else{&lt;br /&gt;  str += '&amp;lt;a id=&amp;quot;s' + this.obj + nodeId + '&amp;quot; class=&amp;quot;' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '&amp;quot; target=&amp;quot;new&amp;quot; href=&amp;quot;' + node.url + '&amp;quot;';} &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;© 2004 Manuel Montes&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110676715500622417?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110676715500622417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110676715500622417' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110676715500622417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110676715500622417'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/01/library-treeview-navigation-control.html' title='Library TreeView Navigation Control for SPS and WSS'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10414700.post-110684044343570121</id><published>2005-01-27T10:39:00.000-05:00</published><updated>2007-03-31T15:00:33.523-05:00</updated><title type='text'>TreeView Control source code</title><content type='html'>&lt;span style="font-family:courier new;font-size:85%;"&gt;#Region "Author Info"&lt;br /&gt;'This control was written by Manuel Montes. manuel.montes@cibc.com&lt;br /&gt;'The dTree javascript referenced in this control is written by Geir Landro&lt;br /&gt;#End Region&lt;br /&gt;Imports System.ComponentModel&lt;br /&gt;Imports System.Web.UI&lt;br /&gt;Imports Microsoft.SharePoint&lt;br /&gt;Imports Microsoft.SharePoint.WebControls&lt;br /&gt;&amp;lt;DefaultProperty("Text"), ToolboxData("&amp;lt;{0}:TreeViewNav runat=server&amp;gt;&amp;lt;/{0}:TreeViewNav&amp;gt;")&amp;gt; Public Class TreeViewNav&lt;br /&gt;Inherits System.Web.UI.WebControls.WebControl&lt;br /&gt;Dim _text As String&lt;br /&gt;&amp;lt;Bindable(True), Category("Appearance"), DefaultValue("")&amp;gt; Property [Text]() As String&lt;br /&gt;Get&lt;br /&gt;Return _text&lt;br /&gt;End Get&lt;br /&gt;Set(ByVal Value As String)&lt;br /&gt;_text = Value&lt;br /&gt;End Set&lt;br /&gt;End Property&lt;br /&gt;Public htmlstring As String = "" 'used to build the javascript&lt;br /&gt;Public Index As Integer 'unique identifier for each node&lt;br /&gt;Public TempIndex As Integer 'holds current node ID&lt;br /&gt;Public SiteName As String&lt;br /&gt;Public CurrentLib As SPDocumentLibrary&lt;br /&gt;Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter&lt;br /&gt;Dim CurrentWeb As SPWeb = SPControl.GetContextWeb(Context)&lt;br /&gt;Dim ParentSite As SPSite = CurrentWeb.Site ' need site to work with lists and to set the following property&lt;br /&gt;ParentSite.CatchAccessDeniedException = False 'do not prompt for authentication if no access&lt;br /&gt;SiteName = "LibTree" &amp; CurrentWeb.CurrentUser.ID.ToString&lt;br /&gt;Dim Libraries As SPListCollection = CurrentWeb.GetListsOfType(SPBaseType.DocumentLibrary)&lt;br /&gt;Libraries.ListsForCurrentUser = True&lt;br /&gt;Dim Library As SPDocumentLibrary&lt;br /&gt;Dim SubIndex As Integer = 0 ' Holds the level of subs&lt;br /&gt;Try&lt;br /&gt;Index = 0&lt;br /&gt;htmlstring = "&amp;lt;div class=""dtree""&amp;gt;&amp;lt;p&amp;gt;&amp;lt;a href=""javascript: " &amp; SiteName &amp;amp;amp;amp; ".openAll();""&amp;gt;Open All&amp;lt;/a&amp;gt; &amp;lt;a href=""javascript: " &amp; SiteName &amp;amp;amp;amp; ".closeAll();""&amp;gt;Close All&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;"&lt;br /&gt;htmlstring += "&amp;lt;script type=""text/javascript""&amp;gt;"&lt;br /&gt;htmlstring += SiteName + " = new dTree('" + SiteName + "');"&lt;br /&gt;htmlstring += SiteName + ".add(0,-1,'Site Libraries');"&lt;br /&gt;'users in Readers group do not have browse directory perm used in web.subfolders cast so implemented lists instead.&lt;br /&gt;For Each Library In Libraries 'iterate all the site document libraries&lt;br /&gt;'If Library.Permissions.DoesUserHavePermissions(SPRights.ViewPages) And Library.Permissions.DoesUserHavePermissions(SPRights.ViewListItems) Then&lt;br /&gt;If Not Library.Title = "Recycled" And Not Library.IsCatalog And Not Library.BaseTemplate = SPListTemplateType.PictureLibrary Then&lt;br /&gt;CurrentLib = Library&lt;br /&gt;Dim NewUrl As String() = Library.DefaultViewUrl.Split("/")&lt;br /&gt;Dim CurrentFolder As SPFolder = CurrentWeb.GetFolder(NewUrl.GetValue(NewUrl.Length - 3))&lt;br /&gt;Index = Index + 1&lt;br /&gt;htmlstring += SiteName &amp;amp; ".add(" &amp; Index &amp;amp; ",0,'" &amp; CurrentFolder.Name &amp;amp; "','" &amp; CurrentFolder.ServerRelativeUrl &amp;amp;amp;amp; "','','','_layouts/1033/images/img/folder.gif');"&lt;br /&gt;SubIndex = Index&lt;br /&gt;If CurrentFolder.SubFolders.Count &amp;gt; 0 Then&lt;br /&gt;ListSubFolders(CurrentFolder, SubIndex)&lt;br /&gt;End If&lt;br /&gt;If CurrentFolder.Files.Count &amp;gt; 0 Then&lt;br /&gt;ListFiles(CurrentFolder, SubIndex)&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;'End If&lt;br /&gt;'SubIndex = 0&lt;br /&gt;Next&lt;br /&gt;'htmlstring += "LibTree.config.folderlinks = ""False"";"&lt;br /&gt;htmlstring += "document.write(" &amp; SiteName &amp;amp;amp;amp; ");"&lt;br /&gt;htmlstring += "&amp;lt;"&lt;br /&gt;htmlstring += "/script"&lt;br /&gt;htmlstring += "&amp;gt;&amp;lt;/div&amp;gt;"&lt;br /&gt;output.Write(htmlstring)&lt;br /&gt;Libraries = Nothing&lt;br /&gt;Library = Nothing&lt;br /&gt;'CurrentWeb.Close()&lt;br /&gt;Catch UnauthorizedAccessException As Exception&lt;br /&gt;output.Write(UnauthorizedAccessException.Message.ToString)&lt;br /&gt;End Try&lt;br /&gt;End Sub&lt;br /&gt;Sub ListSubFolders(ByVal ThisFolder As SPFolder, ByVal ParentIndex As Integer)&lt;br /&gt;Dim Subfolder As SPFolder&lt;br /&gt;'if there are subfolders, we iterate these, else we write the current folder to the tree and exit the sub&lt;br /&gt;If ThisFolder.SubFolders.Count &amp;gt; 0 Then&lt;br /&gt;For Each Subfolder In ThisFolder.SubFolders 'iterate current folder subfolders&lt;br /&gt;If Subfolder.Name &amp;lt;&amp;gt; "Forms" And Subfolder.Name.Chars(0) &amp;lt;&amp;gt; "_" Then&lt;br /&gt;Index = Index + 1&lt;br /&gt;htmlstring += SiteName &amp;amp; ".add(" &amp; Index &amp;amp; "," &amp; ParentIndex &amp;amp; ",'" &amp; Subfolder.Name &amp;amp;amp;amp; "','" &amp; Subfolder.ServerRelativeUrl &amp;amp;amp;amp; "','','','_layouts/1033/images/img/folder.gif');"&lt;br /&gt;'if this folder has subs we must enter the sub again and start again&lt;br /&gt;If Subfolder.SubFolders.Count &amp;gt; 0 Then&lt;br /&gt;TempIndex = Index&lt;br /&gt;ListSubFolders(Subfolder, Index)&lt;br /&gt;If Subfolder.Files.Count &amp;gt; 0 Then&lt;br /&gt;ListFiles(Subfolder, TempIndex)&lt;br /&gt;End If&lt;br /&gt;Else&lt;br /&gt;'Add the current Folder's files to the tree.&lt;br /&gt;If Subfolder.Files.Count &amp;gt; 0 Then&lt;br /&gt;ListFiles(Subfolder, Index)&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;Else&lt;br /&gt;' last subfolder in current branch; add current folder and its files to the tree and exit the sub&lt;br /&gt;Index = Index + 1&lt;br /&gt;htmlstring += SiteName &amp;amp; ".add(" &amp; Index &amp;amp; "," &amp; TempIndex &amp;amp; ",'" &amp; ThisFolder.Name &amp;amp;amp;amp; "','" &amp; ThisFolder.ServerRelativeUrl &amp;amp;amp;amp; "','','','_layouts/1033/images/img/folder.gif');"&lt;br /&gt;If ThisFolder.Files.Count &amp;gt; 0 Then&lt;br /&gt;ListFiles(ThisFolder, Index)&lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;br /&gt;Sub ListFiles(ByVal Folder As SPFolder, ByVal SubInd As Integer)&lt;br /&gt;Try&lt;br /&gt;If CurrentLib.EnableModeration = True Then&lt;br /&gt;For Each objFile As SPFile In Folder.Files 'iterate files in current folder&lt;br /&gt;If objFile.Item.ModerationInformation.Status = SPModerationStatusType.Approved Then&lt;br /&gt;Index = Index + 1&lt;br /&gt;htmlstring += SiteName &amp;amp; ".add(" &amp; Index &amp;amp; "," &amp; SubInd &amp;amp;amp;amp; ",'" &amp; objFile.Name &amp;amp; "','" &amp; objFile.ServerRelativeUrl &amp;amp;amp;amp; "','" &amp; objFile.Name.ToString &amp;amp;amp;amp; "','','_layouts/1033/images/img/" &amp;amp; GetFileImage(objFile.Name) &amp; "');"&lt;br /&gt;End If&lt;br /&gt;Next&lt;br /&gt;Else&lt;br /&gt;For Each objFile As SPFile In Folder.Files 'iterate files in current folder&lt;br /&gt;Index = Index + 1&lt;br /&gt;htmlstring += SiteName &amp;amp; ".add(" &amp; Index &amp;amp; "," &amp; SubInd &amp;amp;amp;amp; ",'" &amp; objFile.Name &amp;amp; "','" &amp; objFile.ServerRelativeUrl &amp;amp;amp;amp; "','" &amp; objFile.Name.ToString &amp;amp;amp;amp; "','','_layouts/1033/images/img/" &amp;amp; GetFileImage(objFile.Name) &amp; "');"&lt;br /&gt;Next&lt;br /&gt;End If&lt;br /&gt;Catch FileList As Exception&lt;br /&gt;End Try&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;Function GetFileImage(ByVal FileName)&lt;br /&gt;' extract file extension from filename&lt;br /&gt;Dim FileExt As String = FileName.Substring(FileName.Length - 3, 3)&lt;br /&gt;Dim ImageFile As String&lt;br /&gt;Select Case FileExt&lt;br /&gt;'files are in the images\img folder. add new for new file types as needed.&lt;br /&gt;Case "doc"&lt;br /&gt;ImageFile = "doc16.gif"&lt;br /&gt;Case "xls"&lt;br /&gt;ImageFile = "xls16.gif"&lt;br /&gt;Case "ppt"&lt;br /&gt;ImageFile = "ppt16.gif"&lt;br /&gt;Case "vsd"&lt;br /&gt;ImageFile = "vsd16.gif"&lt;br /&gt;Case "mpp"&lt;br /&gt;ImageFile = "mpp16.gif"&lt;br /&gt;Case "pdf"&lt;br /&gt;ImageFile = "pdf.gif"&lt;br /&gt;Case "txt"&lt;br /&gt;ImageFile = "txt16.gif"&lt;br /&gt;Case "xml"&lt;br /&gt;ImageFile = "xml16.gif"&lt;br /&gt;Case "htm"&lt;br /&gt;ImageFile = "htm16.gif"&lt;br /&gt;Case Else&lt;br /&gt;ImageFile = "page.gif"&lt;br /&gt;End Select&lt;br /&gt;Return ImageFile&lt;br /&gt;End Function&lt;br /&gt;End Class&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10414700-110684044343570121?l=pasteldelimon.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pasteldelimon.blogspot.com/feeds/110684044343570121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10414700&amp;postID=110684044343570121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110684044343570121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10414700/posts/default/110684044343570121'/><link rel='alternate' type='text/html' href='http://pasteldelimon.blogspot.com/2005/01/treeview-control-source-code.html' title='TreeView Control source code'/><author><name>Manuel Montes</name><uri>http://www.blogger.com/profile/17213377450221958791</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
