如何使用JavaScript获取SharePoint用户字段?
你好 我需要编写一些javascript来获取sharepoint网站中用户字段的内容。我可以使用的javascript函数“getTagFromIdentifierAndTitle”获取大多数字段,但不能获取UserFields 那么如何获取用户字段呢如何使用JavaScript获取SharePoint用户字段?,javascript,sharepoint,Javascript,Sharepoint,你好 我需要编写一些javascript来获取sharepoint网站中用户字段的内容。我可以使用的javascript函数“getTagFromIdentifierAndTitle”获取大多数字段,但不能获取UserFields 那么如何获取用户字段呢 谢谢 我跟踪了地址簿如何与用户字段交互。要获取值,它使用函数getUplevel(ctx),要设置值,可以使用函数EntityEditorCallback(xml,ctx)。第一个函数将返回包含用户信息的html/xml混合字符串。第二个函数输
谢谢 我跟踪了地址簿如何与用户字段交互。要获取值,它使用函数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">Display.Name@domain.ee</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);
//获取值
var ctx='ctl00_m_g_e5a1501a_…_ctl04_ctl00_ctl00_UserField';
var值=getUplevel(ctx);
警报(数值);
//设定值
var xml=''+
''+
''+
''+
'显示名称显示名称'+
'电子邮件显示。Name@domain.ee'+
“SPUserID1”+
“PrincipalTypeUser”+
''+
''+
''+
''+
'';
EntityEditorCallback(xml、ctx);
棘手的部分是ctx属性,它必须是目标字段id。在用户字段html中并没有标题属性,所以用js通过显示名称找到正确的元素非常复杂。我建议将字段id从服务器端传递给javascript。例如,您可以创建自定义Web部件,从集合SPContext.Current.FormContext.FieldControlCollection写入页面字段id-s。我跟踪了通讯簿与用户字段的交互方式。要获取值,它使用函数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">Display.Name@domain.ee</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);
//获取值
var ctx='ctl00_m_g_e5a1501a_…_ctl04_ctl00_ctl00_UserField';
var值=getUplevel(ctx);
警报(数值);
//设定值
var xml=''+
''+
''+
''+
'显示名称显示名称'+
'电子邮件显示。Name@domain.ee'+
“SPUserID1”+
“PrincipalTypeUser”+
''+
''+
''+
''+
'';
EntityEditorCallback(xml、ctx);
棘手的部分是ctx属性,它必须是目标字段id。在用户字段html中并没有标题属性,所以用js通过显示名称找到正确的元素非常复杂。我建议将字段id从服务器端传递给javascript。例如,您可以创建自定义Web部件,从集合SPContext.Current.FormContext.FieldControlCollection写入页面字段id-s。以下是我编写的自定义代码。它依赖于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]);
}
}
函数getParentElementByTagName(baseNode,标记名)
{
var节点;
if(baseNode!==null)
{
currNode=baseNode.parentNode;
而((currNode!==null)&&(currNode.nodeName!=标记名))
{
currNode=currNode.parentNode;
}
返回节点;
}
其他的
{
返回null;
}
}
函数getPeoplePickerCell(columnName)
{
var search='FieldName=“”+columnName+”;
var节点=document.getElementsByTagName(“TEXTAREA”);
对于(var i=0;i以下是我编写的自定义代码。它依赖于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]);
}
}
函数getParentElementByTagName(baseNode,标记名)
{
var节点;
if(baseNode!==null)
{
currNode=baseNode.parentNode;
而((currNode!==null)&&(currNode.nodeName!=标记名))
{
currNode=currNode.parentNode;
}
返回节点;
}
其他的
{
返回null;
}
}
函数getPeoplePickerCell(columnName)
{
var search='FieldName=“”+columnName+”;
var节点=document.getElementsByTagName(“TEXTAREA”);
对于(var i=0;i