SharePoint получает атрибут текущего пользователя - PullRequest
2 голосов
/ 19 марта 2011

У меня есть страница, на которой нужно найти отдел для вошедшего в систему пользователя. В идеале я хотел бы иметь возможность сделать это с помощью запроса JavaScript SOAP CAML. У меня есть идентификатор пользователя (который я предполагаю, удваивается как GUID), поэтому кажется, что просто получить строку, которая соответствует идентификатору.

Я пытаюсь использовать функцию «GetUserProfileByIndex» или «GetUserProfileByGuid» в SOAP, но не могу найти какой-либо надежной документации или достойных примеров, использующих их. Я надеюсь сделать что-то подобное в JavaScript - (который не работает):

 var userId = 194;
 "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
     <soapenv:Body> \
         <GetUserProfileByIndex  xmlns='http://microsoft.com/webservices/SharePointPortalServer/UserProfileService'> \
             <index>userId</index> \
         </GetUserProfileByIndex > \
     </soapenv:Body> \
 </soapenv:Envelope>";

Ответы [ 3 ]

4 голосов
/ 19 марта 2011

Я рекомендую вам проверить библиотеку jQuery для SharePoint 2007 и 2010, которая называется SPServices. $ (). SPServices.SPGetCurrentUser может получить Департамент в виде эффективных четырех строк кода:

var thisDepartment = $().SPServices.SPGetCurrentUser({
fieldName: "Department",
debug: false
});
3 голосов
/ 19 марта 2011

Я никогда не отвечал на свой вопрос, но мне удалось найти простое решение. Вот как я это сделал

  1. Когда пользователь вошел в систему, существует глобальная переменная JavaScript, которая включает идентификатор этого пользователя, - __spUserId
  2. Список профилей пользователей доступен через запрос CAML через SOAP, он называется «Список информации о пользователях».
  3. При доступе к этому списку вы должны установить сайт верхнего уровня так, чтобы он указывал на _catalogs вместо списков (или что бы то ни было). Вы делаете это, добавляя элемент _catalogs \
  4. Так как он обращается к списку профилей пользователей в виде списка, а не через функцию userprofile, установите тип запроса (?) На «GetListItems»

В целом, вот SOAP-вызов и CAML-запрос

$(document).ready(function() {
    var soapEnv =
        "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
            <soapenv:Body> \
                <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                    <listName>User Information List</listName> \
                    <topLevelSite>_catalogs</topLevelSite> \
                    <query> \
                        <Query> \
                            <Where> \
                                <Contains> \
                                    <FieldRef Name='ID' /> \
                                        <Value Type='Text'>"+_spUserId+"</Value> \
                                </Contains> \
                            </Where> \
                        </Query> \
                    </query> \
                    <viewFields> \
                        <ViewFields> \
                            <FieldRef Name='Name' /> \
                            <FieldRef Name='Department' /> \
                            <FieldRef Name='ID' /> \
                        </ViewFields> \
                    </viewFields> \
                    <query> \
                        <Query /> \
                    </query> \
                </GetListItems> \
            </soapenv:Body> \
        </soapenv:Envelope>";

    $.ajax({
        url: "/_vti_bin/Lists.asmx",
        type: "POST",
        dataType: "xml",
        data: soapEnv,
        complete: processResult,
        contentType: "text/xml; charset=\"utf-8\""
    });
});
2 голосов
/ 19 марта 2011

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

http://amitkumarmca04.blogspot.com/2008/07/how-access-sharepoint-moss-user-profile.html

...