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

The Fastest way to Export Schema of Sharepoint List

Many of my SharePoint Developer friends are struggling to get the Schema.xml file of a newly created list. The schema.xml file has the list's metadata information, by using the schema.xml, we can create the lis definition and paste this contents of Schema.xml to the Schema.xml file of the newly created List definition, so that you can deploy the list definition on another site. In order to do this, you guys might be following the procedure bu saving the site template and get the site definition solution. After this, you will open visual studio and import this solution and wait for few minutes. THIS IS A CRAPPY PROCEDURE..Why do you invest your time to get a schema of one or few list  by taking entire site definition?..If that site has lots of lists, then it will take lots of time. In my Research, i have found a the BEST  and quicker way to get schema.xml file of a particular list which you need Schema.xml. Follow the following procedure : Go to your site  click on the lis

How to avoid refreshing of page on clicking on BUTTON in jQuery?

Suppose you might have created a button on page.When you click on that button without page refresh some other custom things have to happen. But instead of that, on clicking on the button the page is getting refreshed. How to avoid this?.. Simple, The button click event has default event as refreshing the page. The solution is to "prevent the default event". $("#ButtonID").Click(function(e) {   e.preventDefault(); //Write your custom code here } ); Hope this may help Cheers Pradeepa Achar

This solution contains invalid markup or elements that cannot be deployed as part of a sandboxed solution. Solution manifest for solution 'cc218449-78b3-4430-b401-4884977560e2' failed validation, file manifest.xml, line 11, character 4: The element 'Solution' in namespace 'http://schemas.microsoft.com/sharepoint/' has invalid child element 'TemplateFiles' in namespace 'http://schemas.microsoft.com/sharepoint/'. List of possible elements expected: 'FeatureManifests, ActivationDependencies' in namespace 'http://schemas.microsoft.com/sharepoint/'. Troubleshoot issues with Microsoft SharePoint Foundation. Correlation ID: oplh6595a-a6hg-416f-a85f-a173bp03dda6 Date and Time: 30/10/2013 13:33:18

By looking at this bug you may get shocked and may not understand why this is happening. I can say, you have developed a wsp of farm solution, not the sandboxed solution  using visual studio and added some OOTB webparts such as visual webparts and trying to deploy the solution via solution gallery directly on to the sharepoint site. It is so simple.Understand that, when you create a .wsp file using visual studio, you deploy as farm solution. But when you try to deploy the same solution from site settings-> solution gallery, you deploy it as sand boxed solution. In this situation ,the "TemplateFiles" elements refers to the items that will be copied into the web servers. This is allowed only in farm solutions , not in sandboxed solutions. I suggest you guys to deploy the solution either using stsadm command or powershell command, so that it will work fine.If anyone wants to know about how to deploy using powershell command you can refer the   techNet  document for