Blog » Niestandardowa opcja konfiguracji w WebParcie
Aktualna ocena: 5 (0)

Niestandardowa opcja konfiguracji w WebParcie

 
Niestandardowa opcja konfiguracji w WebParcie
Klikając opcję w menu WebParta - "Modyfikuj udostępniony składnik WebPart" użytkownik w SharePoint ma możliwość jego skonfigurowania. W bardzo prosty sposób można też dodać dodatkowe opcje konfiguracyjne (tworzy się pole w klasie z odpowiednimi parametrami). Ten sposób ma jednak  duże ograniczenie polegające na używaniu jedynie podstawowych typów danych: string, int, enum. Co zrobić jeśli chcemy udostępnić użytkownikowi listę wyboru tworzącą się dynamicznie, np.: na podstawie jakiejś listy w SharePoint ?

W tym poście postaram się pokazać w jaki sposób stworzyć opcję konfiguracji dla WebPartów znajdujące się we właściwościach.  Poniżej znajduje się standardowe okno konfiguracji właściwości.
Po dodaniu pola do klasy WebParta i odpowiednich parametrów:
 
        [Personalizable(PersonalizationScope.Shared),
            WebBrowsable(true),
            Category("Dodatkowe ustawienia"),
            DefaultValue("1"),
            WebDisplayName("Adres zbioru witryn"),
            WebDescription("Domyślnie brana jest ścieżka relatywna do aktualnego zbioru witryn")]
public string SiteProperties { get; set; }
Jednak nie we wszystkich sytuacjach tego typu rozwiązanie jest korzystne. Czasami jest lepiej stworzyć własne, niestandardowe edytory właściwości czyli zdecydować jak ma wyglądać sposób konfiguracji (wygląd obszaru na zrzucie powyżej). Aby to zrobić trzeba wykonać kroki opisane poniżej:
 
1. Zmodyfikować pole w klasie
 
        [Personalizable(PersonalizationScope.Shared),
            WebBrowsable(false),
            Category("Dodatkowe ustawienia"),
            DefaultValue("1"),
            WebDisplayName("Adres zbioru witryn"),
            WebDescription("Domyślnie brana jest ścieżka relatywna do aktualnego zbioru witryn")]
            public string SiteProperties { get; set; }
 
2. Stworzyć nową klasę która dziedziczy po System.Web.UI.WebControls.WebParts.EditorPart np.:
 
    public class CategorizationEditorPart : System.Web.UI.WebControls.WebParts.EditorPart
    {
        public override bool ApplyChanges()
        {
            throw new NotImplementedException();
        }
 
        public override void SyncChanges()
        {
            throw new NotImplementedException();
        }
    }
 
Na przykładzie widać również klasy abstrakcyjne, które należy zaimplementować gdy dziedziczy się z klasy EditorPart. Wzmiankowane metody ustawiają właściwości składnika WebPart lub właściwości edytora składników, odpowiadają za komunikację w dwie strony:
- ApplyChanges - Pobiera dane z ustawień (edytora właściwości) i stosuje je w WebParcie,
- SynsChanges - Pobiera dane z WebParta i wpisuje je jako startowe do edytora właściwości.
3. Aby WebPart wiedział, że ma skorzystać z niestandardowego edytora właściwości należy w klasie WebParta przeciążyć metodę CreateEditorParts(), w której należy dodać informację o używanej klasie jako edytorze właściwości:
 
        public override EditorPartCollection CreateEditorParts()
        {
            List<EditorPart> editorParts = new List<EditorPart>(1);
            EditorPart editor = new CategorizationEditorPart();
            editor.ID = this.ID + "_editorCategorization";
            editorParts.Add(editor);
            EditorPartCollection baseParts = base.CreateEditorParts();
            return new EditorPartCollection(baseParts, editorParts);
        }
 
4. W tym kroku kończymy konfigurację klasy edytora właściwości czyli ciąg dalszy punktu 2. W celu wpłynięcia na sposób wyświetlania edytora należy dodatkowo przeciążyć klasę CreateChildControls()
 
    public class CategorizationEditorPart : System.Web.UI.WebControls.WebParts.EditorPart
    {
        private TextBox txtCategory;
 
        protected override void CreateChildControls()
        {
            this.Title = "Adres zbioru witryn";
            txtCategory = new TextBox();
            if (WebPartManager.Personalization.Scope == PersonalizationScope.User)
                txtCategory.Enabled = false;
            this.Controls.Add(txtCategory);
        }
    
        public override bool ApplyChanges()
        {
            this.EnsureChildControls();
            CoreWebPart targetPart = (CoreWebPart)this.WebPartToEdit;
            targetPart.Categorization = txtCategory.Text;
            return true;
        }
 
        public override void SyncChanges()
        {
            this.EnsureChildControls();
            CoreWebPart sourcePart = (CoreWebPart)this.WebPartToEdit;
            string category = sourcePart.Categorization;
            txtCategory.Text = category;
        }
    }
 
 5. Rezultat działań pokazany jest poniżej.
 
Przykład zrobiłem na prostej kontrolce typu TextBox ale nic nie stoi na przeszkodzie żeby użyć do tego innych kontrolek np.: dwóch list rozwijanych zależnych od siebie. Dowolną logikę możemy uruchomić z poziomu klasy CreateChildControls(). Wybrana opcja będzie dostępna z poziomu WebParta. 
 
 

Dodany: 2010-02-07 21:39:45 przez Michał Nikołajuk | Wypowiedzi: 0
Dodaj do MySpace Dodaj do Twitter Dodaj do Yahoo Bookmarks Dodaj do Facebook Dodaj do Google Bookmarks Dodaj do Yahoo MyWeb
Komentarze
Wpis nie posiada komentarzy.
Zostaw komentarz Subskrybuj



 Security code