Codepoint

by Trentia Consulting

Web essentials, indispensable para nuestro Visual Studio

Si trabajáis en entornos web y diseñáis con el entorno de Visual Studio, os habréis dado cuenta que el entorno no nos ayuda demasiado a la hora de realizar nuestras tareas de diseño. Y si nos empeñamos hacer compatible nuestro desarrollo con múltiples plataformas se nos complica mucho más el trabajo ya que hemos de estar comprobando por cada propiedad CSS la compatibilidad con los diferentes motores de navegación.

Para estas problemáticas, tenemos un extensión muy interesante para Visual Studio 2012 (también las hay disponibles para VS 2010) y que casi se va a convertir en imprescindible cuando vayamos a diseñar con VS. Se trata de Web Essentials para Visual Studio.

Esta extensión nos proporciona las siguientes funcionalidades:

TypeScript
Para quien no lo conozcáis, TypeScript es un superset tipado de JavaScript (typed superset) y es muy útil para implementar aplicaciones escalables en desarrollos JavaScript. Pues bien, con la extensión de VS en el momento de guardar el fichero X.ts, web essentials compila el fichero y genera el código JavaScript correspondiente.

Edición CSS

Con la aparición de CSS 3 tenemos multitud de propiedades específicas por cada navegador. Con la extensión instalada nos añade los tags –moz, –webkit, –s y –o automáticamente. Con el siguiente ejemplo veremos el resultado equivalente de border-radius para cada navegador. Cuando escribimos border-radius se generán automáticamente los equivalentes para cada navegador y los valores de las propiedades se modificarán automáticamente al resto cuando modifiquemos una de ellas.

image_thumb_1

Otra ayuda visual que disponemos es la de poder ver con un sólo golpe de vista la compatibilidad de todas las propiedades o la posibilidad de poder ver el color correspondiente de una color hexadecimal por ejemplo

image_thumb_2

image_thumb_3

Intellisense
Tenemos Intellisense para añadir regiones dentro del CSS

image_thumb_4

Intellisense para añadir fuentes personalizadas

image_thumb_5

Estas son sólo algunas de las funcionalidades que aporta Web essentials, os recomiendo seguir el siguiente enlace para que descubráis toda las posibilidades que os aporta esta extensión.

http://visualstudiogallery.msdn.microsoft.com/07d54d12-7133-4e15-becb-6f451ea3bea6

Enviar información entre métodos de acción (MVC)

Hay veces en las que necesitamos enviar información de un método de acción (ActionMethod) a otro, por ejemplo si queremos realizar una acción determinada y luego volver al método anterior.

Podemos almacenar la información necesaria en el objeto TempDataDictionary del controlador, antes de llamar al método RedirectToAction que nos redirigirá a la próxima acción. El valor de la propiedad TempData se almacena en el estado de la sesión, y cualquier método llamado después de guardarlo podrá leerlo y procesarlo. El valor del objeto TempData se conservará hasta la expiración de la sesión o hasta que sea leído.

Ejemplo:

- Guardar información en el objeto TempData:

public ActionResult AddUsuario(Usuario model)
{
    if (ModelState.IsValid)
    {
	//guardar usuario en la base de datos        

        TempData["message"] = "Usuario creado correctamente.";
        return RedirectToAction("DetailsUsuario ", new { USU_Id = model.USU_Id } );
    }

    return View(model);
 }
public ActionResult DetailsUsuario(Guid USU_Id)
{
    //Consultar usuario de la base de datos
    if(TempData["message"] != null)
    {
        ViewBag.message = TempData["message"];
    }
 return View(usuario);
}

Primeros pasos con NuGet

NuGet es una herramienta OpenSource que viene instalada y configurada por defecto en Visual Studio 2010.

Su funcionamiento es muy simple, pero es en su simplicidad donde está escondida su grandeza. NuGet es un administrador de paquetes o librerías .NET que se integra en todos los proyectos de Visual Studio 2010.

NuGet nos permite tener referenciados proyectos VS 2010 a versiones específicas de librerías .NET. ¿Esto que significa? Pues significa que en el caso que estemos trabajando en algún proyecto de equipo de varias personas y alguien añada alguna referencia de alguna librería externa, el resto de personas del equipo se verán obligadas de buscar,descargar y actualizar todas las referencias necesarias si quieren compilar la solución.
NuGet puede liberarnos de esta duras tarea descargando, actualizando y configurando  todas las referencias necesarias al proyecto por el mero hecho de obtener la última versión del proyecto y compilar la solución.

Vamos a ver un ejemplo práctico de como funciona.

La manera más cómoda de trabajar con NuGet es a través de su consola de administración de paquetes que la podemos encontrar dentro de nuestro menú de VS.

image_2_3EC7C6EC

En el caso que queramos instalar alguna referencia o alguna utilidad introduciremos el siguiente comando Install-Package y el nombre del paquete en la consola.

En nuestro caso, instalaremos elmah que es un utilidad que nos permite capturar excepciones no controladas de nuestras aplicaciónes ASP.NET. Al ser un HTTP Handler requiere de ciertas configuraciones que deben de realizarse sobre el archivo web.config

Para descargar, instalar y configurar nuestra utilidad, escribiremos la siguiente instrucción en nuestra consola de paquetes Install-Package elmah

image_4_3EC7C6EC

NuGet se encargará de descargar, referenciar y configurar todas las referencias o dependencias que sean necesarias para el correcto funcionamiento de la aplicación.

Fijaros como con una única instrucción se configura nuestro proyecto ASP.NET

image_6_3EC7C6EC

En nuestro caso, ha añadido la referencia a nuestro proyecto y configurado todos los parámetros necesarios de nuestro web.config para que este funciona correctamente sin intervención por parte nuestra.

Cada vez que instalemos algún paquete a nuestra solución, NuGet descargará en el directoriopackages, ubicado físicamente en la raíz de nuestra solución, todos los archivos necesarios para su ejecución (recordar que esta carpeta no se actualiza en nuestro repositorio de código fuente).

Ahora imaginaros, que desde otra máquina descargamos el proyecto de VS donde no tenemos descargado elmah (siguiendo con el ejemplo). Al abrir y compilar el proyecto VS nos dará un error de que no encuentra dicha referencia.

Para evitar estos problemas, habilitaremos la restauración de paquetes NuGet

image_8_3EC7C6EC

Al habilitar la restauración cuando vayamos a compilar nuestra solución, si NuGet detecta que existe alguna referencia no cargada correctamente, intentará descargarla del repositorio de paquetes y configurará todos los parámetros que sean necesarios para la correcta compilación de nuestra solución.

Si queréis conocer con más profundidad NuGet visitar los siguientes enlaces:

Modificar MasterPage de SharePoint 2010 a través de módulos con Visual Studio 2010

El siguiente artículo vamos a tratar de encapsular a través de una característica de SharePoint, la actualización de la MasterPage por defecto de una colección de sitios.

Aunque es sencillo de implementar, más de una vez hemos tenido algún dolor de cabeza cuando hemos ido a implementar nuestra solución a nuestro cliente y más teniendo en cuenta que la actualización la realizamos con Designer.

A través de los MODULE de SharePoint 2010 y un EventReceiver tendremos todo lo suficiente.

En primer lugar, a nuestras solución de SharePoint 2010 para Visual Studio, crearemos un nuevo MODULE tal como se muestra en la imagen de a continuación

image_4_18EFB085

Una vez creado el MODULE, renombramos el fichero Sample.txt a Custom.Master. El siguiente paso es actualizar el fichero Elements.xml. En nuestro caso, deseamos que nuestro fichero se ubica en la galería de páginas maestras de la colección de sitios, por tanto seguiremos la siguiente sintaxis.

  
  

El siguiente paso, es crear un EventReceiver de nuestra característica (botón derecho sobre la Feature – Add Event Receiver)

A continuación, escribiremos el siguiénte código para actualizar las páginas Master de todos los sitios de nuestro portal

string customMasterPageName = "/_catalogs/masterpage/Custom.Master";
      string previousMasterUrl = "/_catalogs/masterpage/v4.master";

      public override void FeatureActivated(SPFeatureReceiverProperties properties)
      {


          SPSite site = properties.Feature.Parent as SPSite;

          Uri masterPageUri = new Uri(site.RootWeb.Url + customMasterPageName);
          if (site.RootWeb.GetFile(masterPageUri.AbsoluteUri).Exists)
          {


              foreach (SPWeb web in site.AllWebs)
              {
                  web.MasterUrl = masterPageUri.AbsolutePath;
                  web.CustomMasterUrl = masterPageUri.AbsolutePath;
                  
                  web.Update();
              }
          }
      }

      public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
      {
          SPSite site = properties.Feature.Parent as SPSite;

          Uri uriMaster = new Uri(site.RootWeb.Url + previousMasterUrl);

          foreach (SPWeb web in site.AllWebs)
          {
              web.MasterUrl = uriMaster.AbsolutePath;
              web.CustomMasterUrl = uriMaster.AbsolutePath;
              web.OverwriteTranslationsOnChange = true;

              web.Update();
          }

      }

Permitir el acceso anónimo a páginas de SharePoint en el directorio _layouts

En algunas ocasiones os encontraréis con la posible necesidad de incorporar páginas de SharePoint en el mismo directorio _layouts. Algunos ejemplos: Páginas de login, mantenimientos, etc… En mi caso fueron páginas que implementaban un TPV para una web en SharePoint 2010.

En el proyecto en Visual Studio 2010, las páginas se encuentran debajo el directorio Layouts. Para hacerlo, se debe hacer clic con el botón derecho sobre el proyecto 'SharePointProject1' > 'Agregar' > 'Carpeta asignada "Layouts" de SharePoint'.

5

Automáticamente, SharePoint añade una carpeta con el nombre del proyecto dentro de 'Layouts'. Agregamos en ella la página de aplicación.

6

Por defecto la página hereda de LayoutsPageBase. Lo único que se tiene que hacer es cambiar esa herencia por UnsecuredLayoutsPageBase.

Public partial class ApplicationPage: UnsecuredLayoutsPageBase

Luego se tiene que sobrescribir la siguiente propiedad para permitir el acceso anónimo:

Protected override bool AllowAnonymousAccess { get { return true; } }

Una vez implementada la solución, se debería poder acceder a la página (http://miUrlDeSharePoint/_layouts/SharePointProject1/ApplicationPage.aspx) sin que te pida usuario y password.

Solucionar problema con la intercalación desde Linq

En caso de necesitar realitzar búsquedas contra el motor de base de datos sin tener en consideración mayúsculas/minusculas, acentos y otros símbolos de puntuación, desde SQL Server es necesario que la base de datos use una intercalación *_CI_AI

Pero aunque la base de datos esté bien configurada para que las consultas sean no sensitivas a este tipo de carácteres, si se realiza la consulta desde nuestra aplicación la consulta no será efectiva puesto que desde linq no se explota la facilidad que nos ofrece la base de datos.

Para solucionar esto hay un método que es el que muestro en el siguiente código:

string ntext = new string("TEXTO_A_BUSCAR".Normalize(NormalizationForm.FormD).Where(c => c < 128).ToArray());
Lista = Lista.Where(x => (UTF8Encoding.UTF8.GetString(UTF8Encoding.GetEncoding("ISO-8859-8").GetBytes(x.CAMPO_BD)).IndexOf(ntext, StringComparison.InvariantCultureIgnoreCase) > -1)).ToList();

En la primera instrucción normalizamos el texto a localizar en la base de datos, y en la segunda se realiza la búsqueda en sí misma sobre el campo de la base de datos con el cual deseamos hacer el filtro.

Espero que os sirva de ayuda.

Cambiar la URL del sitio en un proyecto de SharePoint en Visual Studio 2010

Al realizar un cambio de servidor de desarrollo de una solución de SharePoint 2010 en Visual Studio 2010 nos encontramos con la sorpresa de no poder realizar desarrollo visual ni desplegar debido a que la URL del sitio de SharePoint ya no coincide con la del nuevo servidor.

Para realizar un cambio de esta URL tan solo necesitamos acceder a la ventana de propiedades del proyecto, debajo del explorador de la solución, y modificar la propiedad Site URL con la del nuevo sitio o servidor. Es el método más sencillo.

9

"Invalid Keycode" en Crystal Report con VS2010

Este mensaje aparece en el entorno de desarrollo de VS2010 cuando intentas acceder al diseño de un report generado con Crystal Report que hasta ahora funcionaba sin ningún problema.

El motivo es, seguramente, que el report en cuestión, fue diseñado con la versión Beta de Crystal Report para Visual Studio 2010 que, precisamente, caducó el 31 de Diciembre de 2010.

Para solucionar el problema y poder acceder de nuevo al diseño de estos informes tendremos que inicialmente desinstalar la versión Beta que tenemos instalada ("Crystal Reports for Visual Studio 2010 - Beta x") e instalar la nueva release que puedes descargar desde http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0.exe.

Más info... http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/22083

Error en el diseño de formularios: 'child' is not a child of this parent

Si alguna vez estáis en el desarrollo de un proyecto, y mientras estáis diseñando una página os aparece de buenas a primeras el error:  << 'child' is not a child of this parent >>, y no os deja acceder al diseño del fórmulario lo que deberíais hacer es acceder al "Designer" del formulario y dentro del procedimiento InitializeComponent() localizar la definición del formulario y añadir una línea por cada control existente en el formulario que tenga la siguiente estructura:

this.Controls.Add(this.myControlName);

Con esta sencilla instrucción para cada uno de los controles existentes solventaréis el error y podréis seguir trabajando con el formulario que se había corrompido.

Beta de Microsoft Visual Studio LightSwitch

Microsoft Visual Studio LighSwitch, un nuevo producto para desarrolladores, hace su aparición, de momento en beta. Dentro de la almágana de pequeños productos y tecnologías con las que nos bombardea Microsoft encontramos esta pequeña joya que nos permite la creación hiper-rápida de aplicaciones de negocio en Silverlight.

image_2

LightSwitch se integra dentro de Visual Studio 2010 como nuevas plantillas de proyecto, con sus propios asistentes y herramientas de desarrollo específicas. El objetivo de LightSwith es permitirnos a partir de un modelo de datos diseñar como queremos que sean las pantallas de gestión de estos datos, trabajando a alto nivel. El resto, la aplicación en sí, la genera automáticamente LightSwith.

Hemos probado el producto y la verdad que impresiona poder crear toda una interfaz de gestión en Silverlight para todo un modelo de datos en apenas 5 minutos. ¿Nos quedaremos sin trabajo los desarrolladores de aplicaciones? No lo creo. El producto está todavía verde y deberá probarse en desarrollos reales para ver hasta que punto permite la personalización de su funcionalidad y si resulta realmente eficiente fuera de un entorno puramente de test. De momento, aquí lo tenéis… a disfrutarlo!