使用rest查询Sharepoint中的选择字段

问题描述 投票:0回答:8

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

如何使用其余 API 查询选择列?

我尝试过使用

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

然后我得到

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

我应该使用什么属性?

sharepoint rest
8个回答
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 也是如此,但几乎没有任何记录。

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

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


3
投票

我在 O365 上成功尝试了这一点,但同样的事情也应该在 OnPrem 上工作。

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

根据需要使用“and”而不是“or”。


2
投票

您需要将过滤器中的值用单引号引起来。

$filter=myChoicesColumn eq 'something'

1
投票

不确定您是否已经解决了这个问题。然而:

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

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

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


1
投票

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

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

1
投票

对于在 SharePoint 2010(使用

/_vti_bin/listdata.svc
端点,而不是 SharePoint 2013 及更高版本的
/_api/web
)中仍然遇到此问题的任何人,我成功地使用 ChoiceFieldNameValue 过滤了
单选选择字段在 
$filter
 参数中而不是 
ChoiceFieldName/Value
 中。 

请注意字段名称和单词

Value

 之间缺少正斜杠。奇怪的是,
$select
参数仍然需要
/Value
,正如预期的那样。

我成功的端点 URL 如下所示:

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

ListName

 替换为列表名称,将 
ChoiceFieldName
 替换为字段的显示名称,在每种情况下都删除空格并可能使用数字后缀以避免命名冲突,并将 
'targettext'
 替换为对应的值你想过滤。


0
投票
随便一拍:

你尝试过吗

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

0
投票
我必须使用查找列从“选择”字段获取数据。我按照以下教程解决了该问题。

提示很简单,创建一个新的计算列并将数据从原始选择列复制到新创建的列。现在您可以获得新创建的列而不是选择列。

请关注这篇文章:

https://www.sharepointdiary.com/2017/03/sharepoint-lookup-on-choice-field.html#:~:text=Using%20choice%20fields%20as%20the,fields% 20on%20any%20other%20list

© www.soinside.com 2019 - 2024. All rights reserved.