繁体   English   中英

如何从SharePoint Service参考中的UserInformationListItem获取用户名

[英]How do you get the UserName from UserInformationListItem in SharePoint Service Reference

我正在通过WCF和listdata.svc访问SharePoint列表数据

我的一个名为“任务”的列表中有一个名为“ AssignedTo”的字段。 当我遍历列表项时,AsssignedTo字段返回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;


         }

如果AssignedTo字段是“人员”或“组”字段,则它包含用户或组的SharePoint ID。 例如:

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

在这种情况下,用户的SharePoint ID为8。要获取用户名,您必须查看位于/_vti_bin/ListData.svc/UserInformationList的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是任务的ID。 您的方法取决于您的需求。

更多信息:

以下查询返回“用户信息列表”项:

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

更新:欣赏输入。 这使我想到了以下解决方案。 这就是我获得用户名的方式。 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;
            }


         }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM