Friday, June 29, 2012

SharePoint: Client Side Object Model Part - I

This example will explain you about very general operation using CSOM

            ClientContext context = new ClientContext("http://goazrapp18:33369");
         
            //Get Title and Description
            Web web = context.Web;
            context.Load(web, w => w.Title, w=>w.Description);
            context.ExecuteQuery();
            Console.WriteLine(web.Title);
            Console.WriteLine(web.Description);
         
            //Update Title and Description
            web.Title = "New Team Site "+ DateTime.Now;
            web.Description = "Team Site Description " + DateTime.Now;
            web.Update();
            context.ExecuteQuery();
            Console.WriteLine(web.Title);
            Console.WriteLine(web.Description);

            //Delete Existing Web
            context.Load(web.Webs, webs => webs.Include(tWeb => tWeb.Title));
            context.ExecuteQuery();
            foreach (Web tWeb in web.Webs)
                if (tWeb.Title == "Web 1")
                {
                    tWeb.DeleteObject();
                    context.ExecuteQuery();
                    Console.WriteLine("Web 1 deleted");
                }

            //Create New Web
            WebCreationInformation creation = new WebCreationInformation();
            creation.Url = "web1";
            creation.Title = "Web 1";
            creation.Description = " Web 1 Descroption";
            Web newWeb = context.Web.Webs.Add(creation);
            context.ExecuteQuery();
            Console.WriteLine("Web 1 created");

            //Get all Lists
            context.Load(web.Lists, lists => lists.Include(list => list.Title, list => list.Id));
            context.ExecuteQuery();
            string temp = string.Empty;
            foreach (List list in web.Lists)
                temp += list.Title +", ";
            Console.WriteLine("List Name are " + temp);

            //Delete List
            List dList = web.Lists.GetByTitle("Test List");
            dList.DeleteObject();
            context.ExecuteQuery();
            Console.WriteLine("Test List deleted");

            //Create List
            ListCreationInformation lCreationInfo = new ListCreationInformation();
            lCreationInfo.Title = "Test List";
            lCreationInfo.TemplateType = (int)ListTemplateType.Announcements;
            List wList = web.Lists.Add(lCreationInfo);
            wList.Description = "Test List Description";
            wList.Update();
            context.ExecuteQuery();
            Console.WriteLine("List " + wList.Title + " Created");
         
            Console.WriteLine("Please press any key to exit");
            Console.ReadLine();


Output:



Wednesday, June 27, 2012

SharePoint Client Object Model with Lambda Expressions - Part III

You will learn how to use IEnumerable with LoadQuery in Lambda Expressions.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;


namespace ClientSideConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new ClientContext(@"http://localhost:22266");
            var web = context.Web;
            var lists = web.Lists;
            IEnumerable genericLists = context.LoadQuery(lists.Where
                        (list => list.BaseType == BaseType.GenericList));
             
            context.ExecuteQuery();
            foreach (var list in genericLists)
            {
                Console.WriteLine(list.Title);
            }
            Console.ReadLine();
        }
    }
}

Saturday, June 23, 2012

SharePoint Client Object Model with Lambda Expressions - Part II

In Part - II, You will learn how to filter query in Lambda Expressions.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;


namespace ClientSideConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new ClientContext(@"http://localhost:22266");
            var web = context.Web;
            var lists = web.Lists;
            context.Load(lists,
                lx => lx.Include
                    (list => list.Title).Where
                        (list => list.BaseType == BaseType.GenericList));
             
            context.ExecuteQuery();
            foreach (var list in lists)
            {
                Console.WriteLine(list.Title);
            }
            Console.ReadLine();


        }
    }
}

Friday, June 22, 2012

SharePoint Client Object Model with Lambda Expressions - Part I

How to use Client Object Model with Lambda Expressions.

First we have to add given references to project.

Microsoft.SharePoint.Client
Microsoft.SharePoint.Client.Runtime




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;


namespace ClientSideConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var context = new ClientContext(@"http://localhost:22266");
            var web = context.Web;
            context.Load(web, x => x.Title, x => x.Description);
            context.ExecuteQuery();
            Console.WriteLine(web.Title);
            Console.WriteLine(web.Description);

            Console.ReadLine();


        }
    }
}


Above code loads only title and description for given web.

Sunday, June 17, 2012

SharePoint Feature Activation/Deactivation Tool

You can activate/deactivate feature for whole web application. Feature can be Site or Web level. Here is the configuration settings for that tool

Console Application Code : 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
using System.Configuration;
using Microsoft.SharePoint.Administration;

namespace FeatureActivation
{
    class Program
    {
        private static StreamWriter logWriter;
        private static Guid FeatureGUID;

        static void Main(string[] args)
        {
            logWriter = new StreamWriter("FeatureActivationLog.txt");
            string strWebApplicationName = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["WebApplicationName"]);
            FeatureGUID = new Guid(Convert.ToString(ConfigurationManager.AppSettings["FeatureID"]));
            string strDeploymentType = Convert.ToString(ConfigurationManager.AppSettings["DeploymentType"]);
            string strFeatureType = Convert.ToString(ConfigurationManager.AppSettings["FeatureType"]);
            int siteCollectionCount = 0;
            int siteCount = 0;
            int webCount = 0;
            DateTime startTime;
            DateTime endTime;
            if (string.IsNullOrEmpty(strWebApplicationName))
            {
                Console.WriteLine("Configuration Error");
                Console.WriteLine("Press enter to continue...");
                Console.ReadLine();
            }
            else
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {

                    if (strDeploymentType.ToLower() == "deploy")
                    {
                        if (!IsFeatureInstall())
                        {
                            Console.WriteLine("Feature is not installed");
                            logWriter.WriteLine("Feature is not installed");
                            logWriter.WriteLine("==========================================================================");
                            return;
                        }
                    }
                    if (strFeatureType.ToLower() == "site")
                    {
                        using (SPSite objSite = new SPSite(strWebApplicationName))
                        {
                            SPSiteCollection objSiteCollection = objSite.WebApplication.Sites;
                            if (objSiteCollection != null && objSiteCollection.Count > 0)
                            {
                                startTime = DateTime.Now;
                                foreach (SPSite objTempSite in objSiteCollection)
                                {
                                    siteCollectionCount++;
                                    try
                                    {
                                        if (strDeploymentType.ToLower() == "deploy")
                                        {
                                            
                                                ActivateSiteFeature(objTempSite);
                                                Console.WriteLine("Activate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("Activate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("==========================================================================");
                                            
                                        }
                                        else if (strDeploymentType.ToLower() == "rollback")
                                        {
                                            

                                                DeactivateSiteFeature(objTempSite);
                                                Console.WriteLine("Deactivate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("Deactivate feature for " + objTempSite.Url);
                                                logWriter.WriteLine("==========================================================================");


                                            
                                        }
                                        else
                                        {
                                            logWriter.WriteLine("Unknown Deployment Type");
                                            logWriter.WriteLine("==========================================================================");
                                            Console.WriteLine("Unknown Deployment Type");
                                        }

                                    }
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("Error : Resetting feature for " + objTempSite.Url);
                                        logWriter.WriteLine("Error : Resetting feature for " + objTempSite.Url + " Error Message is " + ex.StackTrace, ex.Message, ex.InnerException, ex.Source);
                                        logWriter.WriteLine("==========================================================================");

                                    }


                                    objTempSite.Close();
                                }
                                endTime = DateTime.Now;
                                logWriter.WriteLine("**********************SUMMARY*****************************");
                                Console.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);
                                logWriter.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);

                                Console.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());
                                logWriter.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());

                                Console.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.Close();
                            }
                        }
                    }
                    else if (strFeatureType.ToLower() == "web")
                    {
                        using (SPSite objSite = new SPSite(strWebApplicationName))
                        {
                            SPSiteCollection objSiteCollection = objSite.WebApplication.Sites;
                            if (objSiteCollection != null && objSiteCollection.Count > 0)
                            {
                                startTime = DateTime.Now;
                                foreach (SPSite objTempSite in objSiteCollection)
                                {
                                    siteCollectionCount++;
                                    foreach (SPWeb objTempWeb in objTempSite.AllWebs)
                                    {
                                        webCount++;
                                        try
                                        {
                                            if (strDeploymentType.ToLower() == "deploy")
                                            {
                                                    ActivateWebFeature(objTempWeb);
                                                    Console.WriteLine("Activate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("Activate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("==========================================================================");
                                            }
                                            else if (strDeploymentType.ToLower() == "rollback")
                                            {
                                                    DeactivateWebFeature(objTempWeb);
                                                    Console.WriteLine("Deactivate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("Deactivate feature for " + objTempWeb.Url);
                                                    logWriter.WriteLine("==========================================================================");

                                            }
                                            else
                                            {
                                                logWriter.WriteLine("Unknown Deployment Type");
                                                logWriter.WriteLine("==========================================================================");
                                                Console.WriteLine("Unknown Deployment Type");
                                            }

                                        }

                                        catch (Exception ex)
                                        {
                                            Console.WriteLine("Error : Resetting feature for " + objTempWeb.Url);
                                            logWriter.WriteLine("Error : Resetting feature for " + objTempWeb.Url + " Error Message is " + ex.StackTrace, ex.Message, ex.InnerException, ex.Source);
                                            logWriter.WriteLine("==========================================================================");

                                        }
                                        objTempWeb.Close();
                                    }

                                    objTempSite.Close();
                                }
                                endTime = DateTime.Now;

                                logWriter.WriteLine("**********************SUMMARY*****************************");
                                Console.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);
                                logWriter.WriteLine("Total Number Of SiteCollection for " + strWebApplicationName + " is " + siteCollectionCount);

                                Console.WriteLine("Total Number Of Web for " + strWebApplicationName + " is " + webCount);
                                logWriter.WriteLine("Total Number Of Web for " + strWebApplicationName + " is " + webCount);

                                Console.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());
                                logWriter.WriteLine("Start Time Of " + strWebApplicationName + " is " + startTime.ToString());

                                Console.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.WriteLine("End Time Of " + strWebApplicationName + " is " + endTime.ToString());
                                logWriter.Close();
                            }
                        }
                    }
                    else
                    {
                        logWriter.WriteLine("Unknown Feature Type");
                        logWriter.WriteLine("==========================================================================");
                        Console.WriteLine("Unknown Feature Type");
                    }
                });
                Console.WriteLine("Press enter to continue...");
                Console.ReadLine();
            }
        }

        private static bool IsFeatureInstall()
        {
            bool bFound = false;
            //Finds the feature definition.
            foreach (SPFeatureDefinition featureDef in SPFarm.Local.FeatureDefinitions)
            {
                try
                {
                    if (featureDef.Id.Equals(FeatureGUID))
                    {
                        bFound = true;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    //This is failing if feature is installed and feature file is not there
                    //we have to ignore this exception
                }
            }
            return bFound;
        }

        private static void ActivateSiteFeature(SPSite objSite)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objSite.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (!bActive)
            {
                objSite.Features.Add(FeatureGUID);
            }
        }
        private static void DeactivateSiteFeature(SPSite objSite)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objSite.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (bActive)
            {
                objSite.Features.Remove(FeatureGUID);
            }
        }
        private static void ActivateWebFeature(SPWeb objWeb)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objWeb.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (!bActive)
            {
                objWeb.Features.Add(FeatureGUID);
            }
        }
        private static void DeactivateWebFeature(SPWeb objWeb)
        {
            bool bActive = false;
            //Checks whether the user is activated already.
            foreach (SPFeature feature in objWeb.Features)
            {
                if (feature.DefinitionId.Equals(FeatureGUID))
                {
                    bActive = true;
                    break;
                }
            }

            if (bActive)
            {
                objWeb.Features.Remove(FeatureGUID);
            }
        }

    }
}

Saturday, June 16, 2012

How to Override click event using jQuery


If let's say control has click event attached and you don't have code to change or override click event, here is the solution for that

OOB Code Snippet:

onclick="javascript:SelectUserImage()
;return false;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$PlaceHolderMain$ctl12", "", true, "", "", false, true))" type="button" value="Choose Picture"/>
Now if you want to override click event, use given code to achieve it.




It will only call our function (alert message only).

Wednesday, June 13, 2012

How to restrict photo size in My Site Edit Profile page



Here is the technical approach to achieve this functionality.

My Site’s Edit Profile page uploads photos to Picture Library under user’s My Site. Event Receiver will be developed and attached to that library. That Event Receiver will check configuration value from web configuration file and validate with picture’s size which user will upload. It will throw an exception if condition doesn’t match.

One Feature will be developed to attach event receiver for Picture Library and it will be activated when user creates My Site. One console application will developed to activate that feature for all existing My Sites.

JS code will be added to SelectPicture2.aspx page to convert SharePoint generic error with configured error message. This message will be configured in web configuration file. Select Picture page calls by Edit profile page to upload picture. 

Tuesday, June 5, 2012

SharePoint 2010 - Linq

If you want to use Linq in SharePoint, you have to generate class using SPMetal utility.
You have to provide some parameters to generate class file like web, namespace, class etc.



This command will generate class file for you and you have to attach to you project file.

You have to add reference from 14/ISAPI folder for Sharepoint.Linq dll.

Here is the simple code snippet to get List items.


using System.Linq;
using Microsoft.SharePoint.Linq;
using SP2010.Demo;


namespace SP2010.Demo.LinqWebPart
{
    [ToolboxItemAttribute(false)]
    public class LinqWebPart : WebPart
    {
        protected override void CreateChildControls()
        {
            using (var ctx = new LinqDemoDataContext(SPContext.Current.Web.Url))
            {
                var parentList = from pl in ctx.ParentList
                                 select new {pl.CustomerID,pl.Name };
                foreach(var p in parentList)
                {
                    Controls.Add(new LiteralControl(string.Format("{0},{1}
",p.CustomerID,p.Name)));
                }

            }
        }
    }
}






Friday, June 1, 2012

How to add Heading Sub Heading for SharePoint Navigation


SharePoint doesn't allow to add Sub Heading under Heading. Here is the code to achieve it.

SPNavigationNode oNewNode = new SPNavigationNode("Heading", "");
oWeb.Navigation.TopNavigationBar.AddAsLast(oNewNode);
oNewNode.Properties.Add("NodeType", "Heading");
oNewNode.Update();


SPNavigationNode oChild1 = new SPNavigationNode("SubHead1", "");
oNewNode.Children.AddAsFirst(oChild1);
oChild1.Properties.Add("NodeType", "Heading");
oChild1.Update();

SPNavigationNode oChild2 = new SPNavigationNode("SubHead2", "");
oNewNode.Children.Add(oChild2, oChild1);
oChild2.Properties.Add("NodeType", "Heading");
oChild2.Update();

SPNavigationNode oChild3 = new SPNavigationNode("SubHead3", "");
oNewNode.Children.Add(oChild3, oChild2);
oChild3.Properties.Add("NodeType", "Heading");
oChild3.Update();