Como añadir el titulo de la pagina en SPS2010 programaticamente

He perdido varias horas investigando como poner el titulo de una pagina desde un WebPart a través de codigo… He probado cosas como: this.Page.Title, this.Parent.Page.Title… pero sin mucho acierto :(

Investigando un poco mas, me he propuesto sobrescribir el PlaceHolder que contiene el titulo de la pagina, y para ello, habria que realizar los siguientes pasos: localizar e instanciar el control PlaceHolderPageTitle,  eliminar el actual contenido y por ultimo insertar un nuevo literal dentro del PlaceHolder. A través e código seria así:

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder) Page.Master.FindControl("PlaceHolderPageTitle");
contentPlaceHolder.Controls.Clear();
LiteralControl literalControl = new LiteralControl();
literalControl.Text = "Titulo de la Pagina";
contentPlaceHolder.Controls.Add(literalControl);

Con este cambio he conseguido que el indexador de SharePoint, almacene correctamente el titulo de la pagina, definido desde un WebPart.

Ocultar el Ribbon para usuarios anonimos

Se me ha planteado en un proyecto la necesidad de ocultar el Ribbon o barra de herramientas de SharePoint 2010 para los usuarios anonimos del sitio.

Para poder realziar esto, la mejor opcion (al igual que ya ocurria en SharePoint 2007) es incluir en la Master Page codigo para ocultar los tags o controles que deseas hacer invisibles (en nuestro caso el Ribbon) para ello has de localizar este control, viendo donde empieza:

<WebPartPages:SPWebPartManager id="m" runat="Server"/>

y donde termina:

<div id="s4-workspace">

​y pon por fuera de ellos el siguiente codigo:

<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="ManageLists">
</SharePoint:SPSecurityTrimmedControl>

Quedando algo similar a esto:

<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="ManageLists">
<WebPartPages:SPWebPartManager id="m" runat="Server"/>
<!-- Resto de codigo -->
​<div id=s4-workspace>
</SharePoint:SPSecurityTrimmedControl>

Lo que conseguimos es, todo codigo que metamos dentro del tag Sharepoint:SPSecurityTrimmedControl, solo podra ser visto por usuarios/grupos con permisos.

El listado de parametros de Permissions podemos encontrarlo aqui.

Referencia: SPSecurityTrimmedControl Class

SharePoint 2010 y la pagina MyInfo.aspx

La página /_layouts/MyInfo.aspx es una página por defecto de SharePoint 2010 que muestra todos los documentos en todas las Bibliotecas de un sitio. Esta página se puede utilizar en un WebPart del tipo “Visor de páginas” para mostrar todos los documentos en un sitio determinado (cualquier sitio, inclusive sitios en una WebApplication diferente).

Etiquetas: , ,
Etiquetado en SharePoint 2010 por OMG. Sin comenrtarios

Como habilitar la valoración (rating) en una lista en SPS2010

En un cliente me han pedido activar en librerias de documentos, la opcion “Permitir clasificación de elementos de esta lista” o tambien conocido funcionalidad de rating través de código (ya que hay que hacerlo masivamente en unas decenas de colecciones de sitio).

He estado revisando los metodos/propiedades del objeto SPList pero no veo nada que me pueda valer… así que investigando un poco mas, he conseguido implementar el siguiente código:

private void EnableRating(SPList list)
{
	SPFieldCollection listfields = list.Fields;
	SPFieldCollection availfields = list.ParentWeb.AvailableFields;
	if (!listfields.Contains(FieldId.AverageRatings))
	{
		SPField field = availfields[FieldId.AverageRatings];
		list.Fields.AddFieldAsXml(field.SchemaXmlWithResourceTokens, true,SPAddFieldOptions.AddFieldToDefaultView | SPAddFieldOptions.AddFieldInternalNameHint | SPAddFieldOptions.AddToAllContentTypes);
	}
	if (!listfields.Contains(FieldId.RatingsCount) &amp;&amp; availfields.Contains(FieldId.RatingsCount))
	{
		SPField field2 = availfields[FieldId.RatingsCount];
		list.Fields.AddFieldAsXml(field2.SchemaXmlWithResourceTokens, false,SPAddFieldOptions.AddFieldInternalNameHint | SPAddFieldOptions.AddToAllContentTypes);
	}
	list.Update();
}
Etiquetas: , , , , ,
Etiquetado en SharePoint 2010 por OMG. Sin comenrtarios

Excluir cuentas de usuario deshabilitadas del User Profile de SPS 2010

En el caso de enriquecer el Perfil de Usuario de SharePoint 2010 a través del WAD (Windows Active Directory) una funcionalidad casi obligatoria demandada por los clientes, es que todos los usuarios que estén deshabilitados en el WAD, no se propaguen al servicio de User Profile…

Con versiones anteriores de SharePoint, habia que crear un filtro en LDAP controlando la propiedad userAccountControl, y en la versión 2010 sigue siendo necesario crear un filtro, para ellos hay que seguir los pasos:

  1. En la página Administrar el servicio de perfil, haga clic en Configurar conexiones de sincronización.
  2. En la página Conexiones de sincronización, haga clic en la conexión de Active Directory que desee modificar y, a continuación, haga clic en Modificar filtros de conexión.
  3. En la página Editar filtros de conexión, siga estos pasos:
    1. En Filtro de exclusión de usuarios, cambie el atributo desplegable userAccountControl.
    2. En Filtro de exclusión de usuarios, cambie el operador de lista desplegable de bits en es igual a.
    3. En el Filtro de exclusión de usuarios, seleccione cuadro Tipo de filtro a 2.
    4. Haga clic en Agregar.
  4. Haga clic en Aceptar.

 

Referencia: How to import user profile information of enabled user accounts from Active Directory to SharePoint

Si queires conocer los atributos del UserAccountControl, puedes hacerlo aquí.

Como obtener la version de SharePoint 2010

Un tema necesario, para comprobar​ que todos tus entornos tienen el mismo nivel de parches (por lo tanto la misma version de SharePoint) se puede realziar de dos formas…

  • Una primera, al igual que ocurría en SharePoint 2007 es desde linea de comandos, esta vez con PowerShell utilizando el siguiente comando:
    get-spfarm | select BuildVersion

     

  • Otra opción es la siguiente, via web: Central Administration -> Upgrade and Migration -> Check product and patch installation status

Cambios del API con el SP1 de SharePoint 2010

Con la salida del Service Pack 1 de SharePoint 2010, a parte de los cambios que ya hemos visto a nivel funcional, se han producido cambios a nivel de API.

A continuación se muestran estos cambios:

  • Microsoft.SharePoint.dll
    • Microsoft.SharePoint.SPRecycleBinItemType
      • New enum value:
        • Web
    • Microsoft.SharePoint.SPWeb
      • New method:
        • public void Recycle()
    • Microsoft.SharePoint.Strings
      • New constants:
        • public const string CannotRecycleRootWeb
        • public const string HealthRule_Explanation_BcsShimsAreEnabled
        • public const string HealthRule_Remedy_BcsShimsAreEnabled
        • public const string RecycleBinWebMissingContainerError
        • public const string SPStorageMetricsProcessingJobDescription
        • public const string SPUsageUserCodeRequestsDescription
        • public const string SPUsageUserCodeRequestsMonitoredDataDescription
        • public const string SiteAlreadyExists
        • public const string StorageMetricsDBObjectsNotFound
        • public const string StorageMetricsFreshnessWarning
        • public const string StorageMetricsNotAvailable
        • public const string TimerJobTitleStorageMetricsProcessing
    • Microsoft.SharePoint.Administration.SPAce<T>
      • New properties:
        • public Byte[] BinaryId() { get; }
        • public Microsoft.SharePoint.Administration.SPIdentifierType BinaryIdType() { get; }
    • Microsoft.SharePoint.Administration.SPAcl<T>
      • New method:
        • public SPAce<T> Add(string principalName, string displayName, SPIdentifierType identifierType, byte[] identifier, T grantRightsMask, T denyRightsMask)
    • Microsoft.SharePoint.Administration.SPContentDatabase
      • New methods:
        • public Microsoft.SharePoint.Administration.SPDeletedSite GetDeletedSite(System.Guid id)
        • public void Move(SPContentDatabase destinationDb, List<SPSite> sitesToMove, Dictionary<string, string> rbsProviderMap, out Dictionary<SPSite, string> failedSites)
    • Microsoft.SharePoint.Administration.SPContentDatabaseCollection
      • New method:
        • public SPContentDatabase Add(string strDatabaseServer, string strDatabaseName, string strDatabaseUsername, string strDatabasePassword, int warningSiteCount, int maximumSiteCount, int status, bool flushChangeLog, bool changeSyncKnowledge)
    • Microsoft.SharePoint.Administration.SPDatabase
      • New method:
        • public void ChangeDatabaseInstance(string databaseServiceInstance)
    • Microsoft.SharePoint.Administration.SPIncomingEmailService
      • New property:
        • public int RetryDeliveryInterval { get; set; }
    • Microsoft.SharePoint.Administration.SPPolicy
      • New method:
        • protected Void OnDeserialization()
    • Microsoft.SharePoint.Administration.SPSiteLookupProvider
      • Changed method (breaking change!)
        • public Void RenameHostHeaderSite(Guid siteId, string newHostHeader) => public Void RenameHostHeaderSite(Guid siteId, Uri newHostHeaderSiteUri)
    • Microsoft.SharePoint.Administration.SPUsageApplication
      • New property:
        • public int UsageInsertionTimeOut { get; set; }
    • Microsoft.SharePoint.Administration.SPUserCodeExecutionTier
      • New property:
        • public int PriorityPerProcess { get; set; }
    • Microsoft.SharePoint.Administration.SPWebApplication
      • New properties:
        • public int StorageMetricsProcessingDuration { get; set; }
        • public uint MaxDiscussionBoardItemsForSiteDataFolderQuery { get; set; }
        • public uint? UserDefinedWorkflowMaximumComplexity { get; set; }
      • New methods:
        • public SPDeletedSiteCollection GetDeletedSites()
        • public SPDeletedSiteCollection GetDeletedSites(SPDeletedSiteQuery query)
        • public SPDeletedSiteCollection GetDeletedSites(Guid siteId)
        • public SPDeletedSiteCollection GetDeletedSites(string sitePath)
        • public void MigrateUsers(IMigrateUserCallback callback)
    • Microsoft.SharePoint.Administration.SPWebService
      • New properties:
        • public int ImagingDownloadSizeLimit { get; set; }
        • public bool EnableHostHeaderSiteBasedSchemeSelection { get; set; }
    • Microsoft.SharePoint.Administration.Claims.SPActiveDirectoryClaimProvider
      • New method:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
    • Microsoft.SharePoint.Administration.Claims.SPAllUserClaimProvider
      • New method:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
    • Microsoft.SharePoint.Administration.Claims.SPClaimHierarchyProvider
      • New methods:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
        • public string GetLocalizedDisplayName()
    • Microsoft.SharePoint.Administration.Claims.SPClaimProvider
      • New property:
        • public virtual bool SupportsUserKey { get; }
      • New methods:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
        • public string GetLocalizedDisplayName()
        • public SPClaim UserKeyForEntity(SPClaim entity)
        • public virtual string GetClaimTypeForUserKey()
        • protected virtual SPClaim GetUserKeyForEntity(SPClaim entity)
    • Microsoft.SharePoint.Administration.Claims.SPClaimProviderDefinition
      • New property:
        • public bool IsVisible { get; set; }
    • Microsoft.SharePoint.Administration.Claims.SPClaimProviderOperationOptions
      • New enum value:
        • OverrideVisibleFlag
    • Microsoft.SharePoint.Administration.Claims.SPFormsClaimProvider
      • New method:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
    • Microsoft.SharePoint.Administration.Claims.SPSystemClaimProvider
      • New method:
        • protected override void FillDefaultLocalizedDisplayName(CultureInfo culture, out string localizedName)
    • Microsoft.SharePoint.BusinessData.Administration.LobSystem
      • New static method:
        • public static LobSystem MergeXml(string xml, out string[] errors, PackageContents packageContents, AdministrationMetadataCatalog metadataCatalog, string settingId)
    • Microsoft.SharePoint.BusinessData.Administration.TypeDescriptor
      • New static method:
        • public static TypeDescriptor MergeXml(string xml, out string[] errors, PackageContents packageContents, Parameter parameter, TypeDescriptor parent, string settingId)
    • Microsoft.SharePoint.BusinessData.SharedService.BdcServiceApplicationProxy
      • New methods:
        • public bool IsSystemTypeEnabled(SystemType systemType)
        • public void EnableSystemType(SystemType systemType, bool value)
    • Microsoft.SharePoint.JSGrid.GridSerializer
      • New method:
        • public void ApplyPostViewIncrementalInsertsAndDeletes(IEnumerable changes, Func> fnGetDefaultValuesForPostViewInserts)
    • Microsoft.SharePoint.JSGrid.HierarchyNode
      • New property:
        • public HierarchyNode Parent { get; set; }
    • Microsoft.SharePoint.Utilities.SPUtility
      • New static method:
        • public static Stream ExecuteCellStorageBinaryRequest(SPFile spfile, Stream request, bool coalesce, ref Guid partitionID, string userName, bool coauthVersioning, string etagMatching, bool fExpectNoFileExists, string contentChangeUnit, string clientFileID, string bypassSchemaID, long nLockType, string lockID, long nTimeout, bool createParentFolder, out string etagReturn, out bool allRequestSucceeded, out int coalesceHRESULT, out string coalesceErrorMessage, out bool containHotboxData, out bool haveOnlyDemotionChanges, ref int binaryReqCountQuota)
    • Microsoft.SharePoint.WebPartPages.ListFormWebPart
      • New method:
        • public bool ShouldSerializeTemplateName()
    • New classes:
      • Microsoft.SharePoint.Administration.SPDeletedSite
      • Microsoft.SharePoint.Administration.SPDeletedSiteCollection
      • Microsoft.SharePoint.Administration.SPDeletedSiteLookupInfo
      • Microsoft.SharePoint.Administration.SPDeletedSiteQuery
      • Microsoft.SharePoint.Administration.SPUsageUserCodeRequests
      • Microsoft.SharePoint.Administration.SPUsageUserCodeRequestsEntry
      • Microsoft.SharePoint.Administration.SPUsageUserCodeRequestsMonitoredData
      • Microsoft.SharePoint.Administration.SPUsageUserCodeRequestsMonitoredDataEntry
      • Microsoft.SharePoint.Administration.Health.SPHealthAnalysisRuleInstance
      • Microsoft.SharePoint.WebControls.IEVersionMetaTag
    • New enum types:
      • Microsoft.SharePoint.Administration.SPIdentifierType
    • New interfaces:
      • Microsoft.SharePoint.Administration.IMigrateUserCallback
      • Microsoft.SharePoint.Administration.ISPSiteLookupProviderRecycleBin
  • Microsoft.SharePoint.Publishing.dll
    • Microsoft.SharePoint.Publishing.Internal.CodeBehind
      • New property:
        • protected bool IsCurrentUserSiteAdmin { get; }
    • Microsoft.SharePoint.Publishing.WebControls.SpellCheckV4Action
      • New method:
        • protected bool ShouldRenderWithoutTabs()
    • Microsoft.SharePoint.Publishing.WebControls.EditingMenuActions.ConsoleAction
      • New method:
        • protected bool ShouldRenderWithoutTabs()
  • Microsoft.SharePoint.Taxonomy.dll
    • Microsoft.SharePoint.Taxonomy.TermStore
      • New method:
        • public Group GetSiteCollectionGroup(SPSite currentSite)
  • Microsoft.SharePoint.Portal.dll
    • Microsoft.Office.Server.UserProfiles.UserProfileService
      • New methods:
        • public void AddLeader(string accountName)
        • public Leader[] GetLeaders()
        • public void RemoveLeader(string accountName)
  • Microsoft.Office.Server.UserProfiles.dll
    • Microsoft.Office.Server.SocialData.PluggableSocialSecurityTrimmerManager
      • New methods:
        • public static string[] GetUrlFoldersRequiringTrim(SPServiceContext serviceContext)
        • public static string[] GetUrlFoldersToAlwaysAllow(SPServiceContext serviceContext)
        • public static void SetTrimmerSettings(SPServiceContext serviceContext, bool enableTrimming)
        • public static void SetTrimmerSettings(SPServiceContext serviceContext, string[] urlFoldersRequiringTrim, string[] urlFoldersToAlwaysAllow)
    • Microsoft.Office.Server.UserProfiles.BusinessDataCatalogConnection
      • New method:
        • public void Delete()
    • Microsoft.Office.Server.UserProfiles.ConnectionManager
      • New method:
        • public DirectoryServiceConnection AddActiveDirectoryConnection(ConnectionType type, string displayName, string server, bool useSSL, string accountDomain, string accountUsername, SecureString accountPassword, List<DirectoryServiceNamingContext> namingContexts, string spsClaimProviderTypeValue, string spsClaimProviderIdValue, string adClaimIDMapAttribute)
    • Microsoft.Office.Server.UserProfiles.UserProfileManager
      • New methods:
        • public void AddLeader(string accountName)
        • public Leader[] GetLeaders()
        • public void RemoveLeader(string accountName)
    • New classes:
      • Microsoft.Office.Server.UserProfiles.Leader
  • Microsoft.Office.Server.Search.dll
    • Microsoft.Office.Server.Search.Administration.CrawlTopologyState
      • New enum values:
        • ActiveToBeRemoved
        • DeactivatingToBeRemoved
    • Microsoft.Office.Server.Search.Administration.SearchServiceApplication
      • New property:
        • public uint CrawlLogCleanupIntervalInDays { get; set; }
    • Microsoft.Office.Server.Search.Administration.SearchServiceApplicationProxy
      • New property:
        • public LocationConfigurationCollection LocationConfigurations { get; }
    • Microsoft.Office.Server.Search.Query.QueryInfo
      • New property:
        • public string CorrelationId { get; set; }
    • Microsoft.Office.Server.Search.Query.QueryManager
      • New method:
        • public System.Xml.XmlDocument GetResults()
  • Microsoft.SharePoint.PowerShell.dll
    • New classes:
      • Microsoft.SharePoint.PowerShell.SPDeletedSitePipeBind
      • Microsoft.SharePoint.PowerShell.SPHealthAnalysisRuleInstancePipeBind

Como referencia y fuente de esta informacion puedes consultar el blog de Gary Lapointe.

Etiquetas: , ,
Etiquetado en SharePoint 2010 por OMG. Sin comenrtarios

Los iconos de documentos no enlazan con los archivos tras actualizar a SPS 2010

Tras una migración de MOSS 2007 a SPS 2010 uno de los problemas detectados, es que las vistas de librerias de documentos, en las que se usaba el icono del archivo para poder abrirlo, ha dejado de funcionar (el icono se muestra correctamente pero no enlaza con el documento). Por desgracia en el ULS no queda registrado ningun indicio de que esta ocurriendo…. :(

El motivo de este problema es que, en SharePoint 2010 se ha cambiado el XSLT del WebPart de vistas de las librerías de documentos, viendose afectados los archivos: main.xsl, fldtypes.xsl y vwstyles.xsl que se encuentran en: \Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL\.

Para poder solucionar este error hay que realizar los sigueintes pasos:

  • Crear un archivo de texto plano con el nombre: fldtypes_docicon.xsl en la ruta fisica: \Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL\ por cada uno de los frontales de la granaja.
  • Una vez creado el archivo, hay que añadir el siguiente contenido: fldtypes_docicon.xs
  • Por ultimo es necesario reiniciar el IIS en todos los frontales de la granja.

Una vez realizados los siguientes pasos, los iconos volveran a enlazar con los documentos.

Visual Studio 11 Developer Preview Training Kit

Microsoft ha publicado el pasado día 17, la primera release del Developer Preview Kit para Visual Studio 11,  el cual incluye laboratorios prácticos para ayudarte a entender cómo aprovechar las mejoras de Visual Studio 11 y. NET Framework 4.5,  y sobre todo cómo gestionar el ciclo de vida de toda la aplicación.

Si no quieres instalarte el Developer Preview Kit al completo, tienes la opción de descargarte el Web Platform Installer Preview y seleccionar únicamente los labs que desees.

En cuanto a contenido del training kit, el resumen es el siguiente (de los laboratorios incluidos):

  • Visual Studio Development Environment:
    • A Lap Around the Visual Studio 11 Development Environment.
  • Languages:
    • Asynchronous Programming in .NET 4.5 with C# and Visual Basic.
  • Web:
    • What’s New in ASP.NET and Visual Studio 11 Developer Preview.
    • What’s New in ASP.NET Web Forms 4.5.
    • Build RESTful APIs with WCF Web API.
  • Application Lifecycle Management:
    • Building the Right Software: Generating Storyboards and Collecting Stakeholder Feedback with Visual Studio 11.
    • Agile Project Management in Team Foundation Server 11.
    • Making Developers More Productive with Team Foundation Server 11.
    • Diagnosing Issues in Production with IntelliTrace and Visual Studio 11.
    • Exploratory Testing and Other Enhancements in Microsoft Test Manager 11.
    • Unit Testing with Visual Studio 11: MSTest, NUnit, xUnit.net, and Code Clone.
  • Windows Metro Style Apps:
    • Windows 8 Developer Preview Hands on Labs from BUILD.

Ocultar My Site desde la Administración Central

​Se me ha dado el caso, que un cliente no quiere inicialmente, que los usuarios puedan acceder a su: My Site en SharePoint 2010. La forma de ocultarles esta opción desde la administración central es:

  • Ir a: Central Administration > Application Management > Manage service applications > User profile service application.
  • Una vez dentro, en el Ribbon, accede a “Manage User Permissions” dentro de la sección “People”.
  • En la ventana “Permissions for User Profile Service Application”, el grupo de usuarios, por ejemplo: “All authenticated Users”.
  • Desmarca los elementos “Permissions”, dependiendo de las opciones que quieras deshabilitar.
  • Por ultimo haz click “OK” para guardar la configuración.