SharePoint里如何设置People picker值为当前登录用户值

摘要:

    相信很多朋友都遇到过需要将某个People类型的字段值设置为当前登录用户的情况而且已经给出了解决方案,因此本文没有什么新意,算法上也比较冗余,仅仅在博客里算作知识的备份。

思路:

    在画面的右上角有一个欢迎控件,现实内容为“Welcome, 登陆用户名”,我们的代码就是要把这个用户名取出来,然后取到PeoplePicker字段对应的DIV,调用innerHTML属性来进行值得设置。

image

image

步骤:

    第一步,取得登陆用户,通过Welcome来查找:

function getCurrentUser() 
{ 
    var tags = document.getElementsByTagName('a'); 
    for (var i=0; i < tags.length; i++) 
    { 
        if(tags[i].innerText.substr(0,7) == 'Welcome') 
        { 
            return tags[i].innerText.substr(8,tags[i].innerText.length); 
        } 
    } 
}

    第二步,查找PeoplePicker字段对应的DIV,一层一层往里追溯,算法并不好,最后break后还会继续循环,虽然对最终结果没什么影响,但不是什么好算法,有兴趣的朋友发现好的算法或者通过JQuery可以查到的算法欢迎共享!

function getPickerInputElement(fieldsInternalName) 
{ 
    var result  = ""; 
    var divs = document.getElementsByTagName("DIV"); 
    for(var i=0; i < divs.length ; i++) 
    { 
        
        if(divs[i].id=="WebPartWPQ2") 
        { 
            var tds = divs[i].getElementsByTagName("TD"); 
            for(var j=0; j < tds.length; j++) 
            { 
                var cellHTML = tds[j].innerHTML; 
                if(cellHTML.indexOf('FieldInternalName="' + fieldsInternalName + '"') >= 0) 
                { 
                    var innerDivs = tds[j].getElementsByTagName("DIV"); 
                    for(var k=0; k < innerDivs .length; k++) 
                    { 
                        if(innerDivs[k].id.indexOf("UserField_upLevelDiv") > 0) 
                        { 
                            result = innerDivs[k]; 
                            break; 
                        } 
                    } 
                } 
            } 
        } 
    } 
    return result; 
} 

    第三步,设置值,我们通过一个叫做fillPeoplePickerWithCurrentUser的方法来进行设置,调用SharePoint库方法_spBodyOnLoadFunctionNames,确保方法会在页面内容加载完成后执行。

_spBodyOnLoadFunctionNames.push("fillPeoplePickerWithCurrentUser");

function fillPeoplePickerWithCurrentUser() 
{ 
    var currentUser = getCurrentUser(); 
    if(currentUser != null) 
    { 
        var pp = getPickerInputElement(“SetMe”); 
        if(pp != null)    
            pp.innerHTML = currentUser; 
     }
}

说明:

    本方法没有在Firefox浏览器进行调试。

原文地址:https://www.cnblogs.com/johnsonwong/p/2079147.html