Monday, November 19, 2012

Managed Metadata field values are not displayed

Problem:

The values for a Managed Metadata field values are visible only for Site Collection Administrators.
In edit mode the current and possible values for the Managed Metadata field are visible and accessible.

Solution: 

The NT AUTHORITY\Authenticated Users does not have Read permission in the TaxonomyHiddenList.

Check the permissions in <site url>/Lists/TaxonomyHiddenList/AllItems.aspx.
The following permissions should be present:
NT AUTHORITY\Authenticated Users (NT AUTHORITY\authenticated users)  with Read permission
System Account (SHAREPOINT\system)  with Full Control permission


Tuesday, August 7, 2012

SharePoint 2010 Workflow Activities

Developing Workflow Activities for SharePoint 2010 examples can be found in a section in Developing Applications for SharePoint 2010 from MSDN.

This section is under Execution Models in SharePoint 2010 > Reference Implementation: Workflow Activities.

The code for the entire section can be found here: Developing Applications for SharePoint 2010.

Wednesday, July 25, 2012

SharePoint 2010 put back the "Set Up Groups for this Site" link

The "Set Up Groups for this Site" page has been, for some unknown reason, hidden in SharePoint 2010.

The page is still there and it can be accessed here:/_layouts/permsetup.aspx.

To make this generally available I created a custom action to add this to the "People and Groups: All Groups" (/_layouts/groups.aspx) page, in the Settings dropdown menu:

xml version="1.0" encoding="utf-8"?>
< Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
  < CustomAction Id="64f25e2b-f9fb-4e37-b848-5949603b03ab"
                Title="Set Up Groups for this Site"
                Description="Use this page to specify who can access your site. You can create new SharePoint groups or re-use existing SharePoint groups."
                Location="Microsoft.SharePoint.GroupsPage"
                GroupId="SettingsMenu"
                Sequence="1000"
                >
    < UrlAction Url="~site/_layouts/permsetup.aspx">< /UrlAction>
  < /CustomAction >
< /Elements >  
This can a Site or Web level feature, depending on where it has to be applied.

Tuesday, July 17, 2012

How to create a custom Workflow Task / SharePoint Server Workflow Task content type using Visual Studio?


If you are designing an Workflow and you want to create custom Workflow Task or SharePoint Server Workflow Task using Visual Studio interface then you'll need to make these two content types visible.

To make them visible I'm using the following PowerShell script:

$site = Get-SPSite "http://site/url/here"
$web = $site.RootWeb

# Workflow Task
$contentType = $web.ContentTypes["Workflow Task"]
$contentType.Group = "Custom Content Types"
$contentType.Hidden = $FALSE
$contentType.Update()

# SharePoint Server Workflow Task
$contentType = $web.ContentTypes["SharePoint Server Workflow Task"]
$contentType.Group = "Custom Content Types"
$contentType.Hidden = $FALSE
$contentType.Update()

$site.Dispose()
Then when you can add a new Content Type from Visual Studio and you will see the two Content Type in the list.

To revert these changes run this PowerShell script:
$site = Get-SPSite "http://site/url/here" $web = $site.RootWeb # Workflow Task $contentType = $web.ContentTypes["Workflow Task"] $contentType.Group = "_Hidden" $contentType.Hidden = $TRUE $contentType.Update() # SharePoint Server Workflow Task $contentType = $web.ContentTypes["SharePoint Server Workflow Task"] $contentType.Group = "_Hidden" $contentType.Hidden = $TRUE $contentType.Update() $site.Dispose()

Monday, June 18, 2012

SharePoint 2010 Customizing default application pages


Customizing an SharePoint 2010 Application Page. 

In this example I'm customizing the /_layouts/MWS.aspx, the new meeting workspace page. 

These steps can be followed for any of Application Page.

1. Create the custom application page and deploy it into the _layouts folder.

2. Create an IHttpModule to redirect all requests that come to MWS.aspx and redirect them to customMWS.aspx:

class RedirectModule : IHttpModule { public void Dispose(){ } public void Init(HttpApplication context) { // add event handler context.PreRequestHandlerExecute += context_PreRequestHandlerExecute; } void context_PreRequestHandlerExecute(object sender, EventArgs e) { HttpApplication httpApp = sender as HttpApplication; HttpContext context = httpApp.Context; string httpUrl = context.Request.RawUrl.ToString(); //compare our URL and redirect it to custom one if (httpUrl.ToLower().Contains("/_layouts/customMWS.aspx")) { HttpContext.Current.Server.ClearError(); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Redirect(Regex.Replace(httpUrl, "/_layouts/newMWS.aspx", "/_layouts/customMWS.aspx", RegexOptions.IgnoreCase)); } } }

3. Add a new element in the web.config configuration/system.webServer/modules section to enable this IHttpModule. To do this create an web application feature to add this change in the web.config of the application. 


public class MWSRedirectModuleFeature : SPFeatureReceiver {
 SPWebConfigModification webConfigModification = new SPWebConfigModification
 {
  Name = "add[@name='MWSRedirectModule']",
  Path = "configuration/system.webServer/modules",
  Owner = "CustomOwner",
  Sequence = 100,
  Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode,
  Value = "Class Name, Assembly Full Name"/>"
 };

 // Add config changes
 public override void FeatureActivated(SPFeatureReceiverProperties properties)
 {
  SPWebApplication parent = (SPWebApplication)properties.Feature.Parent;

  if (parent == null)
   return;

  try
  {
   parent.WebConfigModifications.Add(webConfigModification);
   parent.Update(true);
   parent.WebService.ApplyWebConfigModifications();
  }
  catch (Exception exception)
  {
   // log error
  }
 }

 // Remove config changes
 public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
 {
  SPWebApplication parent = (SPWebApplication)properties.Feature.Parent;

  if (parent == null)
   return;

  try
  {
   parent.WebConfigModifications.Remove(webConfigModification);
   parent.Update(true);
   parent.WebService.ApplyWebConfigModifications();
  }
  catch (Exception exception)
  {
   // log error
  }
 }
}