2010-06-09 17 views
6

Jedną z rzeczy, która doprowadziła mnie do szaleństwa w stosunku do SharePoint2007, jest widoczna niezdolność do definiowania ustawień, które dotyczą konkretnie samej witryny lub zbioru witryn, a nie treści. Mam na myśli pewne wstępnie zdefiniowane ustawienia, takie jak logo witryny, nazwa witryny i wiele innych rzeczy, ale wydaje się, że nie ma gdzie dodawać nowych ustawień.Jaki jest właściwy sposób przechowywania globalnych zmiennych na poziomie witryny w witrynie programu SharePoint?

Aplikacja, nad którą pracuję, musi być w stanie tworzyć wiele rodzajów "kolekcji witryn projektu", które są zgodne z podstawowym szablonem, ale mają pewne dodatkowe ustawienia, które odnoszą się konkretnie do tego zbioru witryn i tego samego. Oprócz standardowej nazwy strony musimy również zdefiniować numer projektu, nazwę projektu i nazwę klienta. Biorąc pod uwagę żądania niektórych naszych klientów, osiągamy również punkt, w którym musimy mieć konfigurowalne ustawienia, które zmieniają sposób działania niektórych workflow, np. Czy pliki są oznaczone literami lub cyframi.

Nasze obecne rozwiązanie, o które się nie zgadzam, polegało na przechowywaniu pliku XML na serwerze SharePoint. Ten plik zawiera jeden węzeł dla każdej kolekcji witryn, identyfikowany przez adres URL witryny głównej. Wewnątrz węzła znajdują się wszystkie elementy, które należy zdefiniować dla tego zbioru witryn. Kiedy ich potrzebujemy, musimy uzyskać dostęp do pliku XML (który zawsze będzie wymagać SPSecurity.RunWithElevatedPrivileges w celu uzyskania dostępu do plików bezpośrednio na serwerze) za każdym razem, aby go załadować i pobrać dane. Jest wiele zautomatyzowanych procesów, które będą musiały to zrobić, i nie mam pewności co do stabilności tej metody, gdy docieramy do setek witryn z tysiącami plików z dziesiątkami tysięcy przepływów pracy, wszystkie chcące uzyskać dostęp do tego pliku. Może są to bezpodstawne zmartwienia, ale wolałbym się martwić, niż ryzykować, że wszystko załamie się za kilka lat.

Szukałem obiektu SPWeb i znalazłem hashtable AllProperties. Wygląda to na coś, co może zadziałać, ale nie wiem, jak bezpieczne jest modyfikowanie tego. Przeczytałem zarówno MSDN i WSS SDK, ale nie znalazłem nic, co wyjaśniłoby dodanie zupełnie nowych właściwości do AllProperties. Czy można bezpiecznie używać tego rodzaju rzeczy? Czy jest jeszcze inna funkcja, której mi brakuje, która mogłaby obsłużyć koncepcję zmiennych globalnych w zbiorze witryn lub zasięgu witryny?

Odpowiedz

5

Zalecanym sposobem, aby to zrobić jest użycie PropertyBag (par klucz/wartość) przez .Properties z SPFarm, SPWeb.RootWeb (dla zbiorów witryn), SPWeb, SPList etc (w zależności od zakres, który potrzebujesz).

MSDN - Managing Custom Configuration Options for a SharePoint Application

Jest produkcja kod gotowy dostępny jako część

MSDN - The SharePoint Guidance Library

Zobacz Hierarchical configuration manager

to daje dostęp programistyczny do odczytu/zapisu tych wartości. Jeśli chcesz to zrobić bez korzystania z biblioteki wskazówek, użyjesz czegoś takiego jak poniższy kod.

SPWeb web = SPContext.Current.Web; 
if (web.Properties.ContainsKey("MyProperty")) 
    string myProperty = web.Properties["MyProperty"]; 

Jeśli chcesz UI, aby umożliwić administratorom łatwo ustawić wartości następnie wykorzystać SharePoint Designer (urghhhh!) Lub coś podobnego SharePoint Property Bag Settings

+0

pisałem niestandardowej strony wniosek o ustalenie tych wartości, więc na szczęście nie SharePoint Projektant. Dzięki za artykuły, nie tylko podkreśliła opcje, ale także pomogła wyjaśnić zastosowanie AllProperties versus Properties. To wygląda na ścieżkę do zrobienia! –

+0

Więcej zamieszania dla Ciebie - http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/ Nie jestem pewny, czy zgadzam się z autorem - myślę, że Properties to sposób na osiągnięcie - warto zauważyć o jednak wrażliwość na wielkość liter. – Ryan

1

Worek właściwości można wykorzystać do przechowywania właściwości typu klucz/wartość. Myślę, że jest przeznaczony do tego, jakie są twoje cele.

Osobiście bardziej potrzebuję właściwości zbierania danych między witrynami (takich jak ciągi połączeń db) i używam ich do przechowywania this.

Powiązane problemy