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 :-)

jueves, 4 de junio de 2015

Project 2013 - Columna indicador de estado

La columna indicador de estado es una columna estándar que no requiere una fórmula como un campo personalizado. Según la ayuda de Microsoft, puede tomar estos valores:
  • Si la tarea está completada, el campo Indicador de estado contendrá una marca de verificación.
  • Si la tarea se va a realizar en el futuro, el campo Indicador de estado estará en blanco.
  • Si la tarea va según lo programado, el campo Indicador de estado contiene un reloj con una marca de verificación.
  • Si la tarea está retrasada, el campo Indicador de estado contiene un reloj con un signo de exclamación.

Y visualmente se ve como en esta foto:




domingo, 24 de mayo de 2015

¿Cómo habilitar versiones en una lista en SharePoint con C#?

SPList listaKPIs = oWebsite.Lists.TryGetList("KPIs");
if (listaKPIs != null)
{
  if (!listaKPIs.EnableVersioning)
  {
    listaKPIs.EnableVersioning = true;
    listaKPIs.Update();
  }
}

lunes, 18 de mayo de 2015

¿Cómo ocultar un campo en un tipo de contenido en SharePoint con C#?

if (listaInformes.ContentTypes["Elemento"].FieldLinks["Porcentual_Portfolio"].Hidden)
  contenido.InnerHtml += "<span style='color: blue'>Informes ya tiene porcentual OCULTO</span><br>";
else
{
  listaInformes.ContentTypes["Elemento"].FieldLinks["Porcentual_Portfolio"].Hidden = true;
  listaInformes.ContentTypes["Elemento"].Update();
  contenido.InnerHtml += "<span style='color: green'>Porcentual OCULTO en Informes</span><br>";
}

lunes, 27 de abril de 2015

¿Cómo crear un tipo de contenido en SharePoint con C#?

public string nuevoTipoContenido(SPSite sitio, string nombre)
{
  SPContentType viejoTC = sitio.RootWeb.ContentTypes[nombre];
  if (viejoTC == null)
  {
    SPContentType nuevoTC = new SPContentType(sitio.RootWeb.ContentTypes["Elemento"], sitio.RootWeb.ContentTypes, nombre);
    sitio.RootWeb.ContentTypes.Add(nuevoTC);
    nuevoTC.Group = "PMO Procesos";
    nuevoTC.Update();
    return "<span style='color: green'>Tipo de contenido " + nombre + " creado.</span><br>";
  }
  else
  {
    return "<span style='color: blue'>Tipo de contenido " + nombre + " ya existente.</span><br>";
  }
}

¿Cómo agregar nodos en el Inicio Rápido / Top Link Bar en SharePoint con C#?

En este breve post mostramos como agregar programáticamente nodos en la barra de vínculos superior y/o en el inicio rápido de SharePoint:

contenido.InnerHtml += agregarNodoNavegacion(oWebsite, oWebsite.Navigation.QuickLaunch, "Charter", "Macroplan", "javascript: window.location.href((_spPageContextInfo.webServerRelativeUrl+'/lists/macroplan').replace('//','/'));", true);
                                    
contenido.InnerHtml += agregarNodoNavegacion(oWebsite, oWebsite.Navigation.TopNavigationBar, "Charter", "Macroplan", "javascript: window.location.href((_spPageContextInfo.webServerRelativeUrl+'/lists/macroplan').replace('//','/'));", true);


public string agregarNodoNavegacion(SPWeb web, SPNavigationNodeCollection menu, string previo, string nuevoNombre, string nuevoURL, bool  nuevoExterno)
{
            
            bool existeNuevo = false;
            int indicePrevio = 0;
            int indice = 0;
            
            foreach (SPNavigationNode itemMenu in menu)
            {
                if (itemMenu.Title == nuevoNombre) existeNuevo = true;
                if (itemMenu.Title == previo) indicePrevio = indice;
                indice++;
            }
            
            if (!existeNuevo && indicePrevio != 0)
            {
                SPNavigationNode nuevoNavigation = new SPNavigationNode(nuevoNombre, nuevoURL, nuevoExterno);
                menu.Add(nuevoNavigation, menu[indicePrevio]);
                return "<span style='color: green'>" + web.Title + ": " + nuevoNombre + " agregado en Navegación</span><br>";
            }
            else
                return "<span style='color: blue'>" + web.Title + ": Ya existe " + nuevoNombre + " en Navegación o no existe " + previo + "</span><br>";
}

viernes, 24 de abril de 2015

¿Cómo cambiar el display name de una columna de lista en SharePoint con C#?

SPList listaProyectos = oSiteCollection.RootWeb.Lists["Proyectos"];
SPField suplentes = listaProyectos.Fields.GetFieldByInternalName("Suplentes");
if (suplentes.Title != "Suplentes")
  {
  contenido.InnerHtml += "No se renombra.";
}
else
{
  suplentes.Title = "Otros referentes";
  suplentes.Update();
  contenido.InnerHtml += "Renombrada";
}

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

if (!oSiteCollection.RootWeb.Fields.ContainsField("Brief"))
{
  oSiteCollection.RootWeb.Fields.Add("Brief", SPFieldType.Note, false);
  SPFieldMultiLineText brief = (SPFieldMultiLineText)oSiteCollection.RootWeb.Fields.GetFieldByInternalName("Brief");
  brief.NumberOfLines = 12;
  brief.RichText = false;
  brief.Group = "PMO Procesos";
  brief.Update();
  contenido.InnerHtml += "OK";
}
else
{
  contenido.InnerHtml += "Ya existente";
}


jueves, 23 de abril de 2015

¿Cómo hacer que un campo de tipo persona acepte valores múltiples en SharePoint con C#?

// Hacer multivaluado un campo persona
public string alterarCampoPersona(SPSite sitio, string listaP, string columnaP)
{
            SPList lista = sitio.RootWeb.Lists[listaP];
            SPFieldUser columna = (SPFieldUser)lista.Fields[columnaP];

            if (columna.AllowMultipleValues)
                return "Ya es";
            else
            {
                columna.AllowMultipleValues = true;
                columna.Update();
                return "OK";
            }
}

¿Cómo agregar una validación de lista en SharePoint con C#?

El código

SPList listaManual = oSiteCollection.RootWeb.Lists["Manual"];
listaManual.ValidationFormula = "=OR(AND(Valor3=\"\";Color=\"Rojo\");AND(Valor3<>\"\";Color<>\"Rojo\"))";

listaManual.ValidationMessage = "Valor3 es obligatorio para Verde y Amarillo y debe ser nulo para Rojo.";
listaManual.Update();


El resultado




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