1

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

我的一个名为 Tasks 的列表有一个名为“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;


         }
4

2 回答 2

0

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

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

在本例中,用户的 SharePoint ID 为 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 是任务的 ID。您的方法取决于您的需求。

更多信息:

于 2014-07-29T17:41:01.280 回答
0

更新:感谢输入。它使我找到了以下解决方案。这就是我能够获取用户名的方式。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;
            }


         }
于 2014-07-30T15:18:48.163 回答