Как найти поля списка SharePoint из базы данных в SharePoint 2010?
В SharePoint 2003 и 2007 была таблица AllLists, в которой был столбец tp_Fields, содержащий XML-файл, содержащий все поля для определенного списка.
Пример XML-файла, хранящегося в столбце tp_Fields, может быть следующим для списка SharePoint с 3 полями:
<FieldRef Name="ContentTypeId" />
<FieldRef Name="_ModerationComments" ColName="ntext1" />
<FieldRef Name="WebPartTypeName" ColName="nvarchar9" />
У нас есть приложение, которое читает этот столбец, используя код C#, например
var tpFields = (String) drView["tp_Fields"];
В SharePoint 2010 тип данных этого столбца изменился на varbinary и вместо него содержит только некоторые двоичные данные!
(Я знаю, что идеальным / рекомендуемым решением было использование веб-служб SharePoint или объектной модели SharePoint, а не использование базовых таблиц, но, к сожалению, у нас есть существующее приложение, и нам нужно было бы заставить его работать и с 2010 годом. Я надеюсь, что мы не надо все переделывать!)
Как узнать, какие поля имеет список SharePoint из своей базы данных в SharePoint 2010? или, если возможно, как преобразовать этот столбец varbinary в его эквивалентный xml, как раньше?
Я надеюсь, что вопрос ясен (мало надежды на его возможность).
Спасибо,
2 ответа
Просто чтобы поделиться, я написал метод ниже, и теперь он может извлечь из него XML, хотя нет гарантии, что полученный XML совместим с SharePoint 2003/2007.
private static string getXmlFromTpFields(byte[] tpFields)
{
using (var memoryStream = new MemoryStream(tpFields))
{
// ignore the first 14 bytes; I'm not sure why but it works!
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();
}
}
}
Я делал это долгое время и нашел служебную программу под названием SPViews. Вы указываете на базу данных контента, и она генерирует сценарий SQL для создания представлений для вас. Он читает сжатое поле, чтобы получить столбцы, и генерирует скрипт. Вы можете получить столбцы оттуда.
юлианский день