18 juin 2009

Activation de feature sur sous-sites Sharepoint

Un des donctionnalités majeure de Sharepoint est le déploiement de "feature" qui permet de créer de nouveaux composants (workflow, eventhandler, formulaire...).
Le problème est que si le déploiement se fait sans soucis, l'activation n'est pas aussi simple...
Pour les cas usuels, il faut utiliser la commande suivante:
stsadm -o activatefeature -filename "...\feature.xml" -url "myurl" -force

En effet, l'opération stsadm n'active le feature que pour le site précisé et non pour les sous-sites déjà créés sous cette collection de site!!!
Assez frustrant surtout si vous avez une centaine de sous-sites sur lesquels activer la fonctionnalité...
Le petit script suivant vous permet d'activer la fonctionnalité:

## Reference to SharePoint DLL
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
## Probable location of sharepoint STSADM utility program
$stsadm = "$env:programfiles\Common Files\Microsoft Shared\Web Server Extensions\12\BIN\STSADM.EXE"

function global:Activate-feature-onSite($feature, $url)
{$spsite=new-object Microsoft.SharePoint.SPSite($url);
for($i=0; $i -lt $spsite.AllWebs.Count;$i++)
{
$websiteurl= $spsite.AllWebs[$i].url;
$sResult = &stsadm -o activatefeature -name $feature -url $websiteurl -force

if(!($sResult -like "*Operation completed successfully*"))
{ Write-Host -ForegroundColor "red" -BackgroundColor "white" "Activation du feature : '$feature' sur le site '$websiteurl' ! `n $sResult"
}
}
$spsite.Dispose();
}

# to call
Activate-feature-onSite "feature" "url"


Vous avez juste à changer sur la dernière ligne le nom du feature et l'url de la collection de sites.
Il faut mettre ce script dans un fichier texte avec l'extension ".ps1" (powershell).
Puis l'exécuter par la commande :
powershell Set-ExecutionPolicy RemoteSigned
powershell ActiveFeature.ps1
Et le tour est joué...
Attention cependant à l'effet pervers: pour les eventhandlers déployé sur des types de listes particuliers, cela est à utiliser uniquement sur les sous-sites déja crée au moment de l'installation du feature.
Sinon vous risquez de vous retrouver avec 2 eventhandler à la place d'un seul (1 créé lors de l'activation par le scipt et l'autre créé lors de la création du sous-sites du fait de l'application du content-type).
Et du coup plein d'effets de bords!!!

Aucun commentaire:

Enregistrer un commentaire