Procedimiento para personalizar la lógica de destino de raíz de variante

Última modificación: viernes, 12 de noviembre de 2010

Hace referencia a: SharePoint Server 2010

Cuando se aprovisiona una colección de sitios en Microsoft SharePoint Server 2010 y se configuran las variantes, SharePoint Server 2010 realiza lo siguiente:

  • Crea una página en el sitio principal de variante denominada VariationRoot mediante el archivo de diseño de página VariationRootPageLayout.aspx en la Galería de diseños de página y la Galería de páginas maestras.

  • Reemplaza la página de bienvenida del sitio principal de variante por la página VariationRoot.

Si se desplaza al sitio principal de variante, SharePoint Server 2010 busca la propiedad WelcomePage del sitio y ejecuta la página VariationRoot. Como esa página está basada en VariationRootPageLayout.aspx, ejecuta el archivo de diseño de página. El diseño de página VariationRootPageLayout contiene una referencia a un archivo denominado VariationsRootLanding.ascx y un control de usuario que se define en el archivo VariationsRootLanding.ascx. El diseño de página ejecuta la lógica en el archivo VariationsRootLanding.ascx y redirecciona al usuario a un sitio de variante.

La lógica predeterminada que se usa en el archivo VariationsRootLanding.ascx consiste en redireccionar al usuario al sitio de variante que coincide con el accept lang por el explorador, o el abanico de códigos de idioma en el que está disponible el documento actual. El archivo VariationsRootLanding.ascx se define en la ruta de acceso \<Program Files>\Common Files\Microsoft Shared Debug\Web Server Extensions\14\Template\ControlTemplates.

Si desea que la lógica de la página de aterrizaje de raíz de variante predeterminada redireccione al usuario a un sitio de variante que no esté basado en accept lang, puede hacerlo de tres formas. Cada opción tiene sus ventajas y desventajas, que se deben tener en cuenta antes de decidir el método que se va a usar:

  • Editar directamente el archivo VariationsRootLanding.ascx.

    Esta forma es la más rápida para editar la lógica. Simplemente edite la lógica en el archivo VariationsRootLanding.ascx directamente según sea necesario en el sistema de archivos del servidor front-end web.

    Nota

    Debe actualizar el archivo VariationsRootLanding.ascx en cada uno de los equipos servidor front-end web. Todas las colecciones de sitios del conjunto o granja de servidores están vinculadas a la lógica de destino de raíz de variante personalizada que ha especificado.

  • Copiar el contenido del archivo VariationsRootLanding.ascx en el diseño de página de la Galería de diseños de página y la Galería de páginas maestras.

    Para obtener más detalles sobre cómo implementar este enfoque, vea el primer procedimiento, Para copiar el contenido desde el archivo VariationsRootLanding.ascx al diseño de página. Al igual que en el enfoque anterior, este enfoque también proporciona una personalización rápida y sencilla a través de la edición directa, sin problemas de implementación ni recopilación de DLL. Además, como cada colección de sitios usa su propio conjunto de diseños de página, este enfoque permite la personalización de la lógica de destino raíz de variante en un nivel de colección de sitios. Para completar este proceso, también debe actualizar el archivo web.config en cada uno de los equipos servidor front-end web.

    Nota de precauciónPrecaución

    Preste atención al establecer la marca AllowCompilation en el archivo VariationRootPageLayout.aspx. El uso de código alineado implica que alguien podría insertar código malintencionado en la página.

  • Crear un ensamblado precompilado.

    Para obtener detalles sobre la implementación de este enfoque, vea el segundo procedimiento, Para crear un ensamblado precompilado. Este enfoque no presenta ningún riesgo para la seguridad relacionado con abrir un elemento de la Galería de diseños de página y la Galería de páginas maestras para la ejecución del código incorporado. Al igual que en el enfoque anterior, la personalización se realiza en un nivel de colección de sitios. Sin embargo, cada vez que se necesita cambiar la lógica de destino de raíz de variante, es necesario recompilar el ensamblado. Así, este enfoque ofrece un ciclo de cambio-prueba-implementación menos rápido. Debe implementar el ensamblado en todos los equipos del sistema de archivos de servidor front-end web.

Hay un escenario adicional que puede usar mediante la modificación del código en el archivo VariationsRootLanding.ascx. Si usa un trabajo de implementación con ámbito para implementar un sitio de variante y el trabajo no implementa todas las etiquetas de variante en la jerarquía de variantes del origen de implementación, los usuarios que normalmente se redireccionan a dichas etiquetas reciben un error 404 al navegar a la raíz de variante en el destino de implementación. Por ejemplo, si tiene una etiqueta en la jerarquía de variantes destinada a una configuración regional de alemán y esa etiqueta no está incluida en la implementación con ámbito, los exploradores establecidos para preferir configuraciones regionales de alemán reciben un error 404 al navegar a la raíz de variante en el equipo de destino. De manera predeterminada, la lógica de destino de raíz no comprueba la validez de la dirección URL de redireccionamiento que usa.

Una manera de afrontar este problema es modificar la lógica de destino de raíz para detectar si hay un sitio web funcionando en la dirección URL de direccionamiento de destino. Para conocer más detalles sobre esto, consulte el tercer procedimiento, Para modificar la lógica de destino de raíz para detectar cuándo hay un web funcionando.

Para copiar el contenido del archivo VariationsRootLanding.ascx al diseño de página

  1. Copie el código del archivo VariationsRootLanding.ascx e incrústelo en VariationRootPageLayout.aspx de la Galería de diseños de página y la Galería de páginas maestras.

  2. Realice los cambios que desee en el archivo VariationRootPageLayout.aspx.

  3. Quite la referencia a VariationsRootLanding.ascx y su control de usuario de VariationRootPageLayout.aspx.

  4. Para permitir la ejecución del código en línea de VariationRootPageLayout.aspx, modifique el archivo web.config en cada cliente web, como se indica a continuación.

      <SharePoint>
        <SafeMode ... >
          <!-- Marks VariationRootPageLayout.aspx for ASP.NET compilation. -->
          <PageParserPath VirtualPath= "/_catalogs/masterpage/VariationRootPageLayout.aspx" 
            CompilationMode="Always"  
            AllowServerSideScript="False"
            AllowUnsafeControls="False" 
            IncludeSubFolders="True"/>
          </PageParserPaths>
        </SafeMode>
      </SharePoint>
    

Para crear un ensamblado precompilado

  1. Copie el código del archivo VariationsRootLanding.ascx para crear su propio control en el propio DLL del ensamblado.

  2. Realice los cambios que desee en el control.

  3. Agregue una referencia al control en VariationRootPageLayout.aspx en la Galería de diseños de página y la Galería de páginas maestras.

  4. Quite la referencia a VariationsRootLanding.ascx y su control de usuario de VariationRootPageLayout.aspx.

Para modificar la lógica de destino de raíz para detectar cuándo hay un sitio web funcionando

  1. Abra el archivo VariationsRootLanding.ascx.

  2. En la sección GetRedirectUrl(), busque esta línea de código.

    return (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);
    
  3. Reemplace la línea del código del paso 2 por el siguiente código.

    // Customization for handling matchedUrl not valid. 
    // (For example, a content deployed target site collection, 
    // without source hierarchy.)
    matchedUrl = (string.IsNullOrEmpty(matchedUrl) ? sourceLabelUrl : matchedUrl);                           
    using (SPSite site = new SPSite(matchedUrl))
    using (SPWeb web = site.OpenWeb())
         {
         // If matchedUrl is the same as the URL of the Web
         // that you just opened, then matchedUrl is valid.
         if (string.Compare(matchedUrl, web.Url, StringComparison.OrdinalIgnoreCase) == 0 && web.DoesUserHavePermissions(SPBasePermissions.Open))
           {
          //Target URL is valid; return it.
            return matchedUrl;
            }
            else
            {
          //Target URL was NOT valid; the variation label is missing.
          //Perform logic here to redirect the user appropriately.
          //If nothing is done here, then this function returns null
          //and the landing behavior reverts to the
          //VariationsRootLandingRunTime control.
          //This control displays a simple error message that
          //indicates that it could not find an appropriate subsite to 
          //redirect to.
            }
       }
    

Vea también

Otros recursos

Variantes y sitios en varios idiomas