我需要检查重复项。目前,我将项目存储在列表中的子文件夹中。
如何从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);
}
}
}
答案 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
注意:代码中可能会出现一些错误,因为我是从脑子里写的
通过执行此查询并且如果它返回多个项目,那么您有一个副本!
然后这段代码无济于事。那么有两个选择:
选项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服务,并返回列表项。