Испытание ServerException в .NET C # MVC 3 при запросе списка SharePoint 2010 с помощью CAML - PullRequest
1 голос
/ 13 мая 2011

Я пытаюсь получить один элемент из списка SharePoint 2010.Я использую .NET C # MVC 3. framework.

Я получаю ошибку времени выполнения «ServerException, Exception from HRESULT: 0x80131904» от метода ExecuteQuery () в следующем блоке кода.

 ClientContext spContext = new ClientContext(Settings.Default.SharePointSite + Settings.Default.SharePointWeb);
spContext.Credentials = new NetworkCredential("[REMOVED]", "[REMOVED]", "[REMOVED]");
var list = spContext.Web.Lists.GetByTitle("ExampleList");

var camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Eq><FieldRef Name='UniqueId'/>" +
    "<Value Type='Lookup'>" + id.ToString() + "</Value></Eq></Where></Query></View>";

var items = list.GetItems(camlQuery);

spContext.Load(items);
spContext.ExecuteQuery();

Если пропущен пустой CAML-запрос, «элементы» заполняются всеми элементами списка, поэтому основное соединение работает.Введение любого CAML в .ViewXML привело либо к уже заявленному исключению, либо не повлияло на набор результатов "items" (т. Е. Все элементы были возвращены).

Любая помощь, которую вы можете предоставить, приветствуется.

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

У меня была похожая проблема, когда я пытался запросить список и вернуть все элементы, в которых значение «иглы» содержалось в множественном выборе «стог сена»:

<Where>
  <Contains><FieldRef Name='Environments' /><Value Type='Lookup'>DV</Value></Contains>
</Where>

ПервоначальноЯ имел атрибут Type элемента value как «Текст» (который также является значением по умолчанию, если Тип не указан), и получал сообщение «Возникло исключение. (Исключение из HRESULT: 0x80020009 (DISP_E_EXCEPTION))» ».

Затем я добавил правильный атрибут Type и по ошибке добавил атрибут LookupId к элементу FieldRef, который дал мне ноль результатов, но без ошибок.

Причина, по которой это выяснилось, довольно разумна, и я нашел описанную в http://sharepointmagazine.net/articles/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list.По сути, указав Type = 'Lookup', вы сравниваете отображаемое значение с полем поиска, но если пройти один шаг и сказать, что LookupId = 'TRUE' для другого элемента означает "оценивать по идентификатору стороннего элемента, а неотображаемое значение ".

Так что, если вы используете CAML для запроса поля поиска, значение всегда должно иметь тип« Lookup », но то, будете ли вы использовать LookupId, будет зависеть от того, хотите ли вы сравнитьключ или значение поиска.

0 голосов
/ 01 июня 2011

Попробуйте:

<FieldRef Name="UniqueId" LookupId="TRUE"/><Value Type="Lookup">

вместо

<FieldRef Name='UniqueId'/><Value Type='Lookup'>

и, да, caml чувствителен к регистру

...