PowerShell Site Column Usage and Find Site Columns in List

PowerShell code to find the usage of a site column.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Web URL - site where the site column is defined or available
$WebURL = "http://site_url"

#Site URL - site collection
$SiteURL = "http://site_collection_url"

#Column to search - internal name
$ColumnInternalName = "internal_name_site_column"

#Get the Site
$Site = Get-SPSite $SiteURL

#Get the Web
$Web = Get-SPWeb $WebURL

#Get the Column
$column = $Web.AvailableFields.GetFieldByInternalName($ColumnInternalName)

#Find all List usages of the column
$WebColumnUsages = $column.ListsFieldUsedIn() #Gets the WebID & ListID values

#Get the lists where the site column is being used
foreach( $Usage in $WebColumnUsages )

    {
        $Site.AllWebs | foreach {$_.Lists} | where {$_.ID –eq $Usage.ListID } | Select Title, ParentWebURL, RootFolder
    }

PowerShell code to list all non hidden column of a list and indicate the ones that are site columns.

$w = Get-SPWeb "http://site_url"
$l = $w.GetList("http://list_url")

foreach ($field1 in $l.Fields | where {$_.Hidden -eq $false} | sort title ) {

Write-Host -NoNewline $field1.Title " - " $field1.InternalName 

	foreach ($field2 in $w.AvailableFields) {

	if ($field1.id -eq $field2.id) { 

	Write-Host -NoNewline " - SITE COLUMN"
	} 

	}
Write-Host " "
}

Some references:

http://social.technet.microsoft.com/wiki/contents/articles/15894.sharepoint-2010-interacting-with-site-columns-using-powershell.aspx

http://www.sharepointdiary.com/2014/01/find-sharepoint-site-column-usage-report.html

http://sharepoint.findincity.net/view/63539928672422258233910/is-it-possible-to-iterate-all-lists-in-sharepoint-in-search-for-a-given-field

http://techtrainingnotes.blogspot.ca/2012/10/sharepointfinding-column-display-and.html

Please vote:

http://sharepoint.uservoice.com/forums/282887-customer-feedback-for-sharepoint-server/suggestions/7553676-site-columns-display-where-used

http://sharepoint.uservoice.com/forums/282887-customer-feedback-for-sharepoint-server/suggestions/7239594-distinguish-a-site-column-from-a-list-column-in-a

Lire: Où sont utilisés les colonnes de sites et les types de contenu? Pour les mettre à jour ou supprimer

Où sont utilisés les colonnes de sites et les types de contenu? Pour les mettre à jour ou supprimer

Types de contenu

À mon avis, la méthode la plus facile de trouver partout où un type de contenu est utilisé est de servir de SharePoint Manager https://spm.codeplex.com/ . Pour le type de contenu ‘Insectes’, on peut voir dans la branche Usages dans quelles listes il est utilisé.

content-type-sharepoint-manager

Donc on peut savoir où sont les types de contenu impactés par une mise à jour.

Type-contenu-avances

Alors que faire lorsque vous n’avez pas la possibilité d’utiliser SharePoint Manager?

Il faut comparer le ID du type de contenu dans la galerie avec le type de contenu de la liste:

En cliquant sur le type de contenu dans la galerie du site, on obtient l’URL suivant:

/_layouts/15/ManageContentType.aspx?ctype=AAA&Source=CCC

En cliquant sur le type de contenu dans la liste, on obtient l’URL suivant:

/_layouts/15/ManageContentType.aspx?List=DDD&ctype=AAABBB

Le numéro du type de contenu dans la liste est plus long. Il contient le numéro de contenu du type de contenu de la galerie suivit d’autres caractères.

Sinon pour comprendre d’où provient un type de contenu, voici comment procéder:

  1. Allez dans les paramètres de la liste ou la biblio.
  2. Cliquez sur le nom du type de contenu de liste. Vous pouvez y trouver les spécificités par rapport au type parent: nom, modèle, colonnes…

type-contenu-liste

3. Cliquer sur le type de contenu parent. Vous y trouvez les caractéristiques du type de contenu: nom, modèle, colonnes…

type-contenu-site

4. Cliquez dans le fil d’Ariane sur Types de contenu de site et vous pourrez voir dans quel site ce type de contenu a été défini.

 

Colonnes de site

Il n’en n’est pas de même pour les colonnes de sites.

Voici le code PowerShell pour trouver toutes les listes où se trouve une certaine colonne de site.

https://ktnnsharepoint.wordpress.com/2015/07/31/powershell-site-column-usage-find-list/

Pourquoi ne pas l’ajouter dans une prochaine version?

http://sharepoint.uservoice.com/forums/282887-customer-feedback-for-sharepoint-server/suggestions/7553676-site-columns-display-where-used

Colonne-site-maj

Par contre, il y a une grande différence entre les types de contenu et les colonnes de sites. Une fois qu’une colonne de site se trouve dans une liste, on ne peut pas savoir qu’elle découle d’une colonne de site. Les colonnes de site et de liste sont indifférentiables. C’est très mauvais et il serait bien que ce soit corrigé dans une prochaine version: http://sharepoint.uservoice.com/forums/282887-customer-feedback-for-sharepoint-server/suggestions/7239594-distinguish-a-site-column-from-a-list-column-in-a

En attendant, si on travaille avec les colonnes d’une liste, comment peut-on savoir s’il s’agit d’une colonne de site ou de liste?

Je n’arrive pas à trouver un article à ce sujet mais voici notre piste: avec SharePoint Manager, on peut voir que le ID d’une colonne de site reste le même lorsque cette colonne se trouve dans une liste ou biblio.

Donc il serait possible d’énumérer tous les ID des colonnes dans une liste/biblio puis les comparer aux colonnes de site existantes.

https://ktnnsharepoint.wordpress.com/2015/07/31/powershell-site-column-usage-find-list/

Maintenant, si vous n’avez pas facilement accès à travailler avec PowerShell, quelle serait une solution?

http://URLDUSITE/_vti_bin/owssvr.dll?XMLDATA=1&List={your list GUID}&Cmd=ExportList&ExtendedFieldsProperties=1&ExcludeViews=1

  • On peut trouver le GUID de la biblio en cherchant l’URL à l’ouverture des paramètres de la biblio.

On obtient un fichier XML où sont énumérés tous les champs de la biblio. Déjà on peut distinguer les colonnes de liste car elles possèdent l’attribut Group. Il y aussi l’ID de la colonne.

<Field Type= »… » DisplayName= »… » Group= »Colonnes personnalisées » ID= »… » …>

Maintenant, il faut trouver le ID de la colonne de site.

Il faut ajouter la colonne de site dans type de contenu. Puis lorsqu’on clique sur la colonne de site à partir du type de contenu dans la galerie, on peut voir dans l’URL le Fid qui est le ID de la colonne de site.

_layouts/15/ManageContentTypeField.aspx?ctype=000&Field=NomChamp&Fid=000

Réf. https://ktnnsharepoint.wordpress.com/2015/11/03/mettre-jour-colonne-site-type-contenu/

 

Fonctionnalités de publication

Pour compléter ces 3 articles écrits pour SharePoint 2010… Je n’ai pas tout vérifié mais la plupart des explications sont toujours vraies dans SharePoint 2013.

Les fonctionnalités de publication de la collection de sites sont activées

– J’y ajoute que la banque de termes de collection de sites est créée lors de l’activation de l’infrastructure de publication.

– À l’activation de l’infrastructure de publication les listes et bibliothèques suivantes sont ajoutées: Contenu réutilisable, Documents de la collection de sites, Images de la collection de sites, Rapports sur le contenu et la structure, Tâches de flux de travail. Lorsqu’on désactive, seulement les bibliothèques Documents de la collection de sites et
Images de la collection de sites disparaissent.

Les fonctionnalités de publication d’un site sont activées

Encore les fonctionnalités de publication

Les propriétés analysées et gérées dans le schéma de recherche

Propriétés analysées = Crawled Properties

Propriétés gérées = Managed Properties

Colonne de liste

Si je créé deux colonnes de liste avec le même nom (ex. Bourdon) et même si ces colonnes sont de type différent, UNE seule propriété analysée est créée (ows_Bourdon). Cette propriété est basée sur le nom interne de la colonne. Aucune propriété gérée (Managed Property) n’est créée.

bourdon

Note: Selon la référence de Microsoft ci-dessous, certains types de colonnes ne sont pas indexables. https://msdn.microsoft.com/en-us/library/ee536168(v=office.14).aspx Je ne suis pas sûre de comprendre comment cela s’applique.

Colonne de site

Lors de la création d’une colonne de site, deux propriétés analysées sont automatiquement créées: ows_Abeille, et ows_q_change selon le type_Abeille ainsi qu’une propriété gérée: AbeilleOWSchange selon le type sont ajoutées.

abeille1

abeille2

Voir Les propriétés gérées dans la recherche et Propriétés gérées dans le modèle d’affichage du résultat de la recherche.

Exception pour une colonne de type métadonnées gérées

Que ce soit une colonne de liste ou de site qui est créée, trois propriétés analysées sont créées: Chenille, ows_Chenille, ows_taxId_Chenille. Et en plus, même une propriété gérée (owstaxIdChenille) est créée (même dans le cas d’une colonne de liste).

chenille1

chenille2

Voir Métadonnées gérées et la recherche personnalisée.

Intéressant: Actions du site > Paramètres du site > Colonnes pouvant faire l’objet d’une recherche

 

Vérifier les autorisations, c’est trompeur

Lorsque vous affichez les autorisations d’un élément, vous avez accès au bouton Vérifier les autorisations (Check Permissions).

verifier-autorisations

J’ai toujours cru naivement que cette fonction, lorsque utilisé au niveau d’un site, permettait de voir les accès des utilisateurs dans tout le site.

Et ben, j’ai bien été déçue…

Si vous vérifiez les autorisations pour un utilisateur, vous allez uniquement trouver son accès direct au site ou à travers les groupes de sécurité où il se trouve. Vous ne verrez pas ses accès à tous les éléments où l’héritage est brisé. Si vous voulez connaître l’accès d’un utilisateur à tout le site, il faut vérifier les autorisations partout où l’héritage est brisé. Ce qui est ridicule.

La seule utilité que je peux constater à cette fonction est de pouvoir trouver dans quel groupe se trouve un utilisateur car cela montre l’accès ‘Accordée par l’intermédiaire du groupe …’ mais seulement là où l’héritage n’est pas brisé.

Trop d’espace entre les WebParts dans SharePoint 2013

Sur une page de composants WebPart, dans SharePoint 2013, il y a trop d’espace entre les WebParts. Voici le code à utiliser:

<style type= »text/css »>
.ms-webpartPage-root {
border-spacing: 5px !important; }
.ms-webpartzone-cell {
margin: 5px !important; }
</style>

http://www.ashokraja.me/tips/How-To-Remove-Extra-Space-Around-the-Web-Part-In-SharePoint-2013

Les listes d’éléments et le seuil d’affichage

Lisez la première partie de cette série: Les grandes listes et le seuil d’affichage

Comme d’habitude, je remercie https://camerondwyer.wordpress.com/2014/05/09/sharepoint-powershell-how-to-create-sharepoint-list-items-in-root-and-in-folders-for-loadperformance-testing/

J’ajoute 10000 éléments dans une liste personnalisée avec un seuil d’affichage de 5000.

Eh ben, l’utilisateur régulier n’a pas de message de limite d’affichage.

Tentative d’explication: Par défaut, l’affichage Tous les éléments (allitems) trie par ordre d’ID. Et par défaut la colonne ID est indexée. Le tri sur ID ne fonctionne pas pour une bibliothèque parce qu’une bibliothèque est triée par Nom du fichier par défaut.

Si on créé un affichage différent comme groupé ou filtré ou trié sur plus de 5000 éléments alors le message « Impossible d’effectuer le rendu de cet affichage… ».

Le comportement des colonnes indexées de type choix, recherche et métadonnées gérées est consistant avec les bibliothèques.

https://ktnnsharepoint.wordpress.com/2014/06/13/colonnes-indexees-seuil-affichage/

Un affichage filtré sur une colonne de métadonnée gérée qui donne moins de 5000 éléments (ex. Rouge) affiche ‘Impossible d’effectuer le rendu de cet affichage… ». Voir https://ktnnsharepoint.wordpress.com/2015/12/01/indexer-colonne-metadonnee-geree-recherche/