2009-01-13 54 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]); 
    } 
} 
相关问题