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, 15 de junio de 2017

Validar que un campo fecha se encuentre entre hoy 4 meses futuros

Simplemente creamos una validación de columna como esta:

=AND(date1>TODAY();date1<(TODAY()+120))


lunes, 12 de junio de 2017

Método simple para hacer un campo obligatorio sólo en la edición - Alternativa 2

En un artículo anterior mostré cómo resolver este tema con una validación de lista


Otra opción es hacerlo con JSLink. El resultado es:



Les dejo el código:

(function () {
var overrideTest2Ctx = {};
overrideTest2Ctx.Templates = {};
overrideTest2Ctx.Templates.Fields = {
'test_x0020_2': { 'EditForm': hacerRequerido }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideTest2Ctx);
})();

function hacerRequerido(ctx) {

    var formCtx = SPClientTemplates.Utility.GetFormContextForCurrentField(ctx);
var validators = new SPClientForms.ClientValidation.ValidatorSet();
validators.RegisterValidator(new SPClientForms.ClientValidation.RequiredValidator());
formCtx.registerClientValidator(formCtx.fieldName, validators);
return SPFieldText_Edit(ctx);
}


Más información en:




viernes, 9 de junio de 2017

JSLink Ejemplo simple en un Formulario

Supongamos que queremos simplemente que una columna utilice color rojo tal como se ve en esta imagen:



Simplemente creamos el siguiente script JSLINK (haciendo especial hincapié en lo que resalté en negrita):

(function () {
var overrideCtx = {};
overrideCtx.Templates = {};
overrideCtx.Templates.Fields = {
'test_x0020_1': { 'DisplayForm': pintarDeRojo }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();

function pintarDeRojo(ctx) {

    var fieldVal = ctx.CurrentItem[ctx.CurrentFieldSchema.Name];
    var test1 = fieldVal.toString();

    var html = "<div style='color: red;'>" + test1 + "</div>";

    return html;
}

JSLink Ejemplo simple en una Vista

Supongamos que queremos simplemente que una columna utilice color rojo tal como se ve en esta imagen:


Simplemente creamos el siguiente script (haciendo especial hincapié en lo que resalté en negrita):

(function () {
var overrideCtx = {};
overrideCtx.Templates = {};
overrideCtx.Templates.Fields = {
'test_x0020_1': { 'View': pintarDeRojo }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();

function pintarDeRojo(ctx) {

    var fieldVal = ctx.CurrentItem[ctx.CurrentFieldSchema.Name];
    var test1 = fieldVal.toString();

    var html = "<div style='color: red;'>" + test1 + "</div>";

    return html;
}

Luego subimos el script en una librería:


Y finalmente editamos la webpart de la vista para que haga referencia al script:

Método simple para hacer un campo obligatorio sólo en la edición

Creamos una validación de lista que sólo se ejecute en la edición, no en el alta del ítem. Para ello comparamos la fecha de creación con la de modificación. Si son iguales, es el alta, sino la modificación:

Fórmula:

=OR(Creado=Modificado;AND(Creado<>Modificado;NOT(ISBLANK([test 1]))))

El ítem se crea sin valor en "Test 1"



Resultado:



Cuando intento modificarlo:


lunes, 3 de abril de 2017

¿Cómo cambiar permisos a una lista en SharePoint 2010 en C#?

Supongamos que necesitamos realizar lo siguiente en una lista:
  1. Quebrar la herencia
  2. Borrar los permisos
  3. Asignar al grupo "propietarios del sitio" con permisos de colaboración
  4. Borrar al usuario actual que se asignó en el paso 2 (para esto debemos asegurarnos de que sea administrador de la colección de sitios o esté dentro del grupo de propietarios)
Esta es una posible forma de hacerlo:

SPList listaE = oWebsite.Lists.TryGetList("Entregables");
listaE.BreakRoleInheritance(false);
SPGroup groupAdmin = listaE.ParentWeb.AssociatedOwnerGroup;
if (groupAdmin != null)
  {
  SPRoleAssignment roleAssignment = new SPRoleAssignment(groupAdmin);
  SPRoleDefinition roleDefinition = listaE.ParentWeb.RoleDefinitions.GetByType(SPRoleType.Contributor);
  roleAssignment.RoleDefinitionBindings.Add(roleDefinition);
  listaE.RoleAssignments.Add(roleAssignment);
  listaE.RoleAssignments.RemoveById(listaE.ParentWeb.CurrentUser.ID);
  listaE.Update();
  }

jueves, 13 de octubre de 2016

MVP Año 6 - Abriendo la caja ;-)


lunes, 3 de octubre de 2016

Sexto año como MVP :-)

martes, 27 de septiembre de 2016

Project Server 2016

Hola, este es un muy breve resumen de las novedades que nos trae Project Server 2016:

Lo que quedó obsoleto

  • Planes  de recurso
  • Mis tareas (sincronización con Exchange incluida)
  • PSI. Para nuevos desarrollos usar Project cliente Side Object Model. Tenemos adaptaciones para C#, Silverlight, Windows Phone, JavaScript y Rest.
Transcribo un ejemplo de CSOM en C# desde https://msdn.microsoft.com/library/office/microsoft.projectserver.client_di_pj14mref.aspx que nos ayudará a entender esta API:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ProjectServer.Client;

namespace ReadProjectList
{
    class Program
    {
        private const string pwaPath = "http://ServerName/PwaName/";    // Change the path for Project Web App.
        
        // Set the context for the Project Server CSOM.
        private static ProjectContext projContext;

        static void Main(string[] args)
        {
            projContext = new ProjectContext(pwaPath); 

            // Get the list of published projects in Project Web App.
            projContext.Load(projContext.Projects);
            projContext.ExecuteQuery();

            Console.WriteLine("\nProject ID : Project name : Created date");

            foreach (PublishedProject pubProj in projContext.Projects)
            {
                Console.WriteLine("\n\t{0}\n\t{1} : {2}", pubProj.Id.ToString(), pubProj.Name, 
                    pubProj.CreatedDate.ToString());
            }

            Console.Write("\nPress any key to exit: ");
            Console.ReadKey(false);
        }
    }
}

Lo nuevo en Project 2016 Cliente
Esto lo pueden consultar en https://blogs.office.com/2015/09/30/whats-new-in-project-2016/

Lo nuevo en Project 2016 Server


A continuación un breve resumen:
  • Compromiso de recursos (novedad también deProject Client 2016)
  • Instalación unificada con SharePoint. Ahora Project Server es un servicio. Requiere la versión enterprise de SharePoint
  • De alguna forma se unifican con SharePoint los requerimientos de hardware
  • Compatibilidad con Cliente 2013 y 2016
  • Ya no se requieren múltiples bases de datos cuando tenemos varias instancias de Project Server
  • Límites en campos personalizados (450)
  • Varios cambios en la vista de línea de tiempo, por ejemplo la posibilidad de tener varias
Pueden encontrar más información sobre Project Server en https://products.office.com/es/project/enterprise-project-server



lunes, 22 de agosto de 2016

¿Cómo eliminar columnas de una lista en SharePoint con C#?

// Eliminación de columnas
if (listaProyectos.Fields.ContainsField("Peso Budget"))
{
    listaProyectos.Fields["Peso Budget"].Delete();
    listaProyectos.Fields["Peso Issues"].Delete();
    listaProyectos.Fields["Peso Riesgos"].Delete();
    contenido.InnerHtml += "<span style='color: green'>Columnas de pesos eliminadas</span><br>";
}
else
    contenido.InnerHtml += "<span style='color: blue'>Columnas de pesos ya habìan sido eliminadas</span><br>";