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

Thursday, February 13, 2014

Tuesday, February 4, 2014

The type initializer for 'Microsoft.SharePoint.CoreResource' threw an exception.

Using SharePoint Server 2013;

Error: The type initializer for 'Microsoft.SharePoint.CoreResource' threw an exception.

Scenario: The error was on the line   SPSite site = new SPSite(siteUrl);.
In my VS 2012 project, I was referencing version 14 of Microsoft.SharePoint.dll  and 3.5 as target .net framework version

Resolution: Changed the target framework to 4.0 and referenced the version 15 of Microsoft.SharePoint.dll

The type initializer for 'Microsoft.SharePoint.CoreResource' threw an exception.

Tuesday, January 21, 2014

People and group field is imported as Single line of text field when imported as spreadsheet

Issue: When we create a list using import a spreadsheet and if you have an people and group field in the spreadsheet, after import the people and group field may change as single line of text field.

Workaround: Create a people and group field in the same list where you have imported the list.Following PowerShell script will read the values from single line of text field and update in the value in people and group field. Make sure your AD user profile is similar to the source list/site.

Add-PSSnapin Microsoft.Sharepoint.Powershell
[System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$site = new-object Microsoft.SharePoint.SPSite("SiteURL”)
$web =  Get-SPWeb -Identity siteURL
$lista =$web.Lists["ListName"]
$items = $lista.items
foreach ($item in $items) {
  $user = $item["SingleTextColumnNameOfUserName"]
  write-host $useracc 
$useracc =  $web.EnsureUser( $user); 
$item["NewPeople&GroupFieldName"] = $useracc
write-host $useracc
$item.update()
}

$lista.update()


Wednesday, January 15, 2014

WSP Versioning


Versioning for WSP packages are possible, but we have to do it manually.

·     Embed the version number in the filename of the WSP.
·     Create a text file with the version information inside the package.

Solutions don’t have a version number included by default and it is recommended to add a version number to the solution name. With this approach we know which version of your solution is deployed.
For instance:
Use MyProjectSolution_v5000.10.1560.0.wsp as solution name for the build #1560.

AssemblyFileVersion
The AssemblyFileVersion is intended to uniquely identify a build of the individual assembly
Used for deployment. You can increase this number for every deployment. It is used by setup programs. Use it to mark assemblies that have the same AssemblyVersion, but are generated from different builds.
In Windows, it can be viewed in the file properties.
Example:
// Assembly mscorlib, Version 2.0.0.0
[assembly: AssemblyFileVersion("5000.10.1560.0")]
[assembly: AssemblyInformationalVersion("5000.10.1560.0")]
[assembly: AssemblyVersion("5000.10.0.0")]

AssemblyFileVersion is informational only.  Incrementing the version does not require a recompile of dependent assemblies.  It helps when browsing your bin folder to know which code version you have installed.

Code to read the current Assembly File Version
Assembly thisAssembly = Assembly.GetExecutingAssembly();
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(thisAssembly.Location);
Console.WriteLine(fvi.FileVersion);

PowerShell Command
[System.Diagnostics.FileVersionInfo]::GetVersionInfo("Location of your executable").FileVersion


PowerShell script can be used to update the AssemblyFileVersion when the project is build.

Source: 

Monday, December 16, 2013

Unknown server tag 'SharePoint:ScriptBlock'.

Error: Unknown server tag 'SharePoint:ScriptBlock'.

Issue: You will get above error when you use the application page in SharePoint 2013 using <SharePoint:ScriptBlock> and try to use that in SharePoint 2010.

Cause: ScriptBlock class is not available in SharePoint 2010 & 2007.

Resolution: Replace the block with <script type="text/javascript">