Saturday, July 14, 2012

How to loop through all SPWeb object in your SharePoint site using Powershell

If ever you need to loop through all your SPWeb object in a SharePoint site for whatever reason and you want to do it in powershell. Try out the below code snippet. It worked for me, hope it can help you.

Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue

$siteUrl = read-host "What is your site url? Eg: http://mysharepointpotal"
$site= Get-SPSite $siteURL
$webs= $site.AllWebs
try
{
    foreach ($web in $webs)
    {
        Write-Host $web.url
       
        # Perform operation
    }
}
catch
{
    write-host -f Red "error" $_.exception
    $errorlabel = $true
}
And that's it, you can now loop through all SPWeb objects in your site.

Happy scripting :-)

Tuesday, July 3, 2012

Programatically creating a SharePoint publishing page

Creating a new SharePoint publishing page is pretty simple, we just got a couple of things to remember.

First check if the page already exists, if so you can edit that page. If it does not exist we need to pass a filename and a page layout which are pretty important.

Once the page is created you can do pretty much anything with it.

        private static PublishingPage CreatePage(string filename, string title, string siteUrl, string pageLayout)
        {
            try
            {
                using (SPSite s = new SPSite(siteUrl))
                {
                    using (SPWeb w = s.OpenWeb())
                    {
                        PublishingWeb pWeb = PublishingWeb.GetPublishingWeb(w);

                        PageLayout[] ls = pWeb.GetAvailablePageLayouts();
                        var layout = ls.ToList().Find(x => x.Title.Equals(pageLayout, StringComparison.InvariantCultureIgnoreCase));

                        if (layout == null)
                            return null;

                        var p = pWeb.GetPublishingPages().ToList().Find(x => x.Name.Equals(filename, StringComparison.InvariantCultureIgnoreCase));

                        if (p == null)
                            p = pWeb.GetPublishingPages().Add(filename, layout);
                        else
                            return p;

                        p.Title = title;
                        p.Update();

                        return p;
                    }
                }
            }
            catch
            {
                return null;
            }
        }

And there you have it you have successfuly created a new SharePoint publishing page.

Monday, June 11, 2012

How to serialize and deserialize any object to a compressed string

How to : Serialize and Deserialize a object into a compressed string

If you have ever needed to serialize some sort of object to a string for whatever reason we always trying to google some example of how to do it correctly. In the example below, I am going to serialize and compress a generic list to a string.

Serialization and Compression

        private static string CompressValue(object serializedValue)
        {
            try
            {
                BinaryFormatter bf = new BinaryFormatter();

                using (MemoryStream ms = new MemoryStream())
                {
                    bf.Serialize(ms, serializedValue);

                    byte[] inbyt = ms.ToArray();

                    using (MemoryStream objStream = new MemoryStream())
                    {
                        using (DeflateStream objZS = new DeflateStream(objStream, CompressionMode.Compress))
                        {
                            objZS.Write(inbyt, 0, inbyt.Length);
                            objZS.Flush();
                            objZS.Close();

                            byte[] b = objStream.ToArray();

                            return Convert.ToBase64String(b);
                        }
                    }
                }
            }
            catch { return string.Empty; }
        }

Deserialize object

        private List DeSerializeStringToObject(string serializedContent)
        {
            List retval = new List();

            byte[] bytCook = Convert.FromBase64String(serializedContent);

            using (MemoryStream inMs = new MemoryStream(bytCook))
            {
                inMs.Seek(0, 0);

                using (DeflateStream zipStream = new DeflateStream(inMs, CompressionMode.Decompress, true))
                {
                    byte[] outByt = ReadFullStream(zipStream);

                    zipStream.Flush();
                    zipStream.Close();

                    using (MemoryStream outMs = new MemoryStream(outByt))
                    {
                        outMs.Seek(0, 0);

                        BinaryFormatter bf = new BinaryFormatter();

                        retval = (List)bf.Deserialize(outMs, null);
                    }
                }
            }

            return retval;
        }

        private static byte[] ReadFullStream(Stream stream)
        {
            byte[] buffer = new byte[32768];

            using (MemoryStream ms = new MemoryStream())
            {
                while (true)
                {
                    int read = stream.Read(buffer, 0, buffer.Length);
                    if (read <= 0)
                        return ms.ToArray();
                    ms.Write(buffer, 0, read);
                }
            }
        }
And that is it, you can now serialized any object into a string and deserialize into your object again.

Happy coding guys...

ASP.NET Update Panel not reloading jquery

Issue: asp.net update panel not reloading custom jquery after a partial post back occurs.

Cause: The asp.net update panel reloads all the content within the content template tags, thus your custom jquery is not reloaded and never fired.

Solution: Add your custom jquery at the end of the request by using the page request manager object:

    var prm = Sys.WebForms.PageRequestManager.getInstance();

    prm.add_endRequest(function () {
        DOSTUFF();
    });

And problem solved, it's as easy as that.

I hope this helped you, it solved my problem.