domingo, 19 de abril de 2015

¿Cómo crear, desactivar y eliminar plantillas de sitio en SharePoint con C#?

En este pequeño código vamos a mostrar como trabajar programáticamente desde c# con plantillas de sitio en SharePoint 2010 con el objetivo de
  • Crearlas
  • Desactivarlas
  • Eliminarlas
Para ello trabajaremos tanto con soluciones (SPUserSolution) como con el catálogo de soluciones (SPList). Espero les sea útil:

public static string nuevoTemplateProyecto(SPSite sitio)
{
    string prefijo = "Sitio de proyecto";
    string resultado = "";
            
    // Tabla con las soluciones a eliminar
    DataTable dtSoluciones = new DataTable();
    dtSoluciones.Columns.Add("ID", typeof(string));
    foreach (SPUserSolution solucion in sitio.RootWeb.Site.Solutions)
    {
        if (solucion.Name.StartsWith(prefijo))
            dtSoluciones.Rows.Add(solucion.SolutionId);
        else
            resultado += "<span style='color: blue'> Solución no desactivada: " + solucion.Name + "</span><br>";
    }

    // Desactivación de soluciones
    if (dtSoluciones != null) foreach (DataRow filaSolucion in dtSoluciones.Rows)
        {
            Guid solucionGuid = new Guid(filaSolucion["ID"].ToString());
            SPUserSolution solucion = sitio.RootWeb.Site.Solutions[solucionGuid];
            sitio.RootWeb.Site.Solutions.Remove(solucion);
            sitio.RootWeb.Update();
            resultado += "<span style='color: green'> Solución desactivada: " + solucion.Name + "</span><br>";
        }

    resultado += "<hr>";

    // Eliminación de soluciones
    SPList solucionesGaleria = sitio.RootWeb.Site.GetCatalog(SPListTemplateType.SolutionCatalog);
    SPListItemCollection solucionesItems = solucionesGaleria.Items;
    int totalSol = solucionesItems.Count -1;
    for (int i = totalSol; i >= 0; i--)
    {
        SPListItem solucionesItem = solucionesItems[i];
        string nombre = solucionesItem.Name.ToString();
        if (nombre.StartsWith(prefijo))
        {
            solucionesItem.Delete();
            resultado += "<span style='color: green'> Solución eliminada: " + nombre +"</span><br>";
        }
        else
            resultado += "<span style='color: blue'> Solución no eliminada / eliminada: " + nombre + "</span><br>";
    }

    resultado += "<hr>";

    // Nueva solución            
    string nombrePlantillaProyecto = prefijo + " v" + DateTime.Today.ToString("yyMMdd") + " b" + DateTime.Now.ToString("HHmmss"); ;
    SPWeb plantilla = SPContext.Current.Site.AllWebs["plantilla_proyecto"];
    plantilla.SaveAsTemplate(nombrePlantillaProyecto, nombrePlantillaProyecto, "", false);

    return resultado + "<span style='color: green'>" + nombrePlantillaProyecto + " -> PLANTILLA ALMACENADA.</span><br>";
}

0 comentarios:

Publicar un comentario