SharePoint: получить SPListItem по уникальному идентификатору - PullRequest
4 голосов
/ 18 ноября 2011

Я пытаюсь получить объект SPListItem с уникальным идентификатором (GUID). Посмотрев несколько сайтов (вкл. http://sharepoint400.blogspot.com/2011/04/using-spsitedataquery-to-find-list.html и http://www.chakkaradeep.com/post/Retrieving-an-Item-from-the-RootWeb-and-Subwebs-using-its-UniqueId.aspx), я пришел с кодом ниже.

const string QueryFormat =
@"<Where>
    <Eq>
        <FieldRef Name='UniqueId' />
        <Value Type='Lookup'>{0}</Value>
    </Eq>
</Where>";

            SPSiteDataQuery query = new SPSiteDataQuery();
            query.Webs = "<Webs Scope='SiteCollection' />";
            query.Lists = "<Lists BaseType='0'/>";
            query.Query = string.Format(QueryFormat, itemUniqueId);
            query.RowLimit = 1;
            //query.ViewFields = "<FieldRef Name='WebID' /><FieldRef Name='ListID' /><FieldRef Name='ID' />";

            var results = SPContext.Current.Web.GetSiteData(query);

Тем не менее, несмотря ни на что ... мне всегда кажется, что возвращается ноль строк. Я не понимаю почему, потому что знаю, что используемые мной направляющие верны.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2012

Недопустимый тип для уникального идентификатора, это должен быть Guid. Обновите ваш запрос:

<Where>
    <Eq>
        <FieldRef Name='UniqueId'/>
        <Value Type='Guid'>{0}</Value>
    </Eq>
</Where>
0 голосов
/ 21 ноября 2011

Пожалуйста, попробуйте удалить все пробелы в строке QueryFormat.Вместо этого используйте что-то вроде этого:

"<Where><Eq><FieldRef Name=\"UniqueId\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where>"

SharePoint не нравятся эти пробелы.

Я бы также предложил использовать одну из библиотек для генерации Caml-запросов, например: http://camldotnet.codeplex.com/ или http://camlex.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...