<?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:blogger='http://schemas.google.com/blogger/2008' 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-939541377674083757</id><updated>2024-09-01T06:40:19.324-07:00</updated><category term="SharePoint 2010"/><title type='text'>Wineya&#39;s Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.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>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-4454227698601416737</id><published>2011-04-03T04:13:00.000-07:00</published><updated>2011-04-03T04:13:03.621-07:00</updated><title type='text'>Content organizer feature.</title><content type='html'>Content organizer is a really cool feature available in SharePoint 2010, This is available at site level and&amp;nbsp; activation is quiet straightforward, as we always do, navigate to the site features of the site where we plan to use the content organizer and activate the content organizer feature which is mostly the first feature in the list of site features.&lt;br /&gt;
&lt;br /&gt;
As usual, as long as the feature get activated, we are happy and we do not attempt to look any further and enjoy using the content organizer. The only and also the interesting time that we tend to look at this feature in detail is, if it fails during activation or if you want to customize the application of content organizer, if you are in the latter category, the following will help you bit in understanding&amp;nbsp; a bit of internals of this&amp;nbsp; feature.&lt;br /&gt;
&lt;br /&gt;
In fact the basic content organizer feature is coming with two features, one is at the site level and the other is at the site collection level. The site collection level feature is hidden and the main content organizer feature is depending on this. The folder names for these two features are DocumentRoutine and DocumentRoutineResources, &lt;br /&gt;
&lt;br /&gt;
The DocumentRoutine is the site level feature and which get activated when the content organizer feature is activated, but this feature as I mentioned above depends on the DocumentRoutineResources hidden site collection level feature, so the DocumentRoutineResources hidden feature is activated by the site collection feature known as &quot;SharePoint Server Standard Site Collection Features&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_EInbad07rV_nmSLaHOt0en3ZrLfP3SUFWwjmYgdOYeVssYyBOhV61bzOK646QqE6eJ-SsQsc-6zmgDau6JjayjstDu8SDrtQtumygakEAzndPfSOmW1o65fuapQqCkXR9H_Ibg9pJQ/s1600/Site+collection+feature.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;28&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_EInbad07rV_nmSLaHOt0en3ZrLfP3SUFWwjmYgdOYeVssYyBOhV61bzOK646QqE6eJ-SsQsc-6zmgDau6JjayjstDu8SDrtQtumygakEAzndPfSOmW1o65fuapQqCkXR9H_Ibg9pJQ/s400/Site+collection+feature.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Normally, this feature is always activated by default as such the DocumentRoutineResources is also activated bu default.&lt;br /&gt;
&lt;br /&gt;
As the name implies, DocumentRoutineResources features adds all the required content types and site columns for content organization while the DocumentRoutine feature creates the&amp;nbsp; two lists, the Drop off library which is available under the libraries and the other is the routing rules list which can be accessed by the link provided at the Site Administration under site settings and also one more link to access the content organizer settings page.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/4454227698601416737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/4454227698601416737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/4454227698601416737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/4454227698601416737'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2011/04/content-organizer-feature.html' title='Content organizer feature.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_EInbad07rV_nmSLaHOt0en3ZrLfP3SUFWwjmYgdOYeVssYyBOhV61bzOK646QqE6eJ-SsQsc-6zmgDau6JjayjstDu8SDrtQtumygakEAzndPfSOmW1o65fuapQqCkXR9H_Ibg9pJQ/s72-c/Site+collection+feature.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-1106138582233948790</id><published>2011-01-31T17:23:00.000-08:00</published><updated>2011-01-31T17:24:18.802-08:00</updated><title type='text'>GUIDs of the standard features in SharePoint 2010</title><content type='html'>We can always goto the hive \template\features and open the feature xml and find the unique ID of the feature that&amp;nbsp;we&amp;nbsp;are after&amp;nbsp;but only intrigue part is&amp;nbsp;most of the&amp;nbsp;time the name appear in the feature folder is different to what we see in the SharePoint feature list either at the site or site collection level, one good example is Content Organizer, the folder name is DocumentRoutine, so I founnd the following link is very usefull in this aspect.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blogs.msdn.com/b/mcsnoiwb/archive/2010/01/07/features-and-their-guid-s-in-sp2010.aspx&quot;&gt;http://blogs.msdn.com/b/mcsnoiwb/archive/2010/01/07/features-and-their-guid-s-in-sp2010.aspx&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/1106138582233948790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/1106138582233948790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/1106138582233948790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/1106138582233948790'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2011/01/guids-of-standard-feature-in-sharepoint.html' title='GUIDs of the standard features in SharePoint 2010'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-3349885787645416942</id><published>2011-01-31T17:17:00.000-08:00</published><updated>2011-01-31T17:17:25.618-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010"/><title type='text'>Use DataSets in document libraries.</title><content type='html'>Document sets is a really cool thing in SharePoint 2010, I have read many articals about this and also seen how to get it to use.&lt;br /&gt;
&lt;br /&gt;
Here&amp;nbsp;is the simple steps to get the document set content type into your document library.&lt;br /&gt;
&lt;br /&gt;
- Goto the site collection features and activate the Document Sets feature for the site collection&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Once this is activated, the document sets content type is available for this site collection.&lt;br /&gt;
- Goto the library settings of the document library where you like to have the document sets.&lt;br /&gt;
- Select the advance settings&lt;br /&gt;
- Select Yes for the Allow management of content types under the Content types section and save it.&lt;br /&gt;
&amp;nbsp; Now the Content types section is available under the library settings.&lt;br /&gt;
- Click Add fromm existing site content types under the Content Types section.&lt;br /&gt;
- Select the Document Set fromm the list.&lt;br /&gt;
This is pretty simple but we forget so I decided to keep it here :)</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/3349885787645416942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/3349885787645416942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/3349885787645416942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/3349885787645416942'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2011/01/use-datasets-in-document-libraries.html' title='Use DataSets in document libraries.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-624153044219677651</id><published>2010-12-20T02:26:00.000-08:00</published><updated>2010-12-20T03:22:54.834-08:00</updated><title type='text'>Change the application pool identity in SharePoint 2007.</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;I know now we are so used to SharePoint 2010, but we still need to support SharePoint 2007 and we always forget the simple things that we always need to have at our finger tips, I reckon this is one of them that we frequently need during development and testing, so I thought of recording this in this post so at least I can come back to this when ever I need it and similarly I thought there may be lot of devs out there who will need this.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwnWX6OeZf4Ch6D9O5PotoPPZDsRYAlz045GyFgmS98l3U3WJVlLAhSiA10vDXwIOeavCJsdfXpEf4KAMnqQIwR9WoxPiaUWgl173C_mRzvsjaPtYFH8q2laE3ORmlD__N0i5DFAH0h4Q/s1600/Application+pool+identity.PNG&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 301px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwnWX6OeZf4Ch6D9O5PotoPPZDsRYAlz045GyFgmS98l3U3WJVlLAhSiA10vDXwIOeavCJsdfXpEf4KAMnqQIwR9WoxPiaUWgl173C_mRzvsjaPtYFH8q2laE3ORmlD__N0i5DFAH0h4Q/s320/Application+pool+identity.PNG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5552721000856709506&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Launch central admin and select operations and then select service accounts under security configuration.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEignmPV3gmEuywlRmhD_1_MGbl1dQ1slum_iJgIz9wkhBxgpLJKKiWuedCZxhjhrKR_s9SARmnxJ0AJmWcUw7Ryu6aPNDGD5XFpOBu0NWzQLbKEHFEcPQdffRbQ0l9rwe8LUrterzIIgQI/s1600/Application+pool.PNG&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 302px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEignmPV3gmEuywlRmhD_1_MGbl1dQ1slum_iJgIz9wkhBxgpLJKKiWuedCZxhjhrKR_s9SARmnxJ0AJmWcUw7Ryu6aPNDGD5XFpOBu0NWzQLbKEHFEcPQdffRbQ0l9rwe8LUrterzIIgQI/s320/Application+pool.PNG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5552722682996210370&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Select the application pool that you need to change the identity.&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/624153044219677651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/624153044219677651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/624153044219677651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/624153044219677651'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/12/change-application-pool-identity-in.html' title='Change the application pool identity in SharePoint 2007.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwnWX6OeZf4Ch6D9O5PotoPPZDsRYAlz045GyFgmS98l3U3WJVlLAhSiA10vDXwIOeavCJsdfXpEf4KAMnqQIwR9WoxPiaUWgl173C_mRzvsjaPtYFH8q2laE3ORmlD__N0i5DFAH0h4Q/s72-c/Application+pool+identity.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-3412229450874769757</id><published>2010-12-14T20:14:00.000-08:00</published><updated>2010-12-14T20:18:00.169-08:00</updated><title type='text'>Delete the default SharedServices in SharePoint 2007</title><content type='html'>The way to delete the default SharedSevices provider when you have only the default one available.&lt;br /&gt;&lt;br /&gt;stsadm -o deletessp -title {SharedServices1} -force&lt;br /&gt;&lt;br /&gt;Use the correct title instead of the SharedServices1 in case your default name is different. The above will not work if you drop -force.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/3412229450874769757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/3412229450874769757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/3412229450874769757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/3412229450874769757'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/12/delete-default-sharedservices-in.html' title='Delete the default SharedServices in SharePoint 2007'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-5065791680105906144</id><published>2010-08-07T20:06:00.000-07:00</published><updated>2010-08-08T04:00:15.518-07:00</updated><title type='text'>SharePoint  2010 on Windows 7</title><content type='html'>It is really cool that we can install the SharePoint  2010 on Windows 7 even though the installation is not as smooth as  on Windows 2008 servers but following the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ee554869%28office.14%29.aspx&quot;&gt;explanation given in the msdn article&lt;/a&gt;, we can get it to work.&lt;br /&gt;&lt;br /&gt;I installed the SharePoint 2010 on Windows 7 (x64), 99% of the installation completed but it failed in executing the dbwrap.exe with the following message in the log file.&lt;br /&gt;&lt;br /&gt;Executing command path: &#39;C:\Program Files\Common Files\Microsoft Shared\SERVER14\Server Setup Controller\dbwrap.exe&#39;, args: &#39;timeout=2950&#39;&lt;br /&gt;&lt;br /&gt;You can find the log file at C:\Users\[User name]\AppData\Local\Temp\SharePoint Server Setup(201008052159032560).log&lt;br /&gt;&lt;br /&gt;To get around this, check the and see whether the SharePoint instance of the sql express is installed in your machine, most likely not, then manually, install the SharePoint instance of sql express and run the configuration wizard to complete the configuration.&lt;br /&gt;&lt;br /&gt;This solved my problem and finally I have a stand along SharePoint 2010 in my Windows 7.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/5065791680105906144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/5065791680105906144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/5065791680105906144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/5065791680105906144'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/08/sharepoint-2010-on-windows-7.html' title='SharePoint  2010 on Windows 7'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-7434757949769290628</id><published>2010-05-31T05:15:00.000-07:00</published><updated>2010-06-02T05:53:53.517-07:00</updated><title type='text'>Adding a new federated location to search service applicaitons.</title><content type='html'>As we know the Shared services provider is gone in SharePoint 2010 and instead we have a nice SharePoint service application model. I do not try to explain the difference in details as I found some nice well written article readily available and hit easily by googling. The way I understand, in brief, the consumers can access the service application using the service application proxy which knows how to find out where the application is running. I think that is enough here and my focus is to tell you how to add a new federated location to a search service application.&lt;br /&gt;&lt;br /&gt;I recently played with the search service application and I had to add a federated location to the search application automatically, we did that in SharePoint 2007 using SearchContext but it is not an option here in SharePoint 2010, SearchContext is still available but that is marked as obsolete.&lt;br /&gt;&lt;br /&gt;So way to do is, by getting all the search service application and iterating through them and adding the new federated location if it is not already existing.&lt;br /&gt;&lt;br /&gt;The challenge is how to get all the search service application in the farm.&lt;br /&gt;&lt;br /&gt;First get all the services using the SPFarm.Local.Services, and iterate through all the services and find the services of type SearchQueryAndSiteSettingsService. The search applications can be found there.&lt;br /&gt;&lt;br /&gt;          //Get all the services in this farm&lt;br /&gt;           services = Microsoft.SharePoint.Administration.SPFarm.Local.Services;&lt;br /&gt;&lt;br /&gt;           //Iterate through all the services to find the SearchQueryAndSiteSettingsServices&lt;br /&gt;           foreach (SPService service in services)&lt;br /&gt;           {&lt;br /&gt;               //All Search service applicaitons are under SearchQueryAndSiteSettingsService&lt;br /&gt;               if (service is SearchQueryAndSiteSettingsService)&lt;br /&gt;               {&lt;br /&gt;                   //Get all the search service application.&lt;br /&gt;                   serviceApplicaiton = service.Applications;&lt;br /&gt;&lt;br /&gt;                   foreach (SPServiceApplication applicaiton in serviceApplicaiton)&lt;br /&gt;                   {&lt;br /&gt;                     &lt;br /&gt;                       //Check whether the application is a search service application&lt;br /&gt;                       if (applicaiton is SearchServiceApplication)&lt;br /&gt;                       {&lt;br /&gt;                          &lt;br /&gt;                           //This is a search service applicaiton&lt;br /&gt;                           searchApplication = (SearchServiceApplication)applicaiton;&lt;br /&gt;                         &lt;br /&gt;                           //Check whether the new location is already added.&lt;br /&gt;                           if (!IsLocationExists(searchApplication.LocationConfigurations))&lt;br /&gt;                           {&lt;br /&gt;                                  //Create a new locaiton&lt;br /&gt;                                   federatedLocation = new LocationConfiguration();&lt;br /&gt;&lt;br /&gt;                                   //Import the federated location&lt;br /&gt;                                   GetStream(ref filestream);&lt;br /&gt;&lt;br /&gt;                                   federatedLocation.Import(filestream);&lt;br /&gt;&lt;br /&gt;                                   searchApplication.AddNewLocationConfiguration(federatedLocation);&lt;br /&gt;                           }&lt;br /&gt;                        }&lt;br /&gt;                     }&lt;br /&gt;                  }&lt;br /&gt;               }</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/7434757949769290628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/7434757949769290628' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/7434757949769290628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/7434757949769290628'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/05/adding-new-federated-location-to-search.html' title='Adding a new federated location to search service applicaitons.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-586233348130111045</id><published>2010-03-04T03:22:00.000-08:00</published><updated>2010-03-06T00:34:42.529-08:00</updated><title type='text'>Binding asynchronous event handlers as synchronous</title><content type='html'>In SharePoint, we know, there are two types of event receivers, asynchronous and synchronous, for example, the ItemUpdating and ItemUpdated. The ItemUpdating is synchronous while the ItemUpdated is asynchronous. The obvious difference is,  the synchronous event is raised before committing the changes so that we have the opportunity to cancel whatever the the operation but not in the asynchronous event as that is raised after successfully committing the changes requested.&lt;br /&gt;&lt;br /&gt;With that simple description I will dive direct to the specifics as there are plenty of information available about event handlers in SharePoint out there. From here on, I will make a safe assumption that you know about the event handler in SharePoint and also how to write simple event handler.&lt;br /&gt;&lt;br /&gt;With that I will explain my finding on how to bind the asynchronous event handler as synchronous as this will help us in some scenarios.&lt;br /&gt;&lt;br /&gt;By default, using the object model, we can register the event handlers by,&lt;br /&gt;&lt;br /&gt;          parentList.EventReceivers.Add(SPEventReceiverType.ItemAdded, Constants.AssemblyName.EventManagement, className);&lt;br /&gt;               &lt;br /&gt;          parentList.Update()&lt;br /&gt;&lt;br /&gt;This will bind the event handler to the list using the default binding depending on the type of the event, for example, if it is ItemAdding, binding is synchronous and ItemAdded the binding is asynchronous.&lt;br /&gt;&lt;br /&gt;Another way of registering an event handler to a list is by creating an empty handler and setting the values separately,&lt;br /&gt;&lt;br /&gt;   //Create the event handler&lt;br /&gt;   itemAddedEventReceiver = parentList.EventReceivers.Add();&lt;br /&gt;&lt;br /&gt;    //Set the values for the item added event receiver&lt;br /&gt;    itemAddedEventReceiver.Name = NameOfItemAdded;&lt;br /&gt;&lt;br /&gt;   //Set the binding&lt;br /&gt;   itemAddedEventReceiver.Synchronization = SPEventReceiverSynchronization.Synchronous;&lt;br /&gt;&lt;br /&gt;    itemAddedEventReceiver.Type = SPEventReceiverType.ItemAdded;&lt;br /&gt;    itemAddedEventReceiver.Assembly = Constants.AssemblyName.EventManagement;&lt;br /&gt;    itemAddedEventReceiver.Class = className;&lt;br /&gt;    itemAddedEventReceiver.Update();&lt;br /&gt;&lt;br /&gt;    parentList.Update();&lt;br /&gt;&lt;br /&gt;Main advantage of registering event handlers in the second way, is, probably obvious by now, we can change the binding, so we can register the asynchronous event handlers such as ItemAddeded with binding set to synchronous as below.&lt;br /&gt;&lt;br /&gt;itemAddedEventReceiver.Synchronization = SPEventReceiverSynchronization.Synchronous;&lt;br /&gt;&lt;br /&gt;This way it is guaranteed that both ItemAdding and ItemAdded are completed synchronously. The main advantage I found here is, consider the document library and if you need to perform an automatic operation whenever a new document is added, you can do that in the ItemAdded event handler and  modify the the list item and save it with the modified data within ItemAdded event handler, this works well with the multiple document updated as the multiple document update raises only ItemAdding and ItemAdded, but in the case of single document upload, as a standard feature in document library, just after the document is uploaded, SharePoint opens the list item in property edit page to enter the new property values, now since we modify the list item in ItemAdded asynchronously, the version of the list item in the property edit page is not the one we saved in ItemAdded event handler as a result when we attempt to save the new properties, we will get the unfortunate save conflicts.&lt;br /&gt;&lt;br /&gt;So this can be avoided by registering the ItemAdded event handler to work synchronously, then the property edit page will be opened with the updated list item and not the original one.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/586233348130111045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/586233348130111045' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/586233348130111045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/586233348130111045'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/03/binding-asynchronous-event-handlers-as.html' title='Binding asynchronous event handlers as synchronous'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-8405534366629112290</id><published>2010-03-04T03:19:00.000-08:00</published><updated>2010-03-04T03:19:17.976-08:00</updated><title type='text'>We must use internal names.</title><content type='html'>&lt;div&gt;Recently I was testing the application we designed and developed in SharePoint 2007, on SharePoint 2010, the main and least expected&amp;nbsp; problem that I discovered was the usage of display names to retrieve the values of the some fields. During the development, of course we had a common understanding to use the internal name whenever we deal with the fields as that is the unique&amp;nbsp; for the SPField but we have slipped few places and never&amp;nbsp; used the internal names, these retrieves were happened to be in the workflow module where we retrieve the field values from the workflow task list items, to edit&amp;nbsp; the respective tasks. Fortunately, the display names of some fields of the task list are changed from 2007 to 2010, I said, fortunately, because, if it is not for this, the bug will stay dormant in our production code for bit longer time. &lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Even this is a well know fact, I decided to share this finding with the development community to re-emphasize the usage of internal names and also to highlight the changes&amp;nbsp; in task list.&lt;br /&gt;
&lt;br /&gt;
The problem I encountered is, in the task list for work flows, some of the display names are differrent in 2010. For example, we had a &quot;Link&quot; field in 2007 and the same field is renamed to  &quot;Related Content&quot; in 2010, but the good thing is, the internal name remain the same&amp;nbsp; &quot;WorkflowLink&quot;. &lt;br /&gt;
&lt;br /&gt;
For the help of the beginners, this probably the way to go. &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;private object GetFieldValueByInternalName(string internalName)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object rawValue = null;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPField fieldToExamine = null;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null != TaskListItem)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Get the field by the internal name&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fieldToExamine = TaskListItem.Fields.GetFieldByInternalName(internalName);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (null != fieldToExamine)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Field does exist, get the value&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rawValue = TaskListItem[fieldToExamine.Id];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return rawValue;&lt;br /&gt;
}&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/8405534366629112290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/8405534366629112290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/8405534366629112290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/8405534366629112290'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/03/we-must-use-internal-names.html' title='We must use internal names.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-2223795113178966913</id><published>2010-02-22T23:17:00.000-08:00</published><updated>2010-02-22T23:40:43.020-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint 2010"/><title type='text'>How do I know whether the list item is in a DocumentSet.</title><content type='html'>Document sets in SharePoint 2010 is a cool feature and while I was exploring the power of the document sets, I wanted to find out whether a given list item  in a document library, is part of the document set or not. We might need to make this kind of decisions in event receivers.&lt;br /&gt;&lt;br /&gt;I publish this in SharePoint forum and found a better way to do that thanks to Steve Curran, this is the link to the original thread in the forum.&lt;br /&gt;&lt;br /&gt;http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/bfac0310-6efd-4855-a9f6-11b8ffdc35b1/#f260d5ef-4947-4148-b91a-c52e59aba047&lt;br /&gt;&lt;br /&gt;I decided to share this information  here also as I did not find any lead while googling. Hoping this will provide some kind of a lead for the others who are after similar solutions.&lt;br /&gt;&lt;br /&gt;Start the real stuff, this interesting functionality is available in Microsoft.Office.DocumentManagement.dll, there is a separate name for document sets called&lt;br /&gt;Microsoft.Office.DocumentManagement.DocumentSets. Using this you can write..&lt;br /&gt;&lt;br /&gt;public bool IsDocumentSetItem(SPListItem itemToCheck)&lt;br /&gt;        {&lt;br /&gt;            bool documentSetItem = false;&lt;br /&gt;            DocumentSet documentSet = null;&lt;br /&gt;&lt;br /&gt;            if (null != itemToCheck)&lt;br /&gt;            {&lt;br /&gt;                if (null != itemToCheck.File)&lt;br /&gt;                {&lt;br /&gt;                    documentSet = DocumentSet.GetDocumentSet(itemToCheck.File.ParentFolder);&lt;br /&gt;                  &lt;br /&gt;                    if (null != documentSet)&lt;br /&gt;                    {&lt;br /&gt;                        documentSetItem = true;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return documentSetItem;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I wish to have this as a property of SPFolder but the DocuemntSet class is handy also.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/2223795113178966913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/2223795113178966913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/2223795113178966913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/2223795113178966913'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/02/how-do-i-know-whether-list-item-is-in.html' title='How do I know whether the list item is in a DocumentSet.'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-7748361056991166698</id><published>2010-02-16T04:10:00.000-08:00</published><updated>2010-02-16T04:23:08.989-08:00</updated><title type='text'>Workflows in SharePoint 2010</title><content type='html'>I thought of sharing what I found with workflows in SharePoint 2010 today as all the others using the object model to associate the workflows to lists or list items will face the same night mare.&lt;br /&gt;&lt;br /&gt;The main problem may be a bug in beta and hopfully MS will fix this in the final release. The problem is, we can get the workflow template collection using the workflow manager in 2007 using  WorkflowManager.GetWorkflowTemplatesByCategory(). but this does not return the workflow template collection in 2010.&lt;br /&gt;&lt;br /&gt;The work around I found is, in 2010, SPWeb.WorkflowTemplates is working and which is returning the workflow template collection for the given web. So we can use this property and get the workflow template collection for the root web of the site or any web as it does in WorkflowManager.GetWorkflowTemplatedByCategory().&lt;br /&gt;&lt;br /&gt;I hope this will be fixed in the final release so that we can use the workflow manager to get the workflow template collection but certainly I do not see any difference in using SPWeb property also. I hope MS will have some kind of a better explaination for this behaviour.</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/7748361056991166698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/7748361056991166698' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/7748361056991166698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/7748361056991166698'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2010/02/workflows-in-sharepoint-2010.html' title='Workflows in SharePoint 2010'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-1422160596141426838</id><published>2008-10-16T20:38:00.000-07:00</published><updated>2008-10-16T20:40:37.202-07:00</updated><title type='text'>Security model in SharePoint 2007</title><content type='html'>Background&lt;br /&gt;&lt;br /&gt;I am currently working on SharePoint integration project and required to understand the security model used in SharePoint in order to get a better and smoother integration with the other systems, the very basic understanding I had was the security in SharePoint is based on ACLs similar to windows, I worked faire way with this assumption until I practically couldn’t achieve the expected result so I decided to get myself dirty and went through the SQL database hacking in order to make myself clear of how it all works.&lt;br /&gt;For those who are wondering, what is ACL, here is a bit of a description. The ACL stands for Access control list and which is a collection of ACEs (Access control entry), the access control entry basically in the windows ACL, mainly contains who or  what is allowed or denied access to the given resource and at what level.&lt;br /&gt;To make the subsequent explanation of SharePoint permissions more clear, I will just provide a simple description about the related SQL schema a bit below before the more interesting stuff at the end.&lt;br /&gt;&lt;br /&gt;Content database&lt;br /&gt;&lt;br /&gt;There are four main tables in the content database that I found important in understanding the access control process in SharePoint. Those are UserInfo, Groups, Perms and Roles tables. Their UserInfo table keeps all the SPUsers including the AD Groups and custom groups by the custom role providers. The groups table keeps all the SPGroups. The Perms table keeps the map of the Acl against the url of the respective list, site or item and the Roles table keeps the permission levels against their respective permission mask. The permission level is explained below.&lt;br /&gt;Representation of the ADAM groups and other custom groups in the UserInfo table behaves quiet different to the AD groups and the explanation of them requires a separate post and that is my next post.&lt;br /&gt;&lt;br /&gt;Permissions in SharePoint&lt;br /&gt;&lt;br /&gt;In SharePoint there are 33 different permissions possible even though the selection of those permissions are grouped together with the related ones and hence the more granular manual selection is not possible from the SharePoint UI but it is possible by manipulating the permission bit mask by using the SPBasePermissions enum in object model or accessing the SQL tables direct, which I will be explaining in the next section and this process is not a very clean way of doing this so my strong recommendation is not to touch the production versions unless it is badly required for debugging and fixing problems.&lt;br /&gt;Permission levels in SharePoint&lt;br /&gt;Permission levels in SharePoint in my simplistic understanding are a way of grouping of permissions and make the assigning process easier for the SPGroups and SPUsers. The Roles table explains above keeps the permission levels and their respective bit mask for the assign group of permissions.&lt;br /&gt;&lt;br /&gt;Access control&lt;br /&gt;&lt;br /&gt;This is the main part that I wanted to explain in this post to share the un-document stuff in SharePoint. If you happen to open the content database and open the Perms table you will see the Acl column with a hex byte stream as shown below.&lt;br /&gt;&lt;br /&gt;OxF3FE000001000000000000000400000003000000FFFFFFFFFFFFFF7F22000000FFFFFFFFFFFFFF7F23000000FFFFFFFFFFFFFF7F24000000FFFFFFFFFFFFFF7F&lt;br /&gt;&lt;br /&gt;First 16 bytes is the header and this contains 4 sets of 4 byte blocks.&lt;br /&gt;F3FE0000010000000000000004000000 =&gt; F3FE0000 01000000 00000000 04000000&lt;br /&gt;The 4 th byte tells the number of ACEs in this ACL, I do not have any good guesses for the other bytes but I think there may be a checksum in one of those remaining 3 sets.&lt;br /&gt;&lt;br /&gt;03000000&lt;br /&gt;FFFFFFFFFFFFFF7F&lt;br /&gt;&lt;br /&gt;According to this ACL, there are  4 ACEs and those 4 ACEs contain 4 sets of 12 bytes. The 12 bytes are also grouped in 3 sets of 4 byte groups. For example the first ACE is shown below.&lt;br /&gt;The first set of 4 bytes represents the unique ID of the corresponding entry (Raw which represents a user or a group) in UserInfo or Groups table in context database and the subsequent 2 sets of 4 bytes represent the bit mask for the SharePoint permissions. There are only 33 permissions available in MOSS 2007 and only the bits given in the SPBasePermissions enum  are in use while the other are not in use at least for this version.&lt;br /&gt;Note the bytes in the group of four sets bytes ate arrange in the reverse order and if you happen to look at the Roles table for the bit mask for the respective permission level, you will find it under PermMask column as a big integer.&lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;The access control in SharePoint is purely based on the permissions and permission levels stored in the Roles table. As I mentioned the permission mask for a given permission level is not granular down to the each permission from the SharePoint UI, my understanding for this is to make it more convenient for the users at the user interface level and avoid mistakes but if you need to create your own custom permission level, you could do that in a dirty way by modifying the respective permission mask in SQL database or a slightly a better approach is to use SPBasePermissions enum in object model.&lt;br /&gt;&lt;br /&gt;And finally the SharePoint ACL is working purely based on the permission masks, users and groups. The way this ACL works is different from the way Windows ACL works but for the basic concepts, it can be seen as a collection of ACEs</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/1422160596141426838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/1422160596141426838' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/1422160596141426838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/1422160596141426838'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2008/10/security-model-in-sharepoint-2007.html' title='Security model in SharePoint 2007'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-939541377674083757.post-6928168590272526472</id><published>2008-08-21T21:36:00.000-07:00</published><updated>2008-08-22T00:30:26.270-07:00</updated><title type='text'>This is my first post</title><content type='html'>This is my first post on this blog, I will be planning to blog about my research findings around WSS 3, MOSS 2007 and Office 2007. Stay tune for exciting stuff......</content><link rel='replies' type='application/atom+xml' href='http://wineya.blogspot.com/feeds/6928168590272526472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/939541377674083757/6928168590272526472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/6928168590272526472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/939541377674083757/posts/default/6928168590272526472'/><link rel='alternate' type='text/html' href='http://wineya.blogspot.com/2008/08/this-is-my-first-post.html' title='This is my first post'/><author><name>Wineya Wijesinghe</name><uri>http://www.blogger.com/profile/14114704496714931832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>