Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript获取SharePoint用户字段?_Javascript_Sharepoint - Fatal编程技术网

如何使用JavaScript获取SharePoint用户字段?

如何使用JavaScript获取SharePoint用户字段?,javascript,sharepoint,Javascript,Sharepoint,你好 我需要编写一些javascript来获取sharepoint网站中用户字段的内容。我可以使用的javascript函数“getTagFromIdentifierAndTitle”获取大多数字段,但不能获取UserFields 那么如何获取用户字段呢 谢谢 我跟踪了地址簿如何与用户字段交互。要获取值,它使用函数getUplevel(ctx),要设置值,可以使用函数EntityEditorCallback(xml,ctx)。第一个函数将返回包含用户信息的html/xml混合字符串。第二个函数输

你好

我需要编写一些javascript来获取sharepoint网站中用户字段的内容。我可以使用的javascript函数“getTagFromIdentifierAndTitle”获取大多数字段,但不能获取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">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;i0) { 返回节点[i]。父节点; } } } 返回null; } 函数getSPPeoplePicker(columnName,value) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { 返回单元格.childNodes[0].innerHTML; } 其他的 { 返回null; } } 函数setSPPeoplePicker(列名称、值) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { cell.childNodes[0]。innerHTML=value; cell.childNodes[1]。value=value; } } 函数DisablesPeoplePicker(columnName) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { disableElement(cell.childNodes[0]); disableElement(cell.childNodes[1]); } } 函数EnablesPeoplePicker(columnName) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { enableElement(cell.childNodes[0]); enableElement(cell.childNodes[1]); } }
以下是我编写的自定义代码。它依赖于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;i0) { 返回节点[i]。父节点; } } } 返回null; } 函数getSPPeoplePicker(columnName,value) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { 返回单元格.childNodes[0].innerHTML; } 其他的 { 返回null; } } 函数setSPPeoplePicker(列名称、值) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { cell.childNodes[0]。innerHTML=value; cell.childNodes[1]。value=value; } } 函数DisablesPeoplePicker(columnName) { var cell=getPeoplePickerCell(columnName); 如果(单元格!==null) { 禁用元素(cell.chi)