你好,如何使用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]);
}
}