SharePoint 2007:无论Web服务的视图如何,都会获取列表中的所有列表项?

时间:2009-11-10 12:31:48

标签: sharepoint moss wss

我需要检查重复项。目前,我将项目存储在列表中的子文件夹中。

如何从Web服务中检索列表中的所有项目,以便检查重复项?

以下是来自对象模型的代码:我想要做到这一点,但是来自Web服务

private static void PrintItemTitles()

{

    string strUrl = "http://localhost:8099/";

    using (SPSite site = new SPSite(strUrl))

    {

        using (SPWeb web = site.OpenWeb())

        {

            SPList list = web.Lists["MyList"];

            SPListItemCollection items = list.Items;



            foreach (SPListItem item in items)

                if (item != null)

                    Console.WriteLine(item.Title);

        }

    }

}

2 个答案:

答案 0 :(得分:3)

使用SPList.Items不会返回所有项目?那么,试试SPList.GetItems(SPQuery)

拥有以下SPQuery:

SPQuery query = new SPQuery();
query.ViewFields = "<FieldRef Name='ID'/><FieldRef Name='Title'/>";
query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", someItemTitle)
query.MeetingInstanceId = -1; //In case if you query recurring meeting workspace - get items from all meetings
query.RowLimit = 10; //Will you have more than 10 duplicates? Increase this value
query.ViewAttributes = "Scope='RecursiveAll'"; //Also return items from folders subfolders

注意:代码中可能会出现一些错误,因为我是从脑子里写的

通过执行此查询并且如果它返回多个项目,那么您有一个副本!

编辑:啊,对不起,您正在谈论Web服务。

然后这段代码无济于事。那么有两个选择:

选项1:您可以创建一个视图    甚至包括文件夹中的项目    (平面视图)。 See here for instructions

选项2:根据列表Web服务的GetListItems方法,您可以传递QueryOptions参数。传入

<QueryOptions>
   <MeetingInstanceID>-1</MeetingInstanceID> <!-- Again, if you query recurring meeting, you want ALL items -->
   <ViewAttributes Scope='RecursiveAll' /> <!-- or Recursive if that does not work -->
</QueryOptions>
祝你好运!

答案 1 :(得分:1)

您可以使用Lists.asmx Web服务,但这很难做,因为它返回了大量信息。我将在我的SharePoint环境中部署包含该代码的自定义Web服务,并返回列表项。