Опрос Sharepoint: Как определить поля вопросов при получении информации опроса из веб-службы Lists? - PullRequest
3 голосов
/ 16 марта 2010

Я хочу получить доступ к информации опроса через веб-службу Lists и просмотреть вопросы, содержащиеся в опросе.

Результат содержит большое количество полей узлов, некоторые из которых являются вопросами в опросе. Другие поля содержат другую информацию, такую ​​как автор, последнее изменение и т. Д.

Как я могу выбрать вопросы? Я думал, что все не вопросы будут скрыты, но это не так.

Вот мой код, как он есть на данный момент. Возвращает около 16 предметов. В опросе 6 вопросов ...

// read question definitions
string[] HandleTypes = new string[] { "Number", "DateTime", "Text", "Choice", "GridChoice", "Boolean" };
var query = from n in node.Descendants(ns+"Field")
            where (n.Attribute("Hidden") == null || n.Attribute("Hidden").Value.ToLower() == "true")
            && (n.Attribute("Type") != null && HandleTypes.Contains(n.Attribute("Type").Value))
            select new Question(n.Attribute("ID").Value)
            {
                Text = n.Attribute("DisplayName").Value,
                QuestionType = n.Attribute("Type").Value,
                Element = n
            };

Идеи кому-нибудь?

Ответы [ 4 ]

1 голос
/ 25 июля 2012

Атрибут «SourceID» для полей вопроса является GUID. Все остальные поля имеют SourceID с "http://schema. .."

0 голосов
/ 16 сентября 2013

Похоже, что все новые столбцы (а не столбцы родительского типа) рассматриваются как вопросы. Один из способов получить только вопросы - это получить все поля, которые находятся в представлении «Обзор» (кроме столбца «Автор»); другим способом было бы получить все поля, которые не относятся к родительскому типу контента, то есть новые поля.

0 голосов
/ 16 марта 2010

Вы можете использовать SPField.Group , чтобы узнать, является ли поле столбцом «Base», таким как ID / Автор и т. Д., Или пользовательским столбцом, который будет разделителем вопроса или страницы.

Разделитель страниц - это определенный тип поля , поэтому вы можете получить его с помощью

if (SPField.Type == SPFieldTypes.PageSeperator)
0 голосов
/ 16 марта 2010

Я считаю, что самый простой обходной путь - это выяснить InternalName из встроенных полей, поместить их в массив, а затем проверить, находится ли имя поля в этом массиве или нет. Например, вы, скорее всего, будете иметь «Заголовок», «Создан», «Автор» и так далее. Эта страница даст вам несколько советов, какие из полей являются встроенными: http://www.johnholliday.net/downloads/fieldswss.htm

...