Tag Info

Hot answers tagged

32

You would never use RootWeb in the context of a using statement and OpenWeb() isn't useful unless the URL specified in the SPSite constructor was a sub web of the site collection in lieu of just the site collection URL. So, you should never do this: using (SPWeb web = site.RootWeb) { // do something with web } ...and OpenWeb() is useful in a scenario ...


13

One of the problems with content types (there are quite a few!) is that the design with site and list content types works very poorly with the declarative (XML) approach. If you just update your Content Type manifest and re-install the feature new content types will be affected, but not all the list content types already "instantiated" from the site content ...


13

The usual recommendations for using RWEP are to Avoid using SPSecurity.RunwithElevatedPrivilege to access the SharePoint object model. Instead, use the SPUserToken to impersonate with SPSite. Only use SPSecurity.RunwithElevatedPrivilege to make network calls under the application pool identity. Don't use it for elevation of privilege of SharePoint ...


12

SPQuery by no way will make your code slow, infact every other SharePoint article on net advice you to use SPQuery to gain Performance. To make things still more interesting GetItemByID internally use SPQuery to fetch the Item back to you,following is part of code taken from the GetItemByID function SPQuery query = new SPQuery(); query.Query = ...


12

There are two possibilities here: 1) You need to determine if field is completely custom (added to list by a user from GUI). You can use SourceId property for this purpose. You will get Url, starting with "http://schemas.microsoft.com" for standard fields, and some random GUIDs for custom fields. Sample code: SPField field = // get your field from a list ...


10

Thus far, using the object model has been the only way I have been able to successfully do this. I encountered the same issues as you when using PowerShell. Using Jaspers' post SP2010: Setting BCS column and related fields as my guide, I used the following code to iterate through all the items in my Resumes document library, read the value from the ...


10

From the point of view of an experienced developer there is no major difference but there are points to consider. Code approach: More friendly for new developers, cause VS environment provides good features for investigating new API You can debug it step by step, comment and use Watch tools, in comparison with XML where you just see the result Before XML ...


9

Try the following code to get the items based on the folder, using(SPSite site = new SPSite("site url")) { using(SPWeb web = site.OpenWeb()) { SPFolder folder = web.GetFolder("/Docs/folder1"); if(folder.ItemCount > 0) { SPList list = web.Lists.TryGetList("ListName"); SPQuery query = new SPQuery(); query.Folder = folder; ...


8

This might end up as a 'whatever floats your boat' kinda question. I will add though, that whatever you choose, make sure it's consistent throughout the entire solution. Remember that creating Content Types programmatically is done at Feature Activated level, which is after Feature XML is processed, so if you're provisioning Page Layouts, you'll need to ...


7

If you read these two pages, you'll see that the two different properties require different structure. http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.viewxml.aspx http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.query.aspx You'll see that ViewXML is the full Query, thus needs the View and Query tags, whereas the ...


7

I think you can use SPSiteDataQuery to enumerate all files in all document libraries of one SPSite. This will prevent folder recursion and raise the speed. For example, you can query Guid for each item, and then enumerate all files using SPWeb.GetFile. SPSiteDataQuery query = new SPSiteDataQuery(); // All document libraries query.Webs = "<Webs ...


7

Take a look on msdn foreach (SPUser user in group.Users) { group.RemoveUser(user); } But be aware that you change this group for the whole site collection, if you have other site collections those won't be impacted by the modification of this group.


7

When running inside RunWithElevatedPrivileges, do not use SPContext.Current. Instead create a new SPSite object, passing in SPContext.Current.Site.Url.


7

Next time you perform the changes to the ContentType make sure to push changes to the lists while updating the ContentType. For now, you might need to perform some clean-up job here, just to make sure the field is deleted from all the lists, with your Custom ContentType. Use the following PowerShell script for clean-up! VĂ„rsegod :) Add-PSSnapin ...


7

UserProfile.PersonalSite property gets the personal site of the User: var profileManager = new UserProfileManager(ServerContext.GetContext(SPContext.Current.Site)); var profile = profileManager.GetUserProfile("domain\\username"); using (SPSite personalSite = profile.PersonalSite) { var personalSiteUrl = personalSite.PersonalUrl; }


6

SPWebApplication webApp = SPContext.Current.Site.WebApplication; foreach (SPSite site in webApp.Sites) { . . . site.Dispose(); }


6

There's probably a bunch of different ways to do this, but here's a snippet from some C# code that I wrote a while back converted to PowerShell. Hope it's along the lines of what you're looking for: Start-SPAssignment -Global $web = Get-SPWeb "http://sharepointdev:90" $list = $web.Lists.TryGetList("Site Pages") foreach ($file in $list.RootFolder.Files) { ...


6

there are several good ways of retreiving data. Each has its pros and cons. Typically Search would be used when you want to list some, but not all, data (not all can be exposed) and when you want to retrieve data across site collectons. SPQuery, SPSiteDataQuery and PortalSitemapProvider are good candidates if you are on the same site collection. See some ...


6

Looks like the trick is to use list.Folders: foreach (SPListItem folder in myDiscussionList.Folders) { // do something } Source: How to Read All Discussions and Replies


6

Leading on from @tylerrrr07's answer, there's another overload of GetItemsWithUniquePermissions which may be of use to you: MSDN: SPList.GetItemsWithUniquePermissions Method (int maxItemToReturn, bool folderOnly) You could then avoid the potentially huge result set from running the method by using the following: SPList.GetItemsWithUniquePermissions(1, ...


6

In IE (version > 6) SignOut.aspx uses ClearAuthenticationCache as a client side command. This does not work for Firefox. I found this example on StackOverflow that might work for you http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache


6

You can check SPWeb.UIVersion to see what UI version the site is currently using: switch(web.UIVersion) { case 3: // 2007 break; case 4: // 2010 & 2013 "14 mode" break; case 15: // 2013 break; }


5

I recommend installing and running this tool to check whether you are disposing your objects correctly: SPDisposeCheck


5

Using API, you won't have any limitation on what you can done. Using Web Services you will be able to do a lot of things, but mainly concerning structure and/or data query Using Rest services, you will only be able to perform CRUD operation. It actually depends on you requirements. There is also a 4th way, that requires a bit of more work : use the OOB ...


5

The MSDN documentation for the SPQuery class has a code example of using SPQuery to interrogate a list. Here is the code sample in case it changes over time: using (SPWeb oWebsiteRoot = SPContext.Current.Site.RootWeb) { SPList oList = oWebsiteRoot.Lists["Tasks"]; SPQuery oQuery = new SPQuery(); oQuery.Query = ...


5

Best practice is to use SPQuery on the list to return list items that match your criteria. See the software performance boundaries documentation here has some details (pertaining to 2007): http://technet.microsoft.com/en-us/library/cc287790%28office.12%29.aspx 2010 info is here: http://technet.microsoft.com/en-us/library/cc262787.aspx There was another ...


5

In a way yes - try using the "Link to a document" content type instead of the document. or use the "Send To" option which would create a syncronized copy of the document (multiple locations possible) which can be easily maintained. In the case of Send To, yes, i believe -which should also answer your 3rd question (but if not) Hope it helps, C:\Marius


5

You can use the CAML query from the default view if you want, but note that you're then using both the sort order as well as any filtering from that view. var query = new SPQuery(); query.Query = list.DefaultView.Query; var items = list.GetItems(query);


5

Rafal, You can use: Microsoft.SharePoint.Administration.SPAdministrationWebApplication centralWeb = SPAdministrationWebApplication.Local;


5

There are a couple of methods for this available in the object model without the need to handle the slashes etc yourself, one method using MakeFullUrl: var fullUrl = item.ParentList.ParentWeb.Site.MakeFullUrl(item.ParentList.DefaultDisplayFormUrl); Parameters strUrl Type: System.String A string that specifies the server-relative ...



Only top voted, non community-wiki answers of a minimum length are eligible