[英]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.