none
SharePoint 2010用CAML怎样实现类似 where ColumnA = @queryString or @queryString = '' RRS feed

  • 问题

  • 我给列表视图增加了一个参数,参数值从页面的一个TextBox传进来,同时实现根据TextBox的值对列表进行筛选,问题是:如果用户没有在TextBox输入任何值,就不需筛选只要全部列出全部数据即可。

    CAML的语法似乎不支持这样的查询??

    2012年5月8日 5:50

答案

  • Hi Jo Wang China,

           其实你的问题可以绕过CAML语句的限制的。

           首先你的CAMl是要根据页面的参数来过滤数据的。你可以写两个CAMl语句,第一个过滤的你已经写好了,你再写一个过滤的CAML语句。这个语句的条件是Title!=“定义一个在你的列表不可能出现的字符”,这条语句就可以查出所以数据。

           最后加一个判断,如果传过来的参数不为空就用第一条caml语句,如果传过来是空的,就用第二条CAML语句。

    Thanks,

    Jack

    2012年5月9日 10:16
    版主
  • 我们一般用这样的做法:

    1、在列表里创建一个计算值类型的字段,比如叫Empty,公式写成 ="",也就是说这个字段永远是空字符串

    2、查询条件设置成 ColumnA=@queryString OR Empty=@queryString

    2012年5月14日 7:49
  • 或者使用XSLT Filtering,这个是我在前一个项目中用过的,包含了,忽略大小写,模糊匹配和判断空串。

    [contains(translate(@Title, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate($TitleFilterString, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')) or $TitleFilterString='']


    上善若水
    Lambert Qin [秦磊] | 博客(Blog): SharePoint in My Eyes 中文 / LinkedIn
    Posting is provided "AS IS" with no warranties, and confers no rights.

    2012年5月14日 9:51

全部回复

  • Hi Jo Wang China,

           其实你的问题可以绕过CAML语句的限制的。

           首先你的CAMl是要根据页面的参数来过滤数据的。你可以写两个CAMl语句,第一个过滤的你已经写好了,你再写一个过滤的CAML语句。这个语句的条件是Title!=“定义一个在你的列表不可能出现的字符”,这条语句就可以查出所以数据。

           最后加一个判断,如果传过来的参数不为空就用第一条caml语句,如果传过来是空的,就用第二条CAML语句。

    Thanks,

    Jack

    2012年5月9日 10:16
    版主
  • 我们一般用这样的做法:

    1、在列表里创建一个计算值类型的字段,比如叫Empty,公式写成 ="",也就是说这个字段永远是空字符串

    2、查询条件设置成 ColumnA=@queryString OR Empty=@queryString

    2012年5月14日 7:49
  • 或者使用XSLT Filtering,这个是我在前一个项目中用过的,包含了,忽略大小写,模糊匹配和判断空串。

    [contains(translate(@Title, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),translate($TitleFilterString, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')) or $TitleFilterString='']


    上善若水
    Lambert Qin [秦磊] | 博客(Blog): SharePoint in My Eyes 中文 / LinkedIn
    Posting is provided "AS IS" with no warranties, and confers no rights.

    2012年5月14日 9:51