Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

SharePoint 2010: Clicking the icon in Type column is highlighting the item instead of launching the document


Symptom


In a list view of a document library in SharePoint 2010, when the document icon for an item in the Type column is clicked, the document is not offered for opening. Instead, the row for the item is selected. This behavior is different from SharePoint 2007 where clicking on the document icon opens the document itself.

↑ Back to the top


Cause

This behavior is the result of the fact that in SharePoint 2010, the list view web part has been mostly replaced with the new and customizable XSLT List View Web Part. The XSLTListViewWebPart relies on XSLT files for rendering of items in the document library. Out of the box, it depends on the files main.xsl, fldtypes.xsl and vwstyles.xsl rendering of the document library views. These XSLT files are present in the following location:  

\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL



Among these files, the fldtypes.xsl is the file responsible for certain rendering of the XSLT views. The XSLT code that facilitates the rendering of icons in the document library view is located in this file. In the OOB environment, this XSLT code does not generate a hyperlink for the icons.

↑ Back to the top


Resolution

Essentially, the solution involves using a separate xsl file with the desired rendering (including the link) for the document icons. This requires one-time implementation and the solution file should not be touched by any patches/upgrades. The following are the key points to note about this solution:

The solution is based on the fldtypes extensibility available in SharePoint 2010. This has been documented in the following link:
http://msdn.microsoft.com/en-us/library/ff606773.aspx

The solution does not involve administrative overhead after the initial implementation. In addition, it should not be affected by the application of future updates and service packs to the SharePoint 2010 environment. 

STEPS:
=====================
1.       Create a text file using Notepad and copy the following XSLT code into the file.
2.       Save the file as fldtypes_docicon.xsl and copy it into the Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL folder on your WFEs.
3.     Reset IIS and browse to the SharePoint site.

<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal" ddwrt:oob="true">
<xsl:output method="html" indent="no"/>

<xsl:template ddwrt:dvt_mode="body" match ="FieldRef[@Name='DocIcon']" mode="Computed_DocIcon_body">
<xsl:param name="thisNode" select="."/>
<xsl:param name="folderUrlAdditionalQueryString" select="''"/>
<xsl:choose>
<xsl:when test="$thisNode/@FSObjType='1'">
<xsl:variable name="alttext">
<xsl:choose>
<xsl:when test="starts-with($thisNode/@ContentTypeId, &quot;0x0120D5&quot;)">
<xsl:value-of select="$thisNode/../@itemname_documentset"/>: <xsl:value-of select="$thisNode/@FileLeafRef"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$thisNode/../@listformtitle_folder"/>: <xsl:value-of select="$thisNode/@FileLeafRef"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mapico" select="$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico"/>
<xsl:variable name="folderIconPath">
<xsl:call-template name="GetFolderIconSourcePath">
<xsl:with-param name="thisNode" select="$thisNode"/>
</xsl:call-template>
</xsl:variable>
<!-- This is a folder -->
<xsl:choose>
<xsl:when test="$RecursiveView='1'">
<img border="0" alt="{$alttext}" src="{$folderIconPath}" />
<xsl:choose>
<xsl:when test="$thisNode/@IconOverlay != ''">
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="FolderCTID">
<xsl:value-of select="$PagePathFinal" />RootFolder=<xsl:value-of select="$thisNode/@FileRef.urlencode" /><xsl:value-of select="$ShowWebPart"/>&amp;FolderCTID=<xsl:value-of select="$thisNode/@ContentTypeId" />&amp;View=<xsl:value-of select="$View"/><xsl:value-of select="$folderUrlAdditionalQueryString"/>
</xsl:variable>
<a href="{$FolderCTID}" onmousedown ="VerifyFolderHref(this, event, '{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}', '{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}', '{$thisNode/@HTML_x0020_File_x0020_Type}', '{$thisNode/@serverurl.progid}')"
onclick="return HandleFolder(this,event,&quot;{$PagePathFinal}RootFolder=&quot; + escapeProperly(&quot;{$thisNode/@FileRef}&quot;) + '{$ShowWebPart}&amp;FolderCTID={$thisNode/@ContentTypeId}&amp;View={$View}{$folderUrlAdditionalQueryString}','TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}','{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}');">
<img border="0" alt="{$alttext}" title="{$alttext}" src="{$folderIconPath}" />
<xsl:choose>
<xsl:when test="$thisNode/@IconOverlay != ''">
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:when>
</xsl:choose>
</a>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$IsDocLib">
<a onfocus="OnLink(this)" href="{$thisNode/@FileRef}" onmousedown="return VerifyHref(this,event,'{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@serverurl.progid}')"
onclick="return DispEx(this,event,'TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}','{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}')">
<xsl:choose>
<xsl:when test="not ($thisNode/@IconOverlay) or $thisNode/@IconOverlay =''">
<xsl:choose>
<xsl:when test="not ($thisNode/@CheckoutUser.id) or $thisNode/@CheckoutUser.id =''">
<img border="0" alt="{$thisNode/@FileLeafRef}" title="{$thisNode/@FileLeafRef}" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="alttext"><xsl:value-of select="$thisNode/@FileLeafRef"/><xsl:text disable-output-escaping="yes" ddwrt:nbsp-preserve="yes">&#10;</xsl:text><xsl:value-of select="$thisNode/../@managecheckedoutfiles_header_checkedoutby"/>: <xsl:value-of select="$thisNode/@CheckoutUser.title"/></xsl:variable>
<img border="0" alt="{$alttext}" title="{$alttext}" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}" />
<img src="/_layouts/images/checkoutoverlay.gif" class="ms-vb-icon-overlay" alt="{$alttext}" title="{$alttext}" />
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise >
<img border="0" alt="{$thisNode/@FileLeafRef}" title="{$thisNode/@FileLeafRef}" src="/_layouts/images/{$thisNode/@IconOverlay.mapico}" />
<img src="/_layouts/images/{$thisNode/@IconOverlay.mapoly}" class="ms-vb-icon-overlay" alt="" title="" />
</xsl:otherwise>
</xsl:choose>
</a>
</xsl:when>
<xsl:otherwise>
<img border="0" src="/_layouts/images/{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapico}">
<xsl:attribute name="alt">
<xsl:value-of select="$thisNode/@Title"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$thisNode/@Title"/>
</xsl:attribute>
</img>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>


↑ Back to the top


More Information

The solution essentially involves wrapping the Image <img> tag which renders the document icon in the XSLT code with the following anchor <a> tag:  


<a onfocus="OnLink(this)" href="{$thisNode/@FileRef}" onmousedown="return VerifyHref(this,event,'{$XmlDefinition/List/@DefaultItemOpen}','{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@serverurl.progid}')"

onclick="return DispEx(this,event,'TRUE','FALSE','{$thisNode/@File_x0020_Type.url}','{$thisNode/@File_x0020_Type.progid}','{$XmlDefinition/List/@DefaultItemOpen}',
'{$thisNode/@HTML_x0020_File_x0020_Type.File_x0020_Type.mapcon}','{$thisNode/@HTML_x0020_File_x0020_Type}','{$thisNode/@serverurl.progid}',
'{$thisNode/@CheckoutUser.id}','{$Userid}','{$XmlDefinition/List/@ForceCheckout}','{$thisNode/@IsCheckedoutToLocal}','{$thisNode/@PermMask}')">

            Using the full Anchor tag as shown above ensures that you get the complete collaboration functionality of SharePoint 2010 for Office documents including direct server edits, and WAC support. You should evaluate the solution in a test environment first to understand the acceptable performance characteristics for your scenario.  

Depending on the functionality required, you can choose to either use the full Anchor tag as mentioned above or a partial tag with only the href attribute. i.e. <a onfocus="OnLink(this)" href="{$thisNode/@FileRef}">. The performance implications of using the partial tag as described above is negligible.    

   

↑ Back to the top


Keywords: kb

↑ Back to the top

Article Info
Article ID : 2457975
Revision : 1
Created on : 1/7/2017
Published on : 4/22/2011
Exists online : False
Views : 126