Как найти поля списка 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 для создания представлений для вас. Он читает сжатое поле, чтобы получить столбцы, и генерирует скрипт. Вы можете получить столбцы оттуда.

юлианский день

Другие вопросы по тегам