Одной вещью, которая свела меня с ума о SharePoint2007, является очевидная неспособность иметь defineable настройки, которые применяются конкретно к самому набору сайта или сайта а не содержанию. Я имею в виду, у Вас есть некоторые предопределенные настройки как Логотип Сайта, Название сайта и различные другие вещи, но, кажется, нет где угодно для добавления новых видов настроек.
Приложение я работаю над потребностями смочь создать несколько видов "наборов стройплощадки", что все следуют за основным шаблоном, но имеют определенные дополнительные настройки, которые применяются конкретно к тому набору сайта и что один один. В дополнение к стандартному названию сайта мы также должны определить Число Проекта, Название проекта и Имя клиента. И, учитывая запросы некоторых наших клиентов, мы также достигаем точки, где у нас должны быть конфигурируемые параметры, которые изменяются, как часть работы рабочих процессов, как то, отмечены ли файлы с Буквами или Числами.
Наше текущее решение, о котором я колеблюсь, состояло в том, чтобы сохранить XML-файл на сервере SharePoint. Этот файл содержит один узел для каждого набора сайта, определенного URL корневого сайта. В узле все элементы, которые должны быть определены для того набора сайта. Когда нам нужны они, мы должны получить доступ к XML-файлу (который будет всегда требовать SPSecurity. RunWithElevatedPrivileges для доступа к файлам прямо на сервере) каждый раз, чтобы загрузить его и получить данные. Существует много автоматизированных процессов, которые должны будут сделать это, и я колеблюсь об устойчивости этого метода, когда мы добираемся до сотен сайтов с тысячами файлов рабочие десятки тысяч рабочих процессов, все желающие получить доступ к этому файлу. Возможно, они - необоснованные заботы, но я взволновал бы, чем рискнул бы всем прерывающим пару лет.
Я изучал объект SPWeb и найденный AllProperties
хеш-таблица. Это похоже просто на вид вещи, которая могла бы работать, но я не знаю, как безопасный это должно изменять это. Я прочитал и MSDN и SDK WSS, но не нашел ничего, что разъяснилось при добавлении абсолютно новых свойств в AllProperties
. Действительно ли безопасно использовать AllProperties
для такого рода вещи? Или есть ли еще одна функция, которую я пропускаю, который мог обработать понятие глобальных переменных в наборе сайта или объеме сайта?
Рекомендуемый способ сделать это - использовать PropertyBag (пары ключ / значение) через .Properties SPFarm, SPWeb.RootWeb ( для семейств сайтов), SPWeb, SPList и т. д. (в зависимости от нужной вам области).
MSDN - Управление параметрами настраиваемой конфигурации для приложения SharePoint
В составе
MSDN - Библиотеки руководств по SharePoint
См. Диспетчер иерархической конфигурации
Это готовый к эксплуатации код. дает вам программный доступ для чтения / записи этих значений. Если вы хотите сделать это без использования библиотеки руководств, вы должны использовать что-то вроде следующего кода.
SPWeb web = SPContext.Current.Web;
if (web.Properties.ContainsKey("MyProperty"))
string myProperty = web.Properties["MyProperty"];
Если вы хотите, чтобы пользовательский интерфейс позволял администраторам легко устанавливать значения, используйте либо SharePoint Designer (ураххх!), Либо что-то вроде Настройки корзины свойств SharePoint
Propertybag можно использовать для хранения свойств типа ключ/значение. Я думаю, что он предназначен для ваших целей.
Лично мне больше нужны свойства межсайтовой коллекции (например, строки подключения к БД), и я использую this для их хранения.