2009-01-13 20 views

回答

1

我跟蹤了地址簿如何與用戶字段進行交互。要獲取值,它使用函數getUplevel(ctx)並設置值可以使用函數EntityEditorCallback(xml,ctx)。第一個函數將返回帶有用戶信息的html/xml混合字符串。第二個函數輸入必須是特殊格式的xml字符串。

// Get values 
var ctx='ctl00_m_g_e5a1501a_..._ctl04_ctl00_ctl00_UserField'; 
var values=getUplevel(ctx); 
alert(values); 

// Set values 
var xml='<Entities Append="False" Error="" Separator=";" MaxHeight="3">'+ 
    '<Entity Key="DOMAIN\\loginname" DisplayText="Display Name" IsResolved="True" Description="DOMAIN\\loginname">'+ 
     '<ExtraData>'+ 
      '<ArrayOfDictionaryEntry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">'+ 
       '<DictionaryEntry><Key xsi:type="xsd:string">DisplayName</Key><Value xsi:type="xsd:string">Display Name</Value></DictionaryEntry>'+ 
       '<DictionaryEntry><Key xsi:type="xsd:string">Email</Key><Value xsi:type="xsd:string">[email protected]</Value></DictionaryEntry>'+ 
       '<DictionaryEntry><Key xsi:type="xsd:string">SPUserID</Key><Value xsi:type="xsd:string">1</Value></DictionaryEntry>'+ 
       '<DictionaryEntry><Key xsi:type="xsd:string">PrincipalType</Key><Value xsi:type="xsd:string">User</Value></DictionaryEntry>'+ 
      '</ArrayOfDictionaryEntry>'+ 
     '</ExtraData>'+ 
     '<MultipleMatches />'+ 
    '</Entity>'+ 
'</Entities>'; 
EntityEditorCallback(xml,ctx); 

棘手的部分是ctx屬性,必須是目標字段ID。在用戶字段html中沒有標題屬性,所以通過js的顯示名稱找到正確的元素非常複雜。我建議將字段id從服務器端傳遞給javascript。例如,您可以在集合SPContext.Current.FormContext.FieldControlCollection中寫入頁面字段id-s的地方創建自定義WebPart。

0

這是我放在一起的自定義代碼。它依賴於SharePoint用於PeoplePicker的確切HTML。它可以在IE和Firefox上運行。對於columnName參數,傳遞列的「public」名稱,而不是內部名稱。

function getParentElementByTagName(baseNode, tagName) 
{ 
    var currNode; 

    if(baseNode !== null) 
    { 
    currNode = baseNode.parentNode; 

    while((currNode !== null) && (currNode.nodeName != tagName)) 
    { 
     currNode = currNode.parentNode; 
    } 

    return currNode; 
    } 
    else 
    { 
    return null; 
    } 
} 

function getPeoplePickerCell(columnName) 
{ 
    var search = 'FieldName="' + columnName + '"'; 

    var nodes = document.getElementsByTagName("TEXTAREA"); 

    for(var i=0; i < nodes.length; i++) 
    { 
    if(nodes[i].title == "People Picker") 
    { 
     var outerCell = getParentElementByTagName(nodes[i], "SPAN").parentNode.parentNode; 

     if(outerCell.innerHTML.indexOf(search) > 0) 
     { 
     return nodes[i].parentNode; 
     } 
    } 
    } 

    return null; 
} 

function getSPPeoplePicker(columnName, value) 
{ 
    var cell = getPeoplePickerCell(columnName); 

    if(cell !== null) 
    { 
    return cell.childNodes[0].innerHTML; 
    } 
    else 
    { 
    return null; 
    } 
} 

function setSPPeoplePicker(columnName, value) 
{ 
    var cell = getPeoplePickerCell(columnName); 

    if(cell !== null) 
    { 
    cell.childNodes[0].innerHTML = value; 
    cell.childNodes[1].value = value; 
    } 
} 

function disableSPPeoplePicker(columnName) 
{ 
    var cell = getPeoplePickerCell(columnName); 

    if(cell !== null) 
    { 
    disableElement(cell.childNodes[0]); 
    disableElement(cell.childNodes[1]); 
    } 
} 

function enableSPPeoplePicker(columnName) 
{ 
    var cell = getPeoplePickerCell(columnName); 

    if(cell !== null) 
    { 
    enableElement(cell.childNodes[0]); 
    enableElement(cell.childNodes[1]); 
    } 
} 
相關問題