Rest / Odata $过滤器无法处理某些键

时间:2017-09-08 11:03:47

标签: c# rest sharepoint filter odata

我正在尝试从SharePoint列表中查询某些信息。现在,我正在尝试使用odata来获取它。我的问题是,由于某种原因,$ filter不能使用该列表中的所有密钥:S。这是一个例子:

这样可以正常

  1. ... ccm / _api / Lists / GetByTitle(' Circuit%20Deliveries')/ Items?$ filter = Title eq' AUG'
  2. 但是这个不起作用(HTTP 400错误请求)

    1. ... ccm / _api / Lists / GetByTitle(' Circuit%20Deliveries')/ Items?$ filter = Delivery_x0020_Date eq null
    2. 尽管如此,字段名称还可以,因为我能够使用具有相同字段名称的select和orderby。这是IE中2'标题'的XML输出。名为AUG:

        

      ... CCM / _api /列表/ GetByTitle('电路%20Deliveries')?/物品$滤波器=标题   EQ   ' AUG'&安培; $选择=标题,Delivery_x0020_Date,Status_x0020__x002d__x0020_Calcu

      
      
      <?xml version="1.0" encoding="utf-8" ?> -
      <feed xml:base="/ccm/_api/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss"
        xmlns:gml="http://www.opengis.net/gml">
        <id>5a2630a8-c00a-4baa-bd43-3912d9264df8</id>
        <title />
        <updated>2017-09-08T10:58:12Z</updated>
        <entry m:etag="" 33 "">
          <id>Web/Lists(guid'5ad8ca39-191a-4586-bdef-7bc4830eced9')/Items(332)</id>
          <category term="SP.Data.Circuit_x0020_DeliveriesListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
          <link rel="edit" href="Web/Lists(guid'5ad8ca39-191a-4586-bdef-7bc4830eced9')/Items(332)" />
          <title />
          <updated>2017-09-08T10:58:12Z</updated>
          <author>
            <name />
          </author>
          <content type="application/xml">
            <m:properties>
              <d:Title>AUG</d:Title>
              <d:Delivery_x0020_Date m:type="Edm.DateTime">2017-03-06T06:00:00Z</d:Delivery_x0020_Date>
              <d:Status_x0020__x002d__x0020_Calcu>Circuit Ready for Production Use on 03/06/2017</d:Status_x0020__x002d__x0020_Calcu>
            </m:properties>
          </content>
        </entry>
        <entry m:etag="" 58 "">
          <id>Web/Lists(guid'5ad8ca39-191a-4586-bdef-7bc4830eced9')/Items(333)</id>
          <category term="SP.Data.Circuit_x0020_DeliveriesListItem" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
          <link rel="edit" href="Web/Lists(guid'5ad8ca39-191a-4586-bdef-7bc4830eced9')/Items(333)" />
          <title />
          <updated>2017-09-08T10:58:12Z</updated>
          <author>
            <name />
          </author>
          <content type="application/xml">
            <m:properties>
              <d:Title>AUG</d:Title>
              <d:Delivery_x0020_Date m:null="true" />
              <d:Status_x0020__x002d__x0020_Calcu>Site Survey completed on 09/09/2016</d:Status_x0020__x002d__x0020_Calcu>
            </m:properties>
          </content>
        </entry>
      </feed>
      &#13;
      &#13;
      &#13;

      如您所见,我能够成功查询并从列表中选择这两个字段并按标题过滤。不过,我想进一步过滤Delivery_x0020_Date为空(或空)。

      我四处搜索,有些人说在日期过滤空格并不总是有效。但在我的情况下有点多,因为即使我尝试使用另一个键(Status_x0020__x002d__x0020_Calcu)进行过滤,它也会返回错误请求

      是否要求您可以过滤哪种类型的按键? 谢谢

1 个答案:

答案 0 :(得分:0)

SharePoint 2013中的REST API不支持对列表项查询进行过滤的空值。(请参阅此MSDN链接)

您必须找到其他一些解决方法。

但是,我们可以将CAML查询与REST API结合使用,以在Javascript对象模型中获取所需的数据。请参阅此链接 - REST API to filter on null

但我不确定c#代码。