Skip to main content

SharePoint site upgrade utility using C#

Hi people,
    Recently in my spare time i have developed an windows form application which does SharePoint site up gradation without using either stsadm command or powershell script..

 My windows form application looks as follows


















The functional over view:


  1. On click on Load button (1) present at the top , it should load all the Solutions present in the solution repository in the SharePoint central administration and add all the solution names to the dropdown present below the load button(1).




private void loadSolBtn_Click(object sender, EventArgs e)
              {
                     foreach (SPSolution sol in SPFarm.Local.Solutions)
                     {
                           if (!cmbDeploy.Items.Contains(sol.Name))
                           {
                                  cmbRetract.Items.Add(sol.Name);
                           }
                     }
              }



Note:In the above code, the cmbRetractis the Name of the ComboBox.For more information, how we can get the name of FolderBrowseDialog as shown in the step 4.scroll down.

    2.Select the Solution name which is to be retracted from all the web applications on which it is deployed and finally remove the solution from the solution repository.


private void retractBtn_Click(object sender, EventArgs e)
{
string solutionName = cmbRetract.SelectedItem.ToString();
SPSolution solution = GetSolutionByName(solutionName);
if (solution != null)
{
if (solution.DeployedWebApplications != null)
{
solution.RetractLocal(solution.DeployedWebApplications);
}
ExecuteTimerJobDefinitions();
SPFarm.Local.Solutions.Remove(solutionName);
MessageBox.Show("Retracted and removed the solution  "+solutionName+" successfully");
}
}

-----------------------------------------------------------------------------------------------

private SPSolution GetSolutionByName(string solutionName)
{
SPSolutionCollection solCollection = SPFarm.Local.Solutions;
foreach (SPSolution sol in solCollection)
{
if (sol.Name.ToLower() == solutionName.ToLower())
return sol;
}

return null;
}
--------------------------------------------------------------------------------------------------
private void ExecuteTimerJobDefinitions()
{
if (SPFarm.Local.TimerService.JobDefinitions != null)
{
foreach (SPJobDefinition job in
SPFarm.Local.TimerService.JobDefinitions)
{
try
{
job.Execute(SPServer.Local.Id);
}
catch { }
}

}
}

In the above retraction code , i have used ExecuteJobDefinitions ,because retraction needs timer jobs to be run.


3.Now add the newly built .dll files of your project to the Assembly folder. Technically it is being called as Installing dll to the global assembly cache (GAC) folder.

4.Now browse the .wsp file of the solution . Now click on the button 'Browse' and browse the .wsp file  and click on 'Add Solution' button.

-Here I have attached the code for both step3 and step4


                string wspPath = string.Empty;
private void browseBtn_Click(object sender, EventArgs e)
{
BrowseWsp.ShowDialog();
wspPath = BrowseWsp.FileName;
}
SPSolution solution = null;
private void addBtn_Click(object sender, EventArgs e)
{
solution= SPFarm.Local.Solutions.Add(wspPath);
MessageBox.Show("solution " + solution.Name + " is added successfully!!");
}


In the above code, the BrowseWsp os the Name of  FolderBrowseDialog from the tool









5.Now click on "Load" button(2), to load all solutions present in the central administration solution repository. and add to the dropdown present below the loda button(2)


               private void loadSol_Click(object sender, EventArgs e)
{
foreach (SPSolution sol in SPFarm.Local.Solutions)
{
if (!CmbLoadSol.Items.Contains(sol.Name))
{
CmbLoadSol.Items.Add(sol.Name);
}
}
}

In the above code, the CmbLoadSol is the Name of the ComboBox.For more information, how we can get the name of FolderBrowseDialog as shown above.


6. Now click  on the Load button(3), to load all web  applications on which you can deploy the solution and add to the dropdown.



                private void loadBtn_Click(object sender, EventArgs e)
{
SPWebServiceCollection webservices=new SPWebServiceCollection(SPFarm.Local);
foreach(SPWebService service in webservices)
{
foreach(SPWebApplication webApp in service.WebApplications)
{
string spUrl = Utils.GetWebAppURL(webApp, SPUrlZone.Default);
cmbDeploy.Items.Add(spUrl);
}
}
}
In the above code, the cmbDeploy is the Name of the ComboBox.For more information, how we can get the name of FolderBrowseDialog as shown in step 4 above.
---------------------------------------------------------------------------------------------


                 public string GetWebAppURL(SPWebApplication oWebApp, SPUrlZone urlZone)
{
string retVal = string.Empty;
try
{
foreach (SPAlternateUrl altUrl in oWebApp.AlternateUrls)
{
if (altUrl.UrlZone == urlZone)
{
retVal = altUrl.Uri.ToString();
break;
}
}
}
catch (Exception ex)
{
throw ex;
}
return retVal;
}



7. Now select the web application url on which you want to deploy the solution and click on  deploy button

.

               private void deployBtn_Click(object sender, EventArgs e)
{
string selectedWebApp = cmbDeploy.SelectedItem.ToString();
SPSolution solName = SPFarm.Local.Solutions[CmbLoadSol.SelectedItem.ToString()];
Collection<SPWebApplication> webapps = new Collection<SPWebApplication>();
SPWebApplication webapp = SPWebApplication.Lookup(new Uri(selectedWebApp));
webapps.Add(webapp);
solName.Deploy(DateTime.Now, false, webapps, false);
ExecuteTimeJob;
MessageBox.Show("deployed successfully!!");
}




So,..Finally an utility for SharePoint Site upgradation is done!!!..


Hope this may help some one

Cheers
-Pradeepa Achar

Comments

Popular posts from this blog

error occurred in deployment step 'recycle iis application pool' :object reference not set to an instance of an object

While deploying using Visual studio, we may get an error "error occurred in deployment step 'recycle iis application pool' :object reference not set to an instance of an object" Solution:  Don't get  panic ..Simply restart the visual studio with the solution which you wanted to deploy on to the site This may help some one. -cheers pradeepa achar

“An exception of type Microsoft.SharePoint.Upgrade.SPUpgradeException was thrown. Additional exception information: Failed to call GetTypes on assembly Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Could not load file or assembly 'System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.”

While running the product configuration wizard of Sharepoint foundation 2010, if you have come across the following error “ An exception of type Microsoft.SharePoint.Upgrade.SPUpgradeException was thrown. Additional exception information: Failed to call GetTypes on assembly Microsoft.Office.Server.Search, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Could not load file or assembly 'System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.” Here is the solution to overcome the issue,. Open the SQL server configuration manager.Select the SQL Server Network Configuration and select the Protocols for MSSQLSERVER. Make sure that TCP/IP protocol is enabled. If it is disabled, make it enable by right clicking on the TCP/IP ,Click on Enable option. Hope ...

The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator

You might have developed a functionality where data is being saved in a SharePoint list. By the time you developed this functionality it was working fine.As users adds the data , some day your functionality doesn't work. That means, the data which is present in the list is not being retrieved. Don't be panic. Just open the LOG file which is present in 14 hive folder. You will come to know about this bug with the statement -"The attempted operation is prohibited because it exceeds the list view threshold enforced by the administrator". Now what you have to do is, go to central administration site.  1.Click on Manage web application 2.Select the web application on which your sitecollection is created. 3.Click on General settings and select Resource throttling 4.by default list view threshold would be 5000. your list might have data more than 5000. So , increase the number to required threshold limit. you can make it 10000, 20000 like this. Do a i...