martes, 16 de agosto de 2016

Documentación sobre las base de datos de SharePoint y Ambites de Recuperación en Caso de desastres en Azure

Me ha preguntado donde pueden encontrar información de lo que hace cada base de datos de SharePoint y para que sirven.   Bueno buscando otros temas encontré el siguiente enlace de Microsoft que responderá esa solicitud.


En la actualidad SharePoint esta migrándose ambientes virtuales en la nube con Azure por lo que conocer sobre temas de DR o Recuperación de Datos y Alta Disponibilidad es un tema importante.


Pensar estos ambientes en casa es extremadamente costosos, es una buena posibilidad tener un ambiente por lo menos de DR listo en la nube en caso de desastres por lo que los invito a que investiguen los costos de una granja para DR que puedes mantener apagada y solo la enciendes para pruebas de aplicación de Parches o pruebas de desastres, no es tan difícil ni tan costos como si pensáramos en invertir en fierros costosos solo para tener un ambiente  en caso de desastre.

Cuatro pasos para crear el ambiente de Recuperación de Datos de una granja de SharePoint son:

2) Establece una VPN Sitio a Sitio con tu red local desde Azure
3) Crea las VMs en Azure que desees replicar en Azure con la configuración similar a tu ambiente local
4) Establece un RPO y un RTO y así define el procedimiento para recuperación de tu granja de SharePoint en Azure

Bueno esto es todo por el momento continuaré escribiendo sobre este tema más adelante.

SharePoint4Fun!,

Juan Manuel Herrera

miércoles, 20 de julio de 2016

Error Attempted to perform an unauthorized operation al intentar obtener el nombre de un grupo de SharePoint 2010

Este error da porque se esta ejecutando una operación no autorizada y a pesar que utilizamos el método RunWithElevatedPrivileges de la clase SPSecurity ya que  invocamos la propiedad RoleAssigments de la biblioteca.  Este código esta corriendo sobre un EventReceiver a través de la clase SPItemEventReceiver que tiene sus peculiaridades a comparación del desarrollo de elementos Web en SharePoint.
 
 
 
Veamos el siguiente código:
 
 
 
 
Fue reemplazado por el siguiente código:
 
 

 
Aunque el código no reemplaza totalmente la lógica anterior si obtiene de forma directa el nombre del grupo que en el caso de la solución aplicaba efectivamente lo que se deseaba.
 
Lo que se hizo en el código es obtener los grupos del usuario actual a los cuales pertenece y que tiene la palabra lector. Que era fundamentalmente lo que se requería en la aplicación.
 
Así que ojo no den por sentado cuando utilizan SPSecurity.RunWithPriviliges(); que todo se ejecuta con el usuario administrador dentro del código primordialmente en un entorno como El EventReceiver.
 
 Así que Code4Fun!,
 
Juan Manuel Herrera Ocheita
 

jueves, 30 de junio de 2016

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Studio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita 

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Stuidio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita 

[RETURN TO BASICS] Modificando en un solo lugar el codigo a través de la asignación de variables

La refactorización (del inglés refactoring) es una técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo.  (Extraído de wikipedia)

Esta técnica establece la forma de realizar cambios que mejoran a lo interno el código sin afectar su comportamiento externo, con el objetivo que el código sea mas fácil de cambiar y entender.

Este código está escrito en C# y es una solución de granja de SharePoint.

A continuación un segmento de código que evaluaremos en este caso:

 public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados);
            valorRetornado = _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;

            return valorRetornado.Valor;

        }

A primera vista podríamos valorar que no requiere ninguna mejora y que lo que hace básicamente es obtener un valor y validar si es nulo crear este valor para luego retornarlo.  Pero cuadno el código se repite hay una oportunidad de mejora siempre dentro del código.

Si observamos detenidamente hay una referencia que se repite 3 veces y es la siguiente:

_configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados

Y si por algún motivo necesitamos cambiar esta referencia tendriamos que modificar 3 líneas de código.  Pero el número de veces hacerlo no esta tan grande, pero el error si puede suceder si no cambiamos las 3.  

Entonces vez de cambiarla 3 veces podemos asignarla a una variable y luego reemplazar esta variable donde hace referencia por lo que si la referencia cambia solo la cambiamos una vez de la siguiente forma:

public string ObtenerLeyendaMaterialEstudioDerechosReservados()
        {
            var leyenda _configuracionAplicacion.LeyendaMaterialEstudioDerechosReservados;
            var valorRetornado = _configuracionRepositorio.ObtenerConfiguracionPorId(leyenda);

            if (valorRetornado != null) return valorRetornado.Valor;
            _configuracionRepositorio.CrearLlave(leyenda);
            valorRetornado = leyenda;

            return valorRetornado.Valor;

        }

Y eso es todo amigos, por esta vez.  No solo es bueno tener buenas herramientas como Visual Stuidio y componentes de terceros como RSharper sino importante que escribamos código legible y que sea fácil de mantener.

Code4Fun!,

Juan Manuel Herrera Ocheita 

[RETURN TO BASICS]Sabias que Error List en VS te sirve para validar el codigo sin necesidad de compliar

Como  desarrollador y en especial en SharePoint que no es un ambiente muy amigable sino complejo lleno de experiencias y sin sabores iniciaré una serie de post sobre buenas prácticas de programación  y el uso de funcionalidades en Visual Studio que pasamos a veces desapercibidas.  También veremos  formas de resolver en código los problemas que se encuentran en el día a día del desarrollo de soluciones la cual lo he denominado [RETURN TO BASICS] .

El siguiente ejemplo esta escrito en C# y es una solución de granaja en SharePoint.

Visual Studio tiene una ventana llamada Error List y es muy util cuando modificas código donde hay un error sin necesidad de compliar nuevamente.

Miremos esta imagen de abajo

En esta imagen nos muestra el error solo tenemos que hacer clic sobre la fila del error y nos llevará al código donde esta el problema.

Y lo que me indica el error es que no hay un argumento que corresponda al parámetro formal requerido y efectivamente modifique el método para que recibiera un nuevo parámetro y en la llamada no lo estoy colocando entonces automáticamente me lleva al código donde esta el método y allí adiciono el parámetro de la siguiente manera:

var materialEstudioDerechosReservados = ConfiguracionServicio.ObtenerLeyendaMaterialEstudioDerechosReservados();

_vista.MostrarMaterialesEstudio(requisitos.DocumentosBibliotecaMaterialesEstudio, materialEstudioDerechosReservados);

Por qué declarar una variable y luego pasarla como parámetro en vez de invocar el método.  Porque debemos de pensar en cuando haya un error es más fácil ubicar lo de esta forma.  Entre más desacoplemos el código mejor para escribir pruebas unitarias y facilitar el hallazgo el error.

Si vemos la lista de errores de Visual Studio veremos que ya desapareció el error y no tuve que compliar de nuevo estos son segundos valiosos que nos ahorramos por cada cambio que realizamos.



Eso es todo amigos, en este post demostré el uso de la ventana Error List de Visual Studio la cual nos ayuda a resolver los errores que podamos encontrar cuando modificamos el código sin necesidad de compilar el proyecto o la solución.

Code4Fun!,

Juan Manuel Herrera Ocheita

jueves, 23 de junio de 2016

La version destino del sitio de SharePoint es menor a la soportada por la aplicación SharePoint 2013 local o en nuestras instalaciones (On Premises)

Escenario:

Un App para SharePoint o Add-in como lo renombro Microsoft ahora que deseamos probar en un servidor de desarrollo. El App de hecho esta subida en el Seller Dashboard de Microsoft para Office pero al realizar desde Visual Studio 2015 el deployment ahora nos muestra el siguiente mensaje:


The target version of the SharePoint site is 15.0.4569.1000, which is lower than the minimum supported SharePoint version of the app

Esto es porque en el manifiesto del app es decir el archivo AppManifest.xml esta indicada la versión mínima requerida de SharePoint para ejectuar el App.

 
 Y si abrimos el archivo xml en VS nos muestra el requerimiento mínimo.
 

Lo que debemos de hacer es cambiar el número de 16 a 15 para probarlo en nuestro servidor de desarrollo.


 Y listo el app se implementa exitosamente.



Eso es todo amigos!.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita