Un pò di tempo fa abbiamo visto com'è possibile muovere un sito SharePoint o alcuni dei suoi principali oggetti (liste, documenti, elementi, ecc..) da programma, utilizzando le API per la migrazione e il deployment dei contenuti esposte da SharePoint.
Le medesime operazioni di spostamento, come dovremmo sapere, è possibile effettuarle anche utilizzando le operazioni di backup e restore dell'utility STSADM, quelle presenti all'interno della Central Administration, quelle che potete invece trovare all'interno di SharePoint Designer oppure (ma solo se avete MOSS 2007 e le feature di publishing attivate a livello di site collection) tramite il tool di gestione del contenuto di SharePoint, il tool "Site manager" (che potete raggiungere selezionando "Site settings" - "Content and structure").

Ma, se vogliamo scrivere un'applicazione custom che effettui lo spostamento di un sito all'interno della stessa Site Collection, SharePoint ci mette a disposizione un'ulteriore tecnica molto più facile all'uso che viene chiamata "reparent" (che, devo dir verità, non so come si può tradurre in italiano :)
Tramite questa tecnica, possiamo spostare un sito SharePoint all'interno della stessa site collection senza effettuare alcun tipo di backup o restore.
Per utilizzarla, non dobbiamo far altro che inserire all'interno della nostra applicazione il seguente codice (una volta aggiunta la referenza alla libreria Microsoft.SharePoint.dll):

string oldUrl = "http://servername/DaSpostare/";

string newUrl = "Peppe/Spostato";
using (SPSite site = new SPSite(oldUrl))
using (SPWeb web = site.OpenWeb())
{
web.ServerRelativeUrl = newUrl;
web.Update();
}

In questo esempio, viene spostato il sito dall'indirizzo "http://servername/DaSpostare" all'indirizzo "http://servername/Peppe/Spostato".
Quindi, semplicemente modifcando il valore della proprietà "ServerRelativeUrl" di un oggetto di tipo SPWeb siamo in grado di muovere il sito all'interno della medesima Site Collection mantenendone intatte le proprietà, i permessi e i contenuti.
Chiaramente, il nuovo indirizzo assegnato al sito da spostare deve essere valido fino al nome del sito una volta spostato. Per esempio, se io voglio spostare il sito "http://servername/daspostare" all'indirizzo: "http://servername/sito/peppe/test", i siti "http://server/sito" e "http://server/sito/peppe" devono esistere !

La stessa tecnica, può essere utilizzata da riga di comando tramite l'utility STSADM in questo modo:

stsadm -o renameweb -url http://servername/daSpostare -newname Peppe


Che sposta il sito all'indirizzo "http://servername/Peppe".

Non male, eh ?