2012-08-29 25 views
1

我使用sharepoint服務3.0,我創建了自定義列表表單。我有這種形式的peoplepicker字段,並且需要將其默認設置爲當前用戶。設置peoplepicker默認值與當前用戶與JS

這是我到目前爲止有:

  • 首先我peoplepicker fonction:

    功能PeoplePicker(){

    this.context = null; 
    this.web = null; 
    this.currentUser = null; 
    this.parentTagId = null 
    
    this.SetParentTagId = function(id){ 
        this.parentTagId = id; 
    } 
    
    this.SetLoggedInUser = function(){ 
        if(this.parentTagId != null){ 
         this.getWebUserData(); 
        } 
    } 
    
    this.getWebUserData = function(){ 
        this.context = new SP.ClientContext.get_current(); 
        this.web = this.context.get_web(); 
        this.currentUser = this.web.get_currentUser(); 
        this.currentUser.retrieve(); 
        this.context.load(this.web); 
        this.context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), 
                Function.createDelegate(this, this.onFailureMethod)); 
    } 
    
    this.onSuccessMethod = function(){ 
        this.setDefaultValue(this.currentUser.get_title()); 
    } 
    
    this.onFailureMethod = function(){ 
        alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace()); 
    } 
    
    this.setDefaultValue = function(value){ 
        var parentTag = document.getElementById(this.parentTagId); 
        if (parentTag != null) { 
         var peoplePickerTag = this.getTagFromIdentifierAndTitle(parentTag, 'div', 
                   'UserField_upLevelDiv', 'People Picker'); 
         if (peoplePickerTag) { 
          peoplePickerTag.innerHTML = value; 
         } 
        } 
    } 
    
    this.getTagFromIdentifierAndTitle = function(parentElement, tagName, identifier, title){ 
        var len = identifier.length; 
        var tags = parentElement.getElementsByTagName(tagName); 
        for (var i = 0; i < tags.length; i++) { 
         var tempString = tags[i].id; 
         if (tags[i].title == title && (identifier == "" || 
              tempString.indexOf(identifier) == tempString.length - len)) { 
          return tags[i]; 
         } 
        } 
        return null; 
    } 
    

    }

  • 其次,我在asp內容中使用它的方式:

ExecuteOrDelayUntilScriptLoaded(SetWebUserData 「PeoplePicker.js」);

function SetWebUserData(){ var pplPicker = new PeoplePicker(); //設置選擇器的人員的父標籤ID。 pplPicker.SetParentTagId('ctl00_PlaceHolderMain_g_ec44fef5_c1a6_4ade_b7e4_2b80803724a1_ff6_1_ctl00_ctl00_UserField'); pplPicker.SetLoggedInUser(); }

但是當我我使用了錯誤的父標籤ID加載形式...沒有任何反應?我把它從頁面的源代碼...

任何幫助將是偉大的!

回答

3

下面是我如何做到這一點。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(window).load(function(){ 
var columnName = 'Manager Name'; 
var searchText = RegExp("FieldName=\"" + columnName + "\"", "gi"); 
$("td.ms-formbody").each(function() { 
if(searchText.test($(this).html())) { 
$(this).find("div[Title='People Picker']").html(getUserName()); 
return false; 
} 
}); 
function getUserName() { 
var wshell=new ActiveXObject("wscript.shell"); 
var userName=wshell.ExpandEnvironmentStrings("%username%"); 
return userName;} 
}); 
</script> 

我的人選字段被命名爲'經理姓名',但它是一個變量,因此您可以更改它。我使用函數getUserName()來設置人員選擇器的值。 getUserName使用環境字符串用戶名。有些人會告訴你,這不是最好的選擇,因爲它可能是'僞造'的。我處於嚴格控制的企業環境中。我個人認爲大多數用戶甚至不知道如何做到這一點。

我認爲你遇到的問題是人們選擇領域需要的價值不僅僅是一個字符串。我相信它正在尋找一個關鍵值對,這意味着您需要在SharePoint網站中分配的用戶名和ID號。爲了解決這個問題,我使用的代碼只是把用戶名sting放在html表單字段中。

希望這會有所幫助。

2

這裏是我如何實現,在這裏我已經通過用戶名作爲查詢字符串,如果不是與當前用戶填充。根據您的需求進行修改。

 var Dname = queryString('DName'); 
     if(Dname!= null) 
     {  
      var pp = getPickerInputElement('Employee'); 
      if(pp != null) 
      { 
       pp.innerHTML =Dname; 
       document.getElementById('Emp').innerHTML=Dname; 
      } 
     } 
     else 
     { 
      fillPeoplePickerWithCurrentUser('Employee'); 
     } 
function fillPeoplePickerWithCurrentUser(pickerName) 
    { 
     var currentUser =getUserData(); 
    } 
function getUserData() 
    { 
     context = new SP.ClientContext.get_current();    
     web = context.get_web(); 
     currentUser = web.get_currentUser(); 

     currentUser.retrieve(); 
     context.load(web); 
     context.executeQueryAsync(onSuccessMethod, onFaiureMethodl); 
    } 
+0

非常感謝!得到它的工作:) – MademoiselleLenore

+0

什麼是DName?我是否需要用DName替換用戶名,我將如何自動執行此操作以獲取當前登錄的用戶? – Batman

+0

在上述情況下,'Dname'是查詢字符串參數,即用戶名作爲QS參數傳遞。您可以使用SPServices獲取當前用戶。 – Ishan