niedziela, 28 lipca 2013

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.

Brak komentarzy:

Prześlij komentarz