Traitée Modifier les valeurs de colonnes de tous les fichers d'une liste

  • vendredi 25 novembre 2011 14:23
     
      A du code

    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
     
     Traitée A du code

    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 
    }
    

     


Toutes les réponses

  • vendredi 2 décembre 2011 13:36
     
     
    UP !!
  • mardi 6 décembre 2011 15:01
     
     
    Bonjour 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
     
     Traitée A du code

    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 
    }
    

     


  • mercredi 11 janvier 2012 10:39
    Modé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.