Posts recientes

El contenido de este blog tiene una licencia Creative Commons.
Creative Commons

Solución a la hora de filtrar Foreign Keys con identificadores Guid en la grid de la suite de controles Telerik MVC Extensions

Seguramente los que hayáis trabajado con la suite de controles de Telerik para MVC os hayáis dado cuenta que determinados operaciones con los controles Grid no funcionan como deberían. Entre ellas, la más destacada y a la que no hemos encontrado solución hasta ahora, se trata del error que se producía a la hora de filtrar una grid con Foreign Keys donde la Primary Key eran identificadores únicos (Guid o Uniqueidentifier).

Parece ser que Telerik no ha querido darle la solución a esta problemática ya que este error se arrastra desde versiones muy iniciales de esta suite de controles y estoy seguro que no hemos sido los únicos que nos hemos encontrado con este problema.

Pues bien, después de darle vueltas al asunto,en Trentia Consulting no hemos tenido más remedio que darle solución y para ello hemos descargado el último código fuente y lo hemos modificado para dar solución al problema.

Aunque al final de esta entrada acompañamos el código fuente modificado para que los podáis compilar y actualizar a vuestra solución, hemos querido resaltar algunos pasos que creemos que son los más importantes.

Vamos a ello, principalmente cuando filtrábamos por una FK, la llamada AJAX que se encargaba de dibujar el GRID nos daba el siguiente error en la pila del Stack Trace

Invalid cast from "System.String" to "System.Guid" 
System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) +10578274 
	
System.String.System.IConvertible.ToType(Type type, IFormatProvider provider) +8 
	
System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +10625268 

Con este error, deducimos que la la conversión de String a Guid no estaba implementada. Así que después de investigar, lo primero que tuvimos que tocar fue la clase FilterLexer ubicada dentro del namespace Telerik.Web.Mvc.Infrastructure.Implementation.

Revisando el método Tokenize vimos que el parse de parámetros Guid no estaba implementado, así que tuvimos que añadir lo siguiente:

 public IList Tokenize()
        {
            List tokens = new List();

            while (currentCharacterIndex < input.Length)
            {
                string result;

                if (TryParseGuid(out result))
                {
                    tokens.Add(UniqueIdentifier(result));
                }
                else if (TryParseIdentifier(out result))
                {
                    tokens.Add(Identifier(result));
                }
	...
}


Aquí hemos implementado el método TryParseGuid, que se encargará de detectar y formatear el string del identificador del filtro a Guid.

El código es el siguiente

private bool TryParseGuid(out string guid)
{
            SkipSeparators();

            int longitud=36;

            StringBuilder result = new StringBuilder();
            for (int i = 0; i < longitud; i++)
            {
                if((i + currentCharacterIndex)<input.Length)
                    result.Append(input[i + currentCharacterIndex]);
            }

          
            Guid outGuid = Guid.Empty;

            if (Guid.TryParse(result.ToString(), out outGuid))
            {
                guid = result.ToString();
                currentCharacterIndex+=longitud;
                return true;
            }
            else
            {
                guid = null;
                return false;
            }
}

Una vez implementada la detección del Guid, ya sólo nos queda ir al resto de clases que integran las funcionalidades de filtrado de la Grid de Telerik como la clase FilterParser.cs, GuidNode.cs y FilterTokenType.cs del mismo namespace.

Aquí os dejo el enlace de descarga del artículo que hemos redactado en CodeProject con el fin de compartir este problema con el mayor número de personas.

Descarga de la solución

Espero que os sea de ayuda.

Autor: Javier Tirado Pampín
Publicado: 16/10/2013  11:39 | 0  Comentarios | 0  Enlaces a este post

Proyecto Orchard: CMS en ASP.NET MVC

imageOrchard es un gestor de contenidos web o CMS que parece contar con la bendición de Microsoft. Recientemente hemos estado desarrollando con este CMS, como alternativa a Umbraco, otro conocido CMS de .NET.

Orchard nos ha gustado especialmente por sus características funcionales y técnicas.

Orchard cubre bastante bien aspectos que otros CMS quizás no tengan demasiado presente, como el soporte multiidioma y multicultural, que acostumbra a ser un problema. También dispone de una buena extensibilidad a muy diversos niveles, que nos permite trabajar con vistas de MVC para definir hasta el más mínimo aspecto de la web. Tenemos control absoluto del HTML resultante y eso es muy positivo. También contempla bien aspectos de SEO, tan necesarios hoy en día. Y finalmente, ofrece un buen rendimiento, aspecto que también puede resultar complejo en CMS basados en Microsoft .NET.

Nuestro último proyecto en Orchard es el desarrollo de una web con CMS, haciendo uso de Foundation Zurb como framework de diseño responsable. Estamos realmente satisfechos con el resultado y con Orchard. Os recomiendo que lo tengáis presente en vuestro portfolio de soluciones CMS.

Autor: Rubén Claramunt Vicente
Publicado: 23/09/2013  11:14 | 0  Comentarios | 0  Enlaces a este post

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

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

image

Intellisense
Tenemos Intellisense para añadir regiones dentro del CSS

image

Intellisense para añadir fuentes personalizadas

image

 

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

Autor: Javier Tirado Pampín
Publicado: 07/08/2013  11:37 | 0  Comentarios | 0  Enlaces a este post

Wizard para generar expresiones de Set Analysis en QlikView

Este asistente ayuda a generar rápidamente expresiones de “Set Analysis” para Qlikview.

Se puede aplicar a conjuntos estándares, selecciones anteriores y siguientes, marcadores usando las funciones de agregación básicas, sobre cadenas de caracteres, contadores y agregaciones estadísticas.

También dispone de una lista de ejemplos de expresiones más utilizadas.

Set Analysis Wizard for QlikView

 

clip_image001

Autor: Farid Dehar
Publicado: 30/07/2013  6:31 | 0  Comentarios | 0  Enlaces a este post

SharePoint 2013: Cambios en los servicios de búsqueda mediante programación

Después de llevar varios meses trabajando en diferentes proyectos sobre la nueva plataforma SharePoint 2013, creemos que va siendo hora de compartir con vosotros nuestras experiencias.

En el siguiente artículo, vamos a comentar los cambios en los servicios de búsqueda y como afectan a la programación. Como sabréis los servicios de búsqueda FAST se han incorporado al servicio de búsqueda estándar. Esto provoca que los antiguos modelos de programación, como el FullTextSqlQuery, estén marcados como deprecated en la actual versión y por tanto no los podremos utilizar.

En primer lugar, hemos de incoporar a nuestro proyecto las siguientes referencias Microsoft.Office.Server y Microsoft.Office.Server.Search

Con la nueva versión aparece en escena SearchExecutor, que será nuestro objeto principal para la búsqueda.

Utilizaremos el siguiente código para devolver resultados de búsqueda a partir de una o varias condiciones

public static DataTable ExecuteKeyWordSearch(string queryText) 
  { 

  ResultTableCollection rtc = null; 

   DataTable retResults = new DataTable();


   Dictionary<string, Query> queries = new Dictionary<string, Query>(); 

 using (SPSite site = new SPSite(SPContext.Current.Site.ID)) 
   { 

   using (KeywordQuery query = new KeywordQuery(site)) 

   { 

   query.QueryText = queryText; 

   query.KeywordInclusion = KeywordInclusion.AllKeywords; 

   query.RowLimit = 500; 

   query.SelectProperties.Add("Path"); 

    SearchExecutor se = new SearchExecutor(); 

   rtc = se.ExecuteQuery(query);


   if (rtc.Count > 0) 

   { 

   var results = rtc.Filter("TableType", KnownTableTypes.RelevantResults); 

   //results = rtc.Filter("TRENTIAContentType", "CV"); 

    if (results != null && results.Count() >= 1) 

   retResults.Load(results.First(), LoadOption.OverwriteChanges); 

   } 

   } 

   }

 return retResults; 
   }

 

Con FullTextSqlQuery hacíamos servir una sintaxis similar a SQL para realizar búsquedas e incluir campos a los resultados de la búsqueda. Actualmente esto ya no funciona así. La sintaxis que tendremos que hacer servir a partir de ahora será la siguiente:

En el caso que deseamos filtrar por algún tipo de contenido, le pasaremos por parámetro (queryText) un string con la siguiente sintaxis: ContentType:CV

En fin, espero os sirva de utilidad a la hora de introduciros en el nuevo modelo de búsquedas de SharePoint 2013.

Autor: Javier Tirado Pampín
Publicado: 29/07/2013  8:06 | 0  Comentarios | 0  Enlaces a este post

Autenticación Windows en MVC 4 redirige a página de login

En mi caso ha sido a Login.aspx, pero podría haber sido /Account/Login. Por alguna razón las llamadas a controladores que requieren autorización me llevaban a la página de inicio de sesión, cuando en realidad en web.config tengo configurada la autenticación Windows.

Después de investigar algo he visto un artículo en Stackoverflow que me ha ayudado a resolver el problema. Se trata de deshabilitar SimpleMembership de la aplicación. Esto se consigue añadiendo esta entrada en la clave <appSettings> de web.config.

<add key="enableSimpleMembership" value="false" />

 

Por cierto, un artículo sobre cómo configurar SimpleMembership: http://www.mono-software.com/blog/post/Mono/226/Adding-ASP-NET-SimpleMembership-to-an-existing-MVC-4-application/

Autor: Rubén Claramunt Vicente
Publicado: 29/07/2013  7:51 | 0  Comentarios | 0  Enlaces a este post

Disponible Service Pack 2 de SharePoint 2010

Ya tenemos disponible el SP2 de SharePoint 2010, centrado en resolver problemas relacionados a seguridad, estabilidad y escalabilidad. También ofrece mejor compatibilidad con Windows 8, Internet Explorer 10, Office 2013 y SharePoint 2013.

Podéis ampliar información en http://blogs.office.com/b/sharepoint/archive/2013/07/23/check-out-the-sharepoint-server-2010-service-pack-2.aspx

Para descargarlo en:

Autor: Rubén Claramunt Vicente
Publicado: 24/07/2013  7:25 | 0  Comentarios | 0  Enlaces a este post

Actualización de la URL de alertas en SharePoint

Desde hace varios días estoy realizando una migración cautelosa y paso a paso de un portal complejo en SharePoint al cual se estaba accediendo via protocolo HTTP y al cual se deberá acceder a partir de ahora por HTTPS, o sea, con encriptación SSL. Uno de los usuarios ha detectado un curioso efecto y es que los correos de alerta que le están llegando incluye enlaces a HTTP, cuando en realidad este acceso ya no existe. Por lo visto es un problema bastante común y tiene fácil solución, no solo para este sino para otros escenarios.

He dado con un script de Powershell y algunos articulos muy útiles para reparar estas URLs de alerta de SharePoint. El script en cuestión se llama Invoke-AlertFixup, que como veis tiene un nombre suficientemente explícito. Nos permite indicar la URL base de alertas de las que nos queremos deshacer y sustituirla por la nueva URL o la URL en vigor del portal. En mi caso seria:

> Invoke-AlertFixup –site https://miportal –url http://miportal

Cómo podéis ver estoy realizando el cambio de URLs. El proceso es rápido y efectivo. Os dejo los materiales:

Script de PoweShell en Script Center de MS: Update alerts by using Windows PowerShell

Artículos de Technet sobre el tema:

Autor: Rubén Claramunt Vicente
Publicado: 22/07/2013  14:41 | 0  Comentarios | 0  Enlaces a este post

Trentia Consulting presenta las novedades de SharePoint 2013 en Cal Calderón (Viladecans)

Trentia Consulting coorganizó con el centro de innovación de Microsoft para la productividad (www.micproductivity.com) un nuevo seminario sobre las novedades de SharePoint 2013 y de cómo mejorar la productividad empresarial a través de las herramientas empresariales.

Básicamente se presentó una breve descripción de qué es Microsoft SharePoint para pasar posteriormente a ver en más profundidad cuales son las novedades que aporta la nueva versión 2013. Además, antes de finalizar, los asistentes pudieron ver un caso práctico en tiempo real.

En los siguientes enlaces podéis encontrar el material que se presentó:

http://es.slideshare.net/trentia/presentaci-inicial-microsoft-sharepoint-2013-novetats-i-principals-funcionalitats-de-lentorn

http://es.slideshare.net/trentia/microsoft-share-point-2013-novetats-i-principals-funcionalitats-de-lentorn

Desde aquí damos las gracias a todos los asistentes.

Autor: Anna Vilalta Gili
Publicado: 17/05/2013  10:19 | 0  Comentarios | 0  Enlaces a este post

Si no pudiste asistir al anterior seminario.… no pierdas esta nueva oportunidad: Seminario Microsoft SharePoint 2013

Aplicación práctica y tendencias para mejorar la iProductividad de las Empresas

sharepoint De este modo Trentia Consulting te da la bienvenida a la nueva generación de tecnologías SharePoint. Estamos actualizando nuestros servicios para dar cabida a implantaciones y desarrollos en SharePoint 2013. Ofrecemos a nuestros clientes la posibilidad de implantar ya con la más novedosa plataforma de colaboración del mercado.


Agenda del seminario:

hora
9 MAYO 2013
hora
9:00-12:30
horaCan Calderon . C/ Andorra 64 08840 (Viladecans) . www.cancalderon.es
09:00 - 09:20   Bienvenida
09:20 - 09:50 La iProductividad en las organizaciones, 12 recomendaciones básicas para mejorarla.
Ramon Costa. MIC Productivity
09:50 - 10:20 Microsoft SharePoint, más allá de una plataforma de colaboración. Un entorno de productividad.
Anna Vilalta Gili. Trentia Consulting
10:20 - 10:40 Microsoft Lync 2013. Demostración práctica para el día a día.
Ramon Costa. MIC Productivity
10:40 - 11:10 Café Relacional
11:10 - 11:40 Microsoft SharePoint 2013. Novedades y principales funcionalidades del entorno.
Xavier Tirado. Trentia Consulting
11:40 - 12:00 Casos prácticos de aplicación de Microsoft SharePoint.
Ruben Claramunt. Trentia Consulting
12:00 - 12:20 Turno abierto de intervenciones
12:20 - 12:30 Clausura
hora Solicita información sobre el evento a info@trentia.es
register Inscríbete al evento aquí
  Con la colaboración de
Autor: Andrea Sanz Samper
Publicado: 25/04/2013  12:54 | 0  Comentarios | 0  Enlaces a este post

 Siguiente >>