Tuesday, November 25, 2014

Too many characters in character literal

Issue: Getting "Too many characters in character literal" error when try to build a SharePoint project. Error in the following line of code in application page
Assembly Name="$SharePoint.Project.AssemblyFullName$"

Cause: Since the SharePoint project is a sandboxed solution, Sandboxed solutions do not support the application pages.
Referencehttp://msdn.microsoft.com/en-us/library/ee231562.aspx

Resolution: Fixed it by changing the solution from Sandbox to farm.

Thursday, September 4, 2014

Remove duplicate Array from JArray

To remove duplicate array from JArray.


private static string RemoveDuplicateTasks(JArray strArray)
        {

            JArray uniqueArray = new JArray();
            StringBuilder jsonResponse = new StringBuilder();

            //Loop through each array and find for array value with a specific column name. (ex: ID)
            foreach (JObject jObject in strArray)
            {
                //Verify if the ID column value exist in the uniqueArray
                JObject rowObject = uniqueArray.Children<JObject>().FirstOrDefault(o => o["id"] != null && o["id"].ToString() == jObject.Property("id").Value.ToString());

                //rowObject will be null if these is no match for the value in ID column
                if (rowObject == null)
                {
                    uniqueArray.Add(jObject);
                }
            }

            //Remove the curly braces { }
            int strLength = uniqueArray.ToString().Length;
            string strValue = uniqueArray.ToString().Substring(1, (strLength - 2));
            jsonResponse.Append((jsonResponse.Length > 0 ? "," : "") + strValue);
            return "[" + jsonResponse.ToString() + "]";
        }

Wednesday, July 9, 2014

Get SharePoint Groups added at Web level programmatically

To get SharePoint groups added to the specific web site/subsite level. Assumption is that the subsite is not inheriting permissions.

  private static List<string> GetAllWebGroups(string webUrl)
        {
            List<string> lstGroups = new List<string>();

            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate
                {
                    using (SPSite site = new SPSite(webUrl))
                    {
                        using (SPWeb spWeb = site.OpenWeb())
                        {
                            foreach (SPRoleAssignment roleAssignment in spWeb.RoleAssignments)
                            {
                                if (roleAssignment.Member is SPGroup)
                                {
                                    foreach (SPRoleDefinition roleDefinition in roleAssignment.RoleDefinitionBindings)
                                    {
                                       // To get groups with specific role .
                                       //  SPRoleType.Editor does not work for SharePoint 2010
                                      /*The following condition will not return custom roles, remove this condition in case                                        you want to display all groups.*/
                 
                                        if (roleDefinition.Type == SPRoleType.Reader ||
                                            roleDefinition.Type == SPRoleType.Contributor ||
                                            roleDefinition.Type == SPRoleType.WebDesigner ||
                                            roleDefinition.Type == SPRoleType.Administrator)
                                        {
                                            if (!lstGroups.Exists(delegate(string sGroupName) { return sGroupName == roleAssignment.Member.Name; }))
                                                lstGroups.Add(roleAssignment.Member.Name);
                                        }
                                    }
                                 
                                }
                            }
                        }
                    }
                });
            }

Friday, May 16, 2014

Cannot complete this action as the Secure Store Shared Service is not responding. Please contact your administrator.

Using SharePoint 2013;

In IIS, change the secure store service Application pool identity to a dedicated user if it is pointed to Network service/Local Service.

Tuesday, May 6, 2014

Error when creating new user group in SharePoint 2010 using Internet Explorer 9/10/11

Environment: SharePoint 2010, IE 9/10/11

Scenario: Create new SharePoint user group

Error:

Error

An unexpected error has occurred.
Troubleshoot issues with Microsoft SharePoint Foundation.
Correlation ID: ad4b6182-60df-4a07-998c-c4f11d82c500
Date and Time: 5/6/2014 5:10:53 AM

Resolution: Apply cumulative hot fix

April 2014 Update
SharePoint Foundation 2010

SharePoint Server 2010


Friday, April 4, 2014

Add Sign in as different user menu in SharePoint 2013

Using SharePoint 2013;

This project adds "Sign in as different user" option in SharePoint 2013, which was not enabled out of the box. Build the project and deploy the WSP to SharePoint. The feature to add the menu is scoped at web level. The feature will be activated by default on the site collection.

Click here to download the source code.

Friday, February 21, 2014

Set field as read only on editform/newform during list provisioning

Using SharePoint 2013/2010;

Requirement: Set a Text field 'Application Name' in a list as read only on edit form page load. The list is created during site provisioning.

Solution: Customize the editform of the list by adding a content editor web part and JavaScript to make the field as read only.Add the following code in list's schema.xml file

<Form Type="EditForm" Url="EditForm.aspx" Path="CustomEditForm.aspx" WebPartZoneID="Main" UseDefaultListFormWebPart="False" >
        <WebParts>
          <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="1">
            <![CDATA[
              <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
              <Assembly>Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>                      
              <TypeName>Microsoft.SharePoint.WebPartPages.ListFormWebPart</TypeName>
              <PageType>PAGE_EDITFORM</PageType>
            </WebPart>]]>
          </AllUsersWebPart>
          <AllUsersWebPart WebPartZoneID="Main" WebPartOrder="2">
            <![CDATA[
        <WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
        <Title>Web part title</Title>
        <FrameType>None</FrameType>
        <Description>Web part description</Description>
        <FrameState>Normal</FrameState>
        <Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
        <TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>
        <ContentLink xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
        <Content xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor">
       
          &lt;script&gt;
       
       var prev_handler = window.onload;
            this.window.onload = function () {
               if (prev_handler) {
                 prev_handler();
               }

      var lists = document.getElementsByTagName('input');
        for ( var i = 0; i &lt; lists.length; i++) {
              if (lists[i].getAttribute('title') === 'Application Name' ) {
                lists[i].readOnly = true;
             
              }
           }
       
   
          &lt;/script&gt;    
           </Content>
            <PartStorage xmlns="http://schemas.microsoft.com/WebPart/v2/ContentEditor" />
           </WebPart>

            ]]>
          </AllUsersWebPart>
        </WebParts>
      </Form>

PS. The script need to be updated if the field name is renamed