Search This Blog

Saturday, November 29, 2014

Different ways to deploy a webpart on Sharepoint 2010

Ways to deploy a WebPart

There are four ways we can deploy a WebPart on SharePoint server that I will cover in this post: 

  1. Using Visual Studio to deploy the solution
  2. Manually moving the DLL to the server
  3. Uploading WSP to SharePoint server
  4. Deploying through command prompt

Pre-Requisites

I am assuming that you are all done with the development and are now ready to deploy. In these examples I have a project name "FeedbackWP" that I need to deploy.

Deploying through Visual Studio

Once the coding is complete, click on build > deploy



In the output window you should see the deployment success status. 


For next steps please look at "After you webpart is deployed" section at the end of this post.



 Deploying by manually moving the DLL


Build the solution 




If no error returned by the compiler, copy the DLL from your project bin > Debug directory to the bin directory of your WSS site (C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin). 






Go to (C:\inetpub\wwwroot\wss\VirtualDirectories\80\) and modify the Web.Config file for the WSS site to declare the custom web part as a safe control by adding the following code within the <SafeControls> tag.

<SafeControl Assembly="DLL-Name-Here" Namespace="DLL-Name NameSpaceHere" TypeName="*" Safe="True" />

In my case my dll name is feedBackWP and the namespace of my webpart is InputForm; so my SafeControl entry looks like:

<SafeControl Assembly="feedBackWP" Namespace="feedBackWP.InputForm" TypeName="*" Safe="True" />

And my webconfig looks like the image below:



Now we need to add this webpart to our Sharepoint gallery.

Click on Site Actions -> Site Settings -> Web Parts. 



From Web Parts page click on Documents > New Document





New Document will bring up a pop-up window. This window should have your new web part listed. Select your webpart from the list and click on Populate Gallery.


If the import is successful, you will see the web part in Web part gallery list. 



For next steps please look at "After you webpart is deployed" section at the end of this post.



Deploying by uploading WSP to SharePoint server

Build the solution 




If no error returned by the compiler, you will have WSP file in your project bin > Debug.

  Open Sharepoint and click on Site Actions -> Site Settings -> solutions. 

  



From solutions page click on solutions on top and after clicking it, you should see upload solution tab.





Click on upload solution and it will bring up a popoup to upload your webpart.


Upload your WSP file.


If uploading is successfull, you should see the webpart appear in the solutions list.


Activate the solution and thats it.





For next steps please look at "After you webpart is deployed" section at the end of this post.



Deploying through command prompt

Build the solution 




If no error returned by the compiler, you will have WSP file in your project bin > Debug.

Copy the wsp file on the server and open up a command line and navigate to the 12-hive bin folder.
(my 12-hive bin folder is C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN
Enter the following commands :

stsadm -o addsolution -filename WSP FILE NAME WITH LOCATION

stsadm -o deploysolution -name WSP FILE NAME -immediate -allowGacDeployment -url  SITEURL   


So in my case these commands become:

stsadm -o addsolution -filename c:/feedBackWP.wsp 

stsadm -o deploysolution -name feedBackWP.wsp -immediate -allowGacDeployment -url ht
tp://bk-laptop-hp/
 

  

For next steps please look at "After you webpart is deployed" section.


After your Webpart is deployed

Go to the SharePoint site and click on Site Action > New Page. 






From new page click on Insert and then on WebPart. 





From WebPart list click on custom (NOTE: In some cases this is miscellaneous instead of custom). This should bring up our WebPart on the right hand side. 



With the WebPart selected click on the add button. 



Can we create more than one site collection under one web application?

The maximum recommended number of site collections per farm is 500,000 Personal Sites plus 250,000 for all other site templates. The Sites can all reside on one web application, or can be distributed across multiple web applications.
Check these topologies recommended by Microsoft, if you are planning to design a SharePoint farm.
enter image description here

What are the permission levels in SharePoint? /Can we create our own custom permission levels?

SharePoint - Create Custom Permission Level and List All available Permission


I am going to show programmatically how we can list all available permission in a SharePoint site and how we can show the detail of any permission ie. name, description, base permission etc..
I am also showing how we can create our own custom permission in SharePoint programmatically.
For this I created Blank SharePoint Solution and mapped it with our SharePoint site. I added 2 pages here..

1. GetAllPermission.aspx (To show all permission)
2. AddNewPermission (To add a custom permission).
I deployed the solution and my functionality is:
To Add a new custom Permission...
AddPermission.png
Image 1.
After Creating New Permission you can check in SharePoint Site:
Permission.png
Image 2.
AddNewPermission.aspx is:
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddNewPermission.aspx.cs"
    Inherits="SP_Permission.Layouts.SP_Permission.AddNewPermission" DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <table>
        <tr>
            <td height="10px">
            </td>
        </tr>
    </table>
    <table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;">
        <tr>
            <td style="background-color: #@F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
                colspan="4">
                Add New Permission:
            </td>
        </tr>
        <tr>
            <td width="25%" align="right">
                Permission Name:
            </td>
            <td align="left">
                <asp:TextBox ID="txtName" runat="server" Width="300px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td width="25%" align="right">
                Permission Description:
            </td>
            <td align="left">
                <asp:TextBox ID="txtDesc" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td colspan="4" align="center">
                <asp:Button ID="btnAdd" runat="server" OnClick="btnAddPermission_Click" Text="Add Permission" />
            </td>
        </tr>
    </table>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    Add New Permission Level
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
    runat="server">
    Add New Permission Level
</asp:Content>
 AddNewPermission.aspx.cs is:
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace SP_Permission.Layouts.SP_Permission
{
    public partial class AddNewPermission : LayoutsPageBase
    {
        string mySite = "http://localhost:7000";
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btnAddPermission_Click(object sender, EventArgs e)
        {
            using (SPSite site = new SPSite(mySite))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPRoleDefinition roleDefinition = new SPRoleDefinition();
                    roleDefinition.Name = txtName.Text;
                    roleDefinition.Description = txtDesc.Text;
                    roleDefinition.BasePermissions = SPBasePermissions.AddAndCustomizePages | SPBasePermissions.ApplyStyleSheets |
                                                     SPBasePermissions.CreateGroups| SPBasePermissions.OpenItems |
                                                     SPBasePermissions.EditListItems | SPBasePermissions.ViewListItems |
                                                     SPBasePermissions.ViewPages | SPBasePermissions.Open |
                                                     SPBasePermissions.ViewFormPages;
                    web.RoleDefinitions.Add(roleDefinition);
                }
            }

            Response.Redirect("GetAllAvaliablePermission.aspx");
        }
    }
}

ToListAllPermission (GetAllAvaliablePermission.aspx)
ListAllPermission.png
Image 3.

Select any permission and click on GetDetail..
PermissionDetail.png

Image 4.
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetAllAvaliablePermission.aspx.cs"
    Inherits="SP_Permission.Layouts.SP_Permission.GetAllAvaliablePermission" DynamicMasterPageFile="~masterurl/default.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <table>
        <tr>
            <td height="10px">
            </td>
        </tr>
    </table>
    <table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;">
        <tr>
            <td style="background-color: #@F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
                colspan="4">
                All Avaliable Permission:
            </td>
        </tr>
        <tr>
            <td>
                <asp:ListBox ID="lstAllAvaliableRoles" runat="server" Width="250px" BackColor="#f5f5f5"
                    Height="200px"></asp:ListBox>
            </td>
        </tr>
        <tr>
            <td>
            </td>
        </tr>
        <tr>
            <td colspan="4" align="center">
                <span style="font-family: Verdana; font-size: 8pt; background-color: #F5F5F5;">(Select a permission
                    to get details)</span><br />
                <asp:Button ID="btnGetdetail" runat="server" OnClick="btnGetDetailPermission_Click"
                    Text="Get Detail" />
            </td>
        </tr>
    </table>
    <table>
        <tr>
            <td height="10px">
            </td>
        </tr>
    </table>
    <table cellpadding="5" cellspacing="5" width="70%" align="center" style="border: 2px solid Green;"
        id="permissionDetails" runat="server" visible="false">
        <tr>
            <td style="background-color: #F5F5F5; width: 100%; font-weight: bold; font-size: 12pt;"
                colspan="4">
                Selected Permission Detail:
            </td>
        </tr>
        <tr>
            <td width="25%" align="right">
                Permission Name:
            </td>
            <td align="left">
                <asp:TextBox ID="txtName" runat="server" Width="300px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td width="25%" align="right">
                Permission Description:
            </td>
            <td align="left">
                <asp:TextBox ID="txtDesc" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td width="25%" align="right">
                Base Permission Details:
            </td>
            <td align="left">
                <asp:TextBox ID="txtBasePer" runat="server" Width="300px" Height="70px" TextMode="MultiLine"></asp:TextBox>
            </td>
        </tr>
    </table>
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    SP Permission
</asp:Content>
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"
    runat="server">
    SP Permission
</asp:Content>

 GetAllAvaliablePermission.aspx.cs
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace SP_Permission.Layouts.SP_Permission
{
    public partial class GetAllAvaliablePermission : LayoutsPageBase
    {
        string mySite = "http://localhost:7000";
        string strValue = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                permissionDetails.Visible = false;
                BindAllPermission();
            }
        }

        protected void BindAllPermission()
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite(mySite))
                    {
                        using (SPWeb web = site.OpenWeb())
                        {
                            string spreturnUser = string.Empty;
                            try
                            {
                                int i = 0;
                                foreach (SPRoleDefinition role in web.RoleDefinitions)
                                {
                                    i++;
                                    lstAllAvaliableRoles.Items.Add(i + ": " + role.Name);
                                }
                            }
                            catch (Exception)
                            {

                            }
                        }
                    }
                });
            }
            catch (Exception ex)
            {
            }
        }

        protected void btnGetDetailPermission_Click(object sender, EventArgs e)
        {
            permissionDetails.Visible = true;

            using (SPSite site = new SPSite(mySite))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPRoleDefinition role = web.RoleDefinitions[lstAllAvaliableRoles.SelectedValue.ToString().Split(':')[1].ToString().Trim()];
                    txtName.Text = role.Name;
                    txtDesc.Text = role.Description;
                    SPBasePermissions spPer = role.BasePermissions;
                    txtBasePer.Text = spPer.ToString();
                }
            }
        }
    }
}