服务器端的CAML过滤

时间:2014-10-05 08:09:22

标签: sharepoint sharepoint-designer

我有来自某个位置的过滤器(让我们说,查询字符串):

<ParameterBinding Name="param" Location="QueryString(param)"/>

我知道如何将该参数传递给CAML查询,如下所示:

<Where>
  <Eq>
    <FieldRef Name='SomeField'/>
    <Value Type='Text'>{param}</Value>
  </Eq>
</Where>

但是,如果没有提供参数,我什么也得不到(SomeField =&#39;&#39;)。

我想知道:CAML中是否可以将参数作为字段值?例如,我知道这不起作用,但你明白了:

<Where>
  <Or>
    <Eq>
      <FieldRef Name='SomeField'/>
      <Value Type='Text'>{param}</Value>
    </Eq>
    <Eq>
      <FieldRef Formula='{param}'/>
      <Value Type='Text'></Value>
    </Eq>
  </Or>
</Where>

我知道根据CAML架构,它似乎不可能。这样,我就可以进行真正的服务器端过滤。 XSL的替代方案是客户端,这意味着将检索更多必要的记录。

是的,我知道我可以通过编程方式执行此操作,但这不是我的意图。我希望使用XsltListViewWebPart。

有什么想法?任何替代方案?

1 个答案:

答案 0 :(得分:0)

知道了:

<Where>
    <Or>
        <Geq>
            <FieldRef Name='SomeField'/>
            <Value Type='Number'>{param}</Value>
        </Geq>
        <Contains>
            <FieldRef Name='Author'/>
            <Value Type='Text'><![CDATA[{param}]]></Value>
        </Contains>
    </Or>
</Where>

诀窍是在第二个条件下有一些真实的东西。在这种情况下,如果未提供{param},则它将为'',因此它将包含在Author(Created By)字段中,该字段始终不为空。问题是我必须用{param}包围,否则它将不起作用。