Как получить SharePoint-UserField с помощью JavaScript?

Привет,

Мне нужно написать какой-то javascript, который получает содержимое поля пользователя на веб-сайте sharepoint. Я могу получить большинство полей с помощью javascript-функции getTagFromIdentifierAndTitle из Использование Javascript для управления полем формы списка, но не UserFields.

Итак, как я могу получить UserFields?

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
7 639
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я проследил, как адресная книга взаимодействует с полем пользователя. Для получения значений используется функция 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, который должен быть идентификатором целевого поля. В пользовательском поле html нет атрибута title, поэтому найти нужный элемент по отображаемому имени с помощью js очень сложно. Предлагаю передать id поля в javascript со стороны сервера. Например, вы можете создать настраиваемую веб-часть, в которой вы пишете идентификаторы полей страницы из коллекции SPContext.Current.FormContext.FieldControlCollection.

Вот код, который я собрал. Он основан на точном HTML, который SharePoint использует для PeoplePicker. Он работает как в IE, так и в Firefox. Для параметра columnName передайте «общедоступное» имя столбца, а не внутреннее имя.

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]);
  }
}

Другие вопросы по теме