Top Menu

Tuesday, March 5, 2013

SharePoint 2010 - Security Trimming

I came across a requirement where I have to hide the Ribbon for the readers in SharePoint 2010.
Following is the snippit of the control to do the magic:

<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="ManageLists">
      Your ASP.NET control goes here
</SharePoint:SPSecurityTrimmedControl>

Permission values could be following:
  • ManageLists
  • ManageWeb

Tuesday, January 29, 2013

Friday, January 18, 2013

SharePoint 2013 - Administration Accounts

Multiple Server Farm

To manage SharePoint with multiple servers you need three types of roles/accounts:
Account Purpose
SQL Server service accountSQL Server prompts for this account during SQL Server Setup. This account is used as the service account for the following SQL Server services:
  • MSSQLSERVER
  • SQLSERVERAGENT
If you are not using the default instance, these services will be shown as:
  • MSSQL<InstanceName>
  • SQLAgent<InstanceName>
Setup user accountThe user account that is used to run:
If you run Windows PowerShell cmdlets that affect a database, this account must be a member of the db_owner fixed database role for the database.
  • Setup on each server computer
  • SharePoint Products Configuration Wizard
  • The Psconfig command-line tool
  • The Stsadm command-line tool
  • This account needs local admin access on the machine to run the SharePoint Setup.
Server farm accountThis account is also referred to as the database access account.
This account has the following properties:
  • It's the application pool identity for the SharePoint Central Administration website.
  • It's the process account for the Windows SharePoint Services Timer service.
  • This does not have to be the local account.


Start the installation with Setup user account and in SharePoint Configuration Wizard you will specify SQL Server service instance (because it will be on other server inside the farm) and Farm Account access.

Single Server Farm

To manage single server farm, all three roles can be handled by one account. So you need only local account (Setup user account) to do all the installation and configurations.

Start the installation with Setup user account and SharePoint Configuration Wizard will automatically pickup the SQL Server Instance and assign Setup user account as Farm account. 
See the single farm installation in here.

Ref: http://technet.microsoft.com/en-us/library/cc263445.aspx

SharePoint 2013 - Setup Development Environment

Pre-Requisite: Have your virtual machine ready with Microsoft Windows 2012 installed on it.

It will be a single server farm and following are the four steps to setup a SharePoint 2013 environment for development:
  1. Install Microsoft SQL Server 2012 (SP1)
    •  Select New SQL Server Stand-alone Installation
    • In the Installation wizard, under Feature Selection, select following features
  2. Install Microsoft SharePoint 2013
    • Install Pre-Requisite for SharePoint 2013
    • Launch SharePoint 2013 Setup and select Stand-alone installation on Server Type tab.
    • Launch SharePoint 2013 Product Configuration Wizard.
    • This wizard will perform configuration for SharePoint e.g. creating configuration database, registering features, provisioning Central Administration, creating sample data etc.
    • Launch Central Administration from Start menu
  3. Install Microsoft Visual Studio 2012
    • I am a developer so I will select all options to install
  4. Install Microsoft SharePoint Designer 2013

Monday, December 3, 2012

Backup and Restore SharePoint Site

Site Collection Backup and Restore

Backup: 
stsadm -o backup -url http://site1.com/sitecoll1 -filename c:\backup\backup1.dat
Restore: 
stsadm -o restore -url http://site2.com/sitecoll1 -filename c:\backup\backup1.dat -overwrite


Export and import a subsite, list, or library

Export:
stsadm -o export –url http://site1.com/sites/portal/Shared%20documents –filename c:\backup\lib.bak -quiet -overwrite 
Import:
stsadm -o import –url http://site2.com/sites/portal/Shared%20documents –filename c:\backup\lib.bak -quiet


Wednesday, September 19, 2012

JQuery: Batch update the list items via Lists.asmx

Quick JQuery script to batch update the list items via Lists.asmx.

I have two lists Projects(Title, ProjectStatus) and Teams(Title, Project, ProjectStatus). Team.Project is a lookup column from Projects.Title and I want to update Teams.ProjectStatus when Projects.ProjectStatus is updated in the Projects list via EditForm.aspx. Now we can link two columns from projects list into the Teams list but can not connect them together in the Teams list, so following script was a great help. It batch updates the Teams.ProjectStatus once Project.ProjectStatus is updated.

Thanks to the this post I found 100% functionality ready to go.


<script type="text/javascript" src="/Scripts/jquery-1.8.1.min.js"></script>

<script type="text/javascript">

var strProject = "";
var strProjectStatus = "";

function PreSaveItem()
{
 strProject = document.getElementById('ctl00_m_g_f2d95e24_befb_49d2_b15f_823d71c9c758_ctl00_ctl04_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_TextField').value;
 strProjectStatus = document.getElementById('ctl00_m_g_f2d95e24_befb_49d2_b15f_823d71c9c758_ctl00_ctl04_ctl01_ctl00_ctl00_ctl04_ctl00_DropDownChoice').value;
 
 GetProjectID();
  
 return true;
}

function GetProjectID(){

var soapEnv = "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
<soap:Body> \
    <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
        <listName>Teams</listName> \
        <query><Query><Where><Eq><FieldRef Name='Project'/><Value Type='Text'>"+ strProject +"</Value> </Eq></Where></Query></query> \
        <viewFields> \
            <ViewFields> \
                <FieldRef Name='ID' /> \
                <FieldRef Name='Title' /> \
            </ViewFields> \
        </viewFields> \
        <rowLimit>99999</rowLimit> \
        <queryOptions xmlns:SOAPSDK9='http://schemas.microsoft.com/sharepoint/soap/' ><QueryOptions/> \
        </queryOptions> \
    </GetListItems> \
</soap:Body> \
</soap:Envelope>";

jQuery.ajax({
url: "/itsglobal/_vti_bin/lists.asmx",
type: "POST",
dataType: "xml",
data: soapEnv,
complete: ResultMethod,
contentType: "text/xml; charset=\"utf-8\""
});

}

function ResultMethod(xData, status) 
{

    if (status=="success")
    {
        var oldbatch = "";
        $(xData.responseXML).find("z\\:row").each(function() 
        {
            oldbatch = AddTobatch(oldbatch, $(this).attr("ows_ID"));
        });
        
        UpdateTeamItem(oldbatch);
    }

}

function AddTobatch(oldbatch, itemId)
{

//Specify the batch query
var _batch = "<Method ID='1' Cmd='Update'><Field Name='ID'>" + itemId +"</Field><Field Name='ProjectStatus'>"+ strProjectStatus +"</Field></Method>";
oldbatch = oldbatch + _batch;

return oldbatch;
}

function UpdateTeamItem(batch) 
{
var soapEnv = "<?xml version=\'1.0\' encoding=\'utf-8\'?> \
<soap:Envelope xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' \
xmlns:xsd=\'http://www.w3.org/2001/XMLSchema\' \
xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/\'> \
<soap:Body> \
<UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
<listName>Teams</listName> \
<updates> \
<Batch OnError='Continue'>" + batch + "</Batch> \
</updates> \
</UpdateListItems> \
</soap:Body> \
</soap:Envelope>";

$.ajax({
url: "/itsglobal/_vti_bin/lists.asmx",
beforeSend: function(xhr) { xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
},
type: "POST",
dataType: "xml",
data: soapEnv,
complete: updateResult,
contentType: "text/xml; charset=\"utf-8\""

});
}

function updateResult(xData, status) {
if (status != 'success' )
    alert("Update Project Status in Teams library failed");
}


</script>

JQuery: Read list Item via Lists.asmx

Following JQuery script is to get list items using Lists.asmx web service in MOSS 2007:
<script type="text/javascript" src="/Scripts/jquery-1.8.1.min.js"></script>
<script type="text/javascript">

//This function will call when OK button will be pressed on a List's default form (e.g. EditItem.aspx).

function PreSaveItem()
{
 var project = "Project A";
 
 GetProjectID(project);
 
 return true;
}

function GetProjectID(project){

var soapEnv = "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> \
<soap:Body> \
    <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
        <listName>Teams</listName> \
        <query><Query><Where><Eq><FieldRef Name='Project'/><Value Type='Text'>"+ project +"</Value> </Eq></Where></Query></query> \
        <viewFields> \
            <ViewFields> \
                <FieldRef Name='ID' /> \
                <FieldRef Name='Title' /> \
            </ViewFields> \
        </viewFields> \
        <rowLimit>99999</rowLimit> \
        <queryOptions xmlns:SOAPSDK9='http://schemas.microsoft.com/sharepoint/soap/' ><QueryOptions/> \
        </queryOptions> \
    </GetListItems> \
</soap:Body> \
</soap:Envelope>";

jQuery.ajax({
url: "/itsglobal/_vti_bin/lists.asmx",
type: "POST",
dataType: "xml",
data: soapEnv,
complete: ResultMethod,
contentType: "text/xml; charset=\"utf-8\""
});

}

function ResultMethod(xData, status) 
{

    if (status=="success")
    {
        alert(status);
        $(xData.responseXML).find("z\\:row").each(function() 
        {
            alert($(this).attr("ows_ID"));
        });
    }

}

</script>
I have copied this script from the internet and have tweaked it a bit to work with JQuery 1.8 version.

Official SharePoint Documentation

I have recently contributed to the official SharePoint documentation for developement. Check it out here: https://docs.microsoft.com/en-us...