Как найти поля списка SharePoint из базы данных в SharePoint 2010? - PullRequest
5 голосов
/ 24 января 2012

В 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 ]

2 голосов
/ 24 января 2012

Просто, чтобы поделиться, я написал метод ниже, и теперь он может извлечь из него 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();
                }
            }
        }
0 голосов
/ 12 июля 2013

Я давно этим занимаюсь и нашел служебную программу с именем SPViews .Вы указываете на базу данных контента, и она генерирует сценарий SQL для создания представлений для вас.Он читает сжатое поле, чтобы получить столбцы, и генерирует скрипт.Вы можете получить столбцы оттуда.

jd

...