Friday, April 26, 2013

How to hide "Respond to this Survey"

Problem Description:
How to hide "Respond to this Survey" when a user has already responded to the Survey

It’s simple but little bit tricky to implement as it involves user controls also.

Imp point to note:
·         The Rendering Template for the Survey List is in the defaulttemplates.ascx
Control under 12/Template/Control template.

·         The rendering template ID is ‘ViewToolBar. This template renders the "Respond
to this Survey", Actions menu and Settings menu in the toolbar.

·         This template is a generic template which is used by other lists as well.

·         "Respond to this Survey" is rendered by <SharePoint:NewMenu
AccessKey="<%$Resources:wss,tb_NewMenu_AK%>" runat="server" />.

How exactly it looks like:
<SharePoint:RenderingTemplate ID="ViewToolBar" runat="server">
<wssuc:ToolBar CssClass="ms-menutoolbar" EnableViewState="false" id="toolBarTbl"
ButtonSeparator="<img src='/_layouts/images/blank.gif' alt=''>"
RightButtonSeparator="&nbsp;&nbsp;" runat="server">
AccessKey="<%$Resources:wss,tb_NewMenu_AK%>" runat="server" />
AccessKey="<%$Resources:wss,tb_ActionsMenu_AK%>" runat="server" />
AccessKey="<%$Resources:wss,tb_SettingsMenu_AK%>" runat="server" />
<SharePoint:PagingButton runat="server"/>
<SharePoint:ListViewSelector runat="server"/>

Microsoft Recommendation:
1.    We cannot modify OOB defaulttemplates.ascx as this would be unsupported
2.    Make a copy of defaulttemplates.ascx under CONTROL TEMPLATES FOLDER of 12 hive
and rename it to CustomDefaultTemplates.ascx
What exactly needs to done/Resolution:
1.    To hide “Respond to this Survey” if a user has already responded to the survey,
Create a class which inherits from the Microsoft.Sharepoint.WebControls.NewMenu.

2.    In this override CreateChildControls and have your logic to hide unhide "Respond
to this Survey" based on your need.

3.    Build the class library and install the dll to the GAC.

4.    Modify the “ViewToolBar” in the custom ascx such that to render your custom
"Respond to this Survey" menu from the class library you created.

(Note: You need to add your assembly reference and register the tag prefix in the
Custom ascx control.)

5.    Next step is to render the custom rendering template to the "Survey List" so
     that the custom "Respond to this Survey" menu will be rendered in the toolbar.

6.    For this the "ToolbarTemplate" property of the View should be changed in the
schema.xml file of the Survey List definition.

7.    As modifying the OOB files are not supported, Copy the “SurveyList” folder from
12/Template/Features and paste in the same place as “CustomSurveysList”.
Change the feature ID of the “CustomSurveyList”

8.    Open the schema.xml file available under survey folder of “CustomSurveysList”
and add the “ToolbarTemplate=CustomViewToolBar” attribute to the “View BaseID=0”.

Example attached:
<View BaseViewID="0" FreeForm="TRUE" ReadOnly="TRUE" Type="HTML" ToolBarTemplate=" CustomViewToolBar ">

9.    Install and activate "CustomSurveysList"

10. Create a Survey List using CustomSurveyList template and we should be able to
achieve the functionality as required.

No comments:

Popular Posts


The opinions expressed on this blog are the personal views of Pratik's SharePoint Blog, and do not represent or reflect the viewpoints or policies of any past, present, or future employer, colleague, or customer, or any other entity. The posts on this blog are provided ‘as is’ with no warranties, express or implied, and confer no rights. Use of information contained within this blog, including specific technical steps mentioned herein, is at your own risk. References to specific software products, processes, resources, or companies do not imply any endorsement.