需要帮助w / SharePoint CAML查询

时间:2011-08-29 01:42:40

标签: sharepoint list caml

这就是我正在做的事情(这是对谷歌的快速搜索,只是最初的结果之一):

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

我的数据绑定DropDownList项看起来像这样:

<listitem>All Providers</listitem>
<listitem>Provider 1</listitem>
<listitem>Provider 2</listitem>

我在视图中的当前CAML查询如下所示:

<Query>
 <Where>
  <And>
   <Or>
    <Eq>
     <FieldRef Name="Status" />
     <Value Type="Lookup">Submitted</Value>
    </Eq>
    <Eq>
     <FieldRef Name="Status" />
     <Value Type="Lookup">In Progress</Value>
    </Eq>
   </Or>
   <Eq>
    <FieldRef Name="Provider"/>
    <Value Type="Text">{Param1}</Value>
   </Eq>
  </And>
 </Where>
 <OrderBy>
  <FieldRef Name="ID" Ascending="FALSE"></FieldRef>
 </OrderBy>
</Query>

我需要的是......

在伪代码中:

如果{Param1}等于“所有提供商”,则只过滤状态,其中状态等于“已提交”或“正在进行”  否则如果{Param1}不等于状态和提供者上的“所有提供者”过滤器,其中Status等于“已提交”或“正在进行”且提供者等于{Param1}

如何将其置于View XML架构中?

我知道可以这样做,因为微软已经在SharePoint中使用它,并且有第三方控件可以实现它。

例如......

1)在SP中,单击左侧导航菜单中的“列表”。

2)在最右边的搜索框'下方,您会看到带有下拉列表的“视图:”。

3)根据您选择的视图,URL的查询字符串包含“BaseType”,该“BaseType”将更改为您选择的值。如果选择“所有站点内容”,则“BaseType”将不在查询字符串中。

谢谢, 约书亚

1 个答案:

答案 0 :(得分:1)

首先,我认为您在提供商字段中的adding a filter webpart效果更好,因为这样您就不会使用空白值进行过滤。

如果您必须有一个过滤“All Providers”的参数,您可以在列表调用AllProviders上创建一个计算字段,并使用以下公式:

="All Providers"

然后允许您输入查询子句:

<Query>
  <Where>
    <And>
      <Or>
        <Eq>
          <FieldRef Name="AllProviders"/>
          <Value Type="Text">{Param1}</Value>
        </Eq>
        <Eq>
          <FieldRef Name="Provider"/>
          <Value Type="Text">{Param1}</Value>
        </Eq>
      </Or>
      <Or>
        <Eq>
          <FieldRef Name="Status"/>
          <Value Type="Lookup">In Progress</Value>
        </Eq>
        <Eq>
          <FieldRef Name="Status"/>
          <Value Type="Lookup">Submitted</Value>
        </Eq>
      </Or>
    </And>
  </Where>
</Query>

“状态”字段将始终与“正在进行”或“已提交”匹配。

如果您的参数=“所有提供商”,那么您将匹配计算字段,否则您将匹配提供商字段。

请注意,这确实会阻止您向提供商调用“所有提供商”。