Как получить UserName из UserInformationListItem в справочнике по службам SharePoint

Я получаю доступ к данным списка SharePoint через WCF и listdata.svc

В одном из моих списков под названием "Задачи" есть поле с именем "AssignedTo". Когда я перебираю элементы списка, поле AssignedTo возвращает UserInformationListItem, а не строковое значение.

Как получить имя пользователя, которому назначено задание? Он должен исходить из UserInformationList, но я не могу понять, как его получить.

Вот мой код:

        SpIMDLists.InformationManagementDivisionDataContext dc = new SpIMDLists.InformationManagementDivisionDataContext(new Uri("https://myurl/SiteDirectory/IMD/_vti_bin/ListData.svc/"));

        dc.Credentials = System.Net.CredentialCache.DefaultCredentials;

        var source = dc.Tasks;


        foreach (var task in source)
        {
            string taskTitle = task.Title;
            string taskDesc = task.TaskDescription;
            string taskDueDate = task.DueDate.ToString();
            string taskStartDate = task.StartDate.ToString();
            string taskStatusValue = task.StatusValue;
            string taskOutcome = task.TaskOutcome;
            string taskAssignedTo ="";
            System.Collections.ObjectModel.Collection<SpIMDLists.UserInformationListItem> assignedTo = task.AssignedTo;


         }

3 ответа

Если поле AssignedTo является полем Person или Group, оно содержит идентификатор SharePoint пользователя или группы. Например:

<d:AssignedToId m:type="Edm.Int32">8</d:AssignedToId>

В этом случае идентификатор пользователя SharePoint равен 8. Чтобы получить имя пользователя, вам нужно взглянуть на UserInformationList находится в /_vti_bin/ListData.svc/UserInformationList. Вы можете либо получить всех пользователей в UserInformationList и сохранить его в массиве, либо вы можете найти конкретного пользователя, создав URL-адрес следующим образом (используя ID пользователя 8 из нашего примера): /_vti_bin/ListData.svc/UserInformationList(8)

Если вы хотите увидеть этого пользователя в своем браузере, вы можете сделать это по следующему URL: /_layouts/userdisp.aspx?ID=8,

Кроме того, вы можете использовать следующую конечную точку для получения той же информации: _vti_bin/ListData.svc/Tasks(1)/AssignedTo

Где 1 в этом примере, это идентификатор задачи. Ваш подход зависит от ваших потребностей.

Дополнительная информация:

ОБНОВЛЕНИЕ: ценим вход. Это привело меня к следующему решению. Так я смог получить имя пользователя. AssignedTo - сложное поле, поэтому мне пришлось использовать Expand для его заполнения. Затем я просто просмотрел коллекцию AssignedTo, чтобы получить пользователя (в этом случае задачи назначаются только 1 пользователю).

Вот мой новый рабочий код:

        SpIMDLists.InformationManagementDivisionDataContext dc = new SpIMDLists.InformationManagementDivisionDataContext(new Uri("https://myurl/SiteDirectory/IMD/_vti_bin/ListData.svc/"));

        dc.Credentials = System.Net.CredentialCache.DefaultCredentials;

        var source = dc.Tasks;


        foreach (var task in source.Expand("AssignedTo")
        {
            string taskTitle = task.Title;
            string taskDesc = task.TaskDescription;
            string taskDueDate = task.DueDate.ToString();
            string taskStartDate = task.StartDate.ToString();
            string taskStatusValue = task.StatusValue;
            string taskOutcome = task.TaskOutcome;

            var assignedTo = task.AssignedTo;
            foreach (var usr in assignedTo)
            {
                string taskAssignedTo = usr.Name;
            }


         }

Следующий запрос возвращает элемент списка информации о пользователе:

var item = dc.UserInformationList.Where(i => i.Id == <UserId>).FirstOrDefault();

Пример:

var dc = new SiteDataContext(new Uri("http://contoso.intranet.com/_vti_bin/ListData.svc/"));
dc.Credentials = System.Net.CredentialCache.DefaultCredentials;

foreach (var task in dc.Tasks)
{
   string taskTitle = task.Title;

   var assignedTo = dc.UserInformationList.Where(i => i.Id == task.AssignedToId).FirstOrDefault();
   var assignedToName = assignedTo.Name;
}
Другие вопросы по тегам