SharePoint 2010: Crear un sitio programáticamente

Escenario:

Supongamos que queremos crear sitios en SharePoint de manera programática, por ejemplo con un web part. En este caso, fue resuelto con un web part en el que se selecciona una plantilla (puede ser personalizada o de las predefinidas) y se establece un nombre de sitio.

 

Solución:

En primer lugar habrá que obtener la lista de plantillas tal y como describo en este otro artículo. De esta forma, con la plantilla seleccionada, un nombre y una descripción procederemos a crear el sitio.

Seguidamente, habrá que añadir el código al evento click del botón “Crear Proyecto”, donde tendremos que recoger los datos aportados en el Web Part para poder generar el sitio correspondiente.

Evento

protected void btnProjectCreate_Click(object sender, EventArgs e)
{
    try
    {
        CreateSite(txtProjectName.Text, txtProjectDesc.Text, "");
    }
    catch (Exception ex)
    {
        lblMessage.Text += ex.Message;
    }
}
 

En este caso, desde el evento únicamente realizo la llamada a un método que se encarga de crear el sitio.

 

Métodos

       public void CreateSite(string siteTitle, string description, string startDate)
        {
            string siteName = CreateShortSiteName(siteTitle);
 
            // Create SharePoint Customer Site
            using (SPWeb parentWeb = SPContext.Current.Web)
            {
                SPWebTemplateCollection templates = parentWeb.GetAvailableWebTemplates(LocaleId);
                SPWebTemplate siteTemplate = templates[cmbTemplates.SelectedValue];
 
                // If site with same name already exists, quit out
                if (!parentWeb.Webs.Names.Contains(siteName))
                {
                    // Create new site
                    SPWeb site = parentWeb.Webs.Add(siteName, siteTitle, description, siteTemplate.Lcid, siteTemplate, false, false);
                    lblMessage.Text = "Creado el sitio " + siteTitle + " en la dirección <a href="" + site.Url + "">" + site.Url + "</a>";
                    site.Navigation.UseShared = true;
                    parentWeb.Navigation.TopNavigationBar.AddAsLast(new SPNavigationNode(siteTitle, site.ServerRelativeUrl));
                    site.Update();
                }
            }
        }
 
        private string CreateShortSiteName(string siteTitle)
        {
            StringBuilder sb = new StringBuilder();
            foreach (char ch in siteTitle)
                if (char.IsLetterOrDigit(ch))
                    sb.Append(ch);
            return sb.ToString();
        }

 

Explicación:

  1. En primer lugar, establecemos un nombre válido para la URL del sitio mediante la función CreateShortSiteName y, en este caso, he elegido quedarme sólo con las letras y los números.
  2. Instanciamos el sitio padre donde alojaremos este nuevo sitio
  3. Obtenemos la lista de plantillas disponibles
  4. Obtenemos la plantilla seleccionada en el Web Part
  5. Comprobamos que no exista un sitio con el mismo nombre
  6. Añadimos el nuevo sitio a la colección de sitios del sitio padre con el nombre para la URL, el títuloy la descripción especificados en el Web Part, el lenguaje de la plantilla y la plantilla seleccionada.
  7. Establecemos un texto para mostrar que el sitio fue creado y la url de acceso al mismo
  8. Añadimos el sitio en el último lugar de la barra de navegación superior, tal y como describo en este artículo
  9. Actualizamos el sitio.

 

Resumen:

Con esto, habremos creado el sitio con el nombre, la descripción y la plantilla seleccionados en el Web Part.