Как лучше всего преобразовать SharePoint многопользовательская полевая строка в массив SPUsers?

Это длиннее, чем регулярное выражение с одной строкой, но оно преобразует вход в формат желаемого выхода, который вы ищете, используя split и regex:

var yourstring = 'SST+CONF!001 001 "407968017" "Projector Serial Number"';

// Regex to replace " with '
yourstring = yourstring.replace (/"/g,"'");

// Split where " " is 
strArray = yourstring.split(" ");

var output = "[";

for (var i = 0; i < strArray.length; i++) {
  if(i < 2){
    strArray[i] = "'" + strArray[i] + "'";
  }
  if (i < 3){
    output += strArray[i] + ", ";
  }
  else {
    output += strArray[i] + " ";
  }
}

// Regex to replace last character with ]
output = output.replace(/.$/, "]");

console.log(output);
[116 ]

Надеюсь, это поможет!

9
задан Chris Farmer 31 December 2008 в 21:02
поделиться

2 ответа

SPFieldUserValueCollection делает точно, что Вы ищете. Его конструктор принимает SPWeb и строку пользователей. Объекты SPFieldUserValue в наборе обеспечивают Свойство пользователя, которое возвращает соответствующие объекты SPUser для сети.

private void ProcessUsers(SPListItem item, string fieldName)
{
  string fieldValue = item[fieldName] as string;
  SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue);

  foreach(SPFieldUserValue uv in users)
  {
    SPUser user = uv.User;
    // Process user
  }
}

Тип SPFieldUser наследовал свое поведение от стандартного SPFieldLookup, который также хранит и идентификатор и Заголовок и имеет соответствующий SPFieldLookupValueCollection. (Слабая) ссылочная целостность поддержек идентификатора, в то время как кэшируемое Значение допускает быстрые запросы.

16
ответ дан 4 December 2019 в 13:05
поделиться

Это работает на меня получающий SPSuser от пользовательского поля It, должно быть то же самое для извлечения его от данных о событии.:

private SPUser getGroup(SPListItem item, string fieldName)
        {
            string fieldValue = item[fieldName] as string;
            if (string.IsNullOrEmpty(fieldValue)) return null;
            int id = int.Parse(fieldValue.Split(';')[0]);
            SPUser user = item.Web.AllUsers.GetByID(id);
            return user;
        }

Целое число обращается к идентификатору пользователя в пользовательской базе данных локального SPWEBS. Это, однако не синхронизировавшее, таким образом, пользователь, возможно, был удален из пользовательской базы данных, так как элемент списка был сохранен.

0
ответ дан 4 December 2019 в 13:05
поделиться