lunes, 7 de diciembre de 2009

[SharePoint] - Obtener la url de un recurso desde la zona correcta

Alguien había oído hablar del método SPUtility.AlternateServerUrlFromHttpRequestUrl?

Pues básicamente este método nos permite hacer un mapeo de un recurso entre distintas zonas, y nos devuelve la url del recurso en la zona correcta.

A continuación un ejemplo de donde podría ser útil este método, cabe mencionar que estoy acomodando el escenario de tal manera de que se puede notar la funcionalidad de este método.

Por poner un escenario básico, el siguiente:

Tenemos una web application con la url http://intranet.corp.com, que ha sido extendida a la zona de extranet en la url http://extranet.corp.com, para tener un método de autentificación distinto.

Y tenemos una lista con un campo de tipo Imagen, estos campos almacenan rutas absolutas, por lo que cuando se guarde en este campo con una imagen desde la intranet, la ruta que almacenara será más o menos así:

http://intranet.corp.com/PublishingImages/Image1.jpg

Cuando nosotros leamos la lista y construyamos nuestro HTML para que muestre la imagen en una webpart,

Image
Existen dos escenarios posibles:

Si el usuario esta accediendo desde la zona de intranet todo irá bien, sin embargo, si el usuario ha accedido desde la zona de Extranet, se pintara el mismo HTML, porque la url se está leyendo directamente de la lista. Y cuando esto suceda, al usuario se le solicitaran las credenciales pertinentes para obtener acceso al recurso, porque este se encuentra en una zona diferente.

A fin de solucionar este escenario hipotético podemos utilizar el método SPUtility.AlternateServerUrlFromHttpRequestUrl, el cual nos permite transformar esta url por la url correcta dependiendo de la zona en que nos encontremos. Como se aprecia en el fragmento de código siguiente:

/// 
/// Recuperacion de la lista
/// 
/// 
private SPList GetList()
{
 SPList listImages = null;
 using (SPSite site = new SPSite ("http://intranet.corp.com"))
 {
  using (SPWeb web = site.OpenWeb())
  {
   listImages = web.Lists["PublishingImages"];

   for (int index = 0; index < listImages.Items.Count; index++)
   {
    //url de la imagen, extraida directamente desde la lista
    string urlImage = listImages.Items[index]["Thumbnail"].ToString();
    string correctUrl = string.Empty;
    //obtenemos solo la url, sin el nombre de la imagen
    if (urlImage.Contains(","))
    {
     urlImage = urlImage.Split(",".ToCharArray())[0];
    }

    if (Uri.IsWellFormedUriString(urlImage, UriKind.RelativeOrAbsolute) == true)
    {
     Uri uriImage = new Uri(urlImage);
     correctUrl = SPUtility.AlternateServerUrlFromHttpRequestUrl(uriImage).ToString();
    }

    listImages.Items[index]["Thumbnail"] = correctUrl;
   }
  }
 }
 return listImages;
}
Y con esto al crear el HTML correspondiente a la imagen, el resultado variará dependiendo de la zona en la cual nos encontramos.
Image
Image 
Otros posibles escenarios de uso podrían ser al customizar las búsquedas, al obtener los resultados de estas, las urls de los resultados vendrán con la url de la zona default, pero con el método mencionado podemos solucionar este problema SPUtility.AlternateServerUrlFromHttpRequestUrl Method


Happy Coding!

0 comentarios:

Etiquetas

SharePoint 2010 (38) Microsoft (32) Desarrollo SharePoint (31) Gerardo Reyes Ortiz (27) SharePoint (20) SharePoint 2013 (18) Errores SharePoint (12) México (10) PowerShell (9) Silverlight (8) Visio Services (7) Features (6) MVP (6) Silverlight 3 (6) WebCast (6) Workflows (6) Configuracion SharePoint 2010 (5) D.F. (5) API REST (4) Configuracion SharePoint 2010; (4) Troubleshooting (4) Visual Studio 2010 (4) Visual studio (4) WSS (4) Web parts (4) Apps (3) Comunidad SharePoint (3) Configuración SharePoint 2013 (3) ODATA (3) SharePoint Server (3) SharePoint; Instalación SharePoint; Troubleshooting; Search Service (3) Silverlight 3.0 (3) Silverlight Toolkit (3) WebParts (3) javascript (3) jquery (3) Eventos SharePoint (2) Office 2010 (2) PeoplePicker (2) REST (2) SQL Server (2) Scripting (2) Search Service Application (2) SharePoint Designer (2) UPA (2) UPS (2) Workflows SharePoint (2) host header (2) Apps Development (1) Big Bang (1) CAS (1) CSOM (1) Codeplex (1) CompartiMOSS (1) Configuracion SharePoint 2010; Errores SharePoint (1) Configuracion SharePoint 2010; SharePoint 2010 (1) Custom Actions (1) Custom Editor Parts (1) Delegate Controls (1) Deployment (1) DisableLoopbackCheck (1) Document Library (1) Entrevista (1) Examenes de Certificación (1) Extract WSP (1) FBA (1) FS4SP (1) Fakes (1) Fast Search Server 2010 For SharePoint (1) Fiddler (1) HTTP.SYS (1) HTTPS (1) JSON (1) Language Pack's (1) Latam (1) MAXDOP (1) MCSM (1) MSExpertos (1) MVC (1) Microsoft México (1) Microsoft; Codeplex; Screencast; (1) My Sites (1) SQL Server 2012 (1) SQL Server Reporting Services (1) Screencast (1) Screencast; (1) Service Applications (1) Service Pack (1) SharePoint 2007 (1) SharePoint 2010 SP 1 (1) SharePoint API (1) SharePoint Conference (1) SharePoint Emulators (1) SharePoint Farm (1) SharePoint Health Analyzer (1) SharePoint Magazine (1) SharePoint Online (1) SharePoint Search (1) SharePoint Test (1) SharePoint; Desarrollo SharePoint (1) Shims (1) Simposio (1) Simposio Latinoamericano (1) SkyDrive Pro (1) Soporte Microsoft (1) Templates (1) Tip (1) VSeWSS (1) Virtual Machine (1) Visual Studio 2012 (1) WCF (1) WSS; IIS 7 (1) Web API (1) Web Content Management (1) Web Services (1) Windows 8 (1) Windows Live ID (1) Xml (1) appcmd (1) iOS (1) jqGrid (1) onload function (1)