Disponemos de un sitio de publicación y tenemos un WebPart personalizado que realiza una muestra de ciertas páginas del sitio, donde tenemos activada la navegación por metadatos, esto es, “friendly url’s”. El problema surge en que al hacer la consulta, ya sea usando CAML, recorriendo la lista con con Linq to SharePoint, lo que tenemos de forma habitual es la url de acceso a la página, algo similar a “http://mysite/Pages/mypage.aspx” o “http://mysite/mypage.aspx”, lo cuál ya no es “friendly” perdiendo así los beneficios que podríamos obtener de cara al SEO.
Solución
A la hora de consultar la o las páginas, debemos tener en cuenta el objeto TaxonomyNavigation que nos permite acceder a métodos para controlar la navegación por metadatos. Así pues, podemos hacer uso de este objeto para obtener la friendly url de la siguiente forma
1publicstring GetFriendlyUrl(SPListItem pageItem)
2{
3//pageItem es del tipo ListItem 4 IList<NavigationTerm> terms = TaxonomyNavigation.GetFriendlyUrlsForListItem(pageItem, false);
5 6string friendlyUrl =string.Empty;
7 8//comprobar si la página tiene uno o más términos asociados 9if (terms.Count >0) {
10//Obtener la friendly url del término asociado a la página11 friendlyUrl = terms[0].GetResolvedDisplayUrl(string.Empty);
12 } else {
13//si no hay términos, devolver la url de la página14 friendlyUrl = pageItem.File.Url;
15 }
1617return friendlyUrl;
18}
Lo primero que hacemos es, obtener la lista de términos asociados a la página porque, debemos tener en cuenta que una misma página puede estar asociada a varios términos de navegación. Una vez hayamos comprobado que existe al menos un término asociado, podemos recorrerlos en busca del deseado o simplemente, como he puesto en el ejemplo, devolver el primero. En caso de que no hubiera un término asociado y, con el fin de tener siempre una url de acceso a la página, devolveríamos la Url estándar.
Hoy quiero hablar de algo que no es muy usado (creo) pero que por eso mismo puede ayudar a aquellos que se encuentren con el problema de no saber afrontar cómo localizar una aplicación en Silverlight que, aunque pareciera sencillo, tiene algunos entresijos que me gustaría compartir con todos.
Creando la aplicación Silverlight
Evidentemente, lo primero será crear la aplicación Silverlight seleccionándola de las plantillas disponibles en Visual Studio, en mi caso, Visual Studio 2013, tal y como se muestra en las imágenes a continuación.
Una vez hayamos seleccionado la plantilla de Silverlight Application, lo siguiente que se nos consulta es si queremos incrustar el proyecto dentro de una aplicación web. En el ejemplo que expongo, lo incrustaré dentro de una aplicación web ASP.NET MVC, con lo que marcaré la opción y asignaré el nombre de mi aplicación web.
Por último, voy a añadir un control de tipo Label, que ubico centrado dentro del grid principal “LayoutRoot”, al que posteriormente “bindearé” con el texto localizado.
Si ejecutamos la solución, podremos comprobar cómo se abre el navegador, con un control Silverlight incrustado que contiene el label con el texto que hayamos especificado, en mi caso “Text to localize”
Añadiendo los ficheros de recursos localizados
El siguiente paso, será añadir los ficheros de recursos. Por simplicidad voy a crear sólo el fichero principal en inglés (LocalizedStrings.resx) y el fichero localizado en español (LocalizedStrings.es-ES.resx).
Para ello, he creado una carpeta que llamo “Resources” donde agregaré ambos ficheros de recursos.
Ahora añadimos una nueva entrada dentro del fichero de recursos, “LabelLocalized” donde pondremos el texto deseado. Esto hay que hacerlo dentro de cada uno de los ficheros de recursos y tendremos tantos como lenguas en las que queramos localizar nuestra aplicación. Para facilitar esta labor, existen “plugins” que nos pueden ayudar, pero de esto hablaremos otro día.
Localizando el contenido dentro del código XAML
Bien, ahora ya tenemos el control en código XAML que queremos localizar en nuestra interfaz y el texto que queremos que aparezca, por lo que el siguiente paso será enlazar ambos “bindeando” el control Label con la entrada del fichero de recursos.
Lo primero será crear una clase, que llamaré “Localizer.cs” que se encargará de varios cometidos:
Determinar la cultura que vamos a usar
Determinar el fichero en el que se encuentran las entradas localizadas
Servir de interlocutor/pasarela entre nuestra interfaz y los ficheros de recursos para abstraernos de los mismos
publicclass Localizer
{
public Localizer()
{
Culture = Thread.CurrentThread.CurrentUICulture;
Language = XmlLanguage.GetLanguage(_culture.Name);
resource = new SilverlightLocalization.Resources.LocalizedStrings();
El siguiente paso, será asignar un alias a nuestro localizador para que la interfaz sepa interpretarlo y, para ello, editamos el fichero “App.xaml” añadiendo el correspondiente código dentro de los recursos de la aplicación.
Ahora que ya podemos usar el localizador para comunicar nuestra interfaz con los ficheros de recursos, vamos a establecer el Binding del valor en el control Label dentro del código XAML, para lo que deberíamos tener un código tal que así:
<sdk:LabelHorizontalAlignment="Center"
Height="28"
VerticalAlignment="Center"
Content="{Binding Path=Resource.LabelLocalized,
Source={StaticResource LocalizedStrings}}"/>
Con esto, en principio ya deberíamos poder ver nuestro texto localizado, pero esperad que aún hay más.
Localizando el contenido dentro del código C#
Antes de continuar, podría ser que quisiéramos localizar el texto desde nuestro código C# (yo recomiendo que en la medida de lo posible se haga desde la propia vista en el caso de controles con un valor fijo), así que tenemos una vía alternativa, para la que no necesitamos la clase que hace de localizador, sino que simplemente haríamos uso de un ResourceManager que nos permite acceder a las entradas de los ficheros de recursos de una forma sencilla.
ResourceManager rm = null;
rm = new ResourceManager("SilverlightLocalization.Resources", Assembly.GetExecutingAssembly());
Una vez hecho esto, podemos asignar el valor a cualquier control XAML que nos lo permita.
¿Por qué sigo sin ver cambios? Realizando los últimos ajustes
Una vez tengamos todo esto, pensaremos que está el trabajo realizado, así que si ejecutamos la aplicación…
No ha cambiado nada, ¿Por qué? <ironic mode=”ON”> Por extraño que parezca… en Silverlight las cosas no suelen ser tan fáciles como deberían </ironic> así que, localizar una aplicación Silverlight no iba a ser coser y cantar, o sí, pero al menos no iba a ser intuitivo.
¿Qué es lo que nos falta? Bien, pues nos falta, indicar a la aplicación Silverlight que puede usar las culturas en las que queremos que se localice. Esto lo haremos editando el fichero del proyecto, en el ejemplo “SilverlightLocalization.csproj” que no es más que un fichero XML y, en el nodo SupportedCultures, debemos añadir, separadas por “;”, todas las culturas que queramos tal y como muestro en la imagen.
Una vez hayamos añadido las culturas, podremos observar cómo nuestra aplicación muestra el valor correspondiente a la cultura.
Conclusiones
Con Silverlight las tareas a priori sencillas se pueden convertir en algo un poco “duro” de completar.
Para más referencias, podéis leeros a fondo este artículo de la MSDN donde se explica, aunque de forma algo enrevesada y desorganizada cómo funciona la localización en Silverlight.
Sólo queda un día para que se celebre //publish/ (16-05-2014), un evento que se celebrará en, aproximadamente 60 ciudades de todo el mundo, donde los desarrolladores de Apps tendréis la posibilidad de contar, en un evento gratuito, con expertos en diferentes áreas del desarrollo de Apps para Windows Phone y Windows 8 que os ayudarán a rematar vuestras aplicaciones y a publicarlas en las diferentes Stores.
Como ya os adelanté en un artículo anterior, estaré presente en Madrid con el látigo diseñador para ayudaros a que vuestras Apps tengan un look más “cool” y más atractivo para los usuarios. También estará el Gran Maestre Josue Yeray al que espero que aprovechéis al máximo ya que tiene prácticamente todas las respuestas en cuanto a código. Además, también contaremos con otros dos maestros, Alejandro Campos Magencio y Javier Suárez Ruiz que os ayudarán a tener un código extremadamente bueno así como una idea de negocio afinada.
Must remember
No olvidéis vuestros portátiles y, además, también debéis venir con mentalidad abierta a los cambios que os vamos a proponer. Si es posible, traed algo (o bastante) de código hecho de casa ;o) porque en un sólo día no nos dará tiempo de rematarlo todo.
Más datos
Localización:
Paseo Club Deportivo, número 1.
Centro Empresarial La Finca.
Hora de comienzo: 09.00
Hora de comida (cortesía de Microsoft): 13.00 – 14.00
Recientemente he instalado SQL Server 2012 Standard sobre Windows 8.1 pero no sin problemas durante el proceso.
Problemas
Primero intenté instalar SQL Server 2012 Express sobre la máquina con Windows 8.1 para lo que me descargué el fichero de instalación del centro de descarga de Microsoft (con el idioma correcto). Una vez completada la descarga, ejecuté el fichero y, tras la comprobación de requisitos y configuración previa, comenzó la instalación. Pero, cuando ya estaba a punto de terminar (lo que es más frustrante aún), recibí el siguiente mensaje de error “Could not find the Database Engine startup handle”. Como siempre, los mensajes de error son súper-descriptivos.
Para mis adentros pensé… pues vaya, “el fichero de instalación que me descargué está corrupto”, así que, ya de paso me descargué la versión Standard de SQL Server 2012 y repetí el proceso con el mismo resultado y con el consiguiente momento de tensión “hombre vs máquina” al que le sumamos el duelo “friky vs problema”.
Solución
Como buen frikazo, no iba a dejar que me frenara un problema tan simple como una instalación, así que comencé a buscar soluciones “bingueando” (no me seáis viciosillos, me refiero al sinónimo de googleando) con poco éxito hasta que di con este artículo de Anton Kalcik que tuvo el mismo problema y en el que explica bastante al final cómo resolverlo, así que resumiré.
Resulta que el servicio de SQL Server es incapaz de instalarse/iniciarse debido a un problema de permisos que podremos resolver simplemente propagando los permisos de la carpeta “Users/Default”. ¿Cómo hacemos esto de propagar los permisos? Pues bien, sigamos estos sencillos pasos:
Vamos a la carpeta C:/Users
Cambiamos la configuración de “Vista” y marcamos ver los elementos ocultos para ver la carpeta “Default”
Click con el botón derecho sobre “Default” y seleccionamos propiedades
En las propiedades, vamos a la pestaña de seguridad y seleccionamos “avanzado”
Seleccionamos “Cambiar permisos”, marcamos “Reemplazar todos los objetos hijos….” y le damos a OK.
Volver a lanzar la instalación de SQL Server
Conclusiones
A veces, algún becario mete mano en algún producto y pasa lo que pasa, pero siempre hay una solución, esta por lo menos me funcionó a mi.
El pasado 26 de abril, tuve el placer de participar en el aniversario de GUSENET como ponente formando pareja junto a Josue Yeray para hablar sobre las novedades que trae consigo Windows Phone 8.1 directa e indirectamente.
El evento contó con la presencia de cerca de 30 expertos en tecnologías .NET, casi todos MVP, con lo que la riqueza de contenidos era mayúscula pese a disponer únicamente de 30 minutos para cada sesión. De esta forma, se habló de tecnologías muy diversas que incluso se salían de .NET y se hizo networking, mucho networking en el que los temas que más pude escuchar estaban relacionados con Windows Phone 8.1 o con Entity Framework y el al uso que se hace de él por parte de algunas empresas/algunos desarrolladores.
En la sesión en la que participé, Josue Yeray, gran maestro de Windows Phone y del que siempre hay mucho que aprender, mostró a los asistentes las enormes posibilidades que nos aportan las Universal Apps que se han incluido con esta actualización y que nos permiten desarrollar Apps para Windows Phone 8 .1 y Windows 8.1 pudiendo compartir casi la totalidad del código, tanto XAML+C# como para HTML5+WinJS. Por mi parte, hice una introducción bastante light sobre las novedades en referencia a los controles (nuevas incorporaciones y optimizaciones a los existentes).
Otras sesiones que me gustaría destacar son la de Alberto Díaz que junto a Adrián Díaz habló sobre SharePoint, la sesión deMarc Rubiño en la que nos enseñó las debilidades ante el hackeo de bootstrap y la sesión de Bruno que nos dejó boquiabiertos y exaustos con todo lo que nos enseñó sobre el reconocimiento facial y de movimientos así como sobre gadgets. Todas las sesiones tuvieron también un nivel excelente lo que me ha permitido aprender muchas cosas y seguro que los asistentes también.
Como he indicado al inicio del artículo, ha sido un verdadero placer poder formar cartel junto a tantos expertos y, sobre todo, poder hacerlo al lado de Josue Yeray..
Parece que este año estamos de enhorabuena con la llegada de Windows Phone 8.1 y su convergencia con Windows 8.1, lo que nos permite compartir prácticamente todo el código, vistas, controles… entre ambas plataformas y… ¿qué mejor forma para celebrarlo que hacer un evento? Pues si querías uno… ¡Toma 2!
Desde Microsoft Corp., la comunidad de MVPs y WPSUG, queremos ayudarte a seguir el ritmo de las grandes novedades y crear Apps excepcionales usando las ventajas que ofrece la plataforma Windows con esta última revisión y para ello, se han creado dos eventos que tendrán lugar en Abril y Mayo: //learn/ y //publish/
//learn/
Este evento online está organizado directamente por los MVPs de Windows Phone. Durante 6 horas, podremos asistir a webcast sobre diferentes temáticas de Windows Phone 8.1: aplicaciones universales, diseño, nuevas APIs, notificaciones, etc. Si no sabéis inglés, no os preocupéis porque habrán tracks paralelos en varios idiomas entre los que se encuentra el castellano. Así que ya no tenéis excusa para asistir!!
En la Track en Español, Sorey García, Roberto Alvarado, Jose Luis Latorre, Ivan Toledo y Josué Yeray se encargarán de exponer los siguientes contenidos (sujeto a variaciones):
Introducción a Windows Phone 8.1
Empezando a construir apps Windows XAML
Controles de layout y transiciones de páginas
Adaptando tu UI a diferentes pantallas
Ciclo de vida de apps WinRT XAML
Tiles, badges, notificaciones y el Action center
Tareas en background
Windows XAML para desarrolladores Silverlight
El evento, que aunque se celebrará el 24 de Abril, por cosas de los husos horarios, en España empieza el 25 a la 01:00 (Bad thing). ¿Pero qué es una noche de no dormir para nosotros? Podéis aprovechar para poneros una copita de “Whisky on the rocks” y simular que estás de fiesta =oP No obstante, no os desaniméis porque las sesiones serán grabadas y podréis verlas bajo demanda. Tan pronto como estén disponibles, tanto Josué Yeray, como Javier Suárez Ruiz, Rafa Serna y yo mismo os pondremos los enlaces para su descarga en nuestros blogs o en la página de comunidad de WPSUG.
Para registraros, tenéis que acceder a este enlace
//publish/
Finalmente, el 16 de mayo tendrá lugar //publish/ que será presencial. Se trata de un hackathon organizado entre Microsoft y la comunidad MVP. En él podréis contar con mentores que os ayudarán a crear Apps para Windows 8.1 y Windows Phone 8.1 y también habrá premios y dispositivos para probar vuestras apps. Por supuesto, os invitaremos a comer paramanteneros encadenados a vuestros teclados y así de paso aprovechar para hacer networking.
En España habrá 3 sedes para este evento: Barcelona, organizada por Microsoft y Madrid y Palma de Mallorca, organizadas por la comunidad MVP. Yo estaré en Madrid apoyando a Josué Yeray y Javier Suárez Ruiz para ayudaros en todo lo que sea posible y conseguir que vuestras Apps lleguen a la tienda de aplicaciones con una gran calidad. El evento en Madrid se llevará a cabo en las oficinas de Microsoft el día 16 de mayo.
Podéis registraros desde este enlace para cualquiera de las tres sedes.
No debéis faltar a estos eventos ya que son una gran oportunidad para aprender y poder llevar a cabo vuestras Apps y, ¿por qué no? Convertiros en el próximo rico con vuestras Apps o vendiéndolas como WhatsApp. Desde luego, nosotros trataremos de ayudaros en todo lo posible, aprovechaos todo lo que podáis.
Ya está disponible “Windows Phone 8.1 Preview for Developers” por lo que ya podéis descargárosla aquellos que tengáis una cuenta de desarrollador activa. Instalarla es muy fácil aunque, como todo en esta vida, en ocasiones puede haber alguno más despistado que otro y, como varios me lo habéis preguntado ya… os indico cómo instalar/activar la preview para desarrolladores de Windows Phone 8.1 en vuestros terminales. Allá va:
NOTA: Tened en cuenta que necesitáis tener una cuenta de desarrollador paraWindows Phone, de Windows Phone AppStudio o simplemente tener el dispositivo desbloqueado para desarrollar.
Segundo paso
Abrir la aplicación Preview for Developers y seguir el “complejo Wizard” como se ve en las imágenes
Notad que en último lugar hay que activar la casilla de “Activar Preview para Desarrolladores”.
Tercer paso
Ir a “Configuración –> Actualizar el teléfono” y buscar actualizaciones. En unos instantes, debería aparecer la disponibilidad de una nueva actualización que debemos aceptar y… ¡listo! Windows Phone 8.1 Preview for Developers está disponible en nuestro terminal.
Aquí podéis ver las capturas de pantalla durante la instalación:
Novedades
Una vez instalado, recibiremos un mensaje de texto indicándonos dónde podemos descubrir las novedades de Windows Phone 8.1, cosa que podremos hacer desde esta página de Windows Phone.
Además, podemos apreciar rápidamente cosas como el centro de notificaciones y acciones que nos permite acceder rápidamente a algunas acciones de nuestro dispositivo así como leer las notificaciones perdidas. También rápidamente he podido ver los cambios en la gestión del volumen, donde han separado el volumen de las notificaciones del volumen multimedia y aplicaciones (ya era hora).
Además también tenemos la posibilidad de customizar el fondo de pantalla con una imagen de nuestro gusto y añadir más tiles activando una nueva característica que nos lo permite.
Por último, así rápidamente he visto los cambios en el calendario, muchísimo mejor que el que teníamos y que incluso nos indica una previsión de tiempo… Awesome!!!
Cortana
Para todos los frikys que queréis probarlo y estáis esperando poder hacerlo… deciros que Cortana parece que sólo está disponible para la región de USA con lo que el resto de mortales no podremos probarlo aún… ¿o sí? En este artículo de Xataka Windows podéis ver cómo activarlo.
Importante
Si en adelante queréis dejar de recibir notificaciones de nuevas versiones preview, tan sólo tenéis que entrar en la aplicación “Preview for Developers” y desmarcar la opción “Enable Preview for Developers”
El pasado sábado 29 de marzo, tuve el placer de participar junto con “N” expertos en diferentes áreas de Azure en un evento celebrado simultáneamente a nivel mundial. Mi participación, además de a nivel de ayuda en la organización, se extendió a dar una sesión junto al gran Rafa Serna “Conectividad multiplataforma a través de servicios móviles” en la que tratamos sobre Azure Mobile Services pero únicamente desde la perspectica de Windows 8 y Windows Phone que es a lo que se nos tiene acostumbrados, sino que además, mostramos un ejemplo HTML con Angular.js, un ejemplo haciendo uso de la API REST en una aplicación desarrollada en Delphi y también un ejemplo de su uso en Android. Con todo ello, tratamos de mostrar a los asistentes la facilidad de uso de Azure Mobile Services desde cualquier tecnología. Además, nos adentramos en profundizar en algunas características como:
Uso de servicios de autenticación como Facebook, Google, MS Account, …
Uso de los scripts de las tablas de Azure o “triggers” como los denomino yo (Insert, Update, Delete, Read) para introducir nuevos datos como el usuario.
Uso de scripts personalizados que intercepten el verbo de la petición (POST, PUT, GET, DELETE,…) para realizar operaciones extras.
Uso de API REST para trabajar con los datos de Azure Mobile Services
Todos estos contenidos los condensamos y comprimimos en una sesión de 45 minutos que espero que los asistentes hayan disfrutado.
Los asistentes pudieron participar en un hands on labs «global», formando parte de una granja de cómputo global para ayudar a realizar una investigación sobre <a href=»http://global.windowsazurebootcamp.com/charity/» target=»_new»>el diagnóstico temprano de la diabetes de Tipo 2.</a>. Las instrucciones de participación las podéis encontrar en este enlace.
TenerifeDev fuera de la isla
Además, quiero destacar la participación en el GWAB (Global Windows Azure Bootcamp) de otros dos coordinadores de TenerifeDev (#canarianpower), Alberto Díaz que se encargó de dinaminzar la zona “Azk the Experts” además de participar en la “Keynote” y David Rodríguez que participó en la Keynote, se encargó de gestionar nuestra participación el en Lab mundial sobre diabetes y también tuvo su sesión “Caso éxito: DNN Cloud Services – Under the Hood en la que nos ilustró sobre el servicio de DNN Evoq en la Nube”.
Hoy quiero compartir con todos vosotros un nuevo reconocimiento que me ha llegado, y es que el pasado martes (01-04-2014) Microsoft me ha nombrado ¡¡MVP en Client Development!! Ha sido una enorme y grata sorpresa pues para nada me esperaba esto. Es un gran honor y espero ser merecedor, al menos trabajaré para que así sea ya que por mi parte continuaré participando en todos aquellos eventos en los que me permitan estar, seguiré tratando de compartir con todos vosotros lo que vaya aprendiendo en mi día a día y seguiré promoviendo aquellas tecnologías que me parezcan útiles y productivas, al menos desde mi punto de vista.
Agradecimientos
Como siempre, hay que dar los agradecimientos pertinentes a todas las personas que han sido referencia para mi y que me han guiado en este camino en mayor o menor medida y, cómo no, hay que empezar por el gran maestro Alberto Díaz que desde hace ya mucho tiempo es mi gran referente y un gran amigo que me ha ido guiando para que pueda crecer profesionalmente. Mención especial también para mis compañeros de TenerifeDev con los que he compartido tan buenos momentos y de los que he aprendido muchísimo ya sea entre bits o entre beers y me refiero a David Rodríguez (El hombre de la nube), José Fortes (El lobo de Wall Street) y Josué Yeray (No se sabe dónde acaba su enorme corazón). A todos ellos los aprecio muchísimo y los seguiré tomando como referentes.
También he de nombrar a General de Software que me estuvo apoyando mientras estuve en sus oficinas y que me permitió crecer profesionalmente hasta llegar a donde estoy ahora, SolidQ que han confiado en mi y me siguen dando la oportunidad de afrontar nuevos retos día a día y a modo de “aventura” y “juego” porque para mi, mi trabajo es mi hobbie (por suerte o por desgracia) y me divierto con lo que hago.
He dejado para el final a las personas más importantes, mi familia, y en especial a las dos reinas de mi vida, mi mujer y me hija que me permiten cada día robarles un poquito de tiempo para hacer lo que más me gusta, jugar con la tecnología y compartir lo que aprendo.
Así pues, todos aquellos que ya los seáis, tenéis un nuevo compi en la comunidad MVP. Seattle, challenge accepted!!