SharePoint 2010: Añadir un sitio al Menú de Enlaces Rápidos (Quick Launch) programáticamente

Escenario:

Queremos insertar un enlace en el menú de enlaces rápidos (Quick Launch) que se encuentra en el panel izquierdo que SharePoint 2010 pone por defecto en sus sitios.

 

Solución:

Para resolverlo, tendremos que hacer uso del método SPNavigation.AddToQuickLaunch

 

public SPNavigationNode.AddToQuickLaunch(
    SPNavigationNode node,
    SPQuickLaunchHeading heading
)

 

Los parámetros serán, nuestro nodo de navegación que enlace al sitio y la cabecera “Sites” o “Sitios”, con lo que nos quedaría de la siguiente forma.

 

parentWeb.Navigation.AddToQuickLaunch(new SPNavigationNode(siteTitle, site.Url), SPQuickLaunchHeading.Sites);

Explicación:

  • new SPNavigationNode(siteTitle, site.Url) : Creo un nuevo SPNavigationNode que servirá como primer parámetro para el método.
  • siteTitle es el texto a mostrar en el enlace.
  • site.Url es el link al sitio en cuestión
  • SPQuickLaunchHeading.Sites nos devuelve la cabecera “Sites” o “Sitios” que es bajo la que incluiremos nuestro enlace.

SharePoint 2010: Añadir un sitio a la Barra de Navegación Superior (TopNavigationBar) programáticamente

Este será un artículo pequeño, pero espero que bastante útil.

Si necesitamos añadir programáticamente el enlace a un subsitio en la TopNavigationBar de otro sitio, tendremos que hacer uso de los métodos para añadir elementos en  SPWeb.Navigation.TopNavigationBar:

  • Add (SPNavigationNode node, SPNavigationNode previousNode): Añade el nuevo elemento después del especificado con el parámetro “previousNode”
  • AddAsFirst (SPNavigationNode node): Añade un nuevo elemento en la primera posición.
  • AddAsLast (SPNavigationNode node): Añade un nuevo elemento en la última posición.

 

En este caso, mostraré cómo usar “AddAsLast

using (SPWeb parentWeb = SPContext.Current.Web)
{
    SPNavigationNode subSiteNode = new SPNavigationNode(TEXTO-DEL-ENLACE, URL-DEL-SUBSITIO);
    parentWeb.Navigation.TopNavigationBar.AddAsLast(subSiteNode);  
}

 

TEXTO-DEL-ENLACE: Es el texto que le queramos poner al nodo.

URL-DEL-SUBSITIO: Es la URL que hayamos obtenido del sitio.

 

NOTA: Como se puede comprobar, no hay una atadura a que el nodo sea un Sitio de SharePoint 2010, con lo que, se podría añadir cualquier otro tipo de enlace ya que, lo único que necesitamos es un texto y la URL.

SharePoint 2010: Obtener la lista de plantillas de sitio disponibles

Es posible que en algún momento necesitemos obtener un listado de las plantillas de sitio disponibles, como por ejemplo, a la hora de crear un sitio programáticamente. Para ello, SharePoint dispone dentro de la clase SPWeb del método GetAvailableWebTemplates que dispone de dos sobrecargas:

  • SPWeb.GetAvailableWebTemplates Method (UInt32): Nos permite obtener las plantillas de sitio de un lenguaje determinado por el parámetro “lcid” del tipo UInt32
  • SPWeb.GetAvailableWebTemplates Method (UInt32, Boolean): Además de las plantillas de sitio de un lenguaje determinado por el parámetro “lcid” del tipo UInt32, también nos permite obtener las plantillas en lenguaje neutral en caso de especificar un valor de true en su segundo parámetro “doIncludeCrossLanguage ”de tipo boolean, de lo contrario, sólo devolverá las plantillas del lenguaje especificado.

Su uso es el siguiente:

  • Para la primera sobrecarga:
uint LocaleId = 1033;
SPWebTemplateCollection templates = parentWeb.GetAvailableWebTemplates(LocaleId)

  • Para la segunda sobrecarga:
private uint LocaleId = 1033;
SPWebTemplateCollection templates = parentWeb.GetAvailableWebTemplates(LocaleId, true)

Como se puede apreciar, estoy estableciendo el lcid a 1033 que es el “id” correspondiente al inglés, de esta forma, obtendré la lista de plantillas en inglés

Si lo muestro en pantalla mediante un ComboBox, obtendré el siguiente resultado

NOTA: Es muy importante no olvidar que las plantillas están ligadas a los idiomas instalados en SharePoint 2010.

CompartiMOSS: Nuevo numero de la revista de SharePoint en español

Hoy ha visto la luz la publicación nº11 de CompartiMOSS (Blog en Geeks) y me gustaría hacer una mención especial para esta revista de SharePoint en español promovida por expertos en esta plataforma como son Gustavo Vélez  , Juan Carlos González y Fabián Imaz y que hacen posible que los desarrolladores de habla hispana tengamos la posibilidad de acceder a artículos de calidad en nuestro idioma.

Índice:

  • Editorial
  • Conexiones BCS en el servicio de perfiles (Miguel Tabera Pacheco)
  • Combinando SharePoint y Project Server (Arnau Roca Palà, Marc Bàguena Cuéllar)
  • Linq To SharePoint (Juan Pablo Capdevila)
  • Sitios de Publicación de SharePoint 2010 (Santiago J. Porras Rodríguez)
  • Creando documentos profesionales en Microsoft Word 2010 (Alejandro Garrido)
  • Entrevista con David Martos
  • Lista personalizada con Excel (Marcus Vinícius Bittencourt)
  • ¿Cómo tener éxito con la adopción de usuario de soluciones SharePoint? (Edin Kapic)
  • UXDesignPoint
  • Exposición de un sitio web con autenticación por claims usando ADFS – Parte 1 (Diego Gatti)
  • Customización y ampliación de estadísticas de uso (Víctor Cea Espejo)
  • Firma Electrónica sobre SharePoint: principales ventajas y aplicaciones (Miguel López)
  • Client Object Model en SharePoint 2010 / Modificando la seguridad (Juan Pablo Pussacq Laborde)
  • El concepto de Nube Privada (Daniel S. Levi)

En esta ocasión he tenido la fortuna de colaborar con un artículo (mi primera publicación de importancia) sobre los sitios de publicación en SharePoint 2010 y, lo he hecho junto a publicaciones de muchísima calidad. La novatada… es buena.

También quería destacar el artículo sobre un nuevo grupo, UXDesignPoint, para cubrir el hueco que hasta ahora existía sobre diseño en SharePoint. Cualquier interesado en colaborar con el nuevo grupo, que no dude ponerse en contacto, será bien recibido.

SharePoint 2010: Personalizar los campos de un Content Query Web Part (CQWP)

Escenario

En este caso voy a escenificar el artículo en otra experiencia personal. En cuestión, utilizando el Content Query Web Part para mostrar un resumen de noticias publicadas en un subsitio, me vi en la obligación de personalizar los campos de éste para poder mostrar la imagen “Imagen de la página (PublishingPageImage)” que contiene cada una de las noticias.

Noticia

Content Query Web Part

 

NOTA: Aunque estoy escenificando la situación en mi caso personal, la solución propuesta se aplica a cualquier otro caso en el que necesitemos algún campo más, aparte de los que ya están accesibles por defecto cuando usamos el CQWP.

 

Solución

En primer lugar, lo que he hecho es configurar el CQWP para obtener los elementos de la lista tal y como muestro en las siguientes imágenes

NOTA: El estilo del elemento es el que describí en este otro artículo en el que añadí los campos que quería mostrar en un principio.

 

Una vez hecho esto, obtuve el resumen de noticias esperado con la siguiente forma:

 

En un principio, este formato es válido pero, ahora quiero que se muestre también la imagen que se añadió en la noticia.

Para ello, como la imagen no es un campo accesible por defecto desde el CQWP, tendremos que añadírsela mediante los siguientes pasos.

  • Exportar el CQWP a un fichero de texto
  • Guardar el fichero de texto que se genera
  • Editar el fichero, en este caso “Noticias.webpart” con cualquier editor como por ejemplo “Notepad” y buscar la propiedad CommonViewFields que, por defecto viene de la siguiente forma
<property name="CommonViewFields" type="string"/>
  • Agregarle los campos que queramos obtener en el CQWP y guardar el fichero
<property name="CommonViewFields" type="string">
    PublishingPageImage,Image;
</property>
  • Posteriormente, ir a la galería de elementos web que se encuentra en la administración del sitio principal “Acciones del sitio –> Galerías –> Elementos web”
  • Cargar el Content Query Web Part en la galería

  • Añadir el Content Query Web Part que acabamos de importar en la página donde lo necesitemos
  • Configurar el Content Query Web Part y añadir la imagen como campo a mostrar
  • Y por último añadir el campo al “Estilo del elemento (ItemStyle)” que se encuentra en Style Library –> XSL Style Sheets –> ItemStyle.xsl
<xsl:if test="@PublishingPageImage != ''">
        <xsl:value-of select="@PublishingPageImage" disable-output-escaping="yes"/>
</xsl:if>

 

Con lo que nos quedaría: (Recordar que este estilo personalizado lo definí en este otro artículo)

     <xsl:template name="PromoturSummaryWithImage" match="Row[@Style='PromoturSummaryWithImage']" mode="itemstyle">
        <xsl:variable name="SafeLinkUrl">
            <xsl:call-template name="OuterTemplate.GetSafeLink">
                <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="DisplayTitle">
            <xsl:call-template name="OuterTemplate.GetTitle">
                <xsl:with-param name="Title" select="@Title"/>
                <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="PlainBody">
            <xsl:call-template name="GSC.RemoveHtml">
                <xsl:with-param name="String" select="@Description" />
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="SafePublishingPageImage">
            <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
                <xsl:with-param name="UrlColumnName" select="PublishingPageImage"/>
            </xsl:call-template>
        </xsl:variable>

        <div class="divPromoturNew">
            <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
            <div class="divTitle">
                <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkTitle">
                  <xsl:if test="$ItemsHaveStreams = 'True'">
                    <xsl:attribute name="onclick">
                      <xsl:value-of select="@OnClickForWebRendering"/>
                    </xsl:attribute>
                  </xsl:if>
                  <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
                    <xsl:attribute name="onclick">
                      <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
                    </xsl:attribute>
                  </xsl:if>
                  <xsl:value-of select="$DisplayTitle" disable-output-escaping="yes" />
                </a>
            </div>
            <div class="divAdditionalData">
                por <xsl:value-of select="@Author" /> - <xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />
            </div>            
            <div class="divDescription">
                <xsl:if test="@PublishingPageImage != ''">
                    <xsl:value-of select="@PublishingPageImage" disable-output-escaping="yes"/>
                </xsl:if>
                <xsl:value-of select="substring($PlainBody, 1, 350)" disable-output-escaping="yes" />...
                <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkMore">Leer más</a>
            </div>
        </div>
    </xsl:template>

 

Resultado

Con esto habremos conseguido mostrar la imagen en nuestro resumen de noticias hecho con un Content Query Web Part (CQWP)

SharePoint 2010: Usar Content Query Web Part para mostrar los elementos de una lista de enlaces

Escenario:

Supongamos que queremos mostrar los elementos de una lista de enlaces y, para ello queremos hacer uso de un Content Query Web Part (CQWP) por las posibilidades que éste nos da.

En la lista, por ejemplo, tendremos dos enlaces con los siguientes campos:

  • General de Software
    • Link: http://www.gsc.es
    • Descripción: General de Software
  • Turismo de Canarias
    • LInk: http://www.turismodecanarias.com
    • Descripción: Turismo de Canarias

Con esto, esperamos obtener el siguiente resultado:

 

En primer lugar, debemos añadir el CQWP a nuesta zona de Web Parts, editar las propiedades del CQWP y seleccionar la lista con los enlaces, en este caso, seleccionaré la lista de Vínculos que ofrece el sitio de SharePoint 2010.

 

Por defecto se mostrará el campo Título del enlace en el parámetro Título del CQWP.

Y el resultado sería el que sigue:

 

Por más que juguemos con los campos de la lista y los parámetros, no conseguiremos que se nos muestren los enlaces de la forma esperada.

 

Solución:

Propongo dos soluciones.

Solución 1, fácil, pero… nada elegante:

  1. Rellenar el campo “Notas” del enlace con el texto que querríamos mostrar como título
  2. En los parámetros del CQWP poner
    1. Como Título, el valor del campo “Notas
    2. Como URL, el valor del campo “URL

De esta forma, habríamos conseguido tener el resultado esperado pero, como ya dije, no es nada elegante y los usuarios podrían olvidarse de la forma de hacerlo y armar un caos.

 

Solución 2, un poco menos fácil y muy elegante.

  • Para empezar tendríamos que editar el archivo itemstyle.xsl que contiente las plantillas de los elementos que se muestran en los Web Parts y crearíamos la siguiente plantilla.
   1:      <xsl:template name="Enlaces" match="Row[@Style='Enlaces']" mode="itemstyle">
   2:           <xsl:variable name="SafeLinkUrl">
   3:               <xsl:call-template name="OuterTemplate.GetSafeLink">
   4:                   <xsl:with-param name="UrlColumnName" select="@URL"/>
   5:               </xsl:call-template>
   6:           </xsl:variable>
   7:           <xsl:variable name="DisplayTitle">
   8:               <xsl:call-template name="OuterTemplate.GetTitle">
   9:                   <xsl:with-param name="Title" select="@URL"/>
  10:                   <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
  11:               </xsl:call-template>
  12:           </xsl:variable>
  13:           <xsl:variable name="varLink">
  14:              <xsl:value-of select="substring-before($DisplayTitle,',')"/>
  15:           </xsl:variable>
  16:           <div id="linkitem">
  17:               <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
  18:               <div class="divLink">
  19:                   <a href="{$varLink}" target="_blank" title="{$DisplayTitle}">
  20:                       <xsl:value-of select="substring-after($DisplayTitle,',')"/>
  21:                   </a>
  22:               </div>
  23:           </div>
  24:      </xsl:template>

 

  • Una vez hecho esto, tendríamos que editar las propiedades del CQWP y establecer el la plantilla de elementos y los campos correspondientes

 

¡HECHO! Con esto habremos obtenido el resultado deseado. Además, como controlamos nuestra plantilla para los links, también podremos personalizar más a fondo los estilos CSS para mostrar los enlaces de la forma que querramos.

SharePoint 2010: Formatear fecha en XSLT

Escenario:

Supongamos que queremos editamos la plantilla de estilos de elementos “ItemStyle.xsl” para poner nuestro estilo personalizado y mostrar la fecha  en la que se publicó el contenido, además del título con el enlace, el autor y la descripción.

Para ello no tendríamos más que añadir  una nueva plantilla xsl de la siguiente forma.

 

   1:        <xsl:template name="YourItemTemplateName" match="Row[@Style=YourItemTemplateName]" mode="itemstyle">
   2:          <xsl:variable name="SafeLinkUrl">
   3:              <xsl:call-template name="OuterTemplate.GetSafeLink">
   4:                  <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
   5:              </xsl:call-template>
   6:          </xsl:variable>
   7:          <xsl:variable name="DisplayTitle">
   8:              <xsl:call-template name="OuterTemplate.GetTitle">
   9:                  <xsl:with-param name="Title" select="@Title"/>
  10:                  <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
  11:              </xsl:call-template>
  12:          </xsl:variable>
  13:          <div class="divCustomItem">
  14:              <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
  15:              <div class="divTitle">
  16:                  <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkTitle">
  17:                    <xsl:if test="$ItemsHaveStreams = 'True'">
  18:                      <xsl:attribute name="onclick">
  19:                        <xsl:value-of select="@OnClickForWebRendering"/>
  20:                      </xsl:attribute>
  21:                    </xsl:if>
  22:                    <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
  23:                      <xsl:attribute name="onclick">
  24:                        <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
  25:                      </xsl:attribute>
  26:                    </xsl:if>
  27:                    <xsl:value-of select="$DisplayTitle"/>
  28:                    
  29:                  </a>
  30:              </div>
  31:              <div class="divAdditionalData">
  32:                  por <xsl:value-of select="@Author"/> - <xsl:value-of select="@Created" />
  33:              </div>
  34:              <div class="divDescription">
  35:                  <xsl:value-of select="@Description" /> 
  36:              </div>
  37:          </div>
  38:      </xsl:template>

 

El resultado obtenido sería el siguiente:

 

Como se puede apreciar, la fecha se muestra con la hora incluida y… para este caso, no nos va a interesar que salga la hora y que la fecha esté formateada de la siguiente forma "08-02-2012

 

Solución:

Para empezar tendremos que importar el espacio de nombres xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime al nodo raíz de nuestra plantilla XSLT, con lo que debería quedar algo así:

<xsl:stylesheet 
  version="1.0" 
  exclude-result-prefixes="x d xsl msxsl cmswrt"
  xmlns:x="http://www.w3.org/2001/XMLSchema" 
  xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" 
  xmlns:cmswrt="http://schemas.microsoft.com/WebParts/v3/Publishing/runtime"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">

 

Una vez hecho esto, sólo nos quedará formatear la fecha de la siguiente forma dd-MM-yyyy. Para ello tenemos que hacer uso de la función FormatDateTime que se encuentra bajo el espacio de nombre que añadimos anteriormente y al que denominamos ddwrt

 

<xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />

 

Con esto, el código nos quedaría de la siguiente forma.

 

   1:        <xsl:template name="YourItemTemplateName" match="Row[@Style=YourItemTemplateName]" mode="itemstyle">
   2:          <xsl:variable name="SafeLinkUrl">
   3:              <xsl:call-template name="OuterTemplate.GetSafeLink">
   4:                  <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
   5:              </xsl:call-template>
   6:          </xsl:variable>
   7:          <xsl:variable name="DisplayTitle">
   8:              <xsl:call-template name="OuterTemplate.GetTitle">
   9:                  <xsl:with-param name="Title" select="@Title"/>
  10:                  <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
  11:              </xsl:call-template>
  12:          </xsl:variable>
  13:          <div class="divCustomItem">
  14:              <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>
  15:              <div class="divTitle">
  16:                  <a href="{$SafeLinkUrl}" title="{@LinkToolTip}" class="linkTitle">
  17:                    <xsl:if test="$ItemsHaveStreams = 'True'">
  18:                      <xsl:attribute name="onclick">
  19:                        <xsl:value-of select="@OnClickForWebRendering"/>
  20:                      </xsl:attribute>
  21:                    </xsl:if>
  22:                    <xsl:if test="$ItemsHaveStreams != 'True' and @OpenInNewWindow = 'True'">
  23:                      <xsl:attribute name="onclick">
  24:                        <xsl:value-of disable-output-escaping="yes" select="$OnClickTargetAttribute"/>
  25:                      </xsl:attribute>
  26:                    </xsl:if>
  27:                    <xsl:value-of select="$DisplayTitle"/>
  28:                    
  29:                  </a>
  30:              </div>
  31:              <div class="divAdditionalData">
  32:                  por <xsl:value-of select="@Author"/> - <xsl:value-of select="ddwrt:FormatDateTime(string(@Created) ,1033 ,'dd-MM-yyyy')" />
  33:              </div>
  34:              <div class="divDescription">
  35:                  <xsl:value-of select="@Description" /> 
  36:              </div>
  37:          </div>
  38:      </xsl:template>

 

Finalmente, el resultado sería el deseado:

 

SharePoint 2010: Ocultar elementos web o bloques de una página según permisos (SPSecurityTrimmedControl).

Escenario:

Supongamos que tenemos un sitio de SharePoint, en este caso me voy a centrar en un sitio de publicación y, que queremos ocultar la Ribbon a los usuarios anónimos, o lo que es lo mismo, mostrarla sólo a los usuarios con permisos para realizar ediciones (diseño, contenido,…).

 

Solución:

SharePoint nos provee de un control (muy bueno) para realizar esta tarea SPSecurityTrimmedControl, muy fácil de usar. Este control nos valdría para mostrar/ocultar elementos web o bloques de nuestras páginas a los usuarios según los permisos especificados, pero en este ejemplo, lo enfocamos a la Ribbon de SharePoint.

Supongamos que sólo queremos mostrar la Ribbon a los usuarios que tengan permisos para “Añadir, editar o borrar páginas HTML, o páginas de Web Parts, y editar el sitio”. Podríamos hacer uso de SPSecurityTrimmedControl de esta forma.

   1: <Sharepoint:SPSecurityTrimmedControl ID="SPSecurityTrimmedControl" runat="server" PermissionsString="AddAndCustomizePages">

   2:          Tu control

   3: </Sharepoint:SPSecurityTrimmedControl>

 

Como podéis observar, hago uso de la propiedad PermissionsString para asignar permisos. Las posibles opciones las podéis encontrar AQUÍ

 

Otra opción es hace uso de la propiedad Permissions como muestro en el siguiente ejemplo:

   1: <Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="AddAndCustomizePages">

   2:          Tu control

   3: </SharePoint:SPSecurityTrimmedControl>

 

Una vez más la lista de las posibles opciones la podéis encontrar AQUÍ

 

Con esto, lo que conseguiremos es que, para aquellos usuarios que no tengan los permisos especificados, no se ejecutará lo que esté incluido dentro del control SPSecurityTrimmedControl, con lo que si ponemos nuestra Ribbon dentro, ésta no se mostrará. Por otro lado, si dispusiéramos de los permisos necesarios para “Añadir, editar o borrar páginas HTML, o páginas de Web Parts, y editar el sitio”, sí visualizaríamos la Ribbon, con lo que podríamos ejecutar las acciones que ésta nos provee.

Internet Explorer 9: Vista de compatibilidad por defecto para sitios de Intranet

Escenario:

Estos días he estado realizando una web pública http://www.boPlace.com para una aplicación de Windows Phone 7 que hemos desarrollado Alberto Díaz Martín y yo. Al probarla desde Visual Studio todo funciona perfecto. Se abre el Internet Explorer 9 que es el que tengo asociado y todo se ve correcto.

Ahora viene el problema. Hemos publicado la web desde un servidor interno que, por x motivos relacionados con Proxies, Firewalls,… para acceder al sitio, no puedo usar www.boPlace.com, sino que tengo que hacerlo con la ruta interna y… la cosa se pone fea (la web) porque se ejecuta en el modo de compatibilidad IE7. Como la web usa hojas de estilo que no son compatibles del todo con IE7… se ve muy mal, aunque como la gente que no está muy metida en el mundo de la informática no suele actualizar los navegadores (todavía quedan IE6 por ahí), habrá que hacer que se vea bien. Pero este no es el problema, el problema es… ¿por qué si accedo a la ruta local del sitio web, explorer se pone en modo compatibilidad?

 

Camino a la solución:

Después de realizar un pequeño brainstorming para darle lógica a esto… empiezo a probar.

  1. La aplicación está hecha con MVC3 y… en el Layout, el DOCTYPE lo pone vacío, es decir <!DOCTYPE>
    • PRUEBA: pues a probar si poniéndole un DOCTYPE válido funciona correctamente
    • RESULTADO: Meeeeck. Todo sigue igual =o(
  2. Los metas son muy útiles para ciertas cosas como la detección del navegador
    • BÚSQUEDA: ¿Habrá algún meta que deshabilite la visualización en modo Compatibilidad? ¡Sí!
    • PRUEBA: Pongo el meta siguiente <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    • RESULTADO: Meeeeck. Todo igual =o( Y van 2 intentos
  3. Configuración del IIS
    • BÚSQUEDA: ¿Habrá alguna configuración en el IIS del servidor que fuerce a ejecutarse en modo compatibilidad IE7? Podría ser que alguno de los sitios web que ya existen requieran esa configuración y esté forzándose. Pues… como IIS es fantástico, existe una forma de configurarlo, tal y como se explica en este artículo de Joel Varty
    • PRUEBA: Le pregunto al administrador de sistemas si tiene esa configuración.
    • RESULTADO: No está configurado nada de eso.
  4. ¡A tirarse de los pelos buscando la solución!
    • BÚSQUEDA: Tengo muchos pelos y… seguro que encuentro la solución antes de quedarme calvo.
    • PRUEBA: Bing + Google herramientas fundamentales… y encuentro la solución aquí justo en el momento en que el administrador de sistemas aparece por mi puesto.
    • SOLUCIÓN: Resulta que IE9 tiene marcado por defecto que los sitios de la intranet los ejecute en el Modo Compatibilidad…
      • Pasos a seguir
        1. En IE9 ir a “Tools” en mi caso o “Herramientas”.
        2. Seleccionar “Compatibility View Settings” en mi caso o “Opciones de la vista de compatibilidad” (creo)
        3. Desmarcar la opción “Display intranet sites in Compatibility View”.

Esto es todo. Espero que a alguien le ahorre el tiempo que perdí intentando encontrar la solución.

MS Access 2010: Curso Online

Buenos días a todos.

En estos momentos estoy realizando haciendo algunas cosillas con MS Access 2010… (hay que saber de todo) y… buscando por internet me he encontrado una web con un curso bastante completo, esquematizado y con ejercicios sobre MS Access 2010 (También lo tienen de la versión 2007).

Quería compartirlo por si a alguien le hace falta algún día…

http://www.functionx.com/access/