Получить идентификатор электронной почты пользователя в SPServices

Я использую SPServices (метод GetListItems), чтобы получить некоторую информацию из списка sharepoint. Список содержит поле типа "Люди или группа", которое возвращает числовой идентификатор и имя (отображаемое имя) пользователя, разделенные точкой с запятой, например "43#; Джон Доу". Мне нужны адреса электронной почты всех пользователей в этом поле (во всех возвращенных строках). Кто-нибудь может помочь? Заранее спасибо.

2 ответа

Решение

Пол ты рок:)

Из последнего комментария Пола я получил нужную вещь. Это идеально.:)

Единственное, что вам нужно, это добавить следующее к звонку

CAMLQueryOptions: "<QueryOptions><ExpandUserField>True</ExpandUserField></QueryOptions>",

ТАК мой пример вызова становится таким

$().SPServices({ operation: "GetListItems", async: false, listName: "Assignees", webURL: "https://col.wow.telenor.com/sites/go/",
            CAMLViewFields: "<ViewFields Properties='True'/>",
            CAMLQuery: "",
            CAMLQueryOptions: "<QueryOptions><ExpandUserField>True</ExpandUserField></QueryOptions>",
            completefunc: function (xData,Status) {

                $(xData.responseXML).SPFilterNode("z:row").each(function () {

                    try {
                    //ows_Name1 is a field of type "People or Group" the after adding CAMLQueryOptions this field returns all the fields
                    // propeties of user i.e. Displayname,ID,email id, domain login, sip ID etc all separate by #
                        var title = $(this).attr("ows_Name1"); 
                    // Splitting the resultant string with # give you string array of all the properties. In my case email ID is at 
                    // index 3.
                        var userEmail = userText.split('#')[3];
                    // Below line is added to remove the trailing "," from email id
                        userEmail = userEmail.substring(0,userEmail.indexOf(','));

                    }
                    catch (e) {
                        alert('Exception: ' + e.message);
                    }
                });
            }
        });

Извините, Пол, я должен снять отметку с вашего ответа и сделать этот ответ:)

@Mujaba,

Я делал это раньше, взяв имя пользователя и выполнив поиск по нему, используя службу People и метод SearchPrincipals... Вот пример:

var userEmail = '';
var userId    = '43';
$().SPServices({
    operation:      "SearchPrincipals",
    searchText:     "John Doe",
    async:          true,
    completefunc:   function(xData, status){
        $(xData.responseXML).find("PrincipalInfo")
            .each(function(){
                var thisUser = $(this);
                if ($.trim(thisUser.find("UserInfoID").text()) == userId) {
                    userEmail = $.trim(thisUser.find("Email").text());

                    alert("User's email: " + userEmail);

                    return false;
                }
            });
    }
});

Павел.

Другие вопросы по тегам