Как правильно хранить глобальные переменные уровня сайта на сайте SharePoint? - PullRequest
6 голосов
/ 09 июня 2010

Одна вещь, которая сводит меня с ума в SharePoint2007, - это очевидная неспособность иметь настраиваемые параметры, которые применяются конкретно к сайту или семейству сайтов, а не к содержимому.Я имею в виду, у вас есть некоторые предустановленные настройки, такие как логотип сайта, имя сайта и другие различные вещи, но, похоже, нигде нет места для добавления новых видов настроек.

Приложение, которым я являюсьработа над ним должна быть в состоянии создать несколько видов «семейств сайтов проекта», которые следуют базовому шаблону, но имеют определенные дополнительные параметры, которые применяются только к этому семейству сайтов и только к нему.В дополнение к стандартному названию сайта нам также необходимо определить номер проекта, имя проекта и имя клиента.И учитывая запросы некоторых наших клиентов, мы также достигли точки, когда нам нужно иметь настраиваемые параметры, которые изменяют работу некоторых рабочих процессов, например, помечать ли файлы буквами или цифрами.

Наше текущее решениеЯ сомневаюсь в том, чтобы сохранить файл XML на сервере SharePoint.Этот файл содержит один узел для каждого семейства сайтов, идентифицируемый по URL-адресу корневого сайта.Внутри узла находятся все элементы, которые должны быть определены для этого семейства сайтов.Когда они нам нужны, мы должны обращаться к файлу XML (который всегда требует SPSecurity.RunWithElevatedPrivileges для доступа к файлам прямо на сервере) каждый раз, чтобы загрузить его и извлечь данные.Есть много автоматизированных процессов, которые должны будут это делать, и я сомневаюсь в стабильности этого метода, когда мы достигаем сотен сайтов с тысячами файлов, на которых запущены десятки тысяч рабочих процессов, и все хотят получить доступ к этому файлу.Может быть, это беспочвенные заботы, но я бы предпочел волноваться, чем рисковать всем, что сломалось через пару лет.

Я искал объект SPWeb и нашел хэш-таблицу AllProperties.Это похоже на то, что может сработать, но я не знаю, насколько безопасно это модифицировать.Я прочитал и MSDN, и WSS SDK, но не нашел ничего, что прояснило бы добавление совершенно новых свойств в AllProperties.Безопасно ли использовать AllProperties для такого рода вещей?Или мне не хватает еще одной функции, которая могла бы обрабатывать концепцию глобальных переменных в семействе сайтов или в области сайта?

Ответы [ 3 ]

5 голосов
/ 10 июня 2010

Рекомендуемый способ сделать это - использовать 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Дизайнер (ура!) Или что-то вроде Настройки пакета свойств SharePoint

1 голос
/ 10 июня 2010

Я использовал http://pbs.codeplex.com/

1 голос
/ 10 июня 2010

Пакет свойств можно использовать для хранения свойств типа ключ / значение.Я думаю, что это предназначено для ваших целей.

Лично мне больше нужны свойства коллекции между сайтами (например, строки подключения БД), и я использую this для их хранения..

...