从Sharepoint 2010 PeoplePicker获取已解析的SPUser ID

时间:2012-10-15 14:40:40

标签: sharepoint-2010 peoplepicker

我尝试从人员选择器控件中获取选定的用户ID,如下所示:

function GetUserIdsFromPP() {
    var xml = _picker.find('div#divEntityData');
    var visiblefor = new Array();

    xml.each(function (i, row) {
        var data = $(this).children().first('div').attr('data');
        var xmlDoc;

        if (window.DOMParser) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(data, "text/xml");
        }
        else // Internet Explorer
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(data);
        }
        var uid = xmlDoc.getElementsByTagName('Value')[0].firstChild.nodeValue;
        visiblefor.push(uid);
    });

    return visiblefor;
}

问题是有时XML不包含<Key>SPUserID</Key><Value>1</Value>,我得到FQUN(用户使用域名登录)。

从PeoplePicker控件解析所选SPUserIds的更好方法是什么?

2 个答案:

答案 0 :(得分:0)

这是解决客户端人员选择器控制的电子邮件的方法

function GetEmailsFromPicker() {
    var xml = _picker.find('div#divEntityData');
    var result = new Array();

    xml.each(function (i, row) {
        var data = $(this).children().first('div').attr('data');
        var xmlDoc;

        if (window.DOMParser) {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(data, "text/xml");
        }
        else // Internet Explorer
        {
            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async = false;
            xmlDoc.loadXML(data);
        }

        var emailIndex = -1;

        for (var i = 0; i < xmlDoc.childNodes[0].childNodes.length; i++) {
            var element = xmlDoc.childNodes[0].childNodes[i];
            var key = element.childNodes[0].childNodes[0].nodeValue;
            if (key == 'Email') {
                var uid = xmlDoc.childNodes[0].childNodes[i].childNodes[1].childNodes[0].nodeValue;
                result.push({ EMail: uid });
                break;
            }
        }
    });

    return result;
}

答案 1 :(得分:0)

使用上面的答案,但是...

用适当的 Jquery 或 Javascript 元素名称替换它。

var xml = _picker.find('div#divEntityData');