SSD: el síndrome de la Sharepoint dependencia

Sharepoint me proporciona seguridad y me hace sentir más fuerte. Las 10 cosas que más me gustan de Sharepoint.

10 puntos para entender a Project Server 2010

Microsoft Project es quizá la herramienta de gestión de proyectos más conocida y utilizada por los líderes de proyectos...

Diseño Gráfico en SharePoint

Serie de artìculos que nos ayudan a incorporar diseño gráfico en las implementaciones de SharePoint...

Revista CompartiMOSS

Artículos publicados en la revista especializada en SharePoint: CompartiMOSS.

Contacto

Enviame un correo :-)

miércoles, 22 de abril de 2015

¿Cómo crear una lista en SharePoint con C#?

En este post veremos cómo:
  • Crear una lista
  • Crearle un campo de texto, un campo URL y un campo calculado
  • Ajustar el campo título
  • Ajustas la vista predeterminada (Requiere post anterior)
  • Cargar los primeros ítems
Qué les sea útil!

try
{
    SPSite oSiteCollection = SPContext.Current.Site;

    // Nueva lista de Configuración
    SPList listaProyectoManual = oSiteCollection.RootWeb.Lists.TryGetList("Manual");
    if (listaProyectoManual == null)
    {
        // Nueva lista
        SPListCollection listas = oSiteCollection.RootWeb.Lists;
        listas.Add("Manual", "Conversión de porcentaje a número en proyectos manuales", SPListTemplateType.GenericList);
        contenido.InnerHtml += "<span style='color: green'>Lista de configuración de Proyecto Manuales creada</span><br>";

        // Campos
        SPList listaManual = oSiteCollection.RootWeb.Lists["Manual"];
        listaManual.Fields.Add("Color", SPFieldType.Choice, true);
        SPFieldChoice color = listaManual.Fields["Color"] as SPFieldChoice;
        color.Choices.Add("Verde");
        color.Choices.Add("Amarillo");
        color.Choices.Add("Rojo");
        color.Update();
        listaManual.Fields.Add("Valor1", SPFieldType.Number, true);
        listaManual.Fields.Add("Valor2", SPFieldType.Number, true);
        listaManual.Fields.Add("Valor3", SPFieldType.Number, false);
        contenido.InnerHtml += "<span style='color: green'>Columnas agregadas</span><br>";

        // Campo calculado
        string formulaAmigable = listaManual.Fields.Add("Formula", SPFieldType.Calculated, false);
        SPFieldCalculated formulaAmigableCF = listaManual.Fields["Formula"] as SPFieldCalculated;
        formulaAmigableCF.Formula = "=IF(Color<>\"Rojo\";\"(\"&Color&\") = \"&Valor1&\" + \"&Valor2&\" x (P - \"&Valor3&\")\";\"(\"&Color&\") = \"&Valor1&\" + P / \"&Valor2)";
        formulaAmigableCF.OutputType = SPFieldType.Text;
        formulaAmigableCF.Update();
        contenido.InnerHtml += "<span style='color: green'>Campo calculado creado</span><br>";
                            
        // Ajustes al título
        listaManual.Fields["Título"].Required = false;
        listaManual.Fields["Título"].Hidden = true;
        listaManual.Fields["Título"].Update();
        contenido.InnerHtml += "<span style='color: green'>Título ajustado</span><br>";

        // Vista default
        SPView vistaManual = listaManual.DefaultView;
        vistaManual.ViewFields.DeleteAll();
        vistaManual.ViewFields.Add("Edit");
        vistaManual.ViewFields.Add("Formula");
        vistaManual.Query = "<OrderBy><FieldRef Name=\"ID\"/></OrderBy>";
        vistaManual.Update();
        SetToolbarType(vistaManual, "None");
        contenido.InnerHtml += "<span style='color: green'>Vista ajustada</span><br>";

        // Crear ítems
        SPListItem item1 = listaManual.Items.Add();
        item1["Color"] = "Verde";
        item1["Valor1"] = 2;
        item1["Valor2"] = 10;
        item1["Valor3"] = 0.9;
        item1.Update();
        SPListItem item2 = listaManual.Items.Add();
        item2["Color"] = "Amarillo";
        item2["Valor1"] = 1.5;
        item2["Valor2"] = 2.5;
        item2["Valor3"] = 0.7;
        item2.Update();
        SPListItem item3 = listaManual.Items.Add();
        item3["Color"] = "Rojo";
        item3["Valor1"] = 1;
        item3["Valor2"] = 1.4;
        item3.Update();
        contenido.InnerHtml += "<span style='color: green'>Fórmula creada</span><br>";

    }
    else
    {
        contenido.InnerHtml += "<span style='color: blue'>Ya existe la lista de configuración de Proyecto Manuales</span><br>";
    }
}
catch (Exception error)
{
       contenido.InnerHtml += "<span style='color: red'>Error: " + error + "</span><br>";
}

martes, 21 de abril de 2015

¿Cómo anular la barra de herramientas a la vista predeterminada de una lista en SharePoint con C#?

SPView wpVista = oWebsite.Lists["Charter"].DefaultView;
SetToolbarType(wpVista, "None");
wpVista.Update();

La función SetToolbarType la pueden obtener de este post:

Dejo el código de ese post de Jalil:

private static void SetToolbarType(SPView spView, string toolBarType)
{
    spView.GetType().InvokeMember(
"EnsureFullBlownXmlDocument",
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
    null, spView, null, System.Globalization.CultureInfo.CurrentCulture);
    PropertyInfo nodeProp = spView.GetType().GetProperty("Node",
    BindingFlags.NonPublic | BindingFlags.Instance);
    XmlNode node = nodeProp.GetValue(spView, nullas XmlNode;
    XmlNode toolbarNode = node.SelectSingleNode("Toolbar");
    if (toolbarNode != null)
    {
        toolbarNode.Attributes[
"Type"].Value = toolBarType;
        // If the toolbartype is Freeform (i.e. Summary Toolbar) then we need to manually 
        // add some CAML to get it to work.
        if (String.Compare(toolBarType, "Freeform"true, System.Globalization.CultureInfo.InvariantCulture) == 0)
        {
            string newItemString = "";
            XmlAttribute positionNode = toolbarNode.OwnerDocument.CreateAttribute("Position");
            positionNode.Value = 
"After";
            toolbarNode.Attributes.Append(positionNode);
            switch (spView.ParentList.BaseTemplate)
            {
                case SPListTemplateType.Announcements:
                    newItemString = 
"announcement";
                    break;
                case SPListTemplateType.Events:
                    newItemString = 
"event";
                    break;
                case SPListTemplateType.Tasks:
                    newItemString = 
"task";
                    break;
                case SPListTemplateType.DiscussionBoard:
                    newItemString = 
"discussion";
                    break;
                case SPListTemplateType.Links:
                    newItemString = 
"link";
                    break;
                case SPListTemplateType.GenericList:
                    newItemString = 
"item";
                    break;
                case SPListTemplateType.DocumentLibrary:
                    newItemString = 
"document";
                    break;
                default:
                    newItemString = 
"item";
                    break;
            }
            if (spView.ParentList.BaseType == SPBaseType.DocumentLibrary)
            {
                newItemString = 
"document";
            }
            // Add the CAML
            toolbarNode.InnerXml = @"<IfHasRights><RightsChoices><RightsGroup PermAddListItems=""required"" /></RightsChoices><Then><HTML><![CDATA[ <table width=100% cellpadding=0 cellspacing=0 border=0 > <tr> <td colspan=""2"" class=""ms-partline""><IMG src=""/_layouts/images/blank.gif"" width=1 height=1 alt=""""></td> </tr> <tr> <td class=""ms-addnew"" style=""padding-bottom: 3px""> <img src=""/_layouts/images/rect.gif"" alt="""">&nbsp;<a class=""ms-addnew"" ID=""idAddNewItem"" href=""]]></HTML><URL Cmd=""New"" /><HTML><![CDATA["" ONCLICK=""javascript:NewItem(']]></HTML><URL Cmd=""New"" /><HTML><![CDATA[', true);javascript:return false;"" target=""_self"">]]></HTML><HTML>Add new "+ newItemString + @"</HTML><HTML><![CDATA[</a> </td> </tr> <tr><td><IMG src=""/_layouts/images/blank.gif"" width=1 height=5 alt=""""></td></tr> </table>]]></HTML></Then></IfHasRights>";
        }
        spView.Update();
}

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>";
}

viernes, 17 de abril de 2015

¿Cómo cambiar un campo en una vista y ordenarlo en una posición en SharePoint con C#?

SPList listaGov = oWebsite.Lists["Hitos"];
SPView view = listaGov.Views["Carga"];
if (view.ViewFields.Exists("Responsable0"))
  contenido.InnerHtml += "Existe";
else
{
  view.ViewFields.Add("Responsable0"); // Nuevo campo
  if (view.ViewFields.Exists("Responsable"))
    view.ViewFields.Delete("Responsable"); // Elimino campo viejo
  view.ViewFields.MoveFieldTo("Responsable0", 6); // Ordeno el campo
  view.Update();
  contenido.InnerHtml += "Modificado";
}

¿Cómo modificar una columna de sitio en SharePoint con C#?

SPSite sitio = SPContext.Current.Site;
SPFieldMultiLineText columnaSitio = (SPFieldMultiLineText)sitio.RootWeb.Fields.GetFieldByInternalName("columna");
columnaSitio.NumberOfLines = 10;
columnaSitio.PushChangesToLists = true;
columnaSitio.Update();
 

sábado, 11 de abril de 2015

¿Cómo agregar un campo a la vista predeterminada de una lista en SharePoint con C#?

try
{
  SPList listaGov = oWebsite.Lists["Governance"];
  SPView view = listaGov.DefaultView;
  if (view.ViewFields.Exists("Responsabilidad"))
    contenido.InnerHtml += "Ya existe";
  else 
  {
    oWebsite.AllowUnsafeUpdates = true;
    view.ViewFields.Add("Responsabilidad");
    view.Update();
    oWebsite.AllowUnsafeUpdates = false;
    contenido.InnerHtml += "Vista default actualizada";
  }
}
catch (Exception error)
{
  contenido.InnerHtml += "Error: " + error;
}


miércoles, 11 de febrero de 2015

No tiene permiso para abrir este sitio web en SharePoint Designer

Descripción del error

Al abrir SharePoint Designer:

"No tiene permiso para abrir este sitio web en SharePoint Designer"

o

"You do not have permission to open this Web site in SharePoint Designer"



Solución

En mi caso, el problema era que el sitio estaba bloqueado, quizá por una falla en un backup. Con STSADM se puede verificar el estado y luego cambiarlo:

stsadm.exe -o getsitelock -url http://blabla

<SiteLock Lock="readonly" />

stsadm.exe -o setsitelock -url http://blabla -lock  none

Operation completed successfully.

stsadm.exe -o getsitelock -url http://blabla

<SiteLock Lock="none" />

Notas

Tengan en cuenta que las causas pueden ser otras. Les recomiendo este link:


Hasta la próxima!

miércoles, 4 de febrero de 2015

Backup rápido y granulado de SharePoint

Interesante herramienta de Codeplex para hacer copias de seguridad mientras desarrollamos. Varias opciones de configuración y posibilidad de seleccionar exactamente lo que queremos respaldar:



martes, 6 de enero de 2015

VMware Player - Error while powering on: Internal error.

Detalle del error

¿Alguna vez se encontraron con este error al tratar de levantar una máquina virtual? -> "VMware Pltaer - Error while powering on: Internal error."


Solución

Dentro de los servicios de Windows, busquen el servicio "VMware Authorization Service" y hagan click en "START".


Todo resuelto!