你好,如何使用JavaScript获取SharePoint用户字段?
我需要写一些JavaScript获取一个用户在一个SharePoint站点的内容。我可以通过使用javascript函数“getTagFromIdentifierAndTitle”Using Javascript to Manipulate a List Form Field获取大多数字段,但不能使用UserFields。
那么我怎么能得到UserFields?
谢谢!
你好,如何使用JavaScript获取SharePoint用户字段?
我需要写一些JavaScript获取一个用户在一个SharePoint站点的内容。我可以通过使用javascript函数“getTagFromIdentifierAndTitle”Using Javascript to Manipulate a List Form Field获取大多数字段,但不能使用UserFields。
那么我怎么能得到UserFields?
谢谢!
我跟踪了地址簿如何与用户字段进行交互。要获取值,它使用函数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。
这是我放在一起的自定义代码。它依赖于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]);
}
}