使用休息在Sharepoint中查询选择字段

时间:2011-03-21 14:54:45

标签: sharepoint rest

我在Sharepoint 2010中有一个带有选择列的列表。选项是复选框。

如何使用rest api查询选择列?

我尝试过使用

http://sp2010/_vti_bin/listdata.svc/mylist?$filter=myChoicesColumn/xxx eq something 

然后我得到了

  

类型中不存在属性'xxx'   “System.Collections.Generic.IEnumerable`1 [[Microsoft.SharePoint.Linq.DataServiceEntity,   Microsoft.SharePoint.Linq,   版本= 14.0.0.0,文化=中立,   PublicKeyToken = 71e9bce111e9429c]]'at   第6位。

我应该使用什么属性?

7 个答案:

答案 0 :(得分:6)

这些答案都不适用于多选类型的SP字段(即表示为复选框的字段)。

如果您在名为“分组”的多选选项字段上尝试以下过滤器,请执行以下操作:

$filter=Grouping/Value eq 'My Value'

您将收到错误:

{
    "error": {
        "code": "",
        "message": {
            "lang": "en-US",
            "value": "No property 'Value' exists in type 'System.Collections.Generic.IEnumerable`1[[Microsoft.SharePoint.Linq.DataServiceEntity, Microsoft.SharePoint.Linq, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]]' at position 9."
        }
    }
}
}

可能不需要Value?你仍然会收到错误。在SP 2013中,MSDN文档声明无法查询多选项。所以我只能假设2010 REST API也是如此,它几乎没有记录。

  

查询多值查找字段和用户因为多值查找字段是作为多个值的字符串返回的,   没有办法查询它们(例如,相当于一个   不支持包含element或NotIncludes元素。)

http://msdn.microsoft.com/en-us/library/fp142385(v=office.15).aspx

答案 1 :(得分:2)

过滤器中的值需要单引号。

$filter=myChoicesColumn eq 'something'

答案 2 :(得分:2)

我在O365上成功尝试了这一点,但同样的事情也适用于OnPrem。

~SITE_URL/_api/web/lists/getbytitle('LISTNAME')/items?$filter=(FieldInternalName eq 'CHOICE1') or (FieldInternalName eq 'CHOICE2')

根据您的需要使用“和”而不是“或”。

答案 3 :(得分:1)

不确定你是否已经解决了这个问题。但是:

假设您有一个产品列表,其中包含一个国家/地区的查询字段。 并且您希望过滤来自法国的产品的结果,并且您不希望按国家/地区ID进行过滤,那么您可以像这样过滤$ expand属性:

http://sharepoint/_vti_bin/ListData.svc/Product?$expand=Country&$filter=Country/Title eq 'France'

我已使用“国家/地区”列表扩展了REST调用,然后将过滤器设置为“国家/标题”为“法国”

答案 4 :(得分:1)

我刚刚通过以下方式满足了我的要求。

http://sp2010/_vti_bin/listdata.svc/mylist?$filter=myChoicesColumn/Value%20eq'something'

答案 5 :(得分:1)

对于仍然在 SharePoint 2010 (使用/_vti_bin/listdata.svc端点而不使用SharePoint 2013及以上版本/_api/web)时遇到此问题的人,我成功了使用ChoiceFieldNameValue参数中的$filter而不是ChoiceFieldName/Value来过滤单个 - 选择字段。

请注意字段名称和单词Value之间没有正斜杠。奇怪的是,$select参数仍然需要/Value符合预期。

我的成功端点网址如下所示:

_vti_bin/listdata.svc/ListName?$filter=(ChoiceFieldNameValue eq 'targettext')&$select=ChoiceFieldName/Value&$expand=ChoiceFieldName

ListName替换为列表名称,将ChoiceFieldName替换为字段的显示名称,在每种情况下删除空格,并可能使用数字后缀以避免命名冲突,并替换{{ 1}}包含您要过滤的值。

答案 6 :(得分:0)

一枪:

你试过吗

http://sp2010/_vti_bin/listdata.svc/mylist?$filter=myChoicesColumn contains something