Friday, February 10, 2012

SharePoint 2010 - Programmatically delete SharePoint file versions in a Document Library


SPSite site = new SPSite(“http://yoursite/”);
SPWeb web = site.AllWebs["TestSite"];
SPDocumentLibrary mylib= (SPDocumentLibrary)web.Lists["mylib"];
foreach(SPListItem folder in mylib.Folders)
{
deleteVersions(SPFolder folder);
}
protected void deleteVersions (SPFolder folder)
{
foreach (SPFile file in folder.Files.Count)
{
foreach(SPFileVersion version in file.Versions)
{
Version.Delete();
}
}
}
Well, unfortunately, it is not quite that simple. This will throw an error and notify you that the enumeration has been modified. The count is read dynamic, and on next iteration it does not sync since you have deleted something.
In order to overcome this issue we will take a different approach:

SPSite site = new SPSite(“http://yoursite/”);
SPWeb web = site.AllWebs["TestSite"];
SPDocumentLibrary mylib= (SPDocumentLibrary)web.Lists["mylib"];
foreach(SPListItem folder in mylib.Folders)
{
deleteVersions(SPFolder folder);
}
protected void deleteVersions (SPFolder folder)
{
for (int i = 0; i < folder.Files.Count; i++)
{
SPFile file = folder.Files[i];
int counter = file.Versions.Count;
for (int j = 0; j < counter – 1; j++)
{
if (file.Versions[0] != null)
{
file.Versions[0].Delete();
}
}
}
}
In this snippet we are saving the count to local variable to make it static
int counter = file.Versions.Count;
Then iterating through the collection and subtracting counter – 1” from static enumeration. Which allows us to iterate through collection of files delete without getting that annoying error.

Infopath 2010 - Code Snippet to get User Profile Picture of current user


Below is the code to get User Profile Picture from User Profile database using object model.

SPSite siteColl = SPContext.Current.Site;

                    SPServiceContext serviceContext = SPServiceContext.GetContext(siteColl);
                    UserProfileManager userProfileManager = new UserProfileManager(serviceContext);
                    UserProfile profile = null;

                    bool existingUser = userProfileManager.UserExists(SPContext.Current.Web.CurrentUser.LoginName);
                    if (existingUser)
                    {
                        profile = userProfileManager.GetUserProfile(SPContext.Current.Web.CurrentUser.LoginName);
                    }
                    imgProfile.ImageUrl = profile[PropertyConstants.PictureUrl].Value.ToString();
                    lblName.Text = SPContext.Current.Web.CurrentUser.Name;


You can add this to a visual web part and to show profile picture on any page. Don’t forget add reference to Microsoft.Office.Server

Thursday, February 2, 2012

SharePoint 2010 - Integration of SharePoint2010 with Team Foundation Server 2010

image11



The Extensions that you need are on the same installation media as the main TFS install and the only difference is the options you pick during the install.
Once it is installed you need to run the configuration. This will add all of the Solution and Templates that are needed for SharePoint to work properly with TFS.
image14
image17

Configuring the SharePoint 2010 Managed path for Team Foundation Server 2010

In order for TFS to automatically create your project portals you need a wildcard managed path setup. This is where TFS will create the portal during the creation of a new Team project.

To find the managed paths page for any application you need to first select the “Managed web applications”  link from the SharePoint 2010 Central Administration screen.
image

On you are there you will see that the “Managed Paths” are there, they are just greyed out and selecting one of the applications will enable it to be clicked.
image
image

Now we need to add a managed path for TFS 2010 to create its portals under. I have gone for the obvious option of just calling the managed path “TFS02” as the TFS 2010 server is the second TFS server that the client has installed, TFS 2008 being the first. This links the location to the server name, and as you can’t have two projects of the same name in two separate project collections there is unlikely to be any conflicts.
image

Configure the Team Foundation Server 2010 connection to SharePoint 2010

In order to have you new TFS 2010 Server talk to and create sites in SharePoint 2010 you need to tell the TFS server where to put them. As this TFS 2010 server was installed in out-of-the-box mode it has a SharePoint Services 3.0 (the free one) server running on the same box. But we want to change that so we can use the external SharePoint 2010 instance. Just open the “Team Foundation Server Administration Console” and navigate to the “SharePoint Web Applications” section. Here you click “Add” and enter the details for the Managed path we just created.
image

Before we can se this new SharePoint 2010 instance to be the default for our upgraded Team Project Collection we need to configure SharePoint to take instructions from our TFS server.

Configure SharePoint 2010 to connect to Team Foundation Server 2010

On your SharePoint 2010 server open the Team Foundation Server Administration Console and select the “Extensions for SharePoint Products and Technologies” node. Here we need to “grant access” for our TFS 2010 server to create sites. Click the “Grant access” link and  fill out the full URL to the  TFS server, for example http://servername.domain.com:8080/tfs, and if need be restrict the path that TFS sites can be created on. Remember that when the users create a new team project they can change the default and point it anywhere they like as long as it is an authorised SharePoint location.
image

Now that we have an authorised location for our team project portals to be created we need to tell our Team Project Collection that this is where it should stick sites by default for any new Team Projects created.

Configure the Team Foundation Server 2010 Team Project Collection to create new sites in SharePoint 2010

Back on out TFS 2010 server we need to setup the defaults for our upgraded Team Project Collection to the new SharePoint 2010 integration we have just set up. On the TFS 2010 server open up the “Team Foundation Server Administration Console” again and navigate to the “Team Project Collections” node. Once you are there you will see a list of all of your TPC’s and in our case we have a DefaultCollection as well as out named and Upgraded collection for TFS 2008.
If you select the “SharePoint Site” tab we can see that it is not currently configured.
image
Select to “Edit Default Site Location” and select the new integration point that we just set up for SharePoint 2010. Once you have selected the “SharePoint Web Application” (the thing we just configured) then it will give you an example based on that configuration point and the name of the Team Project Collection that we are configuring.
image

This is where the reason for configuring the Extensions on the SharePoint 2010 server before doing this last bit becomes apparent. TFS 2010 is going to create a site at our http://sharepointserver/tfs02/ location called http://sharepointserver/tfs02/[TeamProjectCollection], or whatever we had specified, and it would have had difficulty doing this if we had not given it permission first.
image

This will create a nice Team Project Collection parent site to contain the Portals for any new Team Projects that are created. It is with noting that it will not create portals for existing Team Projects as this process is run during the Team Project Creation wizard.
image

You will need to add all of the users that will be creating Team Projects to be Administrators of this site so that they will not get an error during the Project Creation Wizard. You may also want to customise this as a proper portal to your projects if you are going to be having lots of them, but it is really just a default placeholder so you have a top level site that you can backup and point at.
You have now integrated SharePoint 2010 and team Foundation Server 2010!
You can now go forth and multiple your Team Projects for this Team Project Collection or you can continue to add portals to your other Collections.