Как выглядит SharePoint со стороны БД? Ну как то так..
Для человека который первый раз залез под капот тут не все так очевидно как хотелось бы, поэтому попробуем немного разобраться в этом вопросе
.
Предупреждение: Любые изменения в SharePoint через СУБД могут нарушить структуру базы и привести к тому что ваш SharePoint перестанет работать.
Все операции выполняются на свой страх и риск, поэтому перед тем как выполнять в боевой базе необходимо детально проверить скрипты на тестовой.
Если немного приглядеться можно выделить основные таблицы SharePoint и связи между ними
AllLists
|
Таблица которая содержит списки (библиотеки) для каждого сайта.
|
|
ОСНОВНАЯ таблица содержит мета информацию о каждом элементе в списке.
|
|
Содержит информацию обо всех документах (и всех элементах списка) для каждой библиотеки и списка.
|
DocStreams
|
Содержит сами документы в BLOB поле Content varbinary (max).
|
NameValuePair
|
Индексируемые поля для списков.
|
AllUserDataJunctions
|
Содержит множественный выбор значений полей.
|
ContentTypes
|
Содержит описание используемых типов
|
Features
|
Содержит информацию об активированных дополнениях для каждой коллекции сайтов или сайта.
|
|
Содержит информацию о всех коллекциях сайтов в базе.
|
|
Содержит информацию о сайтах (webs) в каждой коллекции сайта.
|
|
Содержит информацию о пользователях.
|
Groups
|
Содержит информацию о группах пользователей в каждой коллекции сайтов.
|
Roles
|
Содержит роли (уровни доступа) для каждого сайта.
|
|
Содержит информацию о членах групп.
|
RoleAssignment
|
Содержит информацию обо всех пользователях или группах SharePoint которые присвоены ролям.
|
SchedSubscriptions
|
Содержит информацию обо всех настроенных подписках по расписанию
|
ImmedSubscriptions
|
Таблица содержащая информацию обо всех непосредственных подписках.
|
1. Информацию о списках Sharepoint можно получить из таблицы AllLists
SELECT
List.tp_SiteId,
List.tp_WebId,
List.tp_ID , --идентификатор списка
tp_BaseType , --тип списка: Generic List: 0, Document Library: 1, Discussion Board:3, Survey:4,Issue:5
tp_ServerTemplate, --ex:100-Generic list,101-Document library,102-Survey,103-Links list,104-Announcements list,105-Contacts list,106-Events list, 107-Tasks list,108-Discussion board,109-Picture library
list.tp_Title , --название списка
list.tp_Fields , --описание полей в библиотеке
list.tp_ContentTypes --описание типов в библиотеке
FROM alllists LIST WHERE lower(LIST.tp_Title) LIKE N'%входящие%2011%' and (list.[tp_DeleteTransactionId] = 0x )
Поля tp_Fields, tp_ContentTypes хранятся в сжатом двоичном виде, чтобы распаковать их достаточно использовать функцию ниже
private static string getXmlFromTpFields(byte[] tpFields)
{
using (var memoryStream = new MemoryStream(tpFields))
{
// пропускаем первые 14 байтов
for (var index = 0; index <= 13; index++)
memoryStream.ReadByte();
var deflateStream = new DeflateStream(memoryStream, CompressionMode.Decompress);
using (var destination = new MemoryStream())
{
deflateStream.CopyTo(destination);
var streamReader = new StreamReader(destination);
destination.Position = 0;
return streamReader.ReadToEnd();
}
}
}