Překlad odkazů dle AAM – SharePoint

SharePoint automaticky překládá všechny odkazy dle aktuální zjištěné URL zóny z HttpRequestu, je jedno zda máte odkazy přímo ve webpart stránce, ve sloupci typu Hypertextový odkaz, případně přímo v richtextu, SharePoint se vždy při renderingu podívá, zda odkaz není definován v AAM a pokud ano, automaticky ho přeloží na tvar přístupný aktuálně přihlášenému uživateli. Je to funkce logická a žádaná, neboť je jedno, zda vložíte do textu odkaz z intranetové či extranetové zóny (url adresy SP portálu), všichni uživatelé budou mít odkazovaný obsah dostupný vždy.
Stejné chování je potřeba přenést i do vlastně vyvinutých funkcí, webpart, aplikačních stránek – protože tam to SharePoint sám o sobě neumí. Převod je sám o sobě velice jednoduchý, základem je objekt SPSite, který je ale nutné buď převzít z kontextu SPContext.Current.Site nebo ho inicializovat pomocí aktuální Url adresy HttpRequestu – tedy tak, aby došlo k inicializaci objektu SPSite ve správné zóně (SPUrlZone), nelze tedy tento objekt inicializovat pomocí GUID, kde se informace o zóně ztratí.
Pro překlad odkazu mám triviální rozšíření objektu SPSite:
 
public static string TranslateUrlByAAM(this SPSite site, string url) 
{ 
    if (site == null) 
        throw new ArgumentNullException("site"); 
    if (string.IsNullOrEmpty(url)) 
        return url;

    Uri originalUri = new Uri(url); 
    Uri translateUri = SPFarm.Local.AlternateUrlCollections 
        .RebaseUriWithAlternateUri(originalUri, site.Zone); 
    if (translateUri == null) 
        return url; 
    return translateUri.ToString(); 
}

 

Analogicky regex pro replace url odkazů v html textu.

Napsat komentář