Modifier les valeurs de colonnes de tous les fichers d'une liste
-
vendredi 25 novembre 2011 14:23
Bonjour,
Ayant commencé à uploader (beaucoup) de fichiers dans différentes listes sharepoint avant d'avoir configuré les valeurs de colonnes par défaut de ces listes, je me suis tourné vers une solution de script powershell pour appliquer ces différentes colonnes aux fichiers déjà existants.
Le but étant de donner un site en paramêtre au script pour que celui-ci :
- Liste les différentes listes
- Stocke les valeurs de colonnes par défaut de la liste dans un tableau temporaire
- Liste les différents fichiers de la liste
- Si une valeur de colonne est vide, la valeur par défaut (donc de la liste) est appliquée
Le problème est le suivant :
Lorsque les champs par défaut sont modifié par un autre script ça fonctionne, alors que quand ceux-si sont modifiés manuellement dans les paramètres de la liste ce script ne retourne aucune valeur par défaut...
Le script :
function Get-SPSite([string]$url) {
New-Object Microsoft.SharePoint.SPSite($url)
}
function Get-SPWeb([string]$url) {
$SPSite = Get-SPSite $url
return $SPSite.OpenWeb()
$SPSite.Dispose()
}
#site web
$web = Get-SPWeb -url $completeUrl
#pour chaque liste du site web
foreach($list in $web.Lists){
$ColonnesParDefaut = @{}
#pour chaque champ de chaque liste
foreach($field in $list.Fields){
#tableau 'ColonnesParDefaut' incrémenté
$ColonnesParDefaut.add($field.Title, $field.DefaultValue)
}
#pour chaque fichier de chaque liste
foreach($item in $list.Items){
#pour chaque propriété de chaque fichier
foreach($key in $item.properties.keys){
#si propriété vide prend la valeur de colonne par défaut
if($item.properties[$key] -eq ""){
$item.properties[$key] = $ColonnesParDefaut[$key]
}
}
$item.update()
}
$list.update()
}
- Modifié JimmyKay mardi 29 novembre 2011 15:17
- Déplacé Hengzhe Li mardi 21 février 2012 05:28 merge forum (Origine :Développement Sharepoint 2010)
Réponses
-
mardi 3 janvier 2012 11:48
Je ne reproduit pas votre problème :(
J'ai crée une liste custom, j'ai ajouté quelques éléments puis manuellement (via l'interface web list settings ) j'ai ajouté une colonne avec une valeur par défaut.
Quand j'utilise le script powershell suivant (inspiré du votre) je récupère bien la valeur par défaut :
function Get-SPSite([string]$url) { return New-Object Microsoft.SharePoint.SPSite($url) } function Get-SPWeb([string]$url) { $SPSite = Get-SPSite $url return $SPSite.OpenWeb() $SPSite.Dispose() } $web = Get-SPWeb -url http://sp2010Paslatek/ $list = $web.Lists["testDefaultValues"] foreach($field in $list.Fields) { write-host "Field " $field.Title " had default value : " $field.DefaultValue }
- Modifié lionel limozinMVP mardi 3 janvier 2012 11:49
- Marqué comme réponse Ciprian DuduialaMicrosoft Contingent Staff, Owner lundi 16 janvier 2012 15:36
Toutes les réponses
-
vendredi 2 décembre 2011 13:36UP !!
-
mardi 6 décembre 2011 15:01Bonjour En fait je ne comprends pas bien le problème. Vous parlez d'un autre script, mais vous n'indiquez pas ce qu'il fait... Si je comprends bien, c'est la premiere partie de votre script qui pose problème, là où vous tentez de recupérer la valeur par defaut d'un spfield pour ensuite l'appliquer à tous les items. Si vous avez mis à jour les paramètres de votre liste manuellement pour dire "sur telle colonne, j'ai telle valeur par défaut" alors la recupération par script de cette valeur ne fonctionne pas. Par contre si vous utilisez un script pour faire cette modification des paramètres de votre liste, alors le script (le second) fonctionne. J'ai bien compris ? :)
-
mardi 6 décembre 2011 20:53
Je ne suis surement pas très clair ^^
Je veux dire par là que quand la valeur par défaut est settée via $web.list[$liste].field[$colonne].defaultvalue elle peut être gettée de la même manière.Alors que quand elle est modifiée manuellement (paramètres de la liste), $web.list[$list].field[$column].defaultvalue est VIDE.
-
mardi 3 janvier 2012 11:48
Je ne reproduit pas votre problème :(
J'ai crée une liste custom, j'ai ajouté quelques éléments puis manuellement (via l'interface web list settings ) j'ai ajouté une colonne avec une valeur par défaut.
Quand j'utilise le script powershell suivant (inspiré du votre) je récupère bien la valeur par défaut :
function Get-SPSite([string]$url) { return New-Object Microsoft.SharePoint.SPSite($url) } function Get-SPWeb([string]$url) { $SPSite = Get-SPSite $url return $SPSite.OpenWeb() $SPSite.Dispose() } $web = Get-SPWeb -url http://sp2010Paslatek/ $list = $web.Lists["testDefaultValues"] foreach($field in $list.Fields) { write-host "Field " $field.Title " had default value : " $field.DefaultValue }
- Modifié lionel limozinMVP mardi 3 janvier 2012 11:49
- Marqué comme réponse Ciprian DuduialaMicrosoft Contingent Staff, Owner lundi 16 janvier 2012 15:36
-
mercredi 11 janvier 2012 10:39Modérateur
Bonjour,
Avez-vous résolu votre problème ?
Si oui, pouvez-vous indiquer si le message de Lionel a répondu à votre question s'il vous plaît ?
Sébastien PICAMELOT - http://blogs.developpeur.org/gribouillon/
-
mercredi 8 février 2012 12:43
Excusez-moi, ça fait un moment que je n'étais pas revenu sur ce forum.
Le problème est maintenant résolu, merci pour votre aide.

