Ieri al .NET Campus, tra tutti gli altri amici e non, ho incontrato Giuliano, autore di un commento veramente utile ad uno dei miei precedenti post e che ringrazio tanto per avermi dato anche una prova live di quanto aveva già scritto.
Si parlava di come spostare un sito all'interno della medesima site colleciton SharePoint utilizzando l'utility a riga di comando STSADM o il modello ad oggetti di SharePoint stesso. Nel mio precedente post, avevo scritto in maniera un pò imprecisa l'operazione di "reparent" che può essere applicata ad un sito per permetterne lo spostamento in un'altra locazione della stessa site collection.
L'esempio che avevo scritto io era:

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();
}

Io l'avevo provato ed ero sicurissimo di quello che avevo scritto (per fortuna :), ma non avevo precisato una cosa.
Se provassimo, per esempio, a spostare un sito dall'indirizzo:

http://servername/Padre/Figlio

all'indirizzo:

http://servername/Figlio

Il codice sopra, pur non sollevando nessuna eccezione, non avrebbe eseguito alcuna operazione di "reparent" sul nostro sito, come invece noi ci aspettiamo.
Questo perchè il nuovo indirizzo deve essere "server-relative", quindi se volessi spostare un sito e metterlo direttamente sotto la root della site collection devo specificare lo "/" prima del nuovo indirizzo, altrimenti, specificando un nome senza percorso relativo, l'operazione di "reparent" viene fatta a partire dal sito corrente in giu.
Nell'esempio infatti, il sito "Figlio" viene spostato sempre sotto il sito "Padre" e NON sotto la root.
Per spostarlo sotto la root della nostra site collection, avrei dovuto scrivere:

string oldUrl = "http://servername/Padre/Figlio/";

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

Questa precisazione è davvero importante innanzitutto perchè di permette di capire come effettivamente funziona l'operazione di "recap" di SharePoint e poi perchè ci fa saltare all'occhio che questo è l'unico modo che abbiamo per spostare un sito da una qualsiasi locazione alla root di site collection, in quanto l'utlity STSADM invece non implementa la funzionalità di spostare un sito direttamente sotto la root della site collection.

Per fortuna ogni tanto c'è qualcuno che mi legge e mi corregge ;)