wszystkie wpisy

Layouts folder location in sharepoint 2010/2013

No i stało. Oficjalnie wyszedł długo oczekiwany następca sharepointa 2010, czyli sharepoint 2013. Zapewne posiada wiele ciekawych funkcji i udogodnień, natomiast pierwszą rzeczą, która rzuca się w oczy, to fakt, że projekty napisane w sharepoint 2010, które planujemy wdrożyć dla sharepointa 2013 powinny być skonwertowane na typ projektu ‘sharepoint 2013’. Projekt po takiej konwersji nie może zostać użyty w ‘sharepoint 2010’. W praktyce jesteśmy więc zmuszeni do stworzenia dwóch projektów obok siebie i wymuszenia, aby oba projekty posiadały wspólne pliki .cs (niestety, ale inne pliki, czyli aspx, ascx, css, js, xml, png, i cała reszta plików umieszczana zazwyczaj w ‘layouts’ musi być zdublowana i znajdować się w obu projektach).

Gdyby jednak tego było mało, to folder layouts w nowym sharepoincie nie nazywa się ‘layouts/’ (tak jak to było w sharepoint 2010), tylko… ‘layouts/15/”.

Na szczęście jest sposób, aby można było wykorzystywać te same pliki .cs w obu projektach. Oto on, czyli klasa UrlHelper:

public class UrlHelper     {

        public static string LayoutsUrl         {             get             {                 PropertyInfo pi = typeof(SPUtility).GetProperty(

“ContextLayoutsFolder”, BindingFlags.Public | BindingFlags.Static);

                if (pi == null)                     return ”/_layouts/”;                 else                     return String.Format(”/{0}/”, pi.GetValue(null, null).ToString());             }

        }

        public static string ImagesUrl         {             get             {                 PropertyInfo pi = typeof(SPUtility).GetProperty(“ContextImagesRoot”, BindingFlags.Public | BindingFlags.Static);

                if (pi == null)                     return ”/_layouts/images/”;                 else                     return String.Format(“{0}”, pi.GetValue(null, null).ToString());             }

        }

        public static string ControlTemplatesUrl         {             get             {                 PropertyInfo pi = typeof(SPUtility).GetProperty(“ContextControlTemplatesFolder”, BindingFlags.Public | BindingFlags.Static);

                if (pi == null)                     return ”/_CONTROLTEMPLATES/”;                 else                     return String.Format(”/{0}/”, pi.GetValue(null, null).ToString());

            }                     }     }

W praktyce, wszędzie, gdzie odwołujemy się do katalogów związanych z ‘layouts’, zamiast wpisywać stringi, powinniśmy wykorzystać metodę klasy UrlHelper.